亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? janroundedbutton.pas

?? Delphi abstract factory模式編程源代碼
?? PAS
字號:
unit janRoundedButton;

interface

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

type
  TrbsShape=(rbsRounded,rbsEllipse,rbsOctagon);

  TjanRoundedButton = class(TGraphicControl)
  private
    { Private declarations }
    FMouseOver:boolean;
    FPushDown:boolean;
    FColor: TColor;
    FGlyph: TBitmap;
    FGrayed:Tbitmap;
    FGray:boolean;
    FFlat: boolean;
    FShape: TrbsShape;
    FHotTrackColor: TColor;
    FTrackGlyph: boolean;
    procedure SetColor(const Value: TColor);
    procedure SetGlyph(const Value: TBitmap);
    procedure SetFlat(const Value: boolean);
    procedure SetShape(const Value: TrbsShape);
    procedure SetHotTrackColor(const Value: TColor);
    procedure MakeGrayed;
    procedure SetGray(const Value: boolean);
    procedure SetTrackGlyph(const Value: boolean);
  protected
    { Protected declarations }
    procedure Loaded; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
    procedure CMMouseLeave(var Message: TMessage); message CM_MouseLeave;
    procedure CMMouseEnter(var Message: TMessage); message CM_MouseEnter;
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
    procedure GlyphChanged(sender:TObject);

  public
    { Public declarations }
    procedure Paint; override;
    constructor Create(AOwner:Tcomponent);override;
    destructor  Destroy; override;
  published
    { Published declarations }
    property Color:TColor read FColor write SetColor;
    Property Glyph:TBitmap read FGlyph write SetGlyph;
    property Gray:boolean read FGray write SetGray;
    property TrackGlyph:boolean read FTrackGlyph write SetTrackGlyph;
    property Flat:boolean read FFlat write SetFlat;
    property Align;
    {Determines how the control aligns within its container (parent control).}
    property Shape:TrbsShape read FShape write SetShape;
    property Font;
    {Controls the attributes of text written on the button.}
    property HotTrackColor:TColor read FHotTrackColor write SetHotTrackColor;
    property Caption;
    {Specifies a text string that identifies the control to the user.}
    property Constraints;
    {Specifies the size constraints for the control.}
    property Hint;
    {Contains the text string that can appear when the user moves the mouse over the button.}
    property ShowHint;
    {Determines whether the control displays a Help Hint when the mouse pointer rests momentarily on the control. }
    property onclick; //event
    {Occurs when the user clicks the button.}
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('janBasic', [TjanRoundedButton]);
end;




{ TjanRoundedButton }

procedure TjanRoundedButton.CMFontChanged(var Message: TMessage);
begin
  invalidate;
end;

procedure TjanRoundedButton.CMMouseEnter(var Message: TMessage);
begin
  FMouseOver := true;
  invalidate;
end;

procedure TjanRoundedButton.CMMouseLeave(var Message: TMessage);
begin
  FMouseOver := false;
  invalidate;

end;

procedure TjanRoundedButton.CMTextChanged(var Message: TMessage);
begin
  invalidate;
end;

constructor TjanRoundedButton.Create(AOwner: Tcomponent);
begin
  inherited;
  width:=81;
  height:=33;
  FPushDown := false;
  FMouseOver := false;
  FColor:=clsilver;
  FHotTrackColor:=clblue;
  FFlat := true;
  Fshape:=rbsRounded;
  FGlyph:=TBitmap.create;
  FGrayed:=TBitmap.create;
  FGlyph.onchange:=Glyphchanged;
  FGray:=true;
  FTrackGlyph:=true;
end;

destructor TjanRoundedButton.Destroy;
begin
  FGlyph.free;
  FGrayed.free;
  inherited;

end;

procedure TjanRoundedButton.GlyphChanged(sender: TObject);
begin
  invalidate;
end;

procedure TjanRoundedButton.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FPushDown:=true;
  invalidate;
  inherited;

end;

procedure TjanRoundedButton.MouseUp(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FPushDown:=false;
  invalidate;
  inherited;

end;


procedure TjanRoundedButton.Paint;
var
   rgn :Hrgn;
   tlpoly,brpoly: array[0..2] of TPoint;
   clippoly,poly:array[0..7] of TPoint;
   i:integer;
   cr,xw,yh:integer;
   R,RCap:Trect;
   hiColor,loColor:Tcolor;
   dx,dy:integer;
   x4:integer;
   bm:TBitmap;

  procedure drawcaption;
  begin
    if FGlyph<>nil then
    begin
      if FGray then
        bm:=FGrayed
      else
        bm:=Fglyph;
      if Fmouseover and FTrackGlyph then
        bm:=FGlyph;
      case FShape of
      rbsRounded:
        rgn:=CreateRoundRectRgn(left+1,top+1,left+xw-1,top+yh-1,cr,cr);
      rbsEllipse:
        rgn:=CreateEllipticRgn(left+1,top+1,left+xw-1,top+yh-1);
      rbsOctagon:
        rgn :=  CreatePolygonRgn(clippoly,8,WINDING);
      end;
      SelectClipRgn(Canvas.handle,rgn);
      bm.transparent:=true;
      dx:=(width-bm.width) div 2;
      dy:=(height-bm.height) div 2;
      if FPushDown then
       canvas.Draw (dx+2,dy+1,bm)
      else
       canvas.Draw (dx+1,dy,bm);
      SelectClipRgn(Canvas.handle,0);
      DeleteObject(rgn);
    end;
    canvas.brush.style := bsclear;
    if (Fmouseover) and (not FPushDown) then
      canvas.font.color := FHotTrackColor
    else
      canvas.font.color := Font.color;
    DrawText(canvas.handle, @Caption[1], -1, Rcap, DT_SINGLELINE or DT_VCENTER or DT_CENTER or DT_END_ELLIPSIS);
  end;

  procedure drawframe;
  begin
   rgn :=  CreatePolygonRgn(tlpoly,3,WINDING);
   SelectClipRgn(Canvas.handle,rgn);
   with canvas do
   begin
     brush.color:=FColor;
     pen.color:=hiColor;
     case Fshape of
     rbsRounded:
       RoundRect(0,0,xw,yh,cr,cr);
     rbsEllipse:
       Ellipse(0,0,xw,yh);
     rbsoctagon:
       Polygon(poly)
     end;
   end;
   SelectClipRgn(Canvas.handle,0);
   DeleteObject(rgn);
   rgn :=  CreatePolygonRgn(brpoly,3,WINDING);
   SelectClipRgn(Canvas.handle,rgn);
   with canvas do
   begin
     brush.color:=FColor;
     pen.color:=loColor;
     case Fshape of
     rbsRounded:
       RoundRect(0,0,xw,yh,cr,cr);
     rbsEllipse:
       Ellipse(0,0,xw,yh);
     rbsoctagon:
       Polygon(poly)
     end;
   end;
   SelectClipRgn(Canvas.handle,0);
   DeleteObject(rgn);
  end;

begin
  canvas.font.Assign(Font);
  canvas.brush.style:=bssolid;
  R := Rect(0, 0, width, height);
  Rcap := Rect(0, 0, width-1, height-1);
  if FPushDown then
  begin
    RCap.left := Rcap.left + 1;
    RCap.top := RCap.top + 1;
    RCap.Right := RCap.right + 1;
    RCap.Bottom := Rcap.Bottom + 1;
  end;
   xw:=width-1;
   yh:=height-1;
   cr:=width div 4;
   x4:=width div 4;
   // octagon shape
   case FShape of
     rbsOctagon:
     begin
       poly[0]:=point(x4,0);
       poly[1]:=point(xw-x4,0);
       poly[2]:=point(xw-1,x4);
       poly[3]:=point(xw-1,yh-x4);
       poly[4]:=point(xw-x4,yh-1);
       poly[5]:=point(x4,yh-1);
       poly[6]:=point(0,yh-x4);
       poly[7]:=point(0,x4);
       clippoly[0]:=point(left+x4,top+1);
       clippoly[1]:=point(left+xw-x4,top+1);
       clippoly[2]:=point(left+xw-2,top+x4);
       clippoly[3]:=point(left+xw-2,top+yh-x4);
       clippoly[4]:=point(left+xw-x4,top+yh-2);
       clippoly[5]:=point(left+x4,top+yh-2);
       clippoly[6]:=point(left+1,top+yh-x4);
       clippoly[7]:=point(left+1,top+x4);
     end
   end;
   // topleft region
   tlpoly[0]:=point(left,top+yh);
   tlpoly[1]:=point(left,top);
   tlpoly[2]:=point(left+xw,top);
   // bottom right region
   brpoly[0]:=point(left+xw,top);
   brpoly[1]:=point(left+xw,top+yh);
   brpoly[2]:=point(left,top+yh);
   canvas.pen.style:=pssolid;
  if (csDesigning in ComponentState) then
  begin
    hiColor:=clwhite;
    locolor:=clblack;
    drawframe;
    drawcaption;
  end
  else if FPushDown then
  begin // depressed button
    hiColor:=clblack;
    locolor:=clwhite;
    drawframe;
    drawcaption;
  end
  else if FMouseOver or (not FFlat) then
  begin // raised button with normal caption
    hiColor:=clwhite;
    locolor:=clblack;
    drawframe;
    drawcaption;
  end
  else
  begin // flat button with normal caption
    canvas.pen.style:=psclear;
    hiColor:=clwhite;
    locolor:=clblack;
    drawframe;
    drawcaption;
  end;
end;

procedure TjanRoundedButton.SetColor(const Value: TColor);
begin
  if value <> FColor then
  begin
    FColor := Value;
    invalidate;
  end;
end;

procedure TjanRoundedButton.SetFlat(const Value: boolean);
begin
  FFlat := Value;
end;

procedure TjanRoundedButton.SetGlyph(const Value: TBitmap);
begin
  FGlyph.assign(Value);
  if FGlyph<>nil then
  begin
    FGlyph.transparent:=true;
    MakeGrayed;
  end
end;

procedure TjanRoundedButton.MakeGrayed;
var g,x,y,w,h:integer;
    p1,p2:Pbytearray;
begin
  w:=FGlyph.width;
  h:=FGlyph.height;
  FGrayed.width:=w;
  FGrayed.height:=h;
  FGlyph.PixelFormat:=pf24bit;
  FGrayed.PixelFormat :=pf24bit;
  for y:=0 to h-1 do
  begin
    p1:=FGlyph.ScanLine [y];
    p2:=FGrayed.ScanLine [y];
    for x:=0 to w-1 do
    begin
      g:=(p1[x*3]+p1[x*3+1]+p1[x*3+2]) div 3;
      p2[x*3]:=g;
      p2[x*3+1]:=g;
      p2[x*3+2]:=g;
    end;
  end;
end;

procedure TjanRoundedButton.SetHotTrackColor(const Value: TColor);
begin
  FHotTrackColor := Value;
end;

procedure TjanRoundedButton.SetShape(const Value: TrbsShape);
begin
  FShape := Value;
  invalidate;
end;

procedure TjanRoundedButton.SetGray(const Value: boolean);
begin
  if FGray<>value then
  begin
   FGray := Value;
   invalidate;
  end;
end;

procedure TjanRoundedButton.SetTrackGlyph(const Value: boolean);
begin
  if FTrackGlyph<>value then
  begin
    FTrackGlyph := Value;
    if FTrackGlyph then
      Gray:=true;
  end;
end;

procedure TjanRoundedButton.Loaded;
begin
  inherited;
  if FGlyph<>nil then
  begin
    MakeGrayed;
    invalidate;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费9x9x人网站视频| 中文字幕一区二区在线播放| 欧美午夜一区二区三区免费大片| 最新国产の精品合集bt伙计| www.亚洲激情.com| 1区2区3区国产精品| 在线观看国产日韩| 日韩电影一区二区三区四区| 日韩一二在线观看| 国产精品综合网| 中文字幕一区二区三| 欧美亚洲综合在线| 久久97超碰国产精品超碰| 国产女同性恋一区二区| 色综合久久中文字幕综合网| 亚洲一区二区三区激情| 欧美成人欧美edvon| 不卡一区在线观看| 丝袜美腿亚洲综合| 国产人成一区二区三区影院| 91蜜桃网址入口| 美女视频黄久久| 国产精品护士白丝一区av| 欧美日精品一区视频| 国内精品视频666| 亚洲激情在线激情| 亚洲精品一线二线三线无人区| 99精品视频一区| 麻豆国产精品官网| 亚洲免费在线电影| 欧美一级免费大片| 色综合婷婷久久| 激情小说欧美图片| 亚洲一区二区三区影院| 久久天天做天天爱综合色| 日本高清免费不卡视频| 国产精品一区二区x88av| 亚洲小少妇裸体bbw| 国产色婷婷亚洲99精品小说| 欧美欧美欧美欧美| 91精彩视频在线观看| 国产尤物一区二区在线| 一级女性全黄久久生活片免费| 欧美精品一区二区三区高清aⅴ | 怡红院av一区二区三区| 精品国产免费人成在线观看| 欧美性猛交xxxxxx富婆| 东方欧美亚洲色图在线| 久久综合综合久久综合| 亚洲成人免费影院| 亚洲免费观看高清| 国产亚洲成年网址在线观看| 欧美一区二区国产| 欧美日韩一区二区在线视频| www.色精品| 成人永久看片免费视频天堂| 久久99久国产精品黄毛片色诱| 亚洲香肠在线观看| 一区二区在线电影| 国产精品国产馆在线真实露脸| 26uuu亚洲综合色欧美| 欧美精品一级二级三级| 日本韩国视频一区二区| 99re这里只有精品视频首页| 国产成人免费av在线| 国产麻豆精品95视频| 狂野欧美性猛交blacked| 日本麻豆一区二区三区视频| 亚洲18色成人| 香蕉av福利精品导航| 亚洲国产视频a| 亚洲国产一区二区视频| 亚洲一区av在线| 亚洲影视在线播放| 亚洲成国产人片在线观看| 亚洲一区二区精品3399| 首页国产欧美久久| 日日欢夜夜爽一区| 免费在线欧美视频| 裸体在线国模精品偷拍| 国产在线精品一区二区夜色| 国产专区综合网| 国产一区视频在线看| 国产成人av电影在线| 丁香啪啪综合成人亚洲小说 | 激情文学综合网| 免费黄网站欧美| 裸体歌舞表演一区二区| 黄色小说综合网站| 国产精品1区二区.| 成人精品在线视频观看| 91一区一区三区| 91官网在线观看| 这里只有精品电影| 26uuu欧美| 成人免费在线观看入口| 亚洲午夜激情av| 麻豆国产精品官网| 丰满亚洲少妇av| 一本高清dvd不卡在线观看| 欧美在线观看一二区| 欧美一区二区成人6969| 精品剧情v国产在线观看在线| 久久久精品人体av艺术| 亚洲免费在线播放| 久久国产精品色| 成人av资源网站| 欧美伦理电影网| 久久久91精品国产一区二区三区| 成人欧美一区二区三区视频网页| 亚洲综合一二区| 久久精品国产成人一区二区三区| 成人性生交大片免费看在线播放| 日本韩国一区二区三区视频| 日韩一区二区视频在线观看| 国产精品青草久久| 婷婷中文字幕综合| 大尺度一区二区| 欧美精品v国产精品v日韩精品| 国产亚洲一区字幕| 亚洲国产精品一区二区www在线| 久久91精品久久久久久秒播| 91免费国产在线| 精品国产一区二区三区久久影院 | 韩日av一区二区| 色综合天天综合狠狠| 精品国产一区久久| 亚洲不卡在线观看| 成人国产精品免费观看视频| 日韩精品一区二区三区在线观看| 亚洲视频中文字幕| 国内精品伊人久久久久av影院| 欧美在线视频全部完| 国产精品看片你懂得| 狠狠久久亚洲欧美| 制服视频三区第一页精品| 亚洲乱码日产精品bd| 国产成人在线观看免费网站| 91精品国产综合久久精品| 一卡二卡三卡日韩欧美| 97久久超碰精品国产| 久久久噜噜噜久噜久久综合| 视频一区视频二区在线观看| 99re成人在线| 中文字幕精品一区| 国产在线精品不卡| 日韩一区二区三区免费看| 亚洲一区国产视频| 91无套直看片红桃| 国产精品黄色在线观看| 成人av在线一区二区| 久久久精品黄色| 国模娜娜一区二区三区| 欧美一区二区三区婷婷月色| 亚洲电影第三页| 欧美视频日韩视频| 亚洲黄网站在线观看| 91小视频在线| 亚洲日本青草视频在线怡红院 | 久久综合色8888| 美腿丝袜亚洲综合| 91精品国产高清一区二区三区蜜臀 | 国产视频一区二区在线观看| 国产美女精品人人做人人爽| 精品日韩在线一区| 韩国精品久久久| 久久久99久久| 成人高清视频在线观看| 亚洲色图欧美激情| 在线看一区二区| 亚洲老司机在线| 欧美性视频一区二区三区| 亚洲丶国产丶欧美一区二区三区| 欧美在线视频日韩| 日韩电影在线看| 欧美精品一区二区蜜臀亚洲| 国产伦精一区二区三区| 国产无一区二区| voyeur盗摄精品| 亚洲一二三专区| 欧美一级片免费看| 国产成人av电影免费在线观看| 中文字幕在线一区| 日本韩国欧美三级| 日本伊人色综合网| 久久久一区二区三区| 波多野结衣中文字幕一区 | 国产亲近乱来精品视频| k8久久久一区二区三区| 亚洲综合视频网| 日韩一区二区视频| 成人白浆超碰人人人人| 一区二区免费在线| 欧美成人伊人久久综合网| 国产成+人+日韩+欧美+亚洲| 樱桃视频在线观看一区| 欧美成人高清电影在线| www.色精品| 美女视频免费一区| 亚洲色图视频网|