Forum: Programmieren allgemein
by Whookie,
1. Sep 2014
Also auch das Beispiel geht bei mir einwandfrei...
procedure TTestThread.Execute;
var
bmp :TBitmap;
i:Integer;
begin
bmp :=TBitmap.Create;
Forum: Programmieren allgemein
by Whookie,
1. Sep 2014
...wie gesagt wenn du korrekt lockst/unlockst geht das (zumindestens bei mir unter xe5) problemlos...
procedure TPaintThread.Execute;
begin
While (Terminated = False) do
begin
MyBild.Canvas.lock;
Original.Canvas.Lock;
Forum: Programmieren allgemein
by Whookie,
1. Sep 2014
Lockst du deinen MyBild.Canvas auch korrekt?
procedure TPaintThread.CalcABitmap(const MyBild: TBitmap);
begin
MyBild.Lock;
try
.. malen bis der bär kommt ..
finally
MyBild.Unlock;
Forum: Programmieren allgemein
by Whookie,
1. Sep 2014
Kommt immer auf den Anwendungsfall an, ich verstehe das Beispiel so, dass in:
procedure TPaintThread.Execute;
begin
While (Terminated = False) do
begin
CalcABitmap(MyBild); // komplexe zeichenoperation...
Synchronize(Zeichnen);
Forum: Programmieren allgemein
by Whookie,
1. Sep 2014
Das bringt nur was wenn vor dem Synchronize eine gaaaaanze menge arbeit passiert ... "zeichnen" bezieht sich hier ja nur auf einen Blit auf den Screen (der ja eigentlich flott sein sollte)
Forum: Programmieren allgemein
by Whookie,
1. Sep 2014
Ich bin mir nicht sicher, aber du bringst da wohl einiges durcheinander?
Zum einen geht nicht hervor wer den nun dein "ZeichneBild" aufruft, über die Synchronize() Routine würde das dann geschehen, wenn es im Thread fertig erstellt ist und du wirst alle deine Probleme los.
Daher die grundsätzliche Frage: Willst du das Bild im Thread erstellen weil es so rechenintensiv ist, dann bist du mit...
Forum: Programmieren allgemein
by Whookie,
12. Aug 2014
Ups ... Delphi 7 ... soweit ich weiß hat sich gerade in den Thread-Klassen einiges getan....
was hier das Problem ist, kann ich so leider nicht sagen...
Ich würde dir empfehlen das ganze mal auszubauen und zu sehen wo das Problem liegt:
procedure TImageRenderer.Execute;
var
ix: Integer;
iy: Integer;
Forum: Programmieren allgemein
by Whookie,
12. Aug 2014
Wenn es nur darum geht nach einem längerem Zeichenprozess das Bild in der MainForm darzustellen könnte man das auch so machen:
constructor TImageRenderer.Create;
begin
inherited Create;
fBmp := TBitmap.Create;
fBmp.SetSize(100, 100);
fBmp.PixelFormat := pf24Bit;
end;