lazarus-ccr/components/flashfiler/sourcelaz/#NotUsedMore/lazvclfuncs.pas
2016-12-07 13:31:59 +00:00

68 lines
1.5 KiB
ObjectPascal

// doesn't used more!
// ALL CODE TAKEN FROM DELPHI7 - BORLAND CODE !!!!!!
// use for lazarus lclintf.pas
{
}
unit LazVCLFuncs;
{$I ffdefine.inc}
interface
uses
Classes, SysUtils, Windows;
function AllocateHWnd(Method: TWndMethod): HWND;
procedure DeallocateHWnd(Wnd: HWND);
implementation
var
UtilWindowClass: TWndClass = (
style: 0;
lpfnWndProc: @DefWindowProc;
cbClsExtra: 0;
cbWndExtra: 0;
hInstance: 0;
hIcon: 0;
hCursor: 0;
hbrBackground: 0;
lpszMenuName: nil;
lpszClassName: 'TPUtilWindow');
function AllocateHWnd(Method: TWndMethod): HWND;
var
TempClass: TWndClass;
ClassRegistered: Boolean;
begin
UtilWindowClass.hInstance := HInstance;
{.$IFDEF PIC}
UtilWindowClass.lpfnWndProc := @DefWindowProc;
{.$ENDIF}
ClassRegistered := GetClassInfo(HInstance, UtilWindowClass.lpszClassName, TempClass);
//beep
if not ClassRegistered or (@TempClass.lpfnWndProc <> @DefWindowProc) then
begin
if ClassRegistered then
Windows.UnregisterClass(UtilWindowClass.lpszClassName, HInstance);
Windows.RegisterClass(UtilWindowClass);
end;
Result := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName,
'', WS_POPUP {+ 0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
if Assigned(Method) then
SetWindowLong(Result, GWL_WNDPROC, Longint(MakeObjectInstance(Method)));
end;
procedure DeallocateHWnd(Wnd: HWND);
var
Instance: Pointer;
begin
Instance := Pointer(GetWindowLong(Wnd, GWL_WNDPROC));
DestroyWindow(Wnd);
if Instance <> @DefWindowProc then FreeObjectInstance(Instance);
end;
end.