亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

用DELPHI實(shí)現(xiàn)特色按鈕

2019-11-18 18:49:40
字體:
供稿:網(wǎng)友

特色按鈕    

每當(dāng)用到DELPHI自帶的控件都感到少了一點(diǎn)什么,形狀也好,顏色也好,變

化的方式也好,都與自已的項(xiàng)目所需要的標(biāo)準(zhǔn)相差了一些,查閱了一些書籍

后發(fā)現(xiàn)下面的控件很有可用之處!!!

以下是它的源代碼:

unit DsFancyButton;

interface

uses
  SysUtils,Windows, Messages, Classes, Graphics, Controls, Forms;

type
  TTextStyle = (txNone, txLowered, txRaised, txShadowed);
  TShape = (shCapsule, shOval, shRectangle, shRoundRect);
  TDsFancyButton = class(TGraphicControl)
  PRivate
    FButtonColor: TColor;
    FIsDown: Boolean;
    FFrameColor: TColor;
    FFrameWidth: Integer;
    FCornerRadius: Integer;
    FRgn, MRgn: HRgn;
    FShape: TShape;
    FTextColor: TColor;
    FTextStyle: TTextStyle;

    procedure SetButtonColor(Value: TColor);
    procedure CMEnabledChanged(var message: TMessage);
              message CM_ENABLEDCHANGED;
    procedure CMTextChanged(var message: TMessage);
              message CM_TEXTCHANGED;
    procedure CMDialogChar(var message: TCMDialogChar);
              message CM_DIALOGCHAR;
    procedure WMSize(var message: TWMSize); message WM_PAINT;
  protected
    procedure Click; override;
    procedure DrawShape;
    procedure Paint; override;
    procedure SetFrameColor(Value: TColor);
    procedure SetFrameWidth(Value: Integer);
    procedure SetCornerRadius(Value: Integer);
    procedure SetShape(Value: TShape);
    procedure SetTextStyle(Value: TTextStyle);
    procedure WMLButtonDown(var Message: TWMLButtonDown); message

WM_LBUTTONDOWN;
    procedure WMLButtonUp(var Message: TWMLButtonUp); message

WM_LBUTTONUP;
    procedure WriteCaption;
  public
    constructor Create(Aowner: TComponent); override;
    destructor Destroy; override;
  published
    property ButtonColor: TColor
             read FButtonColor write SetButtonColor;
    property Caption;
    property DragCursor;
    property DragMode;
    property Enabled;
    property Font;
    property FrameColor: TColor
             read FFrameColor write SetFrameColor;
    property FrameWidth: Integer
             read FFrameWidth write SetFrameWidth;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property CornerRadius: Integer
             read FCornerRadius write SetCornerRadius;
    property Shape: TShape
             read FShape write SetShape default shRoundRect;
    property ShowHint;
    property TextStyle: TTextStyle
             read FTextStyle write SetTExtStyle;
    property Visible;

    property OnClick;   property OnDragDrop;
    property OnDragOver;  property OnEndDrag;
    property OnMouseDown; Property OnMouseUp;
    Property OnMouseMove;
  end;

procedure Register;

implementation

constructor TDsFancyButton.Create(AOwner: TComponent);
begin
  inherited Create(Aowner);
  ControlStyle := [csClickEvents,  csCaptureMouse,  CSSetCaption];
  Enabled := True;
  FButtonColor := clBtnFace;
  FIsDown := False;
  FFrameColor := clGray;
  FFrameWidth := 6;
  FCornerRadius := 10;
  FRgn := 0;
  FShape := shRoundRect;
  FTextStyle := txRaised;
  Height := 25;
  Visible := True;
  Width := 97;
end;

destructor TDsFancyButton.Destroy;
begin
  DeleteObject(FRgn);
  DeleteObject(MRgn);
  inherited Destroy;
end;

procedure TDsFancyButton.Paint;
var Dia: integer;
    ClrUp,  ClrDown: TColor;
begin
  Canvas.Brush.Style := bsClear;

  if FIsDown then
    begin ClrUp := clBtnShadow; ClrDown := clBtnHighlight; end
  else
    begin ClrUp := clBtnHighlight; ClrDown := clBtnShadow; end;

  with Canvas do
    begin
      case Shape of
        shRoundRect:
          begin
            Dia := 2*CornerRadius;
            Mrgn := CreateRoundRectRgn(0, 0, Width, Height, Dia,

Dia);
          end;
        shCapsule:
          begin
            if Width < Height then Dia := Width else Dia :=

Height;
            Mrgn := CreateRoundRectRgn(0, 0, Width ,  Height, Dia,

Dia);
          end;
        shRectangle: MRgn := CreateRectRgn(0, 0, Width - 1, Height

- 1);
        shOval: MRgn := CreateEllipticRgn(0, 0, Width, Height);
      end;//case
      Canvas.Brush.Color := FButtonColor;
      FillRgn(Handle, MRgn, Brush.Handle);
      Brush.Color :=ClrUp;
      FrameRgn(Handle, MRgn, Brush.Handle, 1,1);
      OffsetRgn(MRgn, 1, 1);
      Brush.Color := ClrDown;
      FrameRgn(Handle, MRgn, Brush.Handle, 1, 1);
    end;//canvas
    DrawShape;
    WriteCaption;
end;

procedure TDsFancyButton.DrawShape;
var
  FC, Warna: TColor;
  R, G, B: Byte;
  AwalR, AwalG, AwalB, AkhirR, AkhirG, AkhirB, n, t, Dia: Integer;
begin
  if FFrameWidth mod 2=0 then t := FFrameWidth
  else t := FFrameWidth + 1;

  Warna := ColorToRGB(ButtonColor);
  FC := ColorToRGB(FrameColor);
  Canvas.Brush.Color := Warna;

  AwalR := GetRValue(FC); AkhirR := GetRValue(Warna);
  AwalG := GetGValue(FC); AkhirG := GetGValue(Warna);
  AwalB := GetBValue(FC); AkhirB := GetBValue(Warna);
  FRgn := 0;
  with Canvas do
  for n := 0 to t - 1 do
  begin
    R := AwalR + Trunc(Sqrt(t*t - Sqr(t-n))*(AkhirR - AwalR)/t);
    G := AwalG + Trunc(Sqrt(t*t - Sqr(t-n))*(AkhirG - AwalG)/t);
    B := AwalB + Trunc(Sqrt(t*t - Sqr(t-n))*(AkhirB - AwalB)/t);
    Brush.Color := RGB(R, G, B);

    Case Shape of
      shOval: FRgn := CreateEllipticRgn(1 + n, 1 + n, Width - n,

Height - n);
      shRoundRect:
        begin
          Dia := CornerRadius;
          if (Dia - n) >0 then
            FRgn :=
              CreateRoundRectRgn(1 + n, 1 + n ,Width - n, Height -

n, 2*(Dia - n), 2*(Dia - n))
          else FRgn := CreateRectRgn( 1 + n, 1 + n, Width - n - 1,

Height - n - 1);
        end;
       shCapsule:
         begin
           if Width < Height then Dia := Width div 2 else Dia :=

Height div 2;
             if (Dia - n) > 0 then
               FRgn:=
                 CreateRoundRectRgn(1 + n, 1 + n, Width - n,

Height - n, 2*(Dia - n), 2*(Dia - n))
             else FRgn := CreateRectRgn(1 + n, 1 + n ,Width - n -

1, Height - n - 1);
         end;
       else FRgn := CreateRectRgn(1 + n, 1 + n, Width - n - 1,

Height - n - 1);
    end;//case
    FrameRgn(Handle, FRgn, Brush.Handle, 1, 1);
  end;
end;

procedure TDsFancyButton.WriteCaption;
var
  Flags: Word;
  BtnL, BtnT, BtnR, BtnB: Integer;
  R, TR: TRect;
begin
  R := ClientREct; TR := ClientRect;
  Canvas.Font := Self.Font;
  Canvas.Brush.Style := bsClear;
  Flags := DT_CENTER or DT_SINGLELINE;
  Canvas.Font := Font;

  if FIsDown then FTextColor := FrameColor
  else FTextColor := Self.Font.Color;

  with canvas do
    begin
      BtnT := (Height - TextHeight(Caption)) div 2;
      BtnB := BtnT + TextHeight(Caption);
      BtnL := (Width - TextWidth(Caption)) div 2;
      BtnR := BtnL + TextWidth(Caption);
      TR := Rect(BtnL, BtnT, BtnR, BtnB);
      R := TR;
      if ((TextStyle = txLowered) and FIsDown ) or
         ((TextStyle = txRaised) and not FIsDown) then
      begin
        Font.Color := clBtnHighLight;
        OffsetRect(TR, -1 + 1, -1 + 1);
        DrawText(Handle, PChar(Caption), Length(Caption), TR,

Flags);
      end
      else if ((TextStyle = txLowered) and not FIsDown) or
              ((TextStyle = txRaised) and FIsDown) then
           begin
             Font.Color := clBtnHighLight;
             OffsetRect(TR, + 2, + 2);
             DrawText(Handle, PChar(Caption), Length(Caption), TR,

Flags);
           end
           else if (TextStyle = txShadowed) and FIsDown then
                begin
                  Font.Color := clBtnShadow;
                  OffsetREct(TR, 3 + 1, 3 + 1);
                  DrawText(Handle, PChar(Caption),

Length(Caption), TR, Flags);
                end
                else if (TextStyle = txShadowed) and not FIsDown

then
                begin
                  Font.Color := clBtnShadow;
                  OffsetRect(TR, 2 + 1, 2 + 1);
                  DrawText(Handle, PChar(Caption),

Length(Caption), TR, Flags);
                end;

      if Enabled then Font.Color := FTextColor//self.Font.Color
      else if (TextStyle = txShadowed) and not Enabled then
        Font.Color := clBtnFace
      else Font.Color := clBtnShadow;
      if FIsDown then OffsetRect(R, 1, 1)
      else OffsetRect(R, -1, -1);
      DrawText(Handle, PChar(Caption), Length(Caption), R, Flags);
    end;
end;

procedure TDsFancyButton.SetButtonColor(value: TColor);
begin
  if value <> FButtonColor then
    begin FButtonColor := value ; Invalidate; end;
end;

procedure TDsFancyButton.WMLButtonDown(var message:

TWMLButtonDown);
begin
  if not PtInRegion(MRgn, message.xPos, message.yPos) then Exit;
  FIsDown := True;
  Paint;
  inherited;
end;

procedure TDsFancyButton.WMLButtonUp(var message: TWMLButtonUp);
begin
  if not FIsDown then Exit;
  FIsDown := False;
  paint;
  inherited;
end;

procedure TDsFancyButton.SetShape(value: TShape);
begin
  if value <> FShape then
    begin FShape := value; Invalidate; end;
end;

procedure TDsFancyButton.SetTextStyle(value: TTextStyle);
begin
  if value<>FTextStyle then
    begin  FTextStyle := value; Invalidate; end;
end;

procedure TDsFancyButton.SetFrameColor(value: TColor);
begin
  if Value<>FFrameColor then
    begin FFrameColor := Value; Invalidate;end;
end;

procedure TDsFancyButton.SetFrameWidth(Value: Integer);
var
  w: integer;
begin
  if Width<height then w := Width else w := Height;
  if Value<>FFrameWidth then FFrameWidth := value;
  if FFrameWidth < 4 then FFrameWidth := 4;
  if FFrameWidth >(w div 2) then FFrameWidth := (w div 2);
  Invalidate;
end;

procedure TDsFancyButton.SetCornerRadius(Value: integer);
var
  w: integer;
begin
  if Width<Height then w := Width else w := Height;
  if value<>FCornerRadius then FCornerRadius := value;
  if FCornerRadius<3 then FCornerRadius := 3;
  if FCornerRadius>w then FCornerRadius := w;
  Invalidate;
end;

procedure TDsFancyButton.CMEnabledChanged(var message: Tmessage);
begin
  inherited;
  invalidate;
end;

procedure TDsFancyButton.CMTextChanged(var message: TMessage);
begin
  Invalidate;
end;

procedure TDsFancyButton.CMDialogChar(var message:TCMDialogChar);
begin
  With Message do
    if IsAccel (CharCode, Caption) and Enabled then
      begin  Click; Result := 1 ;end
    else inherited;
end;

procedure TDsFancyButton.WMSize(var Message: TWMSize);
begin
  inherited;
  if width>300 then width := 300;
  if Height>300 then Height := 300;
end;

procedure TDsFancyButton.Click;
begin
  FIsDown := False;
  Invalidate;
  inherited Click;
end;

procedure Register;
begin
  RegisterComponents('WYM COMPONENT',[TDsFancyButton]);
end;

end.

耿百強(qiáng)。


上一篇:Delphi控件的使用經(jīng)驗(yàn)

下一篇:異常和錯(cuò)誤處理(基于Delphi/VCL)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

国产在线精品一区免费香蕉| 日本久久久久久久| 蜜桃视频涩涩| 国产精品亚洲午夜一区二区三区| 又大又硬又爽免费视频| 欧美另类videoxo高潮| 久久天堂av综合合色| 国产福利第一视频| 国内精品中文字幕| 日韩三级毛片| 在线观看亚洲网站| 日韩中文第一页| 欧美激情专区| 日韩亚洲精品在线| 成人黄色电影网址| 国产精品yjizz视频网一二区| 国产做a爰片久久毛片| 26uuu亚洲电影在线观看| 成人网在线免费观看| 极品美女销魂一区二区三区| 99ri国产在线| 丁香六月激情网| 久久免费高清视频| 日韩影视高清在线观看| 亚洲在线视频免费观看| eeuss网址直达入口| 精品精品国产三级a∨在线| 粗暴91大变态调教| 精品视频一区二区在线观看| 久久久久久久激情视频| 国产91在线播放精品91| 亚洲v.com| 精品999久久久| 欧美在线色图| 伊人久久大香线蕉av一区二区| 电影在线观看一区二区| 久久麻豆精品| 麻豆精品精品国产自在97香蕉| 91久久久精品| 91精品尤物| japanese色国产在线看视频| 午夜视频在线免费| 免费成人性网站| 国产又粗又爽视频| 欧美bbbbb| 久久久精品人妻无码专区| 亚洲精品视频大全| 涩涩屋成人免费视频软件| 被黑人猛躁10次高潮视频| 欧美精品偷拍| 日本亚洲视频在线| 国内精品卡一卡二卡三新区| 美女久久久久久久久| 嫩草研究院在线| 91大学生片黄在线观看| 欧美精品麻豆| 一级毛片免费高清中文字幕久久网| 亚洲精品一区二区网址| 久久er热在这里只有精品66| 亚洲视频在线播放| 亚洲成人精品在线观看| 尤物tv在线精品| www.成人精品免费网站青椒| 99aiav| 一区二区三区偷拍| 久久精品国产亚洲一区二区三区| 私人玩物在线观看| 国产精品一区在线观看你懂的| 国产精品日韩电影| 欧在线一二三四区| 亚洲精品成人在线视频| 国产精品12345| 天天干 天天插| 91麻豆文化传媒在线观看| 免费黄视频在线观看| 国产精品综合久久久久| 天天爽天天爽天天爽| 欧美一级片在线免费观看| 日韩免费一区二区三区在线播放| 91麻豆蜜桃一区二区三区| 日韩欧美中文字幕视频| 91精品国产91久久久久久久久| 粉嫩欧美一区二区三区高清影视| 亚洲精品在线播放| www.尤物.com| 亚洲欧美成aⅴ人在线观看| 五月开心播播网| 国产精品极品尤物在线观看| 日韩亚洲不卡在线| 热99re久久精品这里都是免费| 色网视频在线| 欧美丝袜第一区| 国产最新精品精品你懂的| 欧美一区二区三区不卡| 国产精品成人国产乱| 亚洲高清在线观看视频| 九色porny在线观看| aaaaa一级片| 男人添女人下面高潮视频| 亚洲欧美日韩三级| 日本少妇激三级做爰在线| 最新国产精品久久精品| 日韩欧美在线观看一区二区三区| 999久久久免费精品国产| 丁香综合在线| 国产丝袜不卡| 亚洲18在线| 精品久久久久久综合日本欧美| 人人插人人干| 性色av一区二区三区免费| 美女高潮视频在线看| 亚洲一区 中文字幕| 午夜视频在线观看国产| 日本久久伊人| 奇米影视亚洲色图| 国产传媒在线播放| 日本a级片视频| 奇米视频888战线精品播放| 99在线精品视频免费观看软件| 日本一级淫片免费放| 午夜精品久久久久久久99热影院| 在线观看国产精品视频| 51蜜桃传媒精品一区二区| 葵司免费一区二区三区四区五区| 麻豆视频在线观看免费| 亚洲视频一区二区免费在线观看| 爱啪视频在线观看视频免费| 在线观看日韩一区| 国产精品一区高清| 99久久久无码国产精品| 国产亚洲亚洲| 国产日韩av网站| 国产精品夫妻自拍| 99精品国产九九国产精品| 51色欧美片视频在线观看| 日本不卡免费高清视频在线| 国产欧美在线视频| 黄页网站在线看| 免费无码不卡视频在线观看| 国产z一区二区三区| jk漫画禁漫成人入口| 国产原创精品视频| 精品一区二区av| 美女扒开腿让男人桶爽久久动漫| 国产丝袜在线播放| 国产黑人绿帽在线第一区| 欧美sm精品调教视频| 亚洲精品影院在线| 国产精品爽爽ⅴa在线观看| 亚洲av无码乱码国产精品久久| 中文在线视频观看| 亚洲精品一区中文字幕乱码| 欧美国产91| 日本a级黄色| 日韩欧美成人区| 欧美日韩国产成人| 中国xxxx视频播放50| xxxxxx黄色| 国产aⅴ一区二区三区| 国产91成人在在线播放| 欧美激情精品| 18成人在线视频| av网站在线看| 成人精品高清在线| 给我看免费高清在线观看| 久久免费公开视频| 狠狠做六月爱婷婷综合aⅴ| 日韩视频免费观看高清完整版| 伊人222成人综合网| 国产精品臀控福利在线观看| 精品国产不卡一区二区三区| 久久久久久国产视频| 中国人体摄影一区二区三区| 欧美在线一卡| 欧美成人精品一区二区男人看| 国产日韩欧美综合| 久久久久久久久久久9不雅视频| aaa免费在线观看| 亚洲欧美校园春色| 女囚岛在线观看| 18成人免费观看网站下载| 国产sm在线观看| 亚洲欧美日韩网| 国产精品一区三区在线观看| 国产精品91久久| 亚洲第一精品电影| 精品乱码一区二区三区| 日韩美女视频中文字幕| 成人三级做爰av| 91精品国产高清久久久久久| 久久视频这里有精品| xxxxwwww在线免费观看| 精品人妻av一区二区三区| 丝袜 亚洲 另类 欧美 重口| 97超碰人人模人人爽人人看| 免费看国产片在线观看| 国产精选在线| 精品理论电影在线| 欧美在线观看一二区| 成年人黄色片视频| a级国产乱理论片在线观看99| 看黄网站在线观看| 蜜臀aⅴ国产精品久久久国产老师| 国产精品亚洲欧美日韩一区在线| 91超薄丝袜肉丝一区二区| 日韩欧美另类一区二区| 中文字幕精品无码亚| 99久久精品国产亚洲精品| 日本人添下边视频免费| 日韩免费不卡av| 中文字幕日韩三级片| 天堂地址在线www| 久久国产人妖系列| 成人a在线观看| 欧美,日韩,国产在线| 精品人伦一区二区三区蜜桃网站| 国产精品一区免费观看| 久久久久久99久久久精品网站| 日韩欧美中文在线观看| 极品美女扒开粉嫩小泬| 色综合久久中文| 日韩av免费在线播放| 99re这里有精品| 全彩无遮拦全彩口工漫画全彩| 国内精品露脸在线视频播放| 久久亚洲一区| 成人激情在线观看| 天堂资源在线中文精品| 国产喷水theporn| 你懂的国产视频| 婷婷国产成人精品视频| www.麻豆| 日本福利午夜视频在线| 欧美精品一区二区性色a+v| 欧美国产视频在线观看| 免费高清av| 狠狠躁夜夜躁人人爽天天天天97| 日韩精品免费观看| 国产精品手机在线| 欧美日韩中文字幕一区| 日韩欧美一区在线| 国产精品香蕉在线观看| 粉嫩av一区二区三区粉嫩| 看一级黄色录像| 97精品久久久| 日韩不卡中文字幕| 亚洲天堂av在线播放| 中文字幕日韩专区| 国产美女免费网站| 久久久精品视频成人| 欧美成人做性视频在线播放| 日韩伦理一区二区三区av在线| 一本到不卡免费一区二区| 亚欧美中日韩视频| 久久久久久国产精品三级玉女聊斋| 国产乱码一区二区三区四区| 精品国产伦一区二区三区免费| 亚洲精品资源| av小说天堂网| 国产精品国产国产aⅴ| 中文字幕a级片| 狠狠综合久久av一区二区小说| 中文字幕一区二区三区四区五区| 成人免费淫片aa视频免费| 中国一级大黄大黄大色毛片| 三上悠亚一区二区三区| 久久a级毛片毛片免费观看| 亚洲欧美在线免费观看| 美国av在线播放| 日韩a级在线观看| 精品少妇久久久久久888优播| 米奇精品一区二区三区在线观看| 玉米视频成人免费看| 精品国模一区二区三区| 日韩欧美高清在线播放| av在线亚洲一区| 久久视频一区| 欧美做受69| 久草视频在线免费看| 国产经典一区二区| 久久这里只有精品免费| 小草在线视频免费播放| 国模gogo一区二区大胆私拍| 视频免费一区| 亚州视频一区二区三区| 日本一区二区三区www| xxxx日本少妇| 无码国产69精品久久久久网站| 欧美人成在线观看| 99久久伊人| 亚洲午夜电影| 国产精品无码网站| 欧美一级做a| 伊人色在线观看| 亚洲欧美中文字幕在线观看| 久久一二三四区| 国产农村av| 国产精品久久久久久久久男| 中文字幕在线观看日本| 国产伦精品一区二区三区在线观看| 在线成人私人影院| 夜先锋资源网| 青青伊人久久| 小向美奈子av| 嫩草国产精品入口| 亚洲国产成人私人影院| 久久久综合亚洲91久久98| 欧美日韩中文字幕一区| 欧美日中文字幕| 亚洲欧美国产另类首页| 日韩精彩视频| 欧美精品久久久久久久久久丰满| 日本一线产区和二线产区| 中文字幕校园春色| 日韩一级视频免费观看在线| 欧美成人精品3d动漫h| 国偷自产av一区二区三区麻豆| 国产69精品一区二区亚洲孕妇| 欧美自拍偷拍网| 国产91久久精品一区二区| 国产一二三在线视频| 俄罗斯女人裸体性做爰| 欧美性猛交xxxx偷拍洗澡| 在线观看免费版| 欧美黑人巨大xxx极品| mm131午夜| 婷婷综合另类小说色区| 蜜桃无码一区二区三区|