• GdiPlus[11]: IGPLinearGradientBrush 的第一种构建方式



    第一种构建方式: 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.
    
  • 相关阅读:
    送走2015,迎来2016
    Android-Volley网络通信框架(StringRequest & JsonObjectRequest)
    Mac上配置 Ruby on Rails和Git
    学习Javascript闭包(Closure)
    cocos2d-x 学习资源整理(持续更新...)
    android自己定义刷新类控件
    awk条件语句
    Leetcode 236 Lowest Common Ancestor of a Binary Tree
    Linux查看当前正在执行的进程
    Thinking in UML 学习笔记(三)——UML核心视图之类图
  • 原文地址:https://www.cnblogs.com/del/p/1623801.html
Copyright © 2020-2023  润新知