Entwickler-Ecke

Sonstiges (Delphi) - Beim Start direkt das Edit Feld anwählen


XZeranski - Do 05.06.03 16:17
Titel: Beim Start direkt das Edit Feld anwählen
Hallo,
wie mache ich es, dass bei Programmstart der Cursor gleich in das Editfeld springt und ich sofort arbeiten kann?

Thx


ErnestoChe - Do 05.06.03 16:23

Hi,

in das OnCreate-Ereignis der Form schreibst du folgendes:


Delphi-Quelltext
1:
Edit1.SetFocus;                    


MFG

- Ernesto -


XZeranski - Do 05.06.03 18:57

Danke für deine Hilfe, jetzt kann ich mich wieder erinnern :)

Allerdings vertstehe ich nciht, warum dann folgende Fehlermeldung kommt:

"Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten"

Woran liegt das?


Delete - Do 05.06.03 19:11

Weil das Edit zu dem Zeitpunkt noch nicht sichtbar ist. Stell die Tab-reihenfolge um, so dass das gewünschte Edit das erste ist.


XZeranski - Do 05.06.03 19:34

Hm, das Feld steht jetzt an erster Stelle, aber es kommt immer noch der selbe Fehler...

Ich hab auch mal ein neues Dokumt geöffnet und nur ein Edit-Feld reingepackt, auch dann kommt der Fehler wenn ich Edit1.SetFocus bei Form1.Create eingebe...


ErnestoChe - Do 05.06.03 19:52

Hi,

OK, war mein Fehler. Nimm die zeile aus dem OnCreate raus und füge sie in das OnActivate deiner Form ein. Dann gehts. Das OnCreate-Ereignis ist zu früh, da die Form da gerede erst erzeugt wird.

MFG

- Ernesto -


Delete - Do 05.06.03 19:56

Und dann landet der Cursor jedes mal im ersten Edit, ob das aber gewollt ist?


Terra23 - Do 05.06.03 20:08

@Luckie: Ich denke doch, schon. Siehe:

XZeranski hat folgendes geschrieben:
wie mache ich es, dass bei Programmstart der Cursor gleich in das Editfeld springt


@XZeranski: Kann es sein, daß du dein Edit-Feld deaktiviert hast?


ErnestoChe - Do 05.06.03 20:19

@Terra23
das hat was mit OnCreate zu tun. Dieses Ereignis ist noch zu früh um den Fokus auf das Edit zu setzen. Deshalb die Exception. Im OnActivate klappts. Habs grad noch mal probiert.

Oder man setzt alternativ die Tab-Reihenfolge entsprechend, wie es Luckie schon gesagt hat.
MFG

- Ernesto -


Delete - Do 05.06.03 20:29

OnActivate wird aber nicht nur beim Start ausgelöst. :roll:


Tweafis - Do 05.06.03 20:43

wie wärs mit OnShow?


Delete - Do 05.06.03 20:50

Wir dauch nicht nur beim Start aufgerufen. Aber was soll das eigentlich? Wir haben doch eine Lösung: Tab-Reihenfolge richtig setzten. .roll:


mimi - Do 05.06.03 20:50

es gibt eine eingenschaft sie heißt activcontrol oder so änlichen da musst du die komponenten die als erstes den focus haben soll eintragen und fertig :)


Tweafis - Do 05.06.03 20:54

Luckie hat folgendes geschrieben:
Wir dauch nicht nur beim Start aufgerufen. Aber was soll das eigentlich? Wir haben doch eine Lösung: Tab-Reihenfolge richtig setzten. .roll:


Zitat:
Das Ereignis OnShow wird ausgelöst, wenn das Formular angezeigt wird (d.h., wenn die Eigenschaft Visible des Formulars auf True gesetzt wird).


Solange er nicht Visible ändert kann da doch nix passieren oda?


Terra23 - Do 05.06.03 21:02

@Ernesto: Das ist mir schon klar. :-)
@Luckie: Wir akzeptieren die Lösung. :mrgreen: Ich weiß aber, daß OnActivate nicht nur beim Programmstart ausgelöst wird. Ich arbeite ja teilweise mit dem Ereignis. :)


ErnestoChe - Do 05.06.03 21:04

Man das kann einem ganz schön auf den nerv gehen, diese klugsch...rischen Kommentare :evil: Ich denke Xeranski hat einige Ansätze bekommen und kann sich das raussuchen was für ihn am besten ist.

Ich habe ein bisschen rumprobiert, so einfach wird OnActivate oder Onshow nicht ein zweites mal ausgelöst, siehe Delphi-Hilfe.


Tweafis - Do 05.06.03 21:09

Achja, wenn du das Event genau einmal bei Programmstart aufrufen willst, dann geht das auch so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormShow(Sender: TObject);
begin
  Edit1.SetFocus;
  Form1.OnShow := OtherFormShow;
  OtherFormShow;
  // oder
  // Form1.OnShow := nil;
end;


So wird das Ereigniss garantiert nur einmal aufgerufen. :mrgreen:


mimi - Do 05.06.03 22:16

und was war mit meinem vorschlag ???


Alex - Fr 06.06.03 14:50

Der Vorschlag von Mimi finde ich am besten
mach ich meistens so


mimi - Fr 06.06.03 15:54

ist auch am einfachsten(man braucht keine zeile code zu schreiben :))


Delete - Fr 06.06.03 20:00

Beim Einstellen der Tab-Reihenfolge auch nicht. :roll: