Dein Code enthält leider einige Fehler.
1.) im OnPaint-Event
procedure TForm1.PaintBox1Paint
darf nur gezeichnet werden und nichts anderes
Zum Beispiel ist diese Grössenanpassung
Delphi-Quellcode:
//Paintbox an Panel
PainBox1.Height:=Blatt.Height;
PaintBox1.Width:=Blatt.Width;
verboten. Man muss das schon viel früher ausführen.
Aber Besten man setzt das Property Align der Paintbox auf alClient und spart sich die Zuweisung von Breite und Höhe.
2.) du erzeugst dynamisch eine Paintbox
Delphi-Quellcode:
// Paintbox erstellen
PaintBox1:=TPaintbox.Create(self);
PaintBox1.Parent:=Panel1;
Das geht gar nicht, denn die Paintbox muss natürlich schon früher erzeugt worden sein.
Wenn du innerhalb von OnPaint eine neue Paintbox erzeugst ist das natürlich tödlich.
Du hast zwei verschiedene Paintboxen (wobei eine sinnigerweise
Painbox1 also auf Deutsch: "SchmerzBox1" heisst
) was ziemlich verwirrend ist.
Hier mal der bereinigte Code für nur eine Paintbox:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var Schrift: string;
canvas : TCanvas;
begin
// zuerst den Canvas der Paintbox holen
canvas := (Sender as TPaintBox).Canvas;
// auch folgende Schreibweise wäre möglich
canvas := PaintBox1.Canvas;
// Paintbox weiß färben
canvas.brush.color:=clwhite;
canvas.FillRect(Rect(0,0,PaintBox1.width,PaintBox1.height));
// Textausgabe
canvas.Brush.Color := clBlack;
Schrift:= 'Hallo Welt';
canvas.TextOut((PaintBox1.Width div 2)-25, 70,Schrift);
end;