-------- KvLabel.pas --------//--------------------------------------------------------------------------- //(R)CopyRight KivenSoft International ,inc 1999 //单元名称:三维带超链接Label //作 者:李会文 //开始时间:1999.03.21 //最后修改:1999.06.29 //--------------------------------------------------------------------------- unit KvLabel;interfaceuses Windows, Classes, Graphics, StdCtrls, Messages, Controls;type TDrawType=(dtNone,dtLowered,dtRaised); TKvLabel=class(TLabel) private FDrawType:TDrawType; FVCenter:boolean; FAboveColor:TColor; FOldColor:TColor; FLinkType:boolean; procedure SetDrawType(DrawType:TDrawType); procedure SetVCenter(Value:boolean); procedure CMMouseEnter(var Msg:TMessage);message CM_MOUSEENTER; procedure CMMouseLeave(var Msg:TMessage);message CM_MOUSELEAVE; protected procedure Paint;override; procedure DoDrawText(var Rect:TRect;Flags:Longint);override; published property DrawType:TDrawType read FDrawType write SetDrawType default dtLowered; //三维显示方式 property VCenter:boolean read FVCenter write SetVCenter default false; property LinkType:Boolean read FLinkType write FLinkType default false; //是否允许超链接方式 property AboveColor:TColor read FAboveColor write FAboveColor default clBlue; //超链接方式为真时鼠标在上方时的字体颜色 public constructor Create(AOwner:TComponent);override; end;procedure Register;implementationprocedure Register; begin RegisterComponents('Srm Project',[TKvLabel]); end;constructor TKvLabel.Create(AOwner:TComponent); begin inherited Create(AOwner); FDrawType:=dtLowered; FAboveColor:=clBlue; FVCenter:=false; FLinkType:=false; end;procedure TKvLabel.Paint; const Alignments:array[TAlignment] of Word=(DT_LEFT,DT_RIGHT,DT_CENTER); var Rect:TRect; begin with Canvas do begin if not Transparent then begin Brush.Color:=Self.Color; Brush.Style:=bsSolid; FillRect(ClientRect); end; Brush.Style:=bsClear; Rect:=ClientRect; if VCenter then DoDrawText(Rect,(DT_EXPANDTABS or DT_SINGLELINE or DT_VCENTER) or Alignments[Alignment]) else DoDrawText(Rect,(DT_EXPANDTABS or DT_WORDBREAK) or Alignments[Alignment]); end; end;procedure TKvLabel.DoDrawText(var Rect:TRect;Flags:Longint); var Text:string; TempRect:TRect; begin Text:=GetLabelText; TempRect:=Rect; if (Flags and DT_CALCRECT <> 0) and ((Text='') or ShowAccelChar and (Text[1]='&') and (Text[2]=#0)) then Text:=Text + ' '; if not ShowAccelChar then Flags:=Flags or DT_NOPREFIX; Canvas.Font:=Font; if not Enabled then Canvas.Font.Color:=clGrayText else begin case DrawType of dtLowered: begin OffsetRect(TempRect,1,1); Canvas.Font.Color:=clWhite; DrawText(Canvas.Handle,pchar(Text),Length(Text),TempRect,Flags); OffsetRect( TempRect,-1,-1); Canvas.Font.Color:=Font.Color; end; dtRaised: begin OffsetRect( TempRect,-1,-1); Canvas.Font.Color:=clWhite; DrawText(Canvas.Handle,pchar(Text),Length(Text),TempRect,Flags); TempRect:=Rect; OffsetRect(TempRect,1,1); Canvas.Font.Color:=Font.Color; end; end; end; DrawText(Canvas.Handle,PChar(Text),Length(Text),TempRect,Flags); if (Enabled) and (FDrawType<>dtNone) then begin Rect.Top:=Rect.Top-1; Rect.Left:=Rect.Left-1; end; end;procedure TKvLabel.SetDrawType(DrawType:TDrawType); begin FDrawType:=DrawType; Invalidate; end;procedure TKvLabel.SetVCenter(Value:Boolean); begin FVCenter:=Value; WordWrap:=not Value; Invalidate; end;procedure TKvLabel.CMMouseEnter(var Msg:TMessage); begin if FLinkType then begin Cursor:=crHandPoint; FOldColor:=Font.Color; Font.Color:=FAboveColor; Font.Style:=Font.Style+[fsUnderline]; end; end;procedure TKvLabel.CMMouseLeave(var Msg:TMessage); begin if FLinkType then begin Cursor:=crDefault; Font.Color:=FOldColor; Font.Style:=Font.Style-[fsUnderline]; end; end;end.
//(R)CopyRight KivenSoft International ,inc 1999
//单元名称:三维带超链接Label
//作 者:李会文
//开始时间:1999.03.21
//最后修改:1999.06.29
//---------------------------------------------------------------------------
unit KvLabel;interfaceuses
Windows, Classes, Graphics, StdCtrls, Messages, Controls;type
TDrawType=(dtNone,dtLowered,dtRaised); TKvLabel=class(TLabel)
private
FDrawType:TDrawType;
FVCenter:boolean;
FAboveColor:TColor;
FOldColor:TColor;
FLinkType:boolean;
procedure SetDrawType(DrawType:TDrawType);
procedure SetVCenter(Value:boolean);
procedure CMMouseEnter(var Msg:TMessage);message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg:TMessage);message CM_MOUSELEAVE;
protected
procedure Paint;override;
procedure DoDrawText(var Rect:TRect;Flags:Longint);override;
published
property DrawType:TDrawType read FDrawType write SetDrawType default dtLowered; //三维显示方式
property VCenter:boolean read FVCenter write SetVCenter default false;
property LinkType:Boolean read FLinkType write FLinkType default false; //是否允许超链接方式
property AboveColor:TColor read FAboveColor write FAboveColor default clBlue; //超链接方式为真时鼠标在上方时的字体颜色
public
constructor Create(AOwner:TComponent);override;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Srm Project',[TKvLabel]);
end;constructor TKvLabel.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FDrawType:=dtLowered;
FAboveColor:=clBlue;
FVCenter:=false;
FLinkType:=false;
end;procedure TKvLabel.Paint;
const
Alignments:array[TAlignment] of Word=(DT_LEFT,DT_RIGHT,DT_CENTER);
var
Rect:TRect;
begin
with Canvas do
begin
if not Transparent then
begin
Brush.Color:=Self.Color;
Brush.Style:=bsSolid;
FillRect(ClientRect);
end;
Brush.Style:=bsClear;
Rect:=ClientRect;
if VCenter then DoDrawText(Rect,(DT_EXPANDTABS or DT_SINGLELINE or DT_VCENTER) or Alignments[Alignment])
else DoDrawText(Rect,(DT_EXPANDTABS or DT_WORDBREAK) or Alignments[Alignment]);
end;
end;procedure TKvLabel.DoDrawText(var Rect:TRect;Flags:Longint);
var
Text:string;
TempRect:TRect;
begin
Text:=GetLabelText;
TempRect:=Rect;
if (Flags and DT_CALCRECT <> 0) and ((Text='') or ShowAccelChar and
(Text[1]='&') and (Text[2]=#0)) then Text:=Text + ' ';
if not ShowAccelChar then Flags:=Flags or DT_NOPREFIX;
Canvas.Font:=Font;
if not Enabled then Canvas.Font.Color:=clGrayText
else
begin
case DrawType of
dtLowered:
begin
OffsetRect(TempRect,1,1);
Canvas.Font.Color:=clWhite;
DrawText(Canvas.Handle,pchar(Text),Length(Text),TempRect,Flags);
OffsetRect( TempRect,-1,-1);
Canvas.Font.Color:=Font.Color;
end;
dtRaised:
begin
OffsetRect( TempRect,-1,-1);
Canvas.Font.Color:=clWhite;
DrawText(Canvas.Handle,pchar(Text),Length(Text),TempRect,Flags);
TempRect:=Rect;
OffsetRect(TempRect,1,1);
Canvas.Font.Color:=Font.Color;
end;
end;
end;
DrawText(Canvas.Handle,PChar(Text),Length(Text),TempRect,Flags);
if (Enabled) and (FDrawType<>dtNone) then
begin
Rect.Top:=Rect.Top-1;
Rect.Left:=Rect.Left-1;
end;
end;procedure TKvLabel.SetDrawType(DrawType:TDrawType);
begin
FDrawType:=DrawType;
Invalidate;
end;procedure TKvLabel.SetVCenter(Value:Boolean);
begin
FVCenter:=Value;
WordWrap:=not Value;
Invalidate;
end;procedure TKvLabel.CMMouseEnter(var Msg:TMessage);
begin
if FLinkType then
begin
Cursor:=crHandPoint;
FOldColor:=Font.Color;
Font.Color:=FAboveColor;
Font.Style:=Font.Style+[fsUnderline];
end;
end;procedure TKvLabel.CMMouseLeave(var Msg:TMessage);
begin
if FLinkType then
begin
Cursor:=crDefault;
Font.Color:=FOldColor;
Font.Style:=Font.Style-[fsUnderline];
end;
end;end.
//由于是dcr文件我将的16进制代码贴出0000000020000000FFFF0000FFFF0000000000000000000000000000000000008801000030000000FFFF020054004B0056004C004100420045004C0000000000000000003010190400000000000000002800000018000000180000000100040000000000200100000000000000000000000000001000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333FFFF3333333FFFF333333330000F3333330000F33333333300F333333330083333333333800F333333000F3333333333300833333800833333333333380000000000F333333333333300F333300833333333333333800F33000F333333333333333008380083333333333333333800F000F3333333333333333300000833333333333333333330000F333333333333333333000033333333333333333333333333333333333303303033033003303030003303033030303030303030303300333030303303300330003303033333333333333333333303303033333333333333333