Sorry, hatte vergessen mir den Beitrag zu den Favoriten hinzufügen und somit leider etwas verdrängt.
Also ich gehe davon aus das du das Formular per .Show() anzeigst und es hat den Formstyle fsStayOnTop, nicht wahr?
Ich habe es halt in dem Fall völlig anders gelöst, indem ich das Formular auf den Desktop anzeige und es so modifziere das es nicht den Focus klaut. (Per Windows-
API Funktionen )
Per SetCapture() und ReleaseCapture() fange ich halt noch ab ob der Benutzer woanders hinkliegt und per OnFocusLost-Event ( eine extra Windows-Message ) überprüfe ich ob die Komponente den Focus verliert.
Da du ja sozusagen mit der
VCL arbeitest und du ein neues Formular mit Gridview erzeugst kriegt das halt den Focus, da ist es selbstverständlich das das andere Formular den Focus verliert.
Das Problem,dass das Formular über anderen Fenster und so weiter hängt darf eigentlich gar nicht vorhanden sein. Zumindest in meiner Auffassung schließt sich eine Combobox automatisch wenn sie nicht mehr vorne ist. ( D.h. den Focus verloren hat oder sonstiges )
Also im Endeffekt kenn ich dabei leider keinen Weg mit der
VCL zu arbeiten, abgesehen vll. mit TCustomCombobox zu arbeiten.
Vll. hilft dir aber trotzdem noch der Codeauszug weiter:
Delphi-Quellcode:
private
FFocusLostEvent: TNotifyEvent;
procedure WMKillFocus( var Message: TWMKillFocus ); message WM_KILLFOCUS;
published
property OnFocusLost: TNotifyEvent read FFocusLostEvent write FFocusLostEvent;
procedure X.WMKillFocus( var Message: TWMKillFocus );
begin
inherited;
if Assigned( FFocusLostEvent ) then
begin
OnFocusLost( Self );
end;
end;
Dieses Event ( wenn du es in eine Komponente einbaust ) wird immer ausgelöst, wenn die Komponente auf irgendeine Art den Focus verliert.
MfG Alaitoc