打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
再学 GDI+[37]: TGPPen - TGPCustomLineCap、SetCustomStartCap、SetCustomEndCap




本例效果图:



代码文件:
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls;type  TForm1 = class(TForm)    procedure FormCreate(Sender: TObject);    procedure FormDestroy(Sender: TObject);    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);  end;var  Form1: TForm1;implementation{$R *.dfm}uses GDIPOBJ, GDIPAPI;var  ph1,ph2: TGPGraphicsPath;  cap1,cap2: TGPCustomLineCap;  x1,y1,x2,y2: Integer;  f: Boolean;  PenColor: TColor;procedure TForm1.FormCreate(Sender: TObject);const  pts: array[0..2] of TGPPoint = ((X:-3; Y:0),(X:3; Y:0),(X:0; Y:3));begin  {起始线帽需要的路径}  ph1 := TGPGraphicsPath.Create;  ph1.AddRectangle(MakeRect(-2, 0, 4, 3));  {终止线帽需要的路径}  ph2 := TGPGraphicsPath.Create;  ph2.AddPolygon(PGPPoint(@pts), Length(pts));  {自定义两个线帽}  cap1 := TGPCustomLineCap.Create(nil, ph1);  cap2 := TGPCustomLineCap.Create(nil, ph2);end;procedure TForm1.FormDestroy(Sender: TObject);begin  ph1.Free;  ph2.Free;  cap1.Free;  cap2.Free;end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  f := True;  x1 := X;  y1 := Y;  x2 := X;  y2 := Y;  Randomize;  PenColor := Random($FFFFFF);              {给画笔一个随机颜色}  Canvas.Pen.Color := $FFFFFF xor PenColor; {取画笔反色, 为了在 pmXor 模式下显示真实的颜色}  Canvas.Pen.Width := 3;  Canvas.Pen.Mode := pmXor;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);begin  if not f then Exit;  Canvas.MoveTo(x1, y1);  Canvas.LineTo(x2,y2);  x2 := X;  y2 := Y;  Canvas.MoveTo(x1, y1);  Canvas.LineTo(x2,y2);end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);var  g: TGPGraphics;  p: TGPPen;begin  if not f then Exit;  f := False;  g := TGPGraphics.Create(Canvas.Handle);  p := TGPPen.Create(ColorRefToARGB(PenColor), 3);  {使用自定义线帽}  p.SetCustomStartCap(cap1);  p.SetCustomEndCap(cap2);  g.DrawLine(p, x1, y1, x2, y2);  p.Free;  g.Free;end;end.
窗体文件:
object Form1: TForm1  Left = 0  Top = 0  Caption = 'Form1'  ClientHeight = 193  ClientWidth = 296  Color = clBtnFace  Font.Charset = DEFAULT_CHARSET  Font.Color = clWindowText  Font.Height = -11  Font.Name = 'Tahoma'  Font.Style = []  OldCreateOrder = False  Position = poDesktopCenter  OnCreate = FormCreate  OnDestroy = FormDestroy  OnMouseDown = FormMouseDown  OnMouseMove = FormMouseMove  OnMouseUp = FormMouseUp  PixelsPerInch = 96  TextHeight = 13end

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Delphi 获取图片中 像素的颜色值
combobox 自绘
Delphi的图形处理(一)
delphi多线程编程
delphi实现屏幕截图
Delphi多线程编程 - 编程技巧文章 - 蓝鸟软件-15
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服