簡體   English   中英

如何在FMX畫布上的Delphi中畫一條線

[英]How to draw a line in Delphi on an FMX canvas

這是與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;

為什么我不能使用第二個? 如何使它工作,還是應該像第一個示例一樣堅持創建描邊畫筆?

我提供了一個最小的應用程序:

主目錄

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

第一種情況是可行的,這很奇怪。

您應該使用中風畫筆。

並且您應該使用BeginScene和EndScene而不是BeginUpdate和EndUpdate。 該片段非常完美:

  Brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Black);
  Brush.Thickness := 2;
  with Canvas do
  begin
    BeginScene();
    DrawLine(PointF(10, 10), PointF(100, 10), 1, Brush);
    EndScene;
  end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM