第一种构建方式: TGPLinearGradientBrush.Create(点1, 点2, 颜色1, 颜色2);
本例测试效果图:
为了方便测试, 在 Unit2 单元从 TShape 继承了一个 TMyShape 类, 用来模拟一个可活动的颜色点.
其主要功能: 1、可用鼠标左键拖动; 2、可用鼠标右键改变颜色.
Unit2 的代码:
unit Unit2; interface uses Classes, Controls, ExtCtrls, Dialogs; type TMyShape = class(TShape) private fMouseFlag: Boolean; fx, fy: Integer; protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); override; procedure MouseMove(Shift: TShiftState; X: Integer; Y: Integer); override; public constructor Create(AOwner: TComponent); override; end; implementation { TMyShape } constructor TMyShape.Create(AOwner: TComponent); begin inherited; Parent := TWinControl(AOwner); Width := 9; Height := 9; Pen.Color := $FFFFFF; end; procedure TMyShape.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; if Button = mbLeft then begin fx := X; fy := Y; fMouseFlag := True; end; end; procedure TMyShape.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited; if fMouseFlag then begin Left := Left + X - fx; Top := Top + Y - fy; TWinControl(Owner).Repaint; end; end; procedure TMyShape.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; fMouseFlag := False; if Button = mbRight then begin with TColorDialog.Create(Owner) do if Execute then Brush.Color := Color; end; TWinControl(Owner).Repaint; end; end.
Unit1 代码:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GdiPlus, GdiPlusHelpers, Unit2; var Shape1, Shape2: TMyShape; procedure TForm1.FormCreate(Sender: TObject); begin Shape1 := TMyShape.Create(Self); Shape1.Left := 10; Shape1.Top := 10; shape1.Brush.Color := clRed; Shape2 := TMyShape.Create(Self); Shape2.Left := ClientWidth - 10 - Shape2.Width; Shape2.Top := ClientHeight - 10 - Shape2.Height; Shape2.Brush.Color := clBlue; end; procedure TForm1.FormPaint(Sender: TObject); var Brush: IGPLinearGradientBrush; Pt1,Pt2: TGPPoint; Color1, Color2: TGPColor; Rect: TRect; begin Pt1.Initialize(Shape1.Left + Shape1.Width div 2, Shape1.Top + Shape1.Height div 2); Pt2.Initialize(Shape2.Left + Shape2.Width div 2, Shape2.Top + Shape2.Height div 2); Color1 := TGPColor.CreateFromColorRef(Shape1.Brush.Color); Color2 := TGPColor.CreateFromColorRef(Shape2.Brush.Color); Brush := TGPLinearGradientBrush.Create(Pt1, Pt2, Color1, Color2); Rect := ClientRect; InflateRect(Rect, -ClientWidth div 10, -ClientHeight div 10); Canvas.ToGPGraphics.FillEllipse(Brush, TGPRect.Create(Rect)); end; end.