Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fenster/Komponente über Handle bekommen (https://www.delphipraxis.net/8402-fenster-komponente-ueber-handle-bekommen.html)

S - tefano 4. Sep 2003 01:15


Fenster/Komponente über Handle bekommen
 
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?

Luckie 4. Sep 2003 01:34

Re: Fenster/Komponente über Handle bekommen
 
Der Speed-Button ist wohl von TGraphicControl abgeleitet und besitzt somit kein Handle. Was du da bekommst, weiß ich auch nicht.

Leider kann ich dir da im Moment auch nicht helfen.

negaH 4. Sep 2003 10:19

Re: Fenster/Komponente über Handle bekommen
 
probier FindDragTarget().

Gruß Hagen

S - tefano 4. Sep 2003 13:30

Re: Fenster/Komponente über Handle bekommen
 
Hey, cool - funktioniert!
Jetz kann ich das zwar nicht mit Handles vergleichen, aber geht ja wunderbar über den Namen des Controls das ich zurückbekomme.

Dankeschön!

Bis dann,

S - tefano


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz