[gelöst]Was tun bei: Maybe the component is processing an event?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wennerer
Beiträge: 519
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

[gelöst]Was tun bei: Maybe the component is processing an event?

Beitrag von wennerer »

Hallo an Alle,
ich habe ein kleines Objekt mit blinkendem Text erzeugt (hat einen Timer). Ich kann das aufrufen und dann das Fenster über das x im Systemmenü schließen. Keine Meldung oder Fehler im Debuggfenster.
Das alles in Linux Mint 19.03 und Lazarus 2.0.10 r63673M FPC 3.2.0 x86_64-linux-gtk2.

Wenn ich in der KeyDown nur das Objekt schließen möchte passiert folgendes:
BlinkenderText1.png
BlinkenderText1.png (39.63 KiB) 1332 mal betrachtet
und ich lande in der wincontrol.inc:
BlinkenderText2.png
BlinkenderText2.png (22.89 KiB) 1332 mal betrachtet

Wenn ich das gleiche in der KeyUp mache läuft es ohne Fehlermeldung durch. Ich hab dann aber in der Debuggerausgabe folgenden Text:

Code: Alles auswählen

WARNING: TInfo.Destroy with LCLRefCount>0. Hint: Maybe the component is processing an event?
Heap dump by heaptrc unit of /home/bernd/Sprachen/Lazarus/64_bit/Test/BlinkenderText/Debug/project1
1116 memory blocks allocated : 1697065/1698792
1116 memory blocks freed     : 1697065/1698792
0 unfreed memory blocks : 0
True heap size : 1605632
True free heap : 1605632
Wenn ich es in der MouseDown mache läuft es ohne Fehler oder Meldung!

Weiss hier jemand Rat? Kleine Demo im Anhang.

Viele Grüße
Bernd
Dateianhänge
BlinkenderText.zip
(65.93 KiB) 53-mal heruntergeladen
Zuletzt geändert von wennerer am So 6. Dez 2020, 15:45, insgesamt 2-mal geändert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Was tun bei: Maybe the component is processing an event?

Beitrag von theo »

Probier mal statt FreeAndNil

Code: Alles auswählen

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
 if (Key=VK_RETURN) then
  begin
   if assigned(Info) then begin
    Application.ReleaseComponent(Info);
    Info:=nil;
   end;
  end;
end;    
https://lazarus-ccr.sourceforge.io/docs ... onent.html

wennerer
Beiträge: 519
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Was tun bei: Maybe the component is processing an event?

Beitrag von wennerer »

Hallo Theo,
vielen Dank für deine Antwort. Bei meinen ersten Versuchen scheint es zu klappen.
Herzlichen Dank!
Viele Grüße
Bernd

Edit: Hatte jetzt Zeit nochmal ausgiebig zu testen. Jetzt funktioniert alles wie es soll!!!

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Was tun bei: Maybe the component is processing an event?

Beitrag von Maik81SE »

wennerer hat geschrieben:
So 6. Dez 2020, 11:17
Hallo Theo,
vielen Dank für deine Antwort. Bei meinen ersten Versuchen scheint es zu klappen.
Herzlichen Dank!
Viele Grüße
Bernd

Edit: Hatte jetzt Zeit nochmal ausgiebig zu testen. Jetzt funktioniert alles wie es soll!!!
Schaue mir das dann Mal an unter i386 an.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst]Was tun bei: Maybe the component is processing an event?

Beitrag von theo »

Das Problem ist wahrscheinlich, dass du dem weiteren Key Handling die Komponente unter dem Hintern wegreißt, wenn du sie in "KeyDown" freigibst.
Du reagierst zwar im "TForm1" Code (dank KeyPreview) darauf, aber deine Komponenten hat ziemlich sicher den Eingabefokus.
Mit ReleaseComponent wird die Kompo erst dann freigegeben, wenn keine Messages mehr anstehen.
So ähnlich wird es sein. Vielleicht hat jemand noch eine präzisere Beschreibung, was da passiert.

wennerer
Beiträge: 519
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: [gelöst]Was tun bei: Maybe the component is processing an event?

Beitrag von wennerer »

Hi,
also ich habe es unter Linux 32 sowie Windows 64 und 32 crosscompiliert. Es gab zumindest keine Fehlermeldung.
Unter Linux 64 und Win 32 konnte ich auch nativ testen, also mit Debugger und hatte da keinerlei Meldungen.
Falls aber jemand eine bessere Herangehensweise für meinen blinkenden Text kennt lasse ich mich gerne überzeugen :D .

Viele Grüße
Bernd

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst]Was tun bei: Maybe the component is processing an event?

Beitrag von theo »

@wennerer:
Damit keine Missverständnisse aufkommen:
Mein letzter Beitrag bezog sich auf die Ursachen des ursprünglichen Problems, welches ja mit "ReleaseComponent" offenbar gelöst werden konnte.

Antworten