【问题标题】:FireMonkey: How to draw a focus rectangle on a bitmap?FireMonkey:如何在位图上绘制焦点矩形?
【发布时间】:2013-12-31 05:48:23
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: delphi firemonkey


    【解决方案1】:

    这是第一次绘制焦点矩形的方法。

    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;
    

    【讨论】:

    • DrawDashRect 和 DrawFocusRect 不是一回事。 DrawDashRect 是一个使用虚线笔的简单 DrawRect。 DrawFocusRect 是一个 Windows API (msdn.microsoft.com/en-us/library/windows/desktop/…),它使用特定的样式并使用 XOR,以便在同一位置再次绘制它实际上将其删除。
    • 是的,作为一名经验丰富的程序员,我把这个练习留给了你。 ;o)
    • 当然我可以模拟 DrawFocusRect API,但如果我只是错过了 API,这将是一个糟糕的编程。这就是我问的原因。
    • 好吧,为了有效地模拟 DrawFocusRect,我需要能够用 XOR 操作画一条线,以便再次画线恢复像素。如果没有异或,我需要重新绘制一个可能很慢的大区域,因为每次鼠标移动时都会完成。我找不到如何选择 XOR 模式进行绘图(相当于 VCL Canvas.Pen.Mode := pmXor)。
    【解决方案2】:

    TSelection 是否合适:http://docwiki.embarcadero.com/Libraries/XE5/en/FMX.Objects.TSelection

    它是一个绘制可拖动/可调整大小的矩形的组件。

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 2016-04-07
      • 1970-01-01
      • 2013-07-07
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多