This is with Delphi Berlin 10.1 Update 2
The following works (I get a line drawn):
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;
The following does not work:
with Canvas do
begin
BeginUpdate;
Stroke.Color := TAlphaColors.Black;
Stroke.Thickness := 2.0;
DrawLine(PointF(10, 10), PointF(100, 10), 1);
EndUpdate;
end;
Why can't I use the 2nd one? How can I get it to work, or should I stick to creating a stroke brush as in the first example?
I've included a minimal application:
main.pas
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.
Earlier versions of Delphi had different default values for Stroke.Kind depending on platform.
Since Delphi 10.1 Berlin, the default value seems to be None
for all platforms. (Thanks @TomBrunberg)
To make the line appear, set Stroke.Kind := TBrushKind.Solid;
Note: Tested on Windows 8.1
I created a new Metropolis FMX application as well, where the drawing worked without setting the Stroke.Kind
. Can't explain that though.
A similar report was filed at QP, RSP-16313 The Canvas.DrawLine doesn't work at Windows XP (32 bit) forms. Here the problem manifests on Windows-XP but not on Windows-7.