Autor |
Beitrag |
chall_de
      
Beiträge: 23
WIN 2000, WIN XP
|
Verfasst: Mo 07.02.05 13:34
Hallo,
als absoluter Delphineuling habe ich folgendes Problem bzw. Phänomen, das ich nicht verstehe:
Ich habe ein Editierfeld (Edit1) in das ein Integer-Zahle eingegeben werden soll. Nach der Eingabe prüfe ich ob es sich um eine Integer-Zahl handelt. Wenn nicht, wird eine MessageBox mit einem Fehlerhinweis ausgegeben. Anschließend möchte ich den eingegeben Text in Edit1 markieren. Da Edit1 nach der Messagebox nicht mehr den Fokus hat, habe ich folgende
Anweisungen eingefügt:
Quelltext 1: 2:
| Edit1.SetFocus; Edit1.SelectAll; |
Das funktioniert aber nicht! Es funktioniert nur, wenn ich zwischenzeitlich ein anderes Steuerelement fokussiere, wie z.B.:
Quelltext 1: 2: 3:
| Listbox1.SetFocus; Edit1.SetFocus; Edit1.SelectAll; |
Warum ist das so ?
Gruß,
chall_de
|
|
matze.de
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Mo 07.02.05 13:48
Hi, und  im DF.
das kommt daher, wenn ein TEdit den focus von einer anderen kompo bekommt markiert er automatisch den ganzen text. bei dir müsstest du das so machen:
Delphi-Quelltext 1: 2: 3: 4:
| Edit1.SetFocus; Edit1.SelStart := 0; Edit1.SelLength := Length(Edit1.Text); Edit1.SelectAll; |
Als erstes setzt du den fokus dann setzt du SelStart und SelLength und mit SelectAll selektierst du.
//Edit: Es kann auch sein, nein ich glaube sogar, dass ich grade viel *mist*e gesagt hab ;D
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Mo 07.02.05 14:04
@Matze: Nicht ganz.
SelectAll selektiert alles. Dabei wird das vorher selektierte überselektiert.
SelectStart setzt den Cursor an die entsprechende Stelle im Edit.
SelectEnd selektiert X zeichen. Angefangen wird bei SelectStart
chall_de. Ich denke mal, dass dein Feld vermeindlich noch selektiert ist. War das Fenster zu dem Zeitpunkt aktiviert? Wenn ja, dann solltest du einmal den Fokus expliziert auf etwas anderes setzen und dann wieder zurück auf das Edit.
Delphi-Quelltext 1: 2:
| Form1.SetFocus; Edit1.SetFocus; |
Sollte das Fenster nicht mehr aktiv sein dann genügt ein aufruf von.
Delphi-Quelltext
Das anschließende SelectAll kannst du dir sparen, da das Edit das automatisch macht sobald du es selektierst.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
chall_de 
      
Beiträge: 23
WIN 2000, WIN XP
|
Verfasst: Mo 07.02.05 14:51
Hallo,
@Matze:
Die Verwendung von SelStart und SelLength bringt das gleiche Ergebnis. Wenn ich nicht zuerst den Fokus auf eine andere Komponente setze, wird gar nichts markiert !!!
@Lossy eX
Wenn ich direkt nach der Messagebox abfrage ob Edit1 den Fokus hat (Edit1.focused), dann erhalte ich ein False, nach dem Befehl
Quelltext
erhalte ich bei der Abfrage wieder ein False. Edit1 erhält erst wieder den Fokus, wenn ich zwischendurch eine andere Komponente fokussiert habe !
Warum ist mir absolut unverständlich!
Gruß,
chall_de
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Mo 07.02.05 15:04
Deswegen meinte ich ja auch, dass du vor Edit1.SetFocus einmal Form1.SetFocus aufrufen sollst. So wird erst noch einmal expliziet eine andere Komponente fokusiert. Hattest du das mal probiert?
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
chall_de 
      
Beiträge: 23
WIN 2000, WIN XP
|
Verfasst: Mo 07.02.05 15:39
Hallo,
mit Form1.SetFocus vorher funktioniert es nicht, wohl aber mit Listbox1.SetFocus oder Button1.SetFocus! Das ist es, was ich nicht verstehe !
Gruß,
chall_de
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Mo 07.02.05 16:05
Das wundert mich allerdings auch ein bisschen. Das habe ich nämlich schon 1-2 Mal verwendet. Also wenn mich meine restlichen Gehirnzellen nicht vollkommen verlassen haben. Aber okay. Wäre ja keine SoftwareEntwicklung wenn es nicht mehrere Lösungen dafür geben würde.
Wenn du ein Panel auf deinem Formular hast dann kannst du Panel1.SetFocus machen. Dadurch, dass das normal keinen Focus darstellt ist natürlich auch keiner zu sehen.
Die andere alternative wäre Windows.SetFocus(0). Damit kannst du den aktuellen Fokus löschen. Das sollte in etwas genau so gut gehen wie woanders hinsetzen.
Und zu guter letzt halt wieder den Fokus auf dein Eingabefeld setzen. Allerdings verstehe ich nicht warum der da überhaupt verschwindet. Kannst du bitte mal den Code posten wo du das prüfst ob es sich um eine sinnvolle Zahl handelt?
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
chall_de 
      
Beiträge: 23
WIN 2000, WIN XP
|
Verfasst: Di 08.02.05 13:10
Hallo Lossy eX,
anbei der Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| function isInteger(value : String): Boolean; } begin try StrToInt(value); result := true; except result := false; end; end;
... if IsInteger(Edit1.Text) then begin ... Edit1.Text:=''; end else begin Application.MessageBox ('Keine Integer-Zahl!','Fehler',16); Listbox1.SetFocus; Edit1.SetFocus; Edit1.SelectAll; end; ... |
Gruß,
call_de
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Di 08.02.05 21:13
Da muss ich ehrlich auch passen. Sorry.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|