Komponente sichtbar?
-
Ich habe öfters mal das mir beim start der EXE das Programm sagt "Ein unsichtbares Fenster kann nicht den Focus erhalten". Zum Beispiel möchte ich bei einer ComboBoxauswahl mit SetFocus() auf ein Eingabefeld springen. Kann man irgendwie ein if davor setzen, ob die Komponente für den Anwender sichtbar ist. Damit meine ich nicht Komponente->Visible, sondern ob der Anwender die Komponente gerade sieht bzw diese gerade sichtbar ist.
-
~Error schrieb:
Ich habe öfters mal das mir beim start der EXE das Programm sagt "Ein unsichtbares Fenster kann nicht den Focus erhalten".
Beim Start der Anwendung solltest du nicht SetFocus() aufrufen; benutze TForm::ActiveControl.
-
Ich fülle zur Runtime die ComboBox erst mit Inhalt, dadurch wird die onChange Methode der ComboBox aufgerufen und damit dann natürlich auch das SetFocus. Ich glaube ich trickse einfach mit ComboBox->Tag Eigenschaft und frage darauf ab, damit beim Start die onChange nicht abgearbeitet wird. Eine Abfrage in der onChange ob die Anwendung fertig geladen ist bzw die Komponente dem Benutzer sichtbar ist wäre nur Wartungsschöner.
EDIT: Das ActiveControl hilft schon mal weiter, damit kann ich abfragen ob die Komponente aktiv ist, darf dann nur nicht die Startkomponente sein.
Wenn ich aus der ComboBox onChange mache und ActiveControl = RichEdit ist, warum sehe ich dann keinen Schriftbalken im RichEdit? Erst wenn ich etwas auf der Tastatur klicke sieht man diesen.
-
Alle von TWinControl abgeleiteten Komponenten erben die Methode CanFocus(). Damit solltest Du die Probleme in den Griff bekommen.
Allerdings klingt mir das ganze sehr unsauber. Ich sehe keinen Grund, warum nach einer Änderung in einer ComboBox ein SetFocus() verwendet werden sollte.