[英]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.