Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl (https://www.delphipraxis.net/185211-fehler-bei-setfocus-nach-wechseln-der-activepage-im-pagecontrol.html)

TheFrog 22. Mai 2015 08:26

Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Guten Morgen,

ich habe ein ganz banales Problem:

Wenn ich bei einer PageControl die ActivePage setze und gleich danach den Focus auf ein Control setze, welches auf dem soeben aktivierten TabSheet sitzt, dann erhalte ich die Fehlermeldung: "Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten"

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  PageControl1.ActivePage := TabSheet2;
  Edit2.SetFocus; // Control auf TabSheet2
end;
Mir ist klar, was diese Fehlermeldung bedeutet. Mir ist nicht klar, an welcher Stelle ich den Focus setzen soll/kann.

Ich habe es schon im OnChange()-Ereignis der PageControl versucht, aber dieses wird beim Zuweisen von ActivePage nicht aufgerufen.

Danke für jede Hilfe!

Hans.

baumina 22. Mai 2015 08:38

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Bei meinem kleinen Testprogramm funktioniert dein Code, ich vermute mal, dass der Fehler wo anders zu finden ist.

Perlsau 22. Mai 2015 08:39

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Versuche doch einmal, statt ActivePage den entsprechenden TabIndex zuzuweisen.
OnChange reagiert bei den allermeisten Komponenten ausschließlich auf Benutzereingaben und nicht auf vom Programm selbst hervorgerufene Änderungen.

Nachdem ich den Post von Baumina gelesen habe, ist mir noch diese Frage zu deinem Problem eingefallen:

Befindet sich dieses PageControl vielleicht auf einem zum Zeitpunkt der Zuweisung nicht sichtbaren Tabsheet eines übergeordneten PageControl oder ist es aus irgendwelchen anderen Gründen nicht sichtbar (unsichtbarer Frame etc.)?

mikhal 22. Mai 2015 08:43

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Setze den Fokus auf das TabSheet
Delphi-Quellcode:
TabSheet2.SetFocus;
Dann übernimmt die Tabulatorreihenfolge des TabSheets, welches Control den Focus erhält.

Deine Fehlermeldung lässt aber vermuten, dass dein EDIT2 überhaupt nicht auf dem TabSheet2 liegt, daher die Fehlermeldung, ggf. unsichtbar?

Grüße
Mikhal

Der schöne Günther 22. Mai 2015 08:43

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Wie wäre es denn mit dem
Delphi-Quellcode:
OnShow
-Ereignis deines
Delphi-Quellcode:
TTabSheet
?

TheFrog 22. Mai 2015 08:50

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Vielen Dank schon mal!

Ich habe noch etwas rumprobiert:

Da ich das Projekt von Delphi 7 nach XE3 übernommen habe, habe ich mich über die Fehlermeldung gewundert, welche vorher nicht da war. Und wirklich, in Delphi 7 funktionierte der gleiche Code noch ohne Meldung.

Außerdem kommt die Fehlermeldung nur, wenn das Control noch zusätzlich auf einem Panel liegt. Wird das Control direkt auf das TabSheet gelegt, kommt es zu keiner Fehlermeldung.

Irgendwie ziemlich rätselhaft.

Ich versuche noch weiter!

TheFrog 22. Mai 2015 08:51

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
@Der schöne Günther:

Das mit dem OnShow() habe ich auch schon ausprobiert. Hat nur den Haken, dass dann die Fehlermeldung evtl. schon beim Öffnen des Formulars kommt, wenn dieses TabSheet in der DFM als aktives eingetragen ist :(

TheFrog 22. Mai 2015 08:56

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Kommando zurück:

Ich hatte noch ein Fehler im Code :oops:

Als ich diesen korrigiert habe, hat es funktioniert!

Sorry und danke fürs Diskutieren!

Hans.

himitsu 22. Mai 2015 09:00

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Manchmal kann es nicht schagen die Lösungen/Gründe zu nennen.
Man stelle sich mal vor noch jemand hätte das Selbe, bzw. ein ähnliches Problem, findet dann den Thread über die Sufu und freut sich, weil keine Lösung da steht.

TheFrog 22. Mai 2015 09:12

AW: Fehler bei SetFocus() nach Wechseln der ActivePage im PageControl
 
Joop, da hast du Recht:

In meinem kleinen Beispiel-Programm habe ich wirklich auf ein deaktivertes Control fokusiert (sprich: dieses lag nicht auf dem soeben aktivierten Tabsheet :oops:) Wie es immer so ist, wenn man mal schnell einen Prototyp zusammenklickt ....

Leider ist im eigentlichen Programm die Konstellation komplexer und der Fehler tritt dort immer noch auf. Hier gehe ich mittels eines Automatismus über alle Controls und suche mir das passende zum Fokusieren aus. ... und da fällt das Programm dann auf die Schnauze!

Ich dachte ich könnte dies mit einem kleinen Testprogramm nachstellen, muss jetzt aber leider doch durch den Orginal-Code durch :(

Sollte ich noch was Erwähnenswertes herausfinden, so werde ich das posten!

Hans.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Seite 1 von 2  1 2      

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