Autor Beitrag
svern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 21.10.04 15:55 
Hey,

wenn ich in meinem Editfeld 1 eine (korrekte) Eingabe mache, dann soll das Programm ein weiteres Formular öffnen und anschließend wieder in Editfeld 2 zurückkehren.
Macht das Programm.... so halbwegs jedenfalls.

Es öffnet das 2te Formular, und springt dann auch ins 2te Editfeld, aber ohne dieses zu Markieren (wie sonst auch mit Tab). Stattdessen ist der Cursor zwar drin, aber irgendwie checkt es das Programm nicht. Denn wenn ich dann ne Funktion unter Edit2.exit aufrufe macht es überhaupt nichts. Woran liegt das? Ist mit Sicherheit ein einfaches Problem...


Der Quelltext zu Edit1.exit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  ANZ_KN:=strtoint(Edit1.Text);
  if (ANZ_KN < 2) or (ANZ_KN > 10 ) then
     showmessage('Wert nicht erwartet!')
  else
     begin
     Form2.Show;                         // Hier gehts in das 2te Formular
     Form2.FormShow(Sender);
     KN_ANZ_W := False;
     end;
  Form1.show;                            // das bringt er auch wieder in Vordergrund, 
  Edit2.Color:=clInactiveCaptionText;    // aber ohne das Edit2Feld zu markieren
  Edit1.Color:=clWindow;
  Form1.show;


Hoffe auf eure Hilfe,
Svern

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.
Bruce
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 80



BeitragVerfasst: Do 21.10.04 18:03 
Hi Svern,

ich verstehe den ganzen Kontext jetzt natürlich nicht, in dem Du das ganze machst, aber Du änderst mit Deiner Anweisung die Hintergrund-Farbe des Edit2, und zwar in ein Himmelblau oder so ähnlich.

Du willst aber doch Edit2 markieren, als würdest Du einfach mit Tab reinspringen?!
Dann langt ein 'Edit2.SetFocus;'. Du mußt die Farben der beiden Edit-Felder nicht per Hand ändern und die Farbe alleine heißt nicht daß sich Dein Programm im gerade "farbigen" Edit befindet.

Und nur zum Verständnis: Warum rufst Du 'Form1.Show' am Ende noch mal auf?

Hoffe ich lieg hier halbwegs richtig...
Gruß, Bruce
svern Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 21.10.04 18:14 
Hey Bruce,

hatte das Form1.show mehrfach in der HOffnung, dass das Programm dadurch den markierten Cursor in das Editfeld packt.... was natürlich nicht wirklich geklappt hat.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
begin
  ANZ_KN:=strtoint(Edit1.Text);
  if (ANZ_KN < 2) or (ANZ_KN > 10 ) then
     showmessage('Wert nicht erwartet!')
  else
     begin
     Form2.Show;
     KN_ANZ_W := False;
     form2.bringtofront;
     form1.bringtofront;
     end;
  Edit2.Color:=clInactiveCaptionText;
  Edit1.Color:=clWindow;
  Form1.Edit2.setfocus;


Die Farben sind nur zum deutlich machen des aktuellen Editfeldes gedacht, also nicht weiter wichtig.

Leider habe ich aber mit dem setfocus noch immer nicht die Markierung im Edit2-Feld.

Es ist, als ob Delphi nach der Anzeige (gibts da ALternativen als show?), nicht mehr wüsste, in welches Editfeld es zu gehen hat... trotz das expliziten setfocus.

Vielleicht geht es ja irgendwie anders, der Aufruf des 2ten Formulars (nur nach edit1 verlassen) und dann automatisch der Cursor in edit2...
Luzzifus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 200

Win2K
D6 Prof
BeitragVerfasst: Do 21.10.04 18:21 
Hmm ist schon irgendwie merkwürdig was du da geschreibselt hast.

also an dieser stelle:
ausblenden Delphi-Quelltext
1:
2:
     Form2.Show;
     Form2.FormShow(Sender);


Dir ist schon klar, dass Form2.FormShow zweimal aufgerufen wird ja? Ausser natürlich du hast sie nicht als OnShow-Event der Form2 eingetragen. Und wenn du darin Dinge tust, die unbedingt NACH dem Anzeigen der Form2 getan werden müssen, würde ich die in ne eigene Prozedur schreiben anstatt FormShow zweimal aufzurufen.

und hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  Form1.show;                            // das bringt er auch wieder in Vordergrund,   
  Edit2.Color:=clInactiveCaptionText;    // aber ohne das Edit2Feld zu markieren  
  Edit1.Color:=clWindow;  
  Form1.show;


Mir ist völlig schleierhaft, was die beiden Form1.Show-Aufrufe sollen. Ich gehe mal davon aus, dass Form1 deine MainForm ist und somit eh angezeigt wird. Wenn du einfach neuzeichnen möchtest, mach das mit Repaint, aber auch das ist nicht notwendig.

Mein Tipp ist: Rufe die Form2 mit Form2.ShowModal auf, dann sollte er beim Beenden den Focus automatisch auf die Komponente setzen, die vorher aktiv war, in diesem Fall dein Edit-Feld. Falls doch nicht, machst du einfach zum Schluss noch ein Edit2.SetFocus, wie Bruce schon sagte.

** edit: Dein zweiter Post war doch eben noch nicht da.. x_X
Zitat:
Es ist, als ob Delphi nach der Anzeige (gibts da ALternativen als show?), nicht mehr wüsste, in welches Editfeld es zu gehen hat... trotz das expliziten setfocus.

ShowModal als Alternative hält die Form1 quasi an, du kannst auf Form1 nicht mehr zugreifen, solange Form2 als Modal angezeigt wird. Da du mit Show arbeitest, wird die Prozedur weiter abgearbeitet und wartet nicht auf das Schließen von Form2. Ergo kommt das SetFocus zu früh und wird wahrscheinlich wieder woanders hingesetzt, wärend Form2 noch läuft. Deswegen empfehle ich ShowModal.
svern Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 21.10.04 18:36 
Hey Luzzifus,

showmodal war ne gute Idee, nur leider will ich das Fenster ja nicht schließen.
Das Formular2 soll einfach nur geöffnet und dann in den Hintergrund geschickt werden.


Kann ich das Setfocus denn vielleicht irgendwie "hinauszögern". So, dass es nach formular2.show; ausgeführt wird???
Bruce
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 80



BeitragVerfasst: Do 21.10.04 18:41 
Mensch, egal ob Du das Problem schon gelöst hast oder nicht, ich will jetzt wissen was Du da eigentlich machst :lol:

Der User gibt einen Wert in Edit1 auf Form1 an, dann wird der Wert geprüft und wenn er innerhalb der Toleranz liegt dann wird Form2 aufgerufen und direkt danach wieder Form1 und er soll in Edit2 springen (Form2 würde in dem Fall nur einmal kurz aufzucken, was passiert da eigentlich auf Form2?).

Wenn Du Form1.Show und dann Edit2.SetFocus aufrufst, dann ist der Focus auch auf Edit2. Sollte Edit2 keinen Inhalt haben, dann Siehst Du auch nicht den blauen Markierungsbalken, sondern nur den Cursor darin.

Und dann sollte auch EIne OnExit funktionieren, wenn Du Edit2 verläßt.

:wink:
Luzzifus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 200

Win2K
D6 Prof
BeitragVerfasst: Do 21.10.04 18:42 
Zitat:
Kann ich das Setfocus denn vielleicht irgendwie "hinauszögern". So, dass es nach formular2.show; ausgeführt wird???

Ja z.b. indem du das Edit2.SetFocus in den Eventhandler OnActivate der Form1 schreibst.

Zitat:
Sollte Edit2 keinen Inhalt haben, dann Siehst Du auch nicht den blauen Markierungsbalken, sondern nur den Cursor darin.

man kann diesen "blauen Markierungsbalken" übrigens auch deaktivieren indem man die Eigenschaft AutoSelect auf false setzt. :D
Bruce
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 80



BeitragVerfasst: Do 21.10.04 18:48 
Jo , kann man aber den will er doch, oder?
Oh man, mein Hirn schwillt an :lol:
Luzzifus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 200

Win2K
D6 Prof
BeitragVerfasst: Do 21.10.04 18:50 
er will den Focus, aber nicht die Markierung. Bzw. über die Markierungswünsche gibt's eigentlich gar keine Info.. naja war eh nur ne Bemerkung am Rande :D
Bruce
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 80



BeitragVerfasst: Do 21.10.04 19:01 
Zitat:
Es öffnet das 2te Formular, und springt dann auch ins 2te Editfeld, aber ohne dieses zu Markieren (wie sonst auch mit Tab).

Er will die Markierung, ich spür´s. 8)

Na ja egal.
Das was ich verstanden habe würde ich so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
Form2.Show;
Form1.Show;
Form1.Edit2.SetFocus;


Ob Form2 dann im Hintergrund noch sichtbar sein muss oder nicht, hab ich ja noch nicht verstanden. Vielleicht wird ja ein Bild angezeigt oder so was, aber das ist ja ne ganz andere Sache. Entweder steh ich hier neben mir oder wir verkomplizieren ne ganz simple Sache :?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 21.10.04 19:22 
Und wenn er eine Verzögerung haben möchte, kann er auch noch sleep benutzen
Luzzifus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 200

Win2K
D6 Prof
BeitragVerfasst: Fr 22.10.04 10:36 
Und er könnte auch nochmal antworten, ob's denn nun funktioniert.. :twisted:
svern Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 22.10.04 17:09 
loool, echt nett von euch, so ohne mich weiter zu spekulieren :wink:

Aber das Ding ist ja, Ihr habt Recht:

- Bruce, ich will es so machen wie du es geschrieben hast:
Zitat:
Der User gibt einen Wert in Edit1 auf Form1 an, dann wird der Wert geprüft und wenn er innerhalb der Toleranz liegt dann wird Form2 aufgerufen und direkt danach wieder Form1 und er soll in Edit2 springen (Form2 würde in dem Fall nur einmal kurz aufzucken, was passiert da eigentlich auf Form2?).

--> Form 2 ist nur zu grafischen Ansicht da (soll ein Netzablaufplan werden...)
- Luzzifus, der Tipp mit dem OnActivate war auch recht nett, allerdings habe ich dann immer Edit2 als Standard, wenn er in das Form1 reinspring... ist also noch nicht optimal.
--> Die Markierung find ich übrigens ganz nett, will die also haben
- Bruce, das
Zitat:
Form2.Show;
Form1.Show;
Form1.Edit2.SetFocus;

hab ich nun schon mehrfach versucht, aber irgendwie will mein Prog das nicht machen (warum und weshalb, das weiss ich nicht)


Aber ihr seid prima Jungs, nur nicht aufgeben ... (...bitte :? )
Luzzifus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 200

Win2K
D6 Prof
BeitragVerfasst: Fr 22.10.04 17:19 
Zitat:
- Luzzifus, der Tipp mit dem OnActivate war auch recht nett, allerdings habe ich dann immer Edit2

Dann lass dir was einfallen!! ^^

Ich hab eben mit Sender bisserl rumprobiert, das ist aber in jedem Falle Form1.

Also könntest du es z.b. mit ner globalen Variable lösen die in Form2 bei OnShow auf true gesetzt wird.

dann könntest du in das OnActivate-Ereignis der Form1 folgendes schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormActivate(Sender: TObject);
begin
  if x then 
  begin 
    Edit2.SetFocus;
    x:=false;
  end;
end;


mit x als globale Boolean-Variable.

Ist zwar nicht sonderlich elegant gelöst, aber funktionieren sollte es. :twisted:
svern Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 22.10.04 22:12 
Das schaut nach ner ganz geeigneten Lösung aus, werde das wohl so umsetzen.

Thx