der Demo-code funktioniert fehlerfrei ....
allerdings wenn ich die Funktion DoPaintTest(var PaintBMP: TBitmap); in eine
andere Klasse kopiere liefert diese Funktione den object locked error .... (siehe screen dump)
wie kann das sein, es gibt doch überhaupt keine Interaction mit der Klasse ??????
Delphi-Quellcode:
type TPaintLayout2 = class
procedure DoPaintTest(var PaintBMP: TBitmap);
end;
procedure TPaintLayout2.DoPaintTest(var PaintBMP: TBitmap);
var
p1, p2: TPointF;
i, j: Integer;
Brush: TStrokeBrush;
begin
PaintBMP.Width := 1000;
PaintBMP.Height := 1000;
for i := 1 to 100 do
begin
Brush := TStrokeBrush.Create(TBrushKind.Solid, randomColor);
Brush.Thickness := 2;
// Brush.Kind := Solid;
p1 := TPointF.Create(2, 2);
p2 := TPointF.Create(Random(400), Random(400));
PaintBMP.Canvas.BeginScene;
// draw lines on the canvas
PaintBMP.Canvas.DrawLine(p1, p2, 1, Brush);
PaintBMP.Canvas.EndScene; // in dieser Zeile kommt es zum Object lock error
Brush.Free;
end
end;
///
/// somewhere inside the main app
///
.......
var
aPaintLayoutCTRL: TPaintLayout2;
aBMP: TBitmap;
begin
aBMP := TBitmap.Create;
aPaintLayoutCTRL := TPaintLayout2.Create;
try
aPaintLayoutCTRL.DoPaintTest(aBMP);
imgviewer_layout.Bitmap.Assign(aBMP) ;
finally
aPaintLayoutCTRL.Free;
aBMP.Free;
end;