Einzelnen Beitrag anzeigen

EnORItZ

Registriert seit: 8. Sep 2003
11 Beiträge
 
#4

Re: Eine Art TWinControl selbst erstellen, nur halt ohne Vor

  Alt 23. Sep 2003, 15:45
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??
MfG EnORItZ
  Mit Zitat antworten Zitat