[Gelöst] TToggleBox.Checked vs. Form.Color im Event OnPaint

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.

[Gelöst] TToggleBox.Checked vs. Form.Color im Event OnPaint

Beitragvon Michl » 19. Mai 2014, 21:34 [Gelöst] TToggleBox.Checked vs. Form.Color im Event OnPaint

Hallo allerseits,

habe eben im Wiki die Seite für die TToggleBox bearbeitet und ein Beispiel http://wiki.freepascal.org/TToggleBox/de#Verwendung erstellt (als Zip beigefügt). Dabei ist mir der Bug aufgefallen, dass wenn eine ToggleBox.Checked=True ist, dass:
- sich die Prozessortätigkeit extrem erhöht
- wechselt man von einer Anwendung zurück auf diese, werden die Toggleboxen nicht gemäß ihrem Zustandes gezeichnet, sondern immer als nicht checked oder manchmal auch gar nicht gezeichnet
- die Anwendung / das Formular sich nicht schließen lässt

Kann jemand das Verhalten bestätigen bzw. wie verhält es sich auf anderen Systemen?!

Getestet unter:
Win7, 64bit, Lazarus 1.2.2 32bit mit FPC 2.6.4
Win7, 64bit, Lazarus 1.3 32bit Rev. 45097M FPC 2.7.1 Rev. 27805
Dateianhänge
ToggleBoxTest.zip
(125.24 KiB) 14-mal heruntergeladen
Zuletzt geändert von Michl am 20. Mai 2014, 10:18, insgesamt 1-mal geändert.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2330
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 hde » 19. Mai 2014, 22:59 Re: TToggleBox.Checked

ja, da klemmt was gewaltig
hde
 
Beiträge: 556
Registriert: 11. Aug 2010, 01:56

Beitragvon Michl » 20. Mai 2014, 09:29 Re: TToggleBox.Checked

Ich nehme alles zurück und behaupte das Gegenteil. Es ist kein Problem mit den Toggleboxen, wie gestern abend von mir vermutet, sondern ein Problem der Zuweisung von <Form>.Color!
Code: Alles auswählen
procedure TForm1.FormPaint(Sender: TObject);
begin
  Color:=$FF0000;
  Color:=$00FF00; 
end;

Sobald man mehr als einmal die Poperty Color vom Formular ändert, hängt sich das Programm auf.

Darf man das nicht oder ist das ein Bug?

Ist das nur unter Win7 so oder auch unter anderen Betriebsystemen?!
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2330
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 wp_xyz » 20. Mai 2014, 09:36 Re: TToggleBox.Checked

Ich denke, das Problem liegt darin, dass du die Farbe ausgerechnet in der Paint-Eventbehandlung änderst, und könnte mir vorstellen, dass dies ein erneutes Neuzeichnen bewirkt. Wenn du die Farbe nicht bei einem anderem Ereignis ändern kannst, funktioniert es vielleicht,den OnPaint-Handler vorübergehend auszuhängen:
Code: Alles auswählen
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  OnPaint := nil;
  Color:=$FF0000;
  Color:=$00FF00; 
  OnPaint := @FomrPaint;
end;
wp_xyz
 
Beiträge: 3123
Registriert: 8. Apr 2011, 08:01

Beitragvon Michl » 20. Mai 2014, 09:45 Re: TToggleBox.Checked

Kann ich nachvollziehen, ist ja schließlich ein Property...

Code: Alles auswählen
procedure TForm1.FormPaint(Sender: TObject);
begin
  OnPaint := nil;
//  Self.BeginFormUpdate;
  Color:=$FF0000;
  Color:=$00FF00;
//  Self.EndFormUpdate;
  OnPaint := @FormPaint;
end;
funktioniert nicht.

Edit: ich sehe das Ganze als Feature!

Mein Beispiel habe ich jetzt geändert zu:
Code: Alles auswählen
procedure TForm1.ToggleBox1Click(Sender: TObject);
var
  aColor: TColor;
begin
  aColor:=0;
  if ToggleBox1.Checked then aColor:=aColor + $0000FF;
  if ToggleBox2.Checked then aColor:=aColor + $00FF00;
  if ToggleBox3.Checked then aColor:=aColor + $FF0000;
  Color:=aColor;
end;
Änderung <Form>.Color führt automatisch zum Neuzeichnen -> ein "RePaint" ist nicht notwendig! Habs entsprechend im Wiki vermerkt.

Danke wp_xyz!
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2330
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

• Themenende •

Zurück zu Lazarus - Bugs



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried