![]() |
Componenten Container feststellen
Hallo DP'ler,
ich habe eine Komponente auf dieser befinden sich mehrere andere Komponenten TCheckbox,TEdit,TButton, da sich mehrere dieser Komponente auf dem Formular befinden ist es schwer zu erkennen in welcher Kombo welches Control gerade den Focus hat. Gibt es eine Möglichkeit zu erfahren welcher Container(meine Kompo) gerade benutzt wird(aktives Control welches den Focus hat), damit ich den Container hervorheben kann? Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt. Gruß Dieter |
Re: Componenten Container feststellen
Also für's Formular gibt es ja TForm.ActiveControl um das zu ermitteln.
Für deinen Container einzeln (wenn er eine Eigenschaft Focused liefern soll), die Controls darauf durchtesten, ob einer Focused ist. Also bei GetFocused des Containers, die 4-5 Controls schnell testen. |
Re: Componenten Container feststellen
ich glaub da ist es einfacher, von Form.ActiveControl auszugehn und die Parents abzufragen
Delphi-Quellcode:
var C: TComponent;
C := ActiveControl; while Assigned(C) do begin if C is TYourContainerClass then hervorheben(C); C := C.Parent; end; |
Re: Componenten Container feststellen
Zitat:
|
Re: Componenten Container feststellen
Die Eigenschaft ActiveControl kennt nicht nur TForm, sondern auch TScreen und davon gibt es ja eine aktive Instanz. :angel:
man kann so auch eine Eigenschaft draus machen
Delphi-Quellcode:
So klettert man nur mal schnell den "Baum" runter und muß nicht erst in jeden "Zweig" schauen, ob da etwas aktiv ist.
Function TMyContainer.BinIchOderEinesMeinerKomponentenAktiv: Boolean;
Var C: TComponent; Begin C := Screen.ActiveControl; While Assigned(C) do Begin If C = Self Then Begin Result := True; Exit; End; C := C.Parent; end; Result := False; End; |
Re: Componenten Container feststellen
Danke für die Antworten,
mein Problem liegt eigentlich darin das Ereignis mitzubekommen für die eigentliche Komponente kann ich das mit WM_Setfocus / MW_Killfocus erreichen aber wie erhalte ich das bei den Subkomponenten. Danach kann ich den Parent irgendwie hervorheben. Gruss Dieter |
Re: Componenten Container feststellen
du könntest die OnEnter- und OnExit-Ereignisse der Subkomponenten zuseisen und auf eine Prozedur deiner "Containerklasse" verweisen.
|
Re: Componenten Container feststellen
Zitat:
dennoch die Frage gigt es Möglichkeiten messages wie WM_ oder CM_ von den Subcomponenten abzufangen und darauf zu reagieren. Als bestes Beispiel die das Abfangen der VK_up oder VK_down Tasten, in der eigendlichen Komponenten kein Problem in den Subkomponten bekomme ich das einfach nicht hin. Gruß Dieter |
Re: Componenten Container feststellen
Man könnte für die Applikation einen Keyboard-Hook einsetzen.
Siehe SetWindowsHookEx |
Re: Componenten Container feststellen
Einen Keyboard-Hook dafür einzusetzen halte ich persönlich für übertrieben, gibt es denn keine andere Möglichkeit auf Messages von Subkomponenten zuzugreifen ?
Gruß Dieter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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 by Thomas Breitkreuz