Hi,
im OnHint meines ApplicationEvents möchte ich Text in eine Statusbar schreiben.
Dazu will ich wissen welche Komponente "gehintet" werden soll, wo also der Cursor gerade steht. Ich habe mir eine Funktion gemacht, mit der ich das
Handle der Komponente bekommen kann.
Nicht direkt lang und kompliziert, aber so sieht sie aus:
Delphi-Quellcode:
function TForm1.CompoUnderMouse: HWND;
var
p: TPoint;
begin
getcursorpos(p);
result:= windowfrompoint(p);
end;
So, jetzt prüfe ich die Komponenten für die ich Text anzeigen will nacheinander ab, ob sie das selbe
Handle haben. Soweit kein Problem, so bei Edits, Comboboxen, Memos etc.
Aber diese verfluchten Speedbuttons... die Dinger haben (jedenfalls bei mir...) einfach keine
Handle- Eigenschaft auf die ich zugreifen kann! Arg!
Kann ja eigentlich nicht sein, dass ein Button kein
Handle hat. Problem dabei ist, dass der Speedbutton laut deklaration garkein Button ist...
Naja, jedenfalls hab ich zum Probieren mir mal das Ergebnis obiger Funktion als Messagebox anzeigen lassen. Und siehe da, fahre ich über den Speedbutton und löse die Funktion aus, bekomme ich tatsächlich einen Wert, einen
Handle hat der Speedbutton (oder evtl. eins seiner "Mutterobjekte" von denen/von dem er abgeleitet wurde?) also doch. Habe mir dann zur Sicherheit dabei noch das
Handle des Speedbutton.Parent anzeigen lassen, ist ein anderer Wert. Das
Handle des ParentFensters "leuchtet" also nicht durch.
Aber wie kann ich jetzt herausfinden, dass der Wert den ich bekommen habe zum entsprechenden Speedbutton gehört, so ganz ohne
Handle- Eigenschaft?
Ich hatte mir da überlegt anstatt jedes
Handle einzeln zu überprüfen, vielleicht lieber ne Funktion à la Findwindow zu suchen, die einem anstatt anhand der Caption das jeweilige
Handle, lieber anhand des Handles das entsprechende Objekt selbst zu übergeben.
Leider habe ich keine Idee, wie so eine Funktion heißen könnte, und in den verwandten Themen von Findwindow hab ich nichts gefunden, was mir weiterzuhelfen schien.
Gibt es so eine Funktion? Kennt jemand eine Möglichkeit das
Handle eines Speedbuttons herauszubekommen? Oder gibts nen anderen Weg (außer dem, die Cursor Position mit der Position und Größe des Speedbuttons zu vergleichen)?
Danke schonmal,
S - tefano
Nachtrag: Hab gerade FindControl gefunden, übergebe ich der Funktion das Ergebnis von CompoUnderMouse während die Maus auf dem Speedbutton steht, liefert mir FindControl aber Form1... ist der Speedbutton kein "Derivat" (wenn mans denn so nennt) von TWinControl?