KvLabel.pas
上传用户:tj00001
上传日期:2007-01-07
资源大小:672k
文件大小:4k
源码类别:

行业应用

开发平台:

Delphi

  1. //---------------------------------------------------------------------------
  2. //(R)CopyRight KivenSoft International ,inc 1999
  3. //单元名称:三维带超链接Label
  4. //作    者:李会文
  5. //开始时间:1999.03.21
  6. //最后修改:1999.06.29
  7. //---------------------------------------------------------------------------
  8. unit KvLabel;
  9. interface
  10. uses
  11.   Windows, Classes, Graphics, StdCtrls, Messages, Controls;
  12. type
  13.   TDrawType=(dtNone,dtLowered,dtRaised);
  14.   TKvLabel=class(TLabel)
  15.   private
  16.     FDrawType:TDrawType;
  17.     FVCenter:boolean;
  18.     FAboveColor:TColor;
  19.     FOldColor:TColor;
  20.     FLinkType:boolean;
  21.     procedure SetDrawType(DrawType:TDrawType);
  22.     procedure SetVCenter(Value:boolean);
  23.     procedure CMMouseEnter(var Msg:TMessage);message CM_MOUSEENTER;
  24.     procedure CMMouseLeave(var Msg:TMessage);message CM_MOUSELEAVE;
  25.   protected
  26.     procedure Paint;override;
  27.     procedure DoDrawText(var Rect:TRect;Flags:Longint);override;
  28.   published
  29.     property DrawType:TDrawType read FDrawType write SetDrawType default dtLowered;  //三维显示方式
  30.     property VCenter:boolean read FVCenter write SetVCenter default false;
  31.     property LinkType:Boolean read FLinkType write FLinkType default false;  //是否允许超链接方式
  32.     property AboveColor:TColor read FAboveColor write FAboveColor default clBlue;  //超链接方式为真时鼠标在上方时的字体颜色
  33.   public
  34.     constructor Create(AOwner:TComponent);override;
  35.   end;
  36. procedure Register;
  37. implementation
  38. procedure Register;
  39. begin
  40.   RegisterComponents('Srm Project',[TKvLabel]);
  41. end;
  42. constructor TKvLabel.Create(AOwner:TComponent);
  43. begin
  44.   inherited Create(AOwner);
  45.   FDrawType:=dtLowered;
  46.   FAboveColor:=clBlue;
  47.   FVCenter:=false;
  48.   FLinkType:=false;
  49. end;
  50. procedure TKvLabel.Paint;
  51. const
  52.   Alignments:array[TAlignment] of Word=(DT_LEFT,DT_RIGHT,DT_CENTER);
  53. var
  54.   Rect:TRect;
  55. begin
  56.   with Canvas do
  57.   begin
  58.     if not Transparent then
  59.     begin
  60.       Brush.Color:=Self.Color;
  61.       Brush.Style:=bsSolid;
  62.       FillRect(ClientRect);
  63.     end;
  64.     Brush.Style:=bsClear;
  65.     Rect:=ClientRect;
  66.     if VCenter then DoDrawText(Rect,(DT_EXPANDTABS or DT_SINGLELINE or DT_VCENTER) or Alignments[Alignment])
  67.     else DoDrawText(Rect,(DT_EXPANDTABS or DT_WORDBREAK) or Alignments[Alignment]);
  68.   end;
  69. end;
  70. procedure TKvLabel.DoDrawText(var Rect:TRect;Flags:Longint);
  71. var
  72.   Text:string;
  73.   TempRect:TRect;
  74. begin
  75.   Text:=GetLabelText;
  76.   TempRect:=Rect;
  77.   if (Flags and DT_CALCRECT <> 0) and ((Text='') or ShowAccelChar and
  78.     (Text[1]='&') and (Text[2]=#0)) then Text:=Text + ' ';
  79.   if not ShowAccelChar then Flags:=Flags or DT_NOPREFIX;
  80.   Canvas.Font:=Font;
  81.   if not Enabled then Canvas.Font.Color:=clGrayText
  82.   else
  83.   begin
  84.     case DrawType of
  85.       dtLowered:
  86.         begin
  87.           OffsetRect(TempRect,1,1);
  88.           Canvas.Font.Color:=clWhite;
  89.           DrawText(Canvas.Handle,pchar(Text),Length(Text),TempRect,Flags);
  90.           OffsetRect( TempRect,-1,-1);
  91.           Canvas.Font.Color:=Font.Color;
  92.         end;
  93.       dtRaised:
  94.         begin
  95.           OffsetRect( TempRect,-1,-1);
  96.           Canvas.Font.Color:=clWhite;
  97.           DrawText(Canvas.Handle,pchar(Text),Length(Text),TempRect,Flags);
  98.           TempRect:=Rect;
  99.           OffsetRect(TempRect,1,1);
  100.           Canvas.Font.Color:=Font.Color;
  101.         end;
  102.     end;
  103.   end;
  104.   DrawText(Canvas.Handle,PChar(Text),Length(Text),TempRect,Flags);
  105.   if (Enabled) and (FDrawType<>dtNone) then
  106.   begin
  107.     Rect.Top:=Rect.Top-1;
  108.     Rect.Left:=Rect.Left-1;
  109.   end;
  110. end;
  111. procedure TKvLabel.SetDrawType(DrawType:TDrawType);
  112. begin
  113.   FDrawType:=DrawType;
  114.   Invalidate;
  115. end;
  116. procedure TKvLabel.SetVCenter(Value:Boolean);
  117. begin
  118.   FVCenter:=Value;
  119.   WordWrap:=not Value;
  120.   Invalidate;
  121. end;
  122. procedure TKvLabel.CMMouseEnter(var Msg:TMessage);
  123. begin
  124.   if FLinkType then
  125.   begin
  126.     Cursor:=crHandPoint;
  127.     FOldColor:=Font.Color;
  128.     Font.Color:=FAboveColor;
  129.     Font.Style:=Font.Style+[fsUnderline];
  130.   end;
  131. end;
  132. procedure TKvLabel.CMMouseLeave(var Msg:TMessage);
  133. begin
  134.   if FLinkType then
  135.   begin
  136.     Cursor:=crDefault;
  137.     Font.Color:=FOldColor;
  138.     Font.Style:=Font.Style-[fsUnderline];
  139.   end;
  140. end;
  141. end.