VrHyperLink.pas
上传用户:hbszzs
上传日期:2008-08-20
资源大小:628k
文件大小:7k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*****************************************************}
  2. {                                                     }
  3. {     Varian Component Workshop                       }
  4. {                                                     }
  5. {     Varian Software NL (c) 1996-2000                }
  6. {     All Rights Reserved                             }
  7. {                                                     }
  8. {*****************************************************}
  9. unit VrHyperLink;
  10. interface
  11. {$I VRLIB.INC}
  12. uses
  13.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  14.   VrClasses, VrControls, VrSysUtils;
  15. type
  16.   TVrHyperLink = class(TVrHyperLinkControl)
  17.   private
  18.     FAutoSize: Boolean;
  19.     FFontEnter: TFont;
  20.     FFontLeave: TFont;
  21.     FColorEnter: TColor;
  22.     FColorLeave: TColor;
  23.     FTextOutline: TVrTextOutline;
  24.     FAlignment: TAlignment;
  25.     FOrgSize: TPoint;
  26.     FHasMouse: Boolean;
  27.     FUpdateSize: Boolean;
  28.     procedure SetAutoSize(Value: Boolean);
  29.     procedure SetFontEnter(Value: TFont);
  30.     procedure SetFontLeave(Value: TFont);
  31.     procedure SetColorEnter(Value: TColor);
  32.     procedure SetColorLeave(Value: TColor);
  33.     procedure SetTextOutline(Value: TVrTextOutline);
  34.     procedure SetAlignment(Value: TAlignment);
  35.     procedure FontChanged(Sender: TObject);
  36.     procedure TextOutlineChanged(Sender: TObject);
  37.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  38.   protected
  39.     procedure AdjustClientSize;
  40.     procedure MouseEnter; override;
  41.     procedure MouseLeave; override;
  42.     procedure Paint; override;
  43.   public
  44.     constructor Create(AOwner: TComponent); override;
  45.     destructor Destroy; override;
  46.   published
  47.     property AutoSize: Boolean read FAutoSize write SetAutoSize default false;
  48.     property FontEnter: TFont read FFontEnter write SetFontEnter;
  49.     property FontLeave: TFont read FFontLeave write SetFontLeave;
  50.     property ColorEnter: TColor read FColorEnter write SetColorEnter default clBlue;
  51.     property ColorLeave: TColor read FColorLeave write SetColorLeave default clBlack;
  52.     property TextOutline: TVrTextOutline read FTextOutline write SetTextOutline;
  53.     property Alignment: TAlignment read FAlignment write SetAlignment default taCenter;
  54.     property Transparent default false;
  55.     property OnMouseEnter;
  56.     property OnMouseLeave;
  57.     property Align;
  58. {$IFDEF VER110}
  59.     property Anchors;
  60.     property BiDiMode;
  61.     property Constraints;
  62. {$ENDIF}
  63.     property Caption;
  64.     property DragCursor;
  65.     property DragMode;
  66. {$IFDEF VER110}
  67.     property DragKind;
  68. {$ENDIF}
  69.     property Enabled;
  70.     property ParentShowHint;
  71. {$IFDEF VER110}
  72.     property ParentBiDiMode;
  73. {$ENDIF}
  74.     property PopupMenu;
  75.     property ShowHint;
  76.     property Visible;
  77.     property OnClick;
  78. {$IFDEF VER130}
  79.     property OnContextPopup;
  80. {$ENDIF}    
  81.     property OnDragDrop;
  82.     property OnDragOver;
  83. {$IFDEF VER110}
  84.     property OnEndDock;
  85. {$ENDIF}
  86.     property OnEndDrag;
  87.     property OnMouseDown;
  88.     property OnMouseMove;
  89.     property OnMouseUp;
  90. {$IFDEF VER110}
  91.     property OnStartDock;
  92. {$ENDIF}
  93.     property OnStartDrag;
  94.   end;
  95. implementation
  96. { TVrHyperLink }
  97. constructor TVrHyperLink.Create(AOwner : TComponent);
  98. begin
  99.   inherited Create(AOwner);
  100.   ControlStyle := ControlStyle + [csOpaque] - [csDoubleClicks];
  101.   Width := 135;
  102.   Height := 32;
  103.   FFontEnter := TFont.Create;
  104.   with FFontEnter do
  105.   begin
  106.     Name := 'Arial';
  107.     Size := 12;
  108.     Color := clLime;
  109.     Style := Style + [fsBold, fsUnderline];
  110.     OnChange := FontChanged;
  111.   end;
  112.   FFontLeave := TFont.Create;
  113.   with FFontLeave do
  114.   begin
  115.     Name := 'Arial';
  116.     Size := 12;
  117.     Color := clGreen;
  118.     Style := Style + [fsBold, fsUnderline];
  119.     OnChange := FontChanged;
  120.   end;
  121.   FColorEnter := clBlue;
  122.   FColorLeave := clBlack;
  123.   FAutoSize := false;
  124.   FAlignment := taCenter;
  125.   FTextOutline := TVrTextOutline.Create;
  126.   FTextOutline.OnChange := TextOutlineChanged;
  127.   Transparent := false;
  128. end;
  129. destructor TVrHyperLink.Destroy;
  130. begin
  131.   FTextOutline.Free;
  132.   FFontEnter.Free;
  133.   FFontLeave.Free;
  134.   inherited Destroy;
  135. end;
  136. procedure TVrHyperLink.AdjustClientSize;
  137. var
  138.   P1, P2: TPoint;
  139.   NewWidth, NewHeight: Integer;
  140. begin
  141.   if Align <> alNone then
  142.     Align := alNone;
  143.   with BitmapCanvas do
  144.   begin
  145.     Font.Assign(FFontEnter);
  146.     P1 := Point(TextWidth(Caption), TextHeight(Caption));
  147.     Font.Assign(FFontLeave);
  148.     P2 := Point(TextWidth(Caption), TextHeight(Caption));
  149.   end;
  150.   NewWidth := MaxIntVal(P1.X, P2.X) + 4;
  151.   NewHeight := MaxIntVal(P1.Y, P2.Y) + 4;
  152.   BoundsRect := Bounds(Left, Top, NewWidth, NewHeight);
  153. end;
  154. procedure TVrHyperLink.Paint;
  155. var
  156.   P: TPoint;
  157.   MidX, MidY: Integer;
  158. begin
  159.   if FAutoSize then
  160.     if FUpdateSize or
  161.       (FOrgSize.X <> Width) or (FOrgSize.Y <> Height) then
  162.     begin
  163.       AdjustClientSize;
  164.       FOrgSize := Point(Width, Height);
  165.       FUpdateSize := false;
  166.       Update;
  167.     end;
  168.   if Transparent then ClearBitmapCanvas;
  169.   with BitmapCanvas do
  170.   begin
  171.     if FHasMouse and Enabled then
  172.     begin
  173.       Font.Assign(FFontEnter);
  174.       Brush.Color := FColorEnter;
  175.     end
  176.     else
  177.     begin
  178.       Font.Assign(FFontLeave);
  179.       Brush.Color := FColorLeave;
  180.     end;
  181.     if not Transparent then FillRect(ClientRect);
  182.     P := Point(TextWidth(Caption), TextHeight(Caption));
  183.     MidX := (ClientWidth - P.X) div 2;
  184.     MidY := (ClientHeight - P.Y) div 2;
  185.     case Alignment of
  186.       taLeftJustify: MidX := 2;
  187.       taRightJustify: MidX := ClientWidth - P.X - 2;
  188.     end;
  189.     if Transparent then Brush.Style := bsClear
  190.     else Brush.Style := bsSolid;
  191.     if FTextOutline.Visible then
  192.       DrawOutlinedText(BitmapCanvas, MidX, MidY, Caption, FTextOutline.Color, 1)
  193.     else TextOut(MidX, MidY, Caption);
  194.   end;
  195.   inherited Paint;
  196. end;
  197. procedure TVrHyperLink.SetAutoSize(Value: Boolean);
  198. begin
  199.   if FAutoSize <> Value then
  200.   begin
  201.     FAutoSize := Value;
  202.     UpdateControlCanvas;
  203.   end;
  204. end;
  205. procedure TVrHyperLink.SetFontEnter(Value: TFont);
  206. begin
  207.   FFontEnter.Assign(Value);
  208. end;
  209. procedure TVrHyperLink.SetFontLeave(Value: TFont);
  210. begin
  211.   FFontLeave.Assign(Value);
  212. end;
  213. procedure TVrHyperLink.SetColorEnter(Value: TColor);
  214. begin
  215.   if FColorEnter <> Value then
  216.   begin
  217.     FColorEnter := Value;
  218.     UpdateControlCanvas;
  219.   end;
  220. end;
  221. procedure TVrHyperLink.SetColorLeave(Value: TColor);
  222. begin
  223.   if FColorLeave <> Value then
  224.   begin
  225.     FColorLeave := Value;
  226.     UpdateControlCanvas;
  227.   end;
  228. end;
  229. procedure TVrHyperLink.SetAlignment(Value: TAlignment);
  230. begin
  231.   if FAlignment <> Value then
  232.   begin
  233.     FAlignment := Value;
  234.     UpdateControlCanvas;
  235.   end;
  236. end;
  237. procedure TVrHyperLink.SetTextOutline(Value: TVrTextOutline);
  238. begin
  239.   FTextOutline.Assign(Value);
  240. end;
  241. procedure TVrHyperLink.FontChanged(Sender: TObject);
  242. begin
  243.   FUpdateSize := True;
  244.   UpdateControlCanvas;
  245. end;
  246. procedure TVrHyperLink.TextOutlineChanged(Sender: TObject);
  247. begin
  248.   UpdateControlCanvas;
  249. end;
  250. procedure TVrHyperLink.MouseEnter;
  251. begin
  252.   FHasMouse := True;
  253.   UpdateControlCanvas;
  254.   inherited;
  255. end;
  256. procedure TVrHyperLink.MouseLeave;
  257. begin
  258.   FHasMouse := false;
  259.   UpdateControlCanvas;
  260.   inherited;
  261. end;
  262. procedure TVrHyperLink.CMTextChanged(var Message: TMessage);
  263. begin
  264.   inherited;
  265.   FUpdateSize := True;
  266.   UpdateControlCanvas;
  267. end;
  268. end.