Cavas.Clear

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

Cavas.Clear

Beitragvon Mathias » 26. Mär 2015, 18:58 Cavas.Clear

Ich habe nacktes Fenster mit einem Button.

Klicke ich einmal auf den Button, bleibt das Fenster unverändert grau, so wie erwartet.
Klickt man zwei oder mehr mal wir das Fenster weiss.
Vergrössert ich es anschliessend, wird es wieder grau.

Ändere ich Color, z.B. auf rot, egal ob über FormCreate oder im Objectinspector, dann bleibt das Fenster immer rot, egal wie viel ich klicke.

Ist dies ein Bug ?

Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Clear;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
//  color:=$ff;
end;     
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4506
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 26. Mär 2015, 19:02 Re: Cavas.Clear

Auf den Canvas sollte man nur im OnPaint Ereignis zugreifen.
theo
 
Beiträge: 8255
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 26. Mär 2015, 19:58 Re: Cavas.Clear

Im OnPaint bleibt das Fenster weiss.
Code: Alles auswählen
procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Clear;
end;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4506
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 26. Mär 2015, 20:08 Re: Cavas.Clear

Ich kapier nicht, was du erreichen willst.
theo
 
Beiträge: 8255
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 26. Mär 2015, 22:19 Re: Cavas.Clear

Ich wollte etwas probieren und dann bin ich auf diesen Effekt gestossen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4506
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 26. Mär 2015, 22:27 Re: Cavas.Clear

Mathias hat geschrieben:Ich wollte etwas probieren und dann bin ich auf diesen Effekt gestossen.


Welcher Effekt?
Kannst du nicht sagen, was du erwartest und warum und was dann effektiv passiert, was nicht deiner Erwartung entspricht?

Ich verstehe dich nicht. Du sagst: "Im OnPaint bleibt das Fenster weiss."
Ja, und jetzt? Was soll es denn dMn werden?
theo
 
Beiträge: 8255
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 26. Mär 2015, 22:33 Re: Cavas.Clear

Ja, und jetzt? Was soll es denn dMn werden?

Grau bleiben, so wie es im Formular-Designer ist.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4506
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 26. Mär 2015, 22:35 Re: Cavas.Clear

Dann solltest du kein Canvas.Clear aufrufen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
Lazarusforum e. V.
 
Beiträge: 2185
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (Lazarus 2.0, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Socke » 26. Mär 2015, 22:37 Re: Cavas.Clear

Mathias hat geschrieben:
Ja, und jetzt? Was soll es denn dMn werden?

Grau bleiben, so wie es im Formular-Designer ist.

In der Regel sollte man keine Annahmen über den bisherigen Status des Canvas (inklusive Brush und Pen) machen.
Daher: Farbe setzen.
Code: Alles auswählen
  Canvas.Brush.Color := Self.Color;
  Canvas.Clear;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2686
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon m.fuchs » 26. Mär 2015, 22:42 Re: Cavas.Clear

Die Frage nach der Sinnhaftigkeit stellt sich allerdings. Warum sollte man das überhaupt tun?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
Lazarusforum e. V.
 
Beiträge: 2185
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (Lazarus 2.0, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon theo » 26. Mär 2015, 22:51 Re: Cavas.Clear

m.fuchs hat geschrieben:Die Frage nach der Sinnhaftigkeit stellt sich allerdings. Warum sollte man das überhaupt tun?


Wieso nicht?
Bevor man neu zeichnet (OnPaint) kann man doch den Canvas löschen.
Ich hatte Canvas.Clear zwar nicht auf dem Radar. Ich mache immer Canvas.FillRect(...), kommt aber auf das selbe raus.
theo
 
Beiträge: 8255
Registriert: 11. Sep 2006, 18:01

Beitragvon m.fuchs » 26. Mär 2015, 23:07 Re: Cavas.Clear

Ist das notwendig? Wenn ein OnPaint ausgelöst wird, sollte doch alles wieder gelöscht sein.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
Lazarusforum e. V.
 
Beiträge: 2185
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (Lazarus 2.0, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon theo » 26. Mär 2015, 23:38 Re: Cavas.Clear

m.fuchs hat geschrieben:Ist das notwendig? Wenn ein OnPaint ausgelöst wird, sollte doch alles wieder gelöscht sein.


Ja, kann sein. Ich weiss auch nicht mehr, in welchem Szenario ich das gemacht habe. Vllt fällt es mir morgen ein. :wink:
theo
 
Beiträge: 8255
Registriert: 11. Sep 2006, 18:01

Beitragvon Warfley » 27. Mär 2015, 00:22 Re: Cavas.Clear

Canvas.Clear überschreibt alles mit der Brush Color, daher weiß. Bei Resize wird die Form/Control neu gezeichnet, was dazu führt dass deine zeichnung wieder überschrieben wird, daher sollte man im OnPaint ereignis zeichnen, um auf den ReDraw Call der Anwendung "abzufangen".

Warum es 2 versuche Braucht zum Clearen weiß ich auch nicht, ich habs mit einem Bitmap getestet, hat auch 2 Clear aufrufe benötigt keine Ahnung warum

PS: Beispiel Bitmaps zeichnen, die werden sonst nicht gelöscht ;)
Warfley
 
Beiträge: 12
Registriert: 8. Mai 2011, 08:21

Beitragvon theo » 27. Mär 2015, 10:32 Re: Cavas.Clear

theo hat geschrieben:
m.fuchs hat geschrieben:Ist das notwendig? Wenn ein OnPaint ausgelöst wird, sollte doch alles wieder gelöscht sein.


Ja, kann sein. Ich weiss auch nicht mehr, in welchem Szenario ich das gemacht habe. Vllt fällt es mir morgen ein. :wink:


Jetzt weiß ich wieder, wie ich drauf komme. :)
Ich zeichne normalerweise erst auf ein Buffer Bitmap und dieses muss man natürlich überpinseln.
Beim direkt auf einen Control Canvas zeichnen ist das afaik nicht nötig.
theo
 
Beiträge: 8255
Registriert: 11. Sep 2006, 18:01

• Themenende •

Zurück zu Lazarus - Bugs



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried