Lazarus Bug? - TCheckGroup.Items.Insert( [Gelöst]

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Lazarus Bug? - TCheckGroup.Items.Insert( [Gelöst]

Beitrag von MmVisual »

Hallo,

In Lazarus V2.0.10 habe ich bei TCheckGroup einen Bug gefunden.
Bugticket ist erstellt:
https://bugs.freepascal.org/view.php?id=38157

Formular mit dem code:

Code: Alles auswählen

  TForm1 = Class(TForm)
    Button1: TButton;
    CheckGroup1: TCheckGroup;
    Procedure Button1Click(Sender: TObject);
    Procedure FormCreate(Sender: TObject);
  End; 
  
Procedure TForm1.Button1Click(Sender: TObject);
Begin
  CheckGroup1.Items.Insert(0, 'Nr 1');
  CheckGroup1.Checked[0] := True;
end;

Procedure TForm1.FormCreate(Sender: TObject);
Var i: Integer;
Begin
  For i := 0 To CheckGroup1.Items.Count - 1 Do
    CheckGroup1.Checked[i] := True;
end;    
Wobei CheckGroup1 im Designer bereits 4 Einträge hat und der Button1 fügt zu Anfang per Insert noch 1 Item hinzu.

In FormCreate werden alle Häkchen gesetzt.
Button1 fügt 1 Item hinzu und setzt Checked[0] auf True.
Ergebnis:
Das Insert fügt zwar in der Liste zu Anfang ein Item hinzu, jedoch werden die Checked[] nicht mit verschoben, dadurch ist das letzte Checked[4] FALSE.
TestTCheckGroup.zip
(125.2 KiB) 22-mal heruntergeladen
BildschirmVideo.zip
(303.64 KiB) 22-mal heruntergeladen
Dankeschön, Markus.
Zuletzt geändert von MmVisual am Mi 2. Dez 2020, 20:28, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 2902
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lazarus Bug? - TCheckGroup.Items.Insert(

Beitrag von Socke »

Kann ich mit Lazarus 2.0.6 bestätigen.

Nachtrag: Die Ursache ist mir jetzt auch klar.
Die Texte der Checkboxen werden in einer StringList während die der Checked-Status an den Checkboxen selbst gespeichert wird.
Ändert man die StringList, werden recht naiv zu viele CheckBoxen gelöscht oder neue angelegt und die Texte gemäß Listen-Index aktualisiert. Der Checked-Status kann so natürlich nicht weitergegeben werden, zumal gar nicht bekannt ist, an welcher Position einer oder mehrere Texte eingefügt wurden.

Melde hierzu am besten einen Bug, auch wenn ich nicht davon ausgehe, dass dieser kurzfristig behoben wird. Bis dahin wirst du dir den Checked-Status in der Anwendung merken, anpassen und wiederherstellen müssen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Lazarus Bug? - TCheckGroup.Items.Insert(

Beitrag von MmVisual »

Ja, ich habe mir schon ein Workaround "gebastelt", zwar nicht wirklich das effizienteste von der Laufzeit her, aber einfach...

Code: Alles auswählen

      s := '';
      For i := 0 To chkGrp.Items.Count - 1 Do
        If chkGrp.Checked[i] Then s := s + '1' Else s := s + '0';
      chkGrp.Items.Insert(0, 'Neues Element');
      chkGrp.Checked[0] := True;
      For i := 1 To chkGrp.Items.Count - 1 Do
        chkGrp.Checked[i] := s[i] = '1';
Bugticket ist geschrieben...

Dankeschön.

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

Re: Lazarus Bug? - TCheckGroup.Items.Insert(

Beitrag von wp_xyz »

Socke hat geschrieben:
Di 1. Dez 2020, 08:51
auch wenn ich nicht davon ausgehe, dass dieser kurzfristig behoben wird.
Hey, nicht so pessimistisch. Wenn 90 Minuten bis zum Fix in r64168 nicht "kurzfristig" sind, was dann?

MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Lazarus Bug? - TCheckGroup.Items.Insert(

Beitrag von MmVisual »

Thx WP!

Ich brauche leider etwas länger als 90Min um das zu testen...

Mache ich heute Abend (mit FpcUpDeluxe den Trunk laden)

Socke
Lazarusforum e. V.
Beiträge: 2902
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lazarus Bug? - TCheckGroup.Items.Insert(

Beitrag von Socke »

wp_xyz hat geschrieben:
Di 1. Dez 2020, 10:24
Hey, nicht so pessimistisch. Wenn 90 Minuten bis zum Fix in r64168 nicht "kurzfristig" sind, was dann?
Ich hätte nicht gedacht, dass die Lösung so einfach ist. Wirklich performant bei vielen Einfügeoperationen scheint sie nicht zu sein - wenn es aber darauf ankommt, ist Insert(0, ...) ohnehin falsch.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten