Hallo,
ich hab mal jetzt einfach mal ne Klasse gemacht:
Delphi-Quellcode:
unit Control;
interface
uses classes, windows, messages;
type
TControl =
class
private
fHandle : THandle;
fInstance : Pointer;
procedure StoreHandle;
procedure MyWndProc(
var Message: TMessage);
public
mystr:
string;
constructor Create;
destructor Destroy;
published
property Handle: THandle
read fHandle
write fHandle;
end;
implementation
{
TControl
}
constructor TControl.Create;
begin
fInstance:=MakeObjectInstance(MyWndProc);
StoreHandle;
SetWindowLong(fHandle,GWL_WNDPROC,LongInt(fInstance));
end;
destructor TControl.Destroy;
begin
FreeObjectInstance(fInstance);
end;
procedure TControl.StoreHandle;
begin
fHandle:=THandle(Self);
end;
procedure TControl.MyWndProc(
var Message: TMessage);
begin
with Message do
begin
case Msg
of
WM_DESTROY:
begin
mystr:='
WM_DESTROY';
end;
else DefWindowProc(fHandle,Msg,wParam,lParam);
end;
end;
end;
end.
Also das Feld "mystr" ist für die Nachrichten gedacht. Da kann ich ja überprüfen ob ne Nachricht benutzt wurde.(Wird ja darin gespeichert was als letztes da war)
Ich hab mir jetzt ein programm gemacht, diese
Unit hier eingebunden und dann eine Variable vom Typ TControl(meinem da oben) definiert und dann das Objekt initialisiert.
Im Constructor wird mit MakeObjectInstance(MyWndProc) ja der Pointer zu meiner WndProc an das Feld fInstance übergeben.
Ist es richtig, das ich jetzt dann mit SetWindowLong den Pointer an mein
Handle übergeben muss??
Jedenfalls funktioniert es so wie da oben nicht. Ich glaube das liegt daran das der meine Botschaftsbehandlungsroutine nicht kennt oder??
//edit: was bringt eigetntlich die InitInstance-Methode vom TObject?Hat das was damit zu tun??