Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - ActionControl bei nicht sichtbaren Komponenten


Singing Sandy - Mi 27.10.04 10:04
Titel: ActionControl bei nicht sichtbaren Komponenten
Hallo,

mein Problem: Ich habe eine MaskEdit, in die der Cursor nach starten der Anwendung geladen werden soll, in einem PageControl, 2.TabSheet.
Das 2.TabSheet wird erst sichtbar, wenn im ersten TabSheet <weiter> geklickt wurde und TabSheet2 sichtbar wird.

ActiveControl funktioniert aber nur wenn direkt nach Programmstart auf die Komponente zugegriffen wird.
(Bei EditFeld auf TabSheet1 funktionierts wie gewünscht)

Delphi-Quelltext
1:
2:
3:
4:
Fehlermeldung:
...EInvalidOperation aufgetreten.
Meldung: Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten.
Prozeß angehalten.. Start fortsetzen.[OK]


Wie kann ich ActiveControl trotzdem für die MaskEdit anwenden oder welche Alternativen habe ich (vielleicht FocusControl/SetFocusControl) damit der Cursor ins Feld kommt?

Viele Grüsse

Sandy


jasocul - Mi 27.10.04 10:14

Im OnActivate der Form müssen folgende Anweisungen durchgeführt werden:

Delphi-Quelltext
1:
2:
  PageControl.ActivePage := TabSheet2;
  MaskEdit1.SetFocus;

Und bevor jemand fragt, warum nicht im OnCreate:
Im OnCreate kann man i.d.R. auf die Controls noch nicht zugreifen.

Wenn das nur beim Programmstart passieren soll, dann mache ich das immer so:
Variable FirstTime : Boolean definieren.
Die wird im OnCreate auf True gesetzt.
Im OnActivate die Variable abfragen und wenn true, die obigen Anweisungen ausführen.
Am Schluss im OnActivate die Variable auf False setzen.

Hat jemand einen besseren Vorschlag?


Singing Sandy - Mo 01.11.04 10:52

Lösung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormCreate(Sender: TObject);
begin
        TabSheet1.Visible := true;
        TabSheet2.Visible := false;
        PageControl1.ActivePage := TabSheet2;
end;

procedure TForm1.TabSheet2Show(Sender: TObject);
begin
        if not edit1.focused then edit1.setfocus;
end;

Ereignis
TabSheet2 onShow: TabSheet2Show