OnEditingDone
-
- Beiträge: 65
- Registriert: Mi 27. Feb 2013, 18:24
- OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
- CPU-Target: 32Bit
OnEditingDone
Ein beherztes Hallo in die Runde,
während ich hier sitze und wie der Teufel schwitze... (Reim,haha)
habe ich ein sehr merkwürdiges Problem. In einer etwas größeren Anwendung habe ich in einer Form einif´ge edit-Felder und einige Buttons. In einem der Edit-Felder springe icg per OnEditingDone in ein Procedure. Wenn ich nun in diesem Feld die ENTER-Taste drücke, springt das Programm aber in eine ganz andere Procedure, die das Programm schließt. Das noch merkwürdigere ist, dass ich fast die gleichen procedurues in einer anderen Form habe und dort funzt alles einwandfrei. Ich sitze nun schon den ganzen ZTag drüber und brüte. Meist ist soiwas ja ein Progrmmfehler, aber diesmal sihet das sehr komisch aus. Nachvollziehen kann ich das in einem Minmalbeispiel auch nicht.
Meine Frage wäre also: kennt jemand einen Bug in dieser Art?
bzw.:
Gibt es ein unterschiedliches Verrhalten, wenn man ein Edit-Feld per Mouse oder Tab-Taste einerseits und die ENTER_Taste andererseits verlässt?
während ich hier sitze und wie der Teufel schwitze... (Reim,haha)
habe ich ein sehr merkwürdiges Problem. In einer etwas größeren Anwendung habe ich in einer Form einif´ge edit-Felder und einige Buttons. In einem der Edit-Felder springe icg per OnEditingDone in ein Procedure. Wenn ich nun in diesem Feld die ENTER-Taste drücke, springt das Programm aber in eine ganz andere Procedure, die das Programm schließt. Das noch merkwürdigere ist, dass ich fast die gleichen procedurues in einer anderen Form habe und dort funzt alles einwandfrei. Ich sitze nun schon den ganzen ZTag drüber und brüte. Meist ist soiwas ja ein Progrmmfehler, aber diesmal sihet das sehr komisch aus. Nachvollziehen kann ich das in einem Minmalbeispiel auch nicht.
Meine Frage wäre also: kennt jemand einen Bug in dieser Art?
bzw.:
Gibt es ein unterschiedliches Verrhalten, wenn man ein Edit-Feld per Mouse oder Tab-Taste einerseits und die ENTER_Taste andererseits verlässt?
- af0815
- Lazarusforum e. V.
- Beiträge: 6779
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: OnEditingDone
Die Check und Assertione sind eingeschalten ? Besonder Range und Overflow ? Und einmal Cleanup and Build.
Damit man mal Schnitzer ausschalten kann, die der Compiler bzw. die Laufzeitumgebung finden kann.
Damit man mal Schnitzer ausschalten kann, die der Compiler bzw. die Laufzeitumgebung finden kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 65
- Registriert: Mi 27. Feb 2013, 18:24
- OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
- CPU-Target: 32Bit
Re: OnEditingDone
Ohjee. Da kenne ich mich nicht aus? Habe nun versucht Cleanup and Builds. Und prompt bin ich auf einenFehler gestoßen:af0815 hat geschrieben:Die Check und Assertione sind eingeschalten ? Besonder Range und Overflow ? Und einmal Cleanup and Build.
Damit man mal Schnitzer ausschalten kann, die der Compiler bzw. die Laufzeitumgebung finden kann.
Can't call ressourcecopmpiler /usr/bin/fpres ...
Das Programm ist natürlich vorhanden ..
-
- Beiträge: 152
- Registriert: Mo 3. Feb 2014, 14:07
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: OnEditingDone
Vielleicht hast du beim einem Button den ModalResult auf mrOK und Default=True. Default=True würde auf die ENTER-Taste reagieren und mrOK würde das Fenster schließen.
.
-
- Beiträge: 65
- Registriert: Mi 27. Feb 2013, 18:24
- OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
- CPU-Target: 32Bit
Re: OnEditingDone
Hallo und danke für euren Einsatz.
Ich habe cleanuo and build gemacht. Keine Veränderung. Und nein, alle meine Buttons haben bei Modalresult MrNone. Das Verhalten ist ja auich nciht bei einem Button, sondern bei einem Edit-Feld. Dieses Feld hat als einzige Änderung upper-Case eingescchaltet. Aber daran liegt es bestimmt nicht.
Ich habe cleanuo and build gemacht. Keine Veränderung. Und nein, alle meine Buttons haben bei Modalresult MrNone. Das Verhalten ist ja auich nciht bei einem Button, sondern bei einem Edit-Feld. Dieses Feld hat als einzige Änderung upper-Case eingescchaltet. Aber daran liegt es bestimmt nicht.
Re: OnEditingDone
Ohne Code wird die Suche nach dem Fehler hier im Forum wahrscheinlich nicht gelingen. Ich persönlich finde soetwas immer sehr spannend und suche gern solche Mysteriösitäten. Dazu erstelle ich eine Kopie vom Originalprojekt und reduziere dieses solange, bis nur noch der Fehler übrig bleibt. Entweder ich kann diesen dann selber beheben oder frage hier oder anderswo nach.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 65
- Registriert: Mi 27. Feb 2013, 18:24
- OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
- CPU-Target: 32Bit
Re: OnEditingDone
Ja, Michl du hast ja so recht. Damit hatte ich gestern schon begonnen, aber irgendwie war die Hitze schuld oder ich war schon derart niedergeschlagen, dass ich da nur noch Fehler produziert habe. Werde mich aber demnächst dran machen, so eine Minimalanwendung herzustellen.
-
- Beiträge: 65
- Registriert: Mi 27. Feb 2013, 18:24
- OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
- CPU-Target: 32Bit
Re: OnEditingDone
So, nun habe ich das Programm in der Tat reduzieren können. Es sind nur noch eine Editfläche und ein Button übrig. Verlässt man die Editfläche mit ENTER, dann springt das Programm in die procedure, die eigentlich für den Ende-Button vorgesehen ist -> Showmessage('nurfoo'), wenn man die Fläche hingegen mit TAB verlässt springt es in die vorgesehene procedure -> showmessage('foobar')
Re: OnEditingDone
Es scheint mir nicht günstig im Ereignis OnEditingDone ein ShowMessage aufzurufen. Da das Aufräumen des TEdits noch nicht beendet ist, wird beim Schließen der Message mit <Enter> wieder ein OnEditingDone gefeuert. Man erhält somit eine schöne Endlosschleife.
Da du aber vom Button.Default auf True gesetzt hast, wird das <Enter> an den Button gesendet.
Stellst du also im Objektinspektor Default vom Ende_Button wieder auf False wird er nicht durch das <Enter> vom TEdit aufgerufen.
Nutzt du statt OnEditingDone z.B. OnExit vom TEdit verschwindet auch die Endlosschleife.
Da du aber vom Button.Default auf True gesetzt hast, wird das <Enter> an den Button gesendet.
Stellst du also im Objektinspektor Default vom Ende_Button wieder auf False wird er nicht durch das <Enter> vom TEdit aufgerufen.
Nutzt du statt OnEditingDone z.B. OnExit vom TEdit verschwindet auch die Endlosschleife.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 65
- Registriert: Mi 27. Feb 2013, 18:24
- OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
- CPU-Target: 32Bit
Re: OnEditingDone
Hatte ich nur gemacht, um zu demonstrieren, was passiert.Michl hat geschrieben:Es scheint mir nicht günstig im Ereignis OnEditingDone ein ShowMessage aufzurufen.
Das verstehe wer will.Michl hat geschrieben: Da das Aufräumen des TEdits noch nicht beendet ist, wird beim Schließen der Message mit <Enter> wieder ein OnEditingDone gefeuert. Man erhält somit eine schöne Endlosschleife.
Da du aber vom Button.Default auf True gesetzt hast, wird das <Enter> an den Button gesendet.
OK. Vielen Dank. Das habe ich nun getan und tatsächlich, das Programm reagiert wieder normal. Das Umstellen der Eigenschaft default auf True muss aus Versehen geschehen sein. Wie auch immer jetzt tuts. Also: Vielen DankMichl hat geschrieben: Stellst du also im Objektinspektor Default vom Ende_Button wieder auf False wird er nicht durch das <Enter> vom TEdit aufgerufen.