AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Componenten Container feststellen

Ein Thema von Optiplex · begonnen am 6. Jul 2009 · letzter Beitrag vom 7. Jul 2009
Antwort Antwort
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#1

Componenten Container feststellen

  Alt 6. Jul 2009, 09:23
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
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 09:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 09:52
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 09:58
Zitat von himitsu:
ich glaub da ist es einfacher, von Form.ActiveControl auszugehn und die Parents abzufragen
Ja, ich dachte nur für eine Eigenschaft des Containers wäre es sinnvoll, das unabhängig vom Parent zu lösen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 10:18
Die Eigenschaft ActiveControl kennt nicht nur TForm, sondern auch TScreen und davon gibt es ja eine aktive Instanz.

man kann so auch eine Eigenschaft draus machen
Delphi-Quellcode:
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;
So klettert man nur mal schnell den "Baum" runter und muß nicht erst in jeden "Zweig" schauen, ob da etwas aktiv ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 11:57
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 12:02
du könntest die OnEnter- und OnExit-Ereignisse der Subkomponenten zuseisen und auf eine Prozedur deiner "Containerklasse" verweisen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 12:28
Zitat von himitsu:
du könntest die OnEnter- und OnExit-Ereignisse der Subkomponenten zuseisen und auf eine Prozedur deiner "Containerklasse" verweisen.
ja das wäre eine Idee es umzusetzen, danke Himitsu. Dass ich da nicht selbst draufgekommen bin?

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
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#9

Re: Componenten Container feststellen

  Alt 6. Jul 2009, 12:47
Man könnte für die Applikation einen Keyboard-Hook einsetzen.
Siehe SetWindowsHookEx
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Componenten Container feststellen

  Alt 7. Jul 2009, 09:01
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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