![]() |
Fokuswechsel eines VCL Controls verhindern
Wie kann ich einen Fokuswechsel aus einem Control heraus verhindern? Dabei ist wichtig, dass das Control das selber verhindern kann.
Ich hab mir mal das CMExit genommen und dort ein SetFocus reingesetzt. Das funktioniert auch augenscheinlich wenn man mit Tab das nächste Control anspringen will. Allerdings nicht, wenn ich explizit mit der Maus in ein anderes Control hineinklicke, zumindest nicht auf Windows 7, auf Windows XP sah auch das ganz gut aus. |
AW: Fokuswechsel eines VCL Controls verhindern
Könnte man nicht WM_KILLFOCUS abfangen? Oder so:
Delphi-Quellcode:
procedure TForm5.Edit1Exit(Sender: TObject);
begin TWinControl(Sender).SetFocus; end; |
AW: Fokuswechsel eines VCL Controls verhindern
Scheint, es handelt sich dabei um ein TDateTimePicker spezifisches Problem. Ich hab 2 davon, und bei dem einen will ich verhindern, dass der Fokus verloren geht, wenn kein gültiges Datum eingetragen ist. Klicke ich nun auf den anderen Picker, bekommt der irgendwie den Fokus. Klicke ich auf ein Edit oder einen Button, bekommen diese Controls erwartungsgemäß nicht den Fokus.
Ganz einfach nachzustellen: Edit und DateTimePicker auf die Form. Ins OnExit des Edits ein Edit1.SetFocus und dann auf den DateTimePicker klicken. Nachtrag: Scheint sich um ein optisches Problem zu handeln. Das Edit hat weiterhin den Fokus. Im DateTimePicker ist aber der Text als markiert gezeichnet. |
AW: Fokuswechsel eines VCL Controls verhindern
Bei mir nicht. Allerdings XP ungethemed, vielleicht liegt es daran?
|
AW: Fokuswechsel eines VCL Controls verhindern
Hatte es auf Windows XP gethemed auch nicht. Und unter Windows 7 Classic Design auch nicht. Nur wenn Aero an ist.
Hab mal einen Workaround, den ich noch testen muss:
Delphi-Quellcode:
procedure TDateTimePicker.WMLButtonDown(var Message: TWMLButtonDown);
begin inherited; if not Focused then Perform(WM_KILLFOCUS, 0, 0); end; |
AW: Fokuswechsel eines VCL Controls verhindern
Auf den ersten Blick sollte das inherited vielleicht ans Ende.
|
AW: Fokuswechsel eines VCL Controls verhindern
Zitat:
|
AW: Fokuswechsel eines VCL Controls verhindern
Geht ein diesem Zusammenhang nicht PeekMessage mit PM_REMOVE?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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-2025 by Thomas Breitkreuz