ich habe hier mal wieder etwas, das mich wahnsinnig macht.
Verwendet wird : fpc 2.7.1, Lazarus Revision 42538, Win7 (64-Bit)
Der Fehler lässt sich wie folgt reproduzieren
1. Programm Starten
2. Fenster Maximieren
3. Checkbox Klicken
Soll : ein Roter Strich von links oben nach Rechts unten
Ist : ein Roter Strich aber nur links oben
Witzigerweise , werden die Schritte 2 und 3 vertauscht funktioniert es (leider mache ich in 99% aller Fälle die Reihenfolge 2,3).
Wenn ich mache
Programm Starten, Maximieren, maximieren rückgängig, maximieren, checkbox klicken
Dann ists wie es soll, generell scheint es ab dem 2. Resize zu gehen..
Kann mir einer von euch weiter helfen / das ganze Reproduzieren ?
Hier noch der Relevante Code aus Unit1:
Code: Alles auswählen
Var
Form1: TForm1;
bm: Tbitmap = Nil;
Implementation
{$R *.lfm}
{ TForm1 }
Procedure TForm1.FormCreate(Sender: TObject);
Begin
bm := Tbitmap.create();
End;
Procedure TForm1.FormResize(Sender: TObject);
Begin
PaintBox1Resize(Nil);
End;
Procedure TForm1.PaintBox1Paint(Sender: TObject);
Begin
If assigned(bm) Then Begin
bm.canvas.Pen.Color := clblack;
bm.canvas.Brush.Color := clwhite;
bm.Canvas.Rectangle(0, 0, bm.Width, bm.Height);
If CheckBox1.Checked Then Begin
bm.Canvas.Pen.Color := clred;
bm.Canvas.Line(0, 0, bm.Width, bm.Height);
End;
PaintBox1.Canvas.Draw(0, 0, bm);
End;
End;
Procedure TForm1.PaintBox1Resize(Sender: TObject);
Begin
If assigned(bm) Then Begin
bm.Width := PaintBox1.Width;
bm.Height := PaintBox1.Height;
End;
//PaintBox1.Invalidate;
form1.Invalidate;
PaintBox1.Refresh;
//PaintBox1.Repaint;
//PaintBox1.AdjustSize; // Sonst passt die Größe evtl. nicht.
//PaintBox1.Invalidate;
//PaintBox1.AdjustSize; // Sonst passt die Größe evtl. nicht.
PaintBox1.OnPaint(Nil); // PaintBox1.Refresh;
application.ProcessMessages;
End;
Procedure TForm1.FormCloseQuery(Sender: TObject; Var CanClose: boolean);
Begin
bm.free;
bm := Nil;
End;
Procedure TForm1.CheckBox1Change(Sender: TObject);
Begin
PaintBox1.OnPaint(Nil); // PaintBox1.Refresh;
End;
End.