Hallo Gemeinde,
klingt vielleicht trivial aber es gelingt mir derzeit nicht in einem FMX-TImage eine mit beispielsweise claRed gemalte Linie wieder rückstandsfrei zu entfernen. (Drübermalen mit einer anderen Farbe/Linienstärke) funktioniert, außer mit claNull=Transparent
)
Einen DrawMode wie XOR gibt es scheinbar nicht und die Canvas-Funktion ClearRect löscht den ganzen Canvas aber nicht den über ARect angegebenen Teil (Bug?).
Mein aktueller Workarround besteht tatsächlich darin, den ganzen Canvas zu löschen und neu zu zeichnen.
Kennt jemand das Problem und hat vielleicht eine etwas elegantere Lösung parat?
Viele Grüße,
Uwe
Delphi-Quellcode:
function TCardPoint.DrawMarker(Mode : TMarkerMode; Canvas : TCanvas; UseScene :
Boolean = True): Boolean;
begin
Result := False;
if UseScene then
Canvas.BeginScene;
try
if Mode = mmCross then
SetStrokeColor(claBlack)
else if Mode = mmCircle then
SetStrokeColor(claOrange);
case Mode of
mmCircle:
Canvas.DrawEllipse(RectF(FPoint.X-7, FPoint.Y-7, FPoint.X+7, FPoint.Y+7), 1);
mmCross:
begin
Canvas.DrawLine(PointF(FPoint.X-5, FPoint.Y), PointF(FPoint.X+5, FPoint.Y), 1);
Canvas.DrawLine(PointF(FPoint.X, FPoint.Y-5), PointF(FPoint.X, FPoint.Y+5), 1);
end;
mmUnCircle, mmUnCross:
begin
Canvas.ClearRect(RectF(FPoint.X-7, FPoint.Y-7, FPoint.X+7, FPoint.Y+7));
DoRepaintCanvas; // Workarround! ClearRect löscht den ganzen Canvas anstatt das angegebene Rect
end;
end;
Result := True;
finally
if UseScene then
begin
Canvas.EndScene;
FLayer.Bitmap.BitmapChanged;
end;
end;
end;