Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi FireMonkey:如何在位图上绘制焦点矩形?_Delphi_Firemonkey - Fatal编程技术网

Delphi FireMonkey:如何在位图上绘制焦点矩形?

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

我正在向XE5/FireMonkey移植一个VCL应用程序,它使用Canvas.DrawFocusRect。这在FireMonkey中不存在,所以问题是:如何替换DrawFocusRect

如果这很重要,画布就是TPaintBox画布


谢谢

以下是您第一次绘制焦点矩形的方法

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)。