Hello,
It´s almost working. I am quite proud to have created a completely
independent implementation of AllocateHWnd =)
Ok, now my problem is that TMethod has 2 informations. A Code pointer,
and a Data pointer, and I can´t seam to find enougth space on
SetWindowLong for 2 extra informations.
GWL_USERDATA seams to work perfectly. Next I tryed both GWL_ID and
DWL_USER, but I always get nil when using GetWindowLong with them.
Maybe I could transform my form into a Dialog to use DWL_USER. What is
the definition of a dialog? How can I make a window that is a dialog?
Just set dialog Window flag?
Any other ideas about how to store 1 more pointer?
Here is part of my code:
Note1: If anyone wants, I can of course provide a full patch
Note2: The Temp variables are only to make debugging easier.
procedure CallbackAllocateHWnd(Ahwnd: HWND; uMsg: UINT; wParam:
WParam; lParam: LParam); stdcall;
var
Msg: TLMessage;
Method: TLCLWndMethod;
Temp: Pointer;
begin
FillChar(Msg, SizeOf(Msg), #0);
Msg.msg := uMsg;
Msg.wParam := wParam;
Msg.lParam := lParam;
TMethod(Method).Code := Pointer(Windows.GetWindowLong(ahwnd, GWL_USERDATA));
TMethod(Method).Data := Pointer(Windows.GetWindowLong(ahwnd, GWL_ID));
Temp := TMethod(Method).Code;
Temp := TMethod(Method).Data;
if Assigned(TMethod(Method).Code) then
Method(Msg)
else Windows.DefWindowProc(ahwnd, uMsg, wParam, lParam);
end;
function TWin32WidgetSet.AllocateHWnd(Method: TLCLWndMethod): HWND;
var
Temp: Pointer;
begin
Result := Windows.CreateWindow(@ClsName[0],
'', WS_OVERLAPPED, 0, 0, 0, 0, 0, 0, MainInstance, nil);
Temp := TMethod(Method).Code;
Temp := TMethod(Method).Data;
Self.SetWindowLong(Result, GWL_USERDATA, PtrInt(TMethod(Method).Code));
Self.SetWindowLong(Result, GWL_ID, PtrInt(TMethod(Method).Data));
Self.SetWindowLong(Result, GWL_WNDPROC, PtrInt(@CallbackAllocateHWnd))
end;
procedure TWin32WidgetSet.DeallocateHWnd(Wnd: HWND);
begin
if Wnd <> 0 then Windows.DestroyWindow(Wnd);
end;
--
Felipe Monteiro de Carvalho
_________________________________________________________________
To unsubscribe: mail [EMAIL PROTECTED] with
"unsubscribe" as the Subject
archives at http://www.lazarus.freepascal.org/mailarchives