⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xipanel.pas

📁 Xi control is a component for delphi. its have alot of feature like customizable button, gradient s
💻 PAS
字号:
{================================================================

    XiPanel 1.01
    Written by Eugene Genev

=================================================================}

unit XiPanel;

interface

uses
  Windows, Classes, Controls, Graphics, Messages, Forms, Dialogs,
  Math, SysUtils, ExtCtrls;

type
  TColorScheme = (csCustom, csDesert, csGrass, csSilver, csSky, csRose, csSun);

  TFillDirection = (fdHorizontal, fdVertical, fdDiagonal);

  TXiPanel = class(TCustomPanel)
  private
    FColorFace: TColor;
    FColorGrad: TColor;
    FColorLight: TColor;
    FColorDark: TColor;
    FFillDirection: TFillDirection;
    FColorScheme: TColorScheme;
    procedure SetColors(Index: Integer; Value: TColor);
    procedure SetColorScheme(Value: TColorScheme);
    procedure SetFillDirection(Value: TFillDirection);
    procedure GradientFillRect(Canvas: TCanvas; Rect: TRect;
      StartColor, EndColor: TColor; Direction: TFillDirection);
    procedure DrawBevel(Canvas: TCanvas; Rect: TRect; LightColor, DarkColor: TColor);
    procedure DrawFrame(Canvas: TCanvas; Offset, FrameWidth: Integer; LightColor, DarkColor: TColor);
  protected

  public
    constructor Create(AOwner: TComponent); override;
    procedure Paint; override;
  published
    property ColorFace: TColor index 0 read FColorFace write SetColors;
    property ColorGrad: TColor index 1 read FColorGrad write SetColors;
    property ColorLight: TColor index 2 read FColorLight write SetColors;
    property ColorDark: TColor index 3 read FColorDark write SetColors;
    property ColorScheme: TColorScheme read FColorScheme write SetColorScheme;
    property FillDirection: TFillDirection read FFillDirection write SetFillDirection;
    property Align;
    property Alignment;
    property Anchors;
    property AutoSize;
    property BevelInner;
    property BevelOuter;
    property BevelWidth;
    property BorderStyle;
    property Caption;
    property Cursor;
    property DockSite;
    property DragKind;
    property DragMode;
    property Enabled;
    property Font;
    property HelpContext;
   // property HelpKeyword;
  //  property HelpType;
    property Hint;
    property Locked;
    property ParentFont;
    property ShowHint;
    property PopupMenu;
    property TabOrder;
    property TabStop;
    property Tag;
    property UseDockManager;
    property Visible;
    property OnCanResize;
    property OnClick;
    property OnConstrainedResize;
  //  property OnContextPopup;
    property OnDblClick;
    property OnDockDrop;
    property OnDockOver;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnEndDock;
    property OnEnter;
    property OnExit;
    property OnGetSiteInfo;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnResize;
    property OnStartDock;
    property OnStartDrag;
    property OnUnDock;
  end;

procedure Register;

{//$R XiPanel.res}

implementation

procedure Register;
begin
  RegisterComponents('XiControls', [TXiPanel]);
end;

constructor TXiPanel.Create(AOwner: TComponent);
begin
  inherited;
  FColorDark:= clBlack;
  FColorLight:= clSilver;
  FFillDirection:= fdVertical;
  ColorScheme:= csDesert;
end;


procedure TXiPanel.Paint;
var
  ScrBmp: TBitmap;
  i: integer;
begin
  ScrBmp:= TBitmap.Create;
  ScrBmp.Width:= ClientWidth;
  ScrBmp.Height:= ClientHeight;

  GradientFillRect(ScrBmp.Canvas,
                   Rect(0, 0, ClientWidth, ClientHeight),
                   FColorFace, FColorGrad, FFillDirection);

  ScrBmp.Canvas.Font:= Font;

  case Alignment of
    taLeftJustify: i:= BevelWidth + 2;
    taRightJustify: i:= ClientWidth - BevelWidth - 2 -ScrBmp.Canvas.TextWidth(Caption);
    taCenter: i:= (ClientWidth - ScrBmp.Canvas.TextWidth(Caption)) div 2;
  end;

  if (BevelInner <> bvNone) and (BevelOuter <> bvNone) then
    case Alignment of
      taLeftJustify: i:= i + BevelWidth;
      taRightJustify: i:= i - BevelWidth;
    end;

  ScrBmp.Canvas.Brush.Style:= bsClear;
  ScrBmp.Canvas.TextOut(i, (ClientHeight - ScrBmp.Canvas.TextHeight('AaBbCcDd')) div 2, Caption);


  case BevelOuter of
    bvRaised: DrawFrame(ScrBmp.Canvas, 0, BevelWidth, FColorLight, FColorDark);
    bvLowered: DrawFrame(ScrBmp.Canvas, 0, BevelWidth, FColorDark, FColorLight);
    bvSpace: DrawFrame(ScrBmp.Canvas, 0, BevelWidth, FColorLight, FColorDark);
  end;

  if BevelOuter <> bvNone then
    case BevelInner of
      bvRaised: DrawFrame(ScrBmp.Canvas, BevelWidth, BevelWidth, FColorLight, FColorDark);
      bvLowered: DrawFrame(ScrBmp.Canvas, BevelWidth, BevelWidth, FColorDark, FColorLight);
      bvSpace: DrawFrame(ScrBmp.Canvas, BevelWidth, BevelWidth, FColorLight, FColorDark);
    end
  else
    case BevelInner of
      bvRaised: DrawFrame(ScrBmp.Canvas, 0, BevelWidth, FColorLight, FColorDark);
      bvLowered: DrawFrame(ScrBmp.Canvas, 0, BevelWidth, FColorDark, FColorLight);
      bvSpace: DrawFrame(ScrBmp.Canvas, 0, BevelWidth, FColorLight, FColorDark);
    end;

  Canvas.Draw(0, 0, ScrBmp);
  ScrBmp.Free;
end;

procedure TXiPanel.DrawBevel(Canvas: TCanvas; Rect: TRect; LightColor, DarkColor: TColor);
begin
  Canvas.Pen.Width:= 1;
  Canvas.Pen.Color:= LightColor;
  Canvas.MoveTo(Rect.Left, Rect.Top + Rect.Bottom);
  Canvas.LineTo(Rect.Left, Rect.Top);
  Canvas.LineTo(Rect.Left + Rect.Right, Rect.Top);
  Canvas.Pen.Color:= DarkColor;
  Canvas.LineTo(Rect.Left + Rect.Right, Rect.Top + Rect.Bottom);
  Canvas.LineTo(Rect.Left, Rect.Top + Rect.Bottom);
end;

procedure TXiPanel.DrawFrame(Canvas: TCanvas; Offset, FrameWidth: Integer; LightColor, DarkColor: TColor);
var
  i: integer;
begin
  for i:= Offset to Offset+FrameWidth-1 do begin
      DrawBevel(Canvas,
                Rect(i, i, ClientWidth - 2*i - 1, ClientHeight - 2*i - 1),
                LightColor, DarkColor);
  end;
end;

procedure TXiPanel.SetColors(Index: Integer; Value: TColor);
begin
  case Index of
    0: FColorFace:= Value;
    1: FColorGrad:= Value;
    2: FColorLight:= Value;
    3: FColorDark:= Value;
  end;
  FColorScheme:= csCustom;
  Invalidate;
end;

procedure TXiPanel.SetFillDirection(Value: TFillDirection);
begin
  FFillDirection:= Value;
  Invalidate;
end;

procedure TXiPanel.SetColorScheme(Value: TColorScheme);
begin
  FColorScheme:= Value;
  case FColorScheme of
    csDesert:  begin
                 FColorDark:= $0000699B;
                 FColorFace:= clWhite;
                 FColorGrad:= $00A4E1FF;
                 FColorLight:= $00008FD5;
               end;
    csGrass:   begin
                 FColorDark:= $00156F37;
                 FColorFace:= clWhite;
                 FColorGrad:= $00B0F2CB;
                 FColorLight:= $003EB56A;
               end;
    csRose:    begin
                 FColorDark:= $0000009D;
                 FColorFace:= clWhite;
                 FColorGrad:= $00CCCCFF;
                 FColorLight:= $000651CC;
               end;
    csSky:     begin
                 FColorDark:= $00B35900;
                 FColorFace:= clWhite;
                 FColorGrad:= $00FFE0C1;
                 FColorLight:= $00F0964D;
               end;
    csSilver:  begin
                 FColorDark:= $00626262;
                 FColorFace:= clWhite;
                 FColorGrad:= $00DAE0DE;
                 FColorLight:= $007D7D7D;
               end;
    csSun:     begin
                 FColorDark:= $00006464;
                 FColorFace:= clWhite;
                 FColorGrad:= $00BFFFFF;
                 FColorLight:= $00009595;
               end;
  end;
  Invalidate;
end;

procedure TXiPanel.GradientFillRect(Canvas: TCanvas; Rect: TRect;
                StartColor, EndColor: TColor; Direction: TFillDirection);
var
  Steps: Integer;
  StartR, StartG, StartB, EndR, EndG, EndB: Byte;
  CrrR, CrrG, CrrB: Double;
  IncR, IncG, incB: Double;
  i: integer;
begin
  case Direction of
    fdVertical:   Steps:= Rect.Bottom - Rect.Top;
    fdHorizontal: Steps:= Rect.Right - Rect.Left;
    fdDiagonal:   Steps:= Rect.Bottom - Rect.Top + Rect.Right - Rect.Left;
  end;

  StartR:= GetRValue(StartColor);  EndR:= GetRValue(EndColor);
  StartG:= GetGValue(StartColor);  EndG:= GetGValue(EndColor);
  StartB:= GetBValue(StartColor);  EndB:= GetBValue(EndColor);

  IncR:= (EndR - StartR) / steps;
  IncG:= (EndG - StartG) / steps;
  IncB:= (EndB - StartB) / steps;

  CrrR:= StartR;
  CrrG:= StartG;
  CrrB:= StartB;

  for i:= 0 to Steps do begin
    Canvas.Pen.Color:= RGB(Round(CrrR), Round(CrrG), Round(CrrB));
    case Direction of
      fdVertical:   begin
                      Canvas.MoveTo(Rect.Left, i);
                      Canvas.LineTo(Rect.Right + Rect.Left, i);
                    end;
      fdHorizontal: begin
                      Canvas.MoveTo(i, Rect.Top);
                      Canvas.LineTo(i, Rect.Top + Rect.Bottom);
                    end;
      fdDiagonal:   begin
                      Canvas.MoveTo(i, Rect.Top);
                      Canvas.LineTo(Rect.Left, i);
                    end;
    end;
    CrrR:= CrrR + IncR;
    CrrG:= CrrG + IncG;
    CrrB:= CrrB + IncB;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -