Delphi FireMonkey:如何在位图上绘制焦点矩形?
我正在向XE5/FireMonkey移植一个VCL应用程序,它使用Canvas.DrawFocusRect。这在FireMonkey中不存在,所以问题是:如何替换DrawFocusRect 如果这很重要,画布就是TPaintBox画布Delphi FireMonkey:如何在位图上绘制焦点矩形?,delphi,firemonkey,Delphi,Firemonkey,我正在向XE5/FireMonkey移植一个VCL应用程序,它使用Canvas.DrawFocusRect。这在FireMonkey中不存在,所以问题是:如何替换DrawFocusRect 如果这很重要,画布就是TPaintBox画布 谢谢以下是您第一次绘制焦点矩形的方法 procedure TForm1.Button1Click(Sender: TObject); var R: TRectF; begin R := PaintBox1.AbsoluteRect; InflateRe
谢谢以下是您第一次绘制焦点矩形的方法
procedure TForm1.Button1Click(Sender: TObject);
var
R: TRectF;
begin
R := PaintBox1.AbsoluteRect;
InflateRect(R, -0.5, -0.5);
PaintBox1.Canvas.BeginScene;
PaintBox1.Canvas.DrawDashRect(R, 0, 0, AllCorners, PaintBox1.AbsoluteOpacity, $A0909090);
PaintBox1.Canvas.EndScene;
end;
t选择是否合适:
它是一个绘制可拖动/可调整大小矩形的组件。DrawDashRect和DrawFocusRect不是一回事。DrawDashRect是使用虚线笔的简单DrawRect。DrawFocusRect是一种Windows API(),它使用特定的样式并使用XOR,因此在同一位置再次绘制它实际上会删除它。是的,作为一名经验丰富的程序员,我把这个练习留给了您;o) 当然,我可以模拟DrawFocusRect API,但如果我只是错过了API,这将是一个糟糕的编程。这就是我问的原因。为了有效地模拟DrawFocusRect,我需要能够使用XOR操作绘制一条线,以便再次绘制该线可以恢复像素。如果没有XOR,我需要重新绘制一个潜在的大区域,这是缓慢的,因为每次鼠标移动时都会这样做。我找不到如何为绘图选择XOR模式(相当于VCL Canvas.Pen.mode:=pmXor)。