Ich habe jetzt herausgefunden, dass es zu Fehlern kommt, da im Schritt-für-Schritt Modus nur der Thread angehalten wird.
Die Hauptunit greifft nach wie vor im hohen Intervall auf ein Bild zu, um es zu malen, wodurch es bei Größenänderungen zu Fehlermeldungen kommt.
Jetzt muss ich nurnoch herausfinden, wieso das geschieht, obwohl die Bitmap deren Größe geändert wird nicht dieselbe ist wie die, die gemalt wird
Der Code hier scheint den EOutofresource-Fehler aka "Bitmap wird bereits benutzt" zu umgehen.
Vermutlich kann man das auch durch Synchronisierung vermeiden.
Delphi-Quellcode:
Procedure TForm1.ZeichneBild;
begin
image1.Canvas.Draw(0,0,PaintThread.Getbild);
PaintThread.SetExport;
end;
procedure TPaintThread.Execute;
begin
while (Terminated = False) do
begin
if (Paint = True) then //Soll gezeichnet werden?
begin
Bearbeitend := True;
if (Exportierend = False) then //Wird exportiert?
begin
MyBild.canvas.unlock; //Nicht sicher ob nötig
Mybild.Width := random(5000) + 5000; //Fehlerquelle
Mybild.Height := random(5000) + 5000; //Fehlerquelle
MyBild.Canvas.Rectangle(0, 0, random(999) + 1, random(999) + 1);
Bearbeitend := False;
Paint := False;
end
else
begin
Bearbeitend := False;
While (Exportierend = True) do
begin
//Bis das Bild fertig exportiert wurde
end;
end;
end
else
sleep(1);
end;
end;
function TPaintThread.Getbild : TBitmap;
begin
Exportierend := True;
if (Bearbeitend = False) then //Wird Bild bearbeitet?
begin
MyBild.Canvas.Unlock; //Nicht sicher ob nötig
result := MyBild;
end
else
begin
Exportierend := False;
While (Bearbeitend = True) do
begin
//Warte, bis die Bearbeitung abgeschlossen ist
end;
result := Getbild;
end;
end;
procedure TPaintThread.SetExport;
begin
Exportierend := False;
Paint := True;
end;