AGB  ·  Datenschutz  ·  Impressum  







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

Fokuswechsel eines VCL Controls verhindern

Ein Thema von Stevie · begonnen am 4. Okt 2011 · letzter Beitrag vom 4. Okt 2011
Antwort Antwort
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 18:58
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 19:05
Könnte man nicht WM_KILLFOCUS abfangen? Oder so:
Delphi-Quellcode:
procedure TForm5.Edit1Exit(Sender: TObject);
begin
  TWinControl(Sender).SetFocus;
end;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all

Geändert von Union ( 4. Okt 2011 um 19:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 19:12
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 4. Okt 2011 um 19:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 19:55
Bei mir nicht. Allerdings XP ungethemed, vielleicht liegt es daran?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 20:12
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;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 21:12
Auf den ersten Blick sollte das inherited vielleicht ans Ende.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 21:20
Auf den ersten Blick sollte das inherited vielleicht ans Ende.
Nope, erst muss das ButtonDown abgearbeitet, dann der Focus gelöscht werden.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Fokuswechsel eines VCL Controls verhindern

  Alt 4. Okt 2011, 22:02
Geht ein diesem Zusammenhang nicht PeekMessage mit PM_REMOVE?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  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 13:44 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