如何在FMX画布上的Delphi中画一条线

伊姆孔

这是与Delphi Berlin 10.1 Update 2一起使用的

以下作品(画一条线):

brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Lightgray);
brush.Thickness := 2;
with Canvas do
begin
    BeginUpdate;
    DrawLine(PointF(10, 10), PointF(100, 10), 1, brush);
    EndUpdate;
end;

以下内容不起作用:

with Canvas do
begin
    BeginUpdate;
    Stroke.Color := TAlphaColors.Black;
    Stroke.Thickness := 2.0;
    DrawLine(PointF(10, 10), PointF(100, 10), 1);
    EndUpdate;
end;

为什么我不能使用第二个?如何使它工作,还是应该像第一个示例一样坚持创建描边画笔?

我提供了一个最小的应用程序:

main.not

unit main;

interface

uses
    System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects;

type
    TMainForm = class(TForm)
        PaintBox: TPaintBox;
        procedure OnPaint(Sender: TObject; Canvas: TCanvas);
    private
        { Private declarations }
    public
        { Public declarations }
    end;

var
    MainForm: TMainForm;

implementation

{$R *.fmx}

procedure TMainForm.OnPaint(Sender: TObject; Canvas: TCanvas);
begin
    with Canvas do
    begin
        BeginUpdate;
        Stroke.Color := TAlphaColors.Black;
        Stroke.Thickness := 2.0;
        DrawLine(PointF(10, 10), PointF(100, 10), 1);
        EndUpdate;
    end;
end;

end.

main.fmx:

object MainForm: TMainForm
    Left = 0
    Top = 0
    Caption = 'Form1'
    ClientHeight = 480
    ClientWidth = 640
    FormFactor.Width = 320
    FormFactor.Height = 480
    FormFactor.Devices = [Desktop]
    DesignerMasterStyle = 0
    object PaintBox: TPaintBox
        Position.X = 16.000000000000000000
        Position.Y = 16.000000000000000000
        Size.Width = 609.000000000000000000
        Size.Height = 449.000000000000000000
        Size.PlatformDefault = False
        OnPaint = OnPaint
    end
end

test.dpr:

program test;

uses
   System.StartUpCopy,
   FMX.Forms,
   main in 'main.pas' {MainForm};

{$R *.res}

begin
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm);
    Application.Run;
end.
鲁道德

较早版本的Delphi根据平台的不同,Stroke.Kind的默认值也不同

自从Delphi 10.1 Berlin以来,默认值似乎None适用于所有平台。(感谢@TomBrunberg)

要显示该行,请设置 Stroke.Kind := TBrushKind.Solid;

注意:在Windows 8.1上测试


我还创建了一个新的Metropolis FMX应用程序,该图形无需设置即可工作Stroke.Kind虽然无法解释。


在QP,RSP-16313上也提交了类似的报告。Canvas.DrawLine在Windows XP(32位)格式下不起作用在此问题出现在Windows-XP上,但没有出现在Windows-7上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在精灵套件中画一条线

来自分类Dev

如何使用fabric.js在画布上画一条线

来自分类Dev

如何在Sprite-kit中画一条线

来自分类Dev

如何画一条线WPF

来自分类Dev

在画布上画一条线

来自分类Dev

如何在画布上用背景图像画一条线

来自分类Dev

如何只画一条线

来自分类Dev

在WinAPI中的单词旁边画一条线

来自分类Dev

Delphi Graphics32如何在层上用鼠标画一条线

来自分类Dev

如何在处理中从点到点画一条线

来自分类Dev

在Android中的ImageView上方画一条线

来自分类Dev

如何在Qt5中的小部件上画一条线

来自分类Dev

如何用matplotlib画一条线?

来自分类Dev

在jetpack中画一条线

来自分类Dev

在画布上的点周围重画一条线

来自分类Dev

如何用pureimage画一条线?

来自分类Dev

如何在SwiftUI中在Shape之间画一条线?

来自分类Dev

如何在CSS中从左右框到文本中间画一条线?

来自分类Dev

如何让用户仅使用背景图像在x轴上的画布上画一条线?

来自分类Dev

如何在VB.NET中画一条线

来自分类Dev

我如何在Visio 2010中画一条线而端点不会跳动呢?

来自分类Dev

在画布上画一条线

来自分类Dev

如何在画布上用背景图像画一条线

来自分类Dev

如何在画布上画一条线?

来自分类Dev

如何在famo.us中简单地画一条线?

来自分类Dev

如何在zsh shell中的命令之间画一条线

来自分类Dev

如何在Java中的事件处理程序中在JLabel上画一条线?

来自分类Dev

如何在CSS中的文本之前画一条线?

来自分类Dev

C# 如何在窗体上的两个对象之间画一条线?