Entwickler-Ecke
Windows API - Zuvor fokusiertes Objekt herausfinden?
ObscurusNox - Mi 02.03.05 17:37
Titel: Zuvor fokusiertes Objekt herausfinden?
Hallo!
Ich habe bei meinem derzeitigen Projekt ein Problem:
Das Form enthält jede Menge von ComboBoxen, Edits und zwei ListBoxen.
Die ListBoxen beschreiben sozusagen Eigenschaften einer ComboBox.
Nun möchte ich, wenn der User zuvor in einer ComboBox war und sofort danach in eine ListBox klickt, die Eigenschaft ändern. Also muss ich wissen, ob der User direkt davor in der ComboBox war oder zwischendurch wo anders.
Allerdings wäre es sehr aufwendig, wenn ich beim Verlassen jedes einzelnen Objekt in eine Variable LASTFOCUS schreibe, weil es einfach zu viele Objekte sind, für die ich das nicht einzeln machen möchte.
Daher suche ich eine andere Möglichkeit herauszufinden, ob die bestimmte ComboBox vorher den Fokus hatte. Hab schon so Sachen versucht wie beim OnEnter der ListBox das zu prüfen, allerdings hat da schon die ListBox den Fokus. Gibt's denn vielleicht ein Ereignis einer ListBox, das wie OnEnter ausgeführt wird, allerdings bevor der Fokus wirklich übergeben wird? Oder gibt's vielleicht ein übergreifendes Application Event, das bei sowas ausgeführt wird?
Wäre für Lösungsvorschläge sehr dankbar.
MfG,
Markus.
Grendel - Mi 02.03.05 17:41
Titel: Re: Zuvor fokusiertes Objekt herausfinden?
| ObscurusNox hat folgendes geschrieben: |
| Allerdings wäre es sehr aufwendig, wenn ich beim Verlassen jedes einzelnen Objekt in eine Variable LASTFOCUS schreibe, weil es einfach zu viele Objekte sind, für die ich das nicht einzeln machen möchte. |
Das musst Du ja nicht einzeln machen. Normalerweise sollte es reichen eine Ereignisbehandlungsroutine zu schreiben und diese den OnExit Events aller Steuerelemente zuzuweisen. In der Routine selber musst Du dann blos den Sender als "Lastfocus" merken.
Bis neulich ...
ObscurusNox - Mi 02.03.05 22:35
Im Grunde haste ja recht. Es sind halt nur ein paar viele Elemente und ich dachte es ginge vielleicht auch anders, aber ich muss mich wohl damit anfreunden... Problem ist auch, dass ich alles mögliche da habe, was den Fokus kriegen könnte und ich hab Angst was zu vergessen: Buttons, Edits, ListBoxen, ComboBoxen, Images, TabSheets, ListViews...
Noch wer 'ne Idee???
ObscurusNox - Mo 07.03.05 18:41
Hab's jetzt so gemacht, dass ich bei jedem Exit einer Variable LastFocusedObject (TObject) das letzte Element (TListBox, TEdit etc.) zugewiesen hab.
skyk.Insomnio - Mi 07.09.05 18:01
Hallo, ich hab gerade ein ähnliches Problem und hoffe es gibt dafür eine andere Lösung :)
Ich habe sehr viele ListViews mit Text drin und möchte jetzt per PopUp Menu einen "Kopieren" Button zur Verfügung stellen.
Nun muss die Click Funktion allerdings noch wissen, aus welchem ListView es den Text herauskopieren soll.
eine "LastFocus" Funktion scheint es nun ja nicht zu geben - aber gibt es evtl. die Möglichkeit herauszufinden, aus welchem Objekt heraus das PopUp Menu aufgerufen wurde ?
Danke.
Lannes - Do 08.09.05 08:04
Hallo,
damit hast Du einen Ansatz:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var LV : TListView;procedure TForm1.PopupMenu1Popup(Sender: TObject); begin if PopupMenu1.PopupComponent = ListView1 then begin LV := ListView1; |
Das Ereignis OnPopup wird vor der Anzeige des Menüs ausgelöst, somit hast Du da die Möglichkeit das Menü anzupassen, oder in den Onclick-Events der Menü-Punkte kannst Du dann die über die Variable
LV auf das entsprechende ListView zugreifen.
skyk.Insomnio - Do 08.09.05 13:42
Vielen Dank - hat mir sehr geholfen !
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!