OnClick bei Menu-RadioButtons doppelt

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

OnClick bei Menu-RadioButtons doppelt

Beitrag von photor »

Hallo Forum,

Ich habe mir einen kleinen Logger programmiert. Um den Log-Level einzustellen, habe ich ein Menu mit den 4 unterschiedlichen Leveln erstellt, wobei die wie RadioButtons agieren.

Hier ist die Funktion, die an den OnClick-Event des Menus gebunden ist (d.h. genau genommen ist diese Funktion an jeden der 4 Menupunkte gebunden; intern wird dann per case entschieden, was gemacht werden soll):

Code: Alles auswählen

procedure TMainForm.LogLvlMenuItemClick(Sender: TObject);
var
  tag: integer;
  LogLevel: TLogLevel;
begin
  Logger.LogMsg('Log-Level-Change-Event');

  tag := TMenuItem(Sender).Tag;
  case t of
    1:  LogLevel := llFatal;
    2:  LogLevel := llError;
    3:  LogLevel := llDebug;
    4:  LogLevel := llWarn;
  end;

  Logger.LogLevel := LogLevel;
  Logger.LogMsg('Log-Level-Change-Event: Log Level set to: ' + IntToStr(tag));
end; 
Die Funktion logt sich quasi auch selbst. Dabei ist mir aufgefallen, dass der OnClick.Event 2 mal feuert, diese Funktion also doppelt ausgeführt wird (das galt auch schon ohne die Fallunterscheidung).
  • Ist das nur unschön oder mache ich was grundsätzliches falsch?
  • einen anderen (passenden) Event habe ich nicht gefunden. Gibt es einen besser geeigneten?
  • Ich nutze Tags zur Unterscheidung, welcher Punkt geclickt wurde; geht das eleganter? Z.B. über den Zustand, welches Log-Level gerade aktiv ist (ähnlich wie bei RadioButtons)?
Danke für Anregungen,
Photor

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von wp_xyz »

Ich kann das nicht bestätigen (Win 11, Laz 2.2.0/FPC 3.2.2, Laz 2.0.12/FPC3.2.0). Was ist dein Betriebssystem, deine Laz/FPC-Version?

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von photor »

wp_xyz hat geschrieben:
Sa 12. Mär 2022, 20:04
Ich kann das nicht bestätigen (Win 11, Laz 2.2.0/FPC 3.2.2, Laz 2.0.12/FPC3.2.0). Was ist dein Betriebssystem, deine Laz/FPC-Version?
Tagesaktuelles Archlinux mit Lazarus 2.2.0 (Gtk2) und FPC 3.2.2.

Ciao,
Photor

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

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von theo »

Ja, kann ich bestätigen. Sobald es mehr als einen RadioItem gibt, wird das OnClick Event doppelt ausgelöst auf GTK2.
Auf Qt geht's.
-> Bugtracker.

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von photor »

theo hat geschrieben:
Sa 12. Mär 2022, 21:54
Ja, kann ich bestätigen. Sobald es mehr als einen RadioItem gibt, wird das OnClick Event doppelt ausgelöst auf GTK2.
Auf Qt geht's.
Ok. Das ist in sofern gut, als dass ich jetzt nicht suchen muss, warum es ausgerechnet bei mir "doppelt". :wink: An meinem Code liegt's nicht.

Die Frage ist für mich: muss es mich stören oder ist es einfach unschön? Im "Normalbetrieb" wird das Menu nicht sooo oft genutzt/geändert und der Code dahinter ist nicht aufwändig. Es war mir halt nur aufgefallen.
theo hat geschrieben:
Sa 12. Mär 2022, 21:54
-> Bugtracker.
@theo: machst du das mit dem Bugtracker? Hab da bisher keinen Account.

Ciao,
Photor

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

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von theo »

photor hat geschrieben:
So 13. Mär 2022, 09:23
@theo: machst du das mit dem Bugtracker? Hab da bisher keinen Account.
Nö, das ist dein Bug. :wink:
Du kannst auch mit dem Github, Google, Twitter... Account rein.
https://gitlab.com/freepascal.org/lazar ... ate=opened

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von photor »

Hallo Theo,

Ok. Dann muss ich mal schauen, ob ich das hin bekomme.

Und mal buddeln - mir ist so, als hätte ich schon einen GitHub-Zugang.

Ciao,
Photor

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

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von theo »

Hat anscheinend geklappt :D
https://gitlab.com/freepascal.org/lazar ... sues/39674

Vielleicht hättest du noch hervorheben können, dass es (wahrscheinlich) nur ein Problem mit GTK2 ist.
Das wird so ja nur über deine verwendete Lazarus Version angedeutet, wobei man damit auch für Qt etc. bauen kann, wo das Problem ja nicht existiert.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von wp_xyz »

Ich habe noch ein einfaches Test-Projekt angefügt, aber damit kann ich den Fehler nicht bestätigen, auch nicht auf gtk2, und zwar mit Ubuntu.

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

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von theo »

gtk2-devel hat bei mir auf OpenSUSE 15.3
Version: 2.24.32+67-2.28

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von photor »

theo hat geschrieben:
So 13. Mär 2022, 18:42
Hat anscheinend geklappt :D
https://gitlab.com/freepascal.org/lazar ... sues/39674

Vielleicht hättest du noch hervorheben können, dass es (wahrscheinlich) nur ein Problem mit GTK2 ist.
Das wird so ja nur über deine verwendete Lazarus Version angedeutet, wobei man damit auch für Qt etc. bauen kann, wo das Problem ja nicht existiert.
Ok. Probiere morgen mal, ob man noch Infos anfügen kann. Vielleicht kommen ja auch noch Nachfragen (Versionen von was auch immer).

Streng genommen kann ich aber ja auch nur berichten/melden, was ich festgestellt habe. Und nun lese ich hier auch noch, dass der Fehler womöglich nur unter ganz bestimmten Kombinationen von … auftritt … Hm, könnte also schwierig werden, den Bug zu fixieren.

Ciao,
Photor

Sieben
Beiträge: 202
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von Sieben »

Was macht denn bei dir das Testprojekt von wp...? Ich habe damit hier auch keine Doppler.

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

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von theo »

Sieben hat geschrieben:
So 13. Mär 2022, 21:14
Was macht denn bei dir das Testprojekt von wp...? Ich habe damit hier auch keine Doppler.
Stimmt, wp hat aber bei allen den non-standard "Autocheck" und für MenuItem2 "Checked" gesetzt.
Damit geht es hier auch - andernfalls nicht.
Damit kann man wahrscheinlich leben, es verhält sich aber trotzdem anders als auf Qt.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von wp_xyz »

Darum bitte: bei Bug-Reports immer Test-Projekte beifügen. Denn es gibt viele Möglichkeiten, eine Programmieraufgabe anzugehen, vor allem wenn wesentliche Details nicht genannt sind.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: OnClick bei Menu-RadioButtons doppelt

Beitrag von Winni »

Hi!

Der Fehler mit dem mehrfachen Auftreten von events trat schon bei diveren Componenten auf.

Ganz schlimm war es bei Delphi1: Da wurde beim Start Form.resize 3 oder 4 mal ausgeführt.

Um nicht in endlos-Scheifen zu geraten haben wir folgendes gemacht:

Code: Alles auswählen

var lastEvent : qWord = 0;
Und bei jedem Event dann Folgendes:

Code: Alles auswählen

If  getTickCount64 - lastEvent > 100 then
begin
lastEvent := getTickCount64;
.....
end;
So wurde sichergestellt, dass zwischen den events immer mindestens 100 ms lagen und so das zweite Event nicht ausgeführt wurde.

Nicht schön, aber manchmal notwendig, um Proceduren nicht doppelt auszuführen.

Winni

Antworten