AGB  ·  Datenschutz  ·  Impressum  







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

Focus der GUI bei WM_AfterShow

Ein Thema von Patrick · begonnen am 24. Sep 2013 · letzter Beitrag vom 24. Sep 2013
Antwort Antwort
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#1

Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 10:11
Hallo,

Ich habe ein kleines Problem. Ich möchte beim Start der Anwendung ein Sub-Fenster anzeigen. Ich möchte aber dass die Haupt-Form dann schon im Hintergrund zu sehen ist. Deswegen verwende ich ein WM_AfterShow -Event. Allerdings ist der Focus dann im Nirvana. Sobald ich Tab-Drücke ist der Focus auf der Komponente mit der TabOrder 1. Ich brauche den Focus aber auf der Komponente mit der Tab-Order 0 ohne dass ich dafür etwas drücken muss. Wo ist das Problem?

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  PostMessage(self.handle, WM_AfterShow, 0,0); // Dadurch kommt das ShowMessage erst nachdem das MainForm sichtbar ist
end;

procedure TForm1.WMAfterShow(var Message: TWMChar);
begin
  Form2.ShowModal;
end;

...

procedure TForm2.FormShow(Sender: TObject);
begin
  Edit1.SetFocus; // Das bringt nichts. Der Focus ist nicht auf Edit1, wie ich es gerne hätte.
end;
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 10:37
Du könntest folgendes versuchen:

In Form1 eine Variable FirstActivate: Boolean einführen.
Wenn FirstActivate False ist dann
Form2 im Form1.OnActivate öffnen und
FirstActivate auf True setzen.

Vielleicht hilft das schon.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 11:10
Das löst das Problem leider nicht. Vielleicht ist es auch wo anders lokalisiert?

Nachtrag:
Habs nochmal mit einer leeren Form mit einem simplen TEdit darauf versucht. Selbes Problem.
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.

Geändert von Patrick (24. Sep 2013 um 11:17 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#4

AW: Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 11:34
Hallo,

versuch es doch mal so:
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
begin
  PostMessage (Handle, WM_AFTERSHOW, 0, 0);
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 11:35
Ist das PostMessage und WMAfterShow raus?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#6

AW: Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 11:49
ich hab das mal mit einem Timer gelöst.
Vielleicht nicht elegant aber es funktioniert.
Den Timer auf False setzen interval auf 10

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
TimerA.Enabled := True;
end;

procedure TForm1.TimerATimer(Sender: TObject);
begin
  TimerA.Enabled := False;
  Form2.ShowModal;
end;


//Form2
procedure TForm2.FormShow(Sender: TObject);
begin
Edit1.SetFocus;
end;
  Mit Zitat antworten Zitat
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 11:59
Jep, die Message ist raus.

Der Vorschlag von Volker hat funktioniert:
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
begin
   PostMessage (Handle, WM_AFTERSHOW, 0, 0);
end;
Ich versteh' zwar nicht warum, aber jetzt funktioniert es.

Danke!
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#8

AW: Focus der GUI bei WM_AfterShow

  Alt 24. Sep 2013, 15:50
Hallo,

Zitat:
Der Vorschlag von Volker hat funktioniert: [...] Ich versteh' zwar nicht warum, aber jetzt funktioniert es.
Es liegt an der Folge der Aufrufe: zuerst OnShow, danach OnActivate.

Wenn Du in Form1.FormShow die Message absetzt, dann läuft folgendes ab:
WMAfterShow -> Form2.ShowModal (das Edit erhält den Fokus) -> Form1.FormActivate (das Form1 holt sich den Fokus, d. h.: das Edit erhält eine WM_KILLFOCUS Botschaft)

Die Message in Form1.FormActivate abgesetzt:
(Form1 bzw. ein Control hat den Fokus) -> WMAfterShow -> Form2.ShowModal (das Edit erhält den Fokus)

Gruß
Volker Zeller
  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 06:32 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