OnEditingDone

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
paulderfinne
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

Beitrag von paulderfinne »

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?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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

Beitrag von af0815 »

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).

paulderfinne
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

Beitrag von paulderfinne »

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 ..

baumina
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

Beitrag von baumina »

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.
.

paulderfinne
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

Beitrag von paulderfinne »

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.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: OnEditingDone

Beitrag von Michl »

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; 

paulderfinne
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

Beitrag von paulderfinne »

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: 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

Beitrag von paulderfinne »

test_laz.zip
(907.33 KiB) 67-mal heruntergeladen
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')

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: OnEditingDone

Beitrag von Michl »

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; 

paulderfinne
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

Beitrag von paulderfinne »

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

baumina
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

Beitrag von baumina »

Den Hinweis mit Default=True hatte ich dir gestern schon gegeben.
.

Antworten