试试这个控件,有IMAGE AND LABEL 组成的。
unit ImageLabelSrc;interfaceUses messages,Classes, Controls, stdCtrls, extCtrls, Math, Graphics;//, AutoLabel;Type
TwjImageLabel=Class(TWinControl) // tpanel
Private
PriImage: TImage;
PriLabel: TLabel; //FOnClick: TNotifyEvent;
procedure WMLButtonDblClick(var Msg:TWMLButtonDblClk);message WM_LButtonDblClk;
Protected
fClockDblClick:TNotifyEvent;
Procedure Resize; override;
//Procedure MouseMove(Shift: TShiftState; X, Y: Integer);override; Function GetCaption: TCaption;
Procedure SetCaption(Const Value: TCaption);
Function GetPicture: TPicture;
Procedure SetPicture(Value: TPicture);
procedure ClockDblClick(sender:TObject);
//Function GetMoveColor: TColor;
//Procedure SetMoveColor(Value: TColor);
Public
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
Published
Property Name;
Property Font;
Property Enabled;
Property TabStop;
Property TabOrder;
Property ParentFont;
Property Hint;
Property ShowHint;
Property Color;
Property Visible;
Property Caption: TCaption Read GetCaption Write SetCaption;
Property Picture: TPicture Read GetPicture Write SetPicture;
//Property MoveColor: TColor Read GetMoveColor Write SetMoveColor; {Event}
//Property OnClick: TNotifyEvent Read FOnClick Write FOnClick;
//property OnClick;
property OnClockDblClick:TNotifyEvent
read fClockDblClick write fClockDblClick;
End;Procedure Register;implementationUses Dialogs;{ TwjImageLabel }
procedure TwjImageLabel.ClockDblClick;
begin
if Assigned(FClockDblClick) then
fClockDblClick(self);
end;procedure TwjImageLabel.WMLButtonDblClick(var Msg:TWMLButtonDblClk);
begin
inherited;
ClockDblClick(self);
end;constructor TwjImageLabel.Create(AOwner: TComponent);
begin
inherited;
TabStop:=True; PriImage:=TImage.Create(Self);
PriLabel:=TLabel.Create(Self);
PriImage.Parent:=Self;
PriLabel.Parent:=Self;
PriLabel.Caption:=Name;
PriLabel.AutoSize:=True;
PriLabel.Visible:=True;
//PriLabel.MoveColor:=clRed; Height:=Max(PriImage.Height, PriLabel.Height);
Width:=PriImage.Width+PriLabel.Width+2; PriImage.Left:=0;
PriImage.Top:=0;
PriLabel.Left:=PriImage.Width+2;
PriLabel.Top:=(Height-PriLabel.Height) Div 2; //PriLabel.OnDblClick:=ClockDblClick(self);
PriImage.OnDblClick:=ClockDblClick;
Prilabel.OnDblClick:=ClockDblClick;
end;destructor TwjImageLabel.Destroy;
begin
PriImage.Free;
PriLabel.Free; inherited;
end;function TwjImageLabel.GetCaption: TCaption;
begin
Result:=PriLabel.Caption;
end;{function TwjImageLabel.GetMoveColor: TColor;
begin
Result:=PriLabel.MoveColor;
end;
}
function TwjImageLabel.GetPicture: TPicture;
begin
Result:=PriImage.Picture;
end;{procedure TwjImageLabel.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
//PriLabel.MouseMove(Shift, X, Y);
end;
}
procedure TwjImageLabel.Resize;
begin
inherited; PriImage.Left:=0;
PriImage.Top:=0;
PriImage.Height:=Height;
PriImage.Width:=PriImage.Height; PriLabel.Left:=PriImage.Width+2;
PriLabel.Top:=(Height-PriLabel.Height) Div 2;
end;procedure TwjImageLabel.SetCaption(const Value: TCaption);
begin
PriLabel.Caption:=Value;
end;{procedure TwjImageLabel.SetMoveColor(Value: TColor);
begin
PriLabel.MoveColor:=Value;
end;
}
procedure TwjImageLabel.SetPicture(Value: TPicture);
begin
PriImage.Picture.Assign(Value);
end;Procedure Register;
Begin
RegisterComponents('Jerome Controls', [TwjImageLabel]);
End;end.
unit ImageLabelSrc;interfaceUses messages,Classes, Controls, stdCtrls, extCtrls, Math, Graphics;//, AutoLabel;Type
TwjImageLabel=Class(TWinControl) // tpanel
Private
PriImage: TImage;
PriLabel: TLabel; //FOnClick: TNotifyEvent;
procedure WMLButtonDblClick(var Msg:TWMLButtonDblClk);message WM_LButtonDblClk;
Protected
fClockDblClick:TNotifyEvent;
Procedure Resize; override;
//Procedure MouseMove(Shift: TShiftState; X, Y: Integer);override; Function GetCaption: TCaption;
Procedure SetCaption(Const Value: TCaption);
Function GetPicture: TPicture;
Procedure SetPicture(Value: TPicture);
procedure ClockDblClick(sender:TObject);
//Function GetMoveColor: TColor;
//Procedure SetMoveColor(Value: TColor);
Public
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
Published
Property Name;
Property Font;
Property Enabled;
Property TabStop;
Property TabOrder;
Property ParentFont;
Property Hint;
Property ShowHint;
Property Color;
Property Visible;
Property Caption: TCaption Read GetCaption Write SetCaption;
Property Picture: TPicture Read GetPicture Write SetPicture;
//Property MoveColor: TColor Read GetMoveColor Write SetMoveColor; {Event}
//Property OnClick: TNotifyEvent Read FOnClick Write FOnClick;
//property OnClick;
property OnClockDblClick:TNotifyEvent
read fClockDblClick write fClockDblClick;
End;Procedure Register;implementationUses Dialogs;{ TwjImageLabel }
procedure TwjImageLabel.ClockDblClick;
begin
if Assigned(FClockDblClick) then
fClockDblClick(self);
end;procedure TwjImageLabel.WMLButtonDblClick(var Msg:TWMLButtonDblClk);
begin
inherited;
ClockDblClick(self);
end;constructor TwjImageLabel.Create(AOwner: TComponent);
begin
inherited;
TabStop:=True; PriImage:=TImage.Create(Self);
PriLabel:=TLabel.Create(Self);
PriImage.Parent:=Self;
PriLabel.Parent:=Self;
PriLabel.Caption:=Name;
PriLabel.AutoSize:=True;
PriLabel.Visible:=True;
//PriLabel.MoveColor:=clRed; Height:=Max(PriImage.Height, PriLabel.Height);
Width:=PriImage.Width+PriLabel.Width+2; PriImage.Left:=0;
PriImage.Top:=0;
PriLabel.Left:=PriImage.Width+2;
PriLabel.Top:=(Height-PriLabel.Height) Div 2; //PriLabel.OnDblClick:=ClockDblClick(self);
PriImage.OnDblClick:=ClockDblClick;
Prilabel.OnDblClick:=ClockDblClick;
end;destructor TwjImageLabel.Destroy;
begin
PriImage.Free;
PriLabel.Free; inherited;
end;function TwjImageLabel.GetCaption: TCaption;
begin
Result:=PriLabel.Caption;
end;{function TwjImageLabel.GetMoveColor: TColor;
begin
Result:=PriLabel.MoveColor;
end;
}
function TwjImageLabel.GetPicture: TPicture;
begin
Result:=PriImage.Picture;
end;{procedure TwjImageLabel.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
//PriLabel.MouseMove(Shift, X, Y);
end;
}
procedure TwjImageLabel.Resize;
begin
inherited; PriImage.Left:=0;
PriImage.Top:=0;
PriImage.Height:=Height;
PriImage.Width:=PriImage.Height; PriLabel.Left:=PriImage.Width+2;
PriLabel.Top:=(Height-PriLabel.Height) Div 2;
end;procedure TwjImageLabel.SetCaption(const Value: TCaption);
begin
PriLabel.Caption:=Value;
end;{procedure TwjImageLabel.SetMoveColor(Value: TColor);
begin
PriLabel.MoveColor:=Value;
end;
}
procedure TwjImageLabel.SetPicture(Value: TPicture);
begin
PriImage.Picture.Assign(Value);
end;Procedure Register;
Begin
RegisterComponents('Jerome Controls', [TwjImageLabel]);
End;end.
解决方案 »
- 55555,我想向各位程序爱好者请教一个有关动态链接库调用出错的问题!
- 如何删除XML中的记录
- 如何处理ClientSocket丢包问题?
- 一个类型转换问题,菜鸟跪求解答,在线等~~~~~~~~~~
- 一个专于参数的问题
- 在程序中打开ppt文件,怎样做到跟在文件上右键选择“显示”一样??
- 有高手研究过这个看似简单但却不易实现的多窗口置顶问题吗?奢求指教!
- 请求给一个好用的excel导入SQL Server的例子,急,在线等!
- access的mdb数据库如何编程知道里面含有那几个表?
- 请问怎样用一个程序生成EXE文件?
- 完全控制WAV的播发,比如播发的次数等,该怎么做呢?
- 在数据库中查出了若干条记录,如何使这些记录依次执行一段循环
如
type TAllClickEvent=procedure (sender:TObject;......) of Object;
private
FOneClick:TAllClickEvent;
publish
property OneClick :TAllClickEvent read FOneClick write FOneClick;
private
FOneClick:TAllClickEvent;
procedure OneClicked(Sender:TObject);publish
property OneClick :TAllClickEvent read FOneClick write FOneClick;
procedure OneClicked(Sender:TObject);
begin
if Assigned (FOneClick) then
begin
//..........你要作的事
end;
end;
特点是, OnMouseMove时整个控件向上浮动一下。 离开控件时恢复平常。 内部有一个,关闭按钮,一个普通的象Button的东东. 现在控件间的通讯( 想用SendMessage),不知如何实现
当我Mouse 移动到控件中的一个Panel上时,控件中的另一个Panel也做OnMouse事件,
就是当移动到一个Panel, 发消息让另外一个也响应
procedure TXXXXX.CMMouseEnter(var Message: TMessage);
begin
FPanel1.Preform(CM_MouseEnter, 0, 0);
FPanel2.Perform(CM_MouseEnter, 0, 0);
FPanel3.Perform(CM_MouseEnter, 0, 0);
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons,extctrls;type
TMyCustomBitBtn = class(TPanel)
private
{ Private declarations }
FDown:boolean;
FBtnLeftCaption:String;
FBtnLeftWidth:Integer; //BtnLeftCaption: string;
FPickListLeft: TWinControl;
FPickListCancel: TWinControl;
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
protected
{ Protected declarations }
procedure CMMouseEnter(var Message: TMessage); message CM_MouseEnter;
procedure CMMouseLeave(var Message: TMessage); message CM_MouseLeave;
procedure MyMouseMove(var Message:TWMMouse); message WM_MOUSEMOVE;
procedure MyMouseDown(var Message:TWMMouse); message WM_LBUTTONDOWN;
procedure MyMouseUp(var Message:TWMMouse); message WM_LBUTTONUP; public
{ Public declarations }
published
{ Published declarations }
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
// Property BtnLeftCaption: string read FBtnLeftCaption write FBtnLeftCaption; end; TMyBackBitBtn=Class(TMyCustomBitbtn)
Private
protected
procedure CreateChildren;
// function GetBtnLeftCaption:String;
//function GetBtnLeftWidth:Integer;
//function GetBtnCancelCaption;
//function GetBtnCancelWidth:Integer;
procedure SetBtnLeftCaption(Value:String);
procedure SetBtnLeftWidth(Const Value:Integer);
//procedure SetBtnCancelCaption(Value:String);
//procedure SetBtnCancelWidth( Value:Integer);
procedure CMMouseEnter(var Message: TMessage);override; Public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
Published
//Property BtnLeftCaption: string read FBtnLeftCaption write FBtnLeftCaption;
Property BtnLeftCaption: string read FBtnLeftCaption write SetBtnLeftCaption ;
Property BtnLeftWidth: Integer read FBtnLeftWidth write SetBtnLeftWidth default 20;
//Property FBtnCancelCaption: string read GetBtnCancelCaption write SetBtnCancelCaption;
//Property FBtnCancelWidth: string read GetBtnCancelWidth write SetBtnCancelWidth;
end; TMyLeftBitBtn=Class(TMyCustomBitbtn)
Private
protected
procedure CMMouseEnter(var Message: TMessage);override;
Public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end; TMyCancelBitBtn=Class(TMyCustomBitbtn)
Private
protected
Public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [tMyCustomBitBtn,TMyBackBitBtn]);
end;{ TMyBitBtn }procedure TMyCustomBitBtn.CMMouseEnter(var Message: TMessage);
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(self);
end;procedure TMyCustomBitBtn.CMMouseLeave(var Message: TMessage);
begin
FDown:=false;
Tpanel(self).BevelInner:=BvNone;
Tpanel(self).BevelOuter:=BvNone;
if Assigned(FOnMouseLeave) then FOnMouseLeave(self);end;{procedure TMyCustomBitBtn.OnMouseMove(var Key: Char);
begin
inherited;
if FDown then exit;
Tpanel(self).BevelInner:=bvNone;
Tpanel(self).BevelOuter:=BvRaised;
end;
}
procedure TMyCustomBitBtn.MyMouseDown(var Message: TWMMouse);
begin
inherited;
//ShowMessage(' start');
Tpanel(self).BevelInner:=bvLowered;
Tpanel(self).BevelOuter:=BvNone;
FDown:=true;
end;procedure TMyCustomBitBtn.MyMouseMove;
begin
inherited;
//ShowMessage(' start');
if FDown then exit;
Tpanel(self).BevelInner:=bvNone;
Tpanel(self).BevelOuter:=BvRaised;
Tpanel(self).BorderStyle:=bsSingle;
end;
procedure TMyCustomBitBtn.MyMouseUp(var Message: TWMMouse);
begin
inherited;
//ShowMessage(' start');
//Tpanel(self).BevelInner:=bvNone;
//Tpanel(self).BevelOuter:=BvRaised;end;constructor TMyCancelBitBtn.Create(AOwner: TComponent);
begin
inherited;
Tpanel(self).BevelInner:=BvNone;
Tpanel(self).BevelOuter:=BvRaised;end;destructor TMyCancelBitBtn.Destroy;
begin
inherited Destroy;
end;procedure TMyLeftBitBtn.CMMouseEnter(var Message: TMessage);
//var TmpCancel:tMyCancelBitbtn;
begin
inherited;
//TmpCancel:=self.Parent.FindChildControl(TMyCancelBitbtn);
SendMessage(self.parent.handle,CM_MouseEnter,0,0);
//SendMessage(TMyCancelBitbtn,CM_MouseEnter,0,0);
end;constructor TMyLeftBitBtn.Create(AOwner: TComponent);
begin
inherited;
Tpanel(self).BevelInner:=BvNone;
Tpanel(self).BevelOuter:=BvRaised;
TPanel(self).Caption:=FBtnLeftCaption;end;destructor TMyLeftBitBtn.Destroy;
begin
inherited Destroy;
end;constructor TMyBackBitBtn.Create(AOwner: TComponent);
begin
inherited;
CreateChildren;
Tpanel(self).BevelInner:=BvNone;
Tpanel(self).BevelOuter:=BvNone;
end;procedure TMyBackBitBtn.CreateChildren;
begin
if not Assigned(FPickListCancel) then begin
FPickListCancel := TMyCancelBitbtn.Create(Self);
FPickListCancel.Parent := Self;
FPickListCancel.Visible := True;
FPickListCancel.Align:=alRight;
TPanel(FPickListCancel).BevelInner:=bvNone;
TPanel(FPickListCancel).BevelOuter:=bvNone;
TPanel(FPickListCancel).ParentFont := True;
end; if not Assigned(FPickListLeft) then begin
FPickListLeft := TMyLeftBitbtn.Create(Self);
FPickListLeft.Parent := Self;
FPickListLeft.Visible := True;
FPickListLeft.Align:=alClient; TPanel(FPickListLeft).Caption:=FBtnLeftCaption;
TPanel(FPickListLeft).BevelInner:=bvNone;
TPanel(FPickListLeft).BevelOuter:=bvNone;
TPanel(FPickListLeft).Width:=FBtnLeftWidth;
//TPanel(FPickListLeft).
end;
end;procedure TMyBackBitBtn.SetBtnLeftCaption(Value: String);
begin
// if Value='' then BtnLeftCaption:=''
// else if Value<>FBtnLeftCaption then
//ShowMessage(Value);
FBtnLeftCaption:=value;
end;
destructor TMyBackBitBtn.Destroy;
begin
inherited Destroy;
end;procedure TMyBackBitBtn.SetBtnLeftWidth(const Value: Integer);
begin
FBtnLeftWidth := Value;
end;procedure TMyBackBitBtn.CMMouseEnter(var Message: TMessage);
begin
inherited; // SELF.FlipChildren
// self.GetChildren(TMyCancelBitbtn,self);
//SendMessage(
end;end.