![]() |
Eine Art TWinControl selbst erstellen, nur halt ohne Vorfahr
Hallo,
Wenn ich mir eine Art abgespeckte TWinControl-Version (die von TObject abgeleitet wird) erstellen will, wie sollte ich da am besten vorgehen? (Ich weiß es bringt mir nicht viel aber egal) Ich hab mir Spasseshalber schonmal ne Klasse gemacht, die mir über die WinAPI-Funktionen ein Fenster erstellt. Da ich aber die WndProc nicht mit in die Klasse nehmen konnte glaub ich konnte ich deswegen keine Botschaftshandlungen einbauen(Die wurden einfach nicht beachtet) Ich hab wahrscheinlich auch zu wenig Ahnung davon, würd mich aber mal interessieren wie die TWinControl funktioniert. //edit: es geht mir jetzt hauptsächlich um die Botschaftsbehandlungen |
Re: Eine Art TWinControl selbst erstellen, nur halt ohne Vor
suche mal im source nach
Delphi-Quellcode:
MakeObjectInstance
|
Re: Eine Art TWinControl selbst erstellen, nur halt ohne Vor
Also ich hab mir das schonmal angesehen(auch bevor ich den Thread hier eröffnet hab) nur bin ich daraus nicht schlau geworden. Das was mir aufgefallen ist, war dieses MakeObjectinstance doch hab ich nicht gerafft was man damit dann macht. Vieleicht kannst du mir das ja mal etwas genauer erklären....
|
Re: Eine Art TWinControl selbst erstellen, nur halt ohne Vor
Hallo,
ich hab mal jetzt einfach mal ne Klasse gemacht:
Delphi-Quellcode:
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)
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. 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?? |
Re: Eine Art TWinControl selbst erstellen, nur halt ohne Vor
Es sollte eigentlich gehen!
Ich sichere nur noch die alte WndProc, indem ich sie über GetWindowLong hole und in der WndProc per CallWindowProc rufe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz