gpt4 book ai didi

delphi - GDI+ DrawLine 什么都不画

转载 作者:行者123 更新时间:2023-12-05 09:34:04 34 4
gpt4 key购买 nike

开始在 Delphi 中使用 GDI+。需要画几条平滑的直线。例如试图在表格上画对角线(从左上角到右下角)但什么也没有出现。该代码有什么问题(Delphi XE3、Windows 10 x64)?

unit Unit2;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Winapi.GDIPAPI, Winapi.GDIPOBJ;

type
TForm2 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormPaint(Sender: TObject);
var
graphics: TGPGraphics;
gpPen: TGPPen;
begin
graphics := TGPGraphics.Create(Self.Canvas.Handle);
try
graphics.SetSmoothingMode(SmoothingModeAntiAlias8x8);
gpPen := TGPPen.Create(clBlue, 3);
try
graphics.DrawLine(gpPen, 0, 0, ClientWidth, ClientHeight);
finally
gpPen.Free;
end;
finally
graphics.Free;
end;
end;

procedure TForm2.FormResize(Sender: TObject);
begin
Repaint;
end;

end.

enter image description here

最佳答案

问题是颜色。

这是一个 GDI+ colour ,这与 TColor 不同这本质上是一个 Win32 COLORREF .

您传递的 clBlue = $00FF0000 现在被(错误)解释为 (alpha, red, green, blue) = ($00, $FF, $00, $00)。由于 alpha 值为 0,所以线条是完全透明的。

如果你这样做

gpPen := TGPPen.Create(clBlue or $FF000000, 3);

相反,您会获得完全不透明。但是你得到的是红色,而不是蓝色,因为 TColor$00BBGGRR 而不是 $00RRGGBB。所以如果你这样做

gpPen := TGPPen.Create($FF0000FF, 3);

你得到了你想要的蓝色。

也许更好的方法是使用 MakeColor 函数:

gpPen := TGPPen.Create(MakeColor(0, 0, $FF), 3)

或者ColorRefToARGB:

gpPen := TGPPen.Create(ColorRefToARGB(clBlue), 3)

关于delphi - GDI+ DrawLine 什么都不画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66816519/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com