OnEditingDone

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

OnEditingDone

Beitragvon paulderfinne » 21. Jul 2015, 17:59 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?
paulderfinne
 
Beiträge: 63
Registriert: 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon af0815 » 21. Jul 2015, 18:43 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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3266
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon paulderfinne » 21. Jul 2015, 19:53 Re: OnEditingDone

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.


Ohjee. Da kenne ich mich nicht aus? Habe nun versucht Cleanup and Builds. Und prompt bin ich auf einenFehler gestoßen:

Can't call ressourcecopmpiler /usr/bin/fpres ...

Das Programm ist natürlich vorhanden ..
paulderfinne
 
Beiträge: 63
Registriert: 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon baumina » 22. Jul 2015, 06:20 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.
.
baumina
 
Beiträge: 152
Registriert: 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon paulderfinne » 22. Jul 2015, 11:07 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.
paulderfinne
 
Beiträge: 63
Registriert: 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Michl » 22. Jul 2015, 11:29 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; 
Michl
 
Beiträge: 2187
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon paulderfinne » 22. Jul 2015, 11:52 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.
paulderfinne
 
Beiträge: 63
Registriert: 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon paulderfinne » 22. Jul 2015, 16:42 Re: OnEditingDone

test_laz.zip
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')
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
paulderfinne
 
Beiträge: 63
Registriert: 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Michl » 22. Jul 2015, 20:47 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.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2187
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon paulderfinne » 23. Jul 2015, 06:21 Re: OnEditingDone

Michl hat geschrieben:Es scheint mir nicht günstig im Ereignis OnEditingDone ein ShowMessage aufzurufen.

Hatte ich nur gemacht, um zu demonstrieren, was passiert.
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.

Das verstehe wer will.
Michl hat geschrieben:Stellst du also im Objektinspektor Default vom Ende_Button wieder auf False wird er nicht durch das <Enter> vom TEdit aufgerufen.

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 Dank
paulderfinne
 
Beiträge: 63
Registriert: 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon baumina » 23. Jul 2015, 06:34 Re: OnEditingDone

Den Hinweis mit Default=True hatte ich dir gestern schon gegeben.
.
baumina
 
Beiträge: 152
Registriert: 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

• Themenende •

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried