Ok ich habs mal probiert so testweise.
Wenn ich folgendes mache (ohne Threads) :
Delphi-Quellcode:
procedure TForm1.Snow(image: Timage);
var
i,j,r:integer;
begin
For i := 1
to Image.Width
do
For j := 1
to Image.height
do begin
r := random(256);
Image.Canvas.Pixels[i,j] :=
RGB(r,r,r);
application.ProcessMessages;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
Snow(Image);
end;
Ich starte das Programm, und wenn die Form erscheint, dann ist bereits das fertig gezeichnete Bild zu sehen.
Wenn ich jetzt aber ein Thread-Object erstelle :
Delphi-Quellcode:
constructor Tsnow.Create(image: TImage);
begin
FImage := image;
inherited Create(False);
end;
procedure Tsnow.Execute;
begin
Snow(FImage);
end;
procedure Tsnow.SetPixels;
var
r : Integer;
begin
r := Random(256);
FImage.Canvas.Pixels[FX,FY] :=
RGB(r,r,r)
end;
procedure Tsnow.Snow(image: Timage);
var
i,j:integer;
begin
For i := 1
to FImage.Width
do
For j := 1
to FImage.height
do begin
FX := i;
FY := j;
Synchronize(SetPixels);
application.ProcessMessages
end;
end;
und dieses dann erzeuge mit :
tsnow.Create(Image);
dann kann ich schön zugucken, wie Linie für Linie gezeichnet wird und es dauert etwa 20 Sekunden bis das Image gefüllt ist....
Mache ich was falsch?