Einzelnen Beitrag anzeigen

Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#1

Fenster/Komponente über Handle bekommen

  Alt 4. Sep 2003, 02:15
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?
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat