求帮忙啊!!!delphi7 关于panel内的speedbutton和CM_MOUSEENTER,CM_MOUSELEAVE处理
要实现的是:当鼠标移动到speedbutton上时,窗口标题显示“欢迎”,离开显示‘‘再见’’。注意是在panel内部的speedbutton,speedbutton放在...
要实现的是:当鼠标移动到speedbutton上时,窗口标题显示 “欢迎”,离开显示‘‘再见’’。
注意是在panel内部的speedbutton,speedbutton放在窗口下的话,我可以实现它了,但是放在内部的话没有反应,不知道为什么,求高手帮忙!!附上我的代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
pnl1: TPanel;
speedbut: TSpeedButton;
private
{ Private declarations }
procedure MSGEnter(var msg:TMessage);message CM_MOUSEENTER;//响应进入的消息
procedure MSGLeave(var msg: TMessage);message CM_MOUSELEAVE;//响应离开的消息
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MSGEnter(var msg: TMessage);
var
myobj : TObject;
begin
myobj := TObject(msg.LParam);//用LParam进行判断鼠标进入了哪个控件
if (myobj <> nil) and (myobj is TSpeedButton) then
if TSpeedButton(myobj).Name = 'speedbut' then
begin
Form1.Caption:='欢迎!';
end;
end;
procedure TForm1.MSGLeave(var msg: TMessage);
var
myobj : TObject;
begin
myobj := TObject(msg.LParam);
if (myobj <> nil) and (myobj is TSpeedButton) then
if TSpeedButton(myobj).Name = 'speedbut' then
Form1.Caption:='再见!'
end;
end. 展开
注意是在panel内部的speedbutton,speedbutton放在窗口下的话,我可以实现它了,但是放在内部的话没有反应,不知道为什么,求高手帮忙!!附上我的代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
pnl1: TPanel;
speedbut: TSpeedButton;
private
{ Private declarations }
procedure MSGEnter(var msg:TMessage);message CM_MOUSEENTER;//响应进入的消息
procedure MSGLeave(var msg: TMessage);message CM_MOUSELEAVE;//响应离开的消息
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MSGEnter(var msg: TMessage);
var
myobj : TObject;
begin
myobj := TObject(msg.LParam);//用LParam进行判断鼠标进入了哪个控件
if (myobj <> nil) and (myobj is TSpeedButton) then
if TSpeedButton(myobj).Name = 'speedbut' then
begin
Form1.Caption:='欢迎!';
end;
end;
procedure TForm1.MSGLeave(var msg: TMessage);
var
myobj : TObject;
begin
myobj := TObject(msg.LParam);
if (myobj <> nil) and (myobj is TSpeedButton) then
if TSpeedButton(myobj).Name = 'speedbut' then
Form1.Caption:='再见!'
end;
end. 展开
展开全部
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Po : TPoint;
begin
Po.X := x;
Po.Y := y;
//判断该点是否在按钮的范围内
if PtInRect(Tcontrol(SpeedButton1).ClientRect,po) then
begin
Form1.Caption:='欢迎';
end
else
Form1.Caption:='88';
end
注意:这个是窗体的MouseMove,你把panel1和SpeedButton的MouseMove都关联上这个事件就可以了。
Y: Integer);
var
Po : TPoint;
begin
Po.X := x;
Po.Y := y;
//判断该点是否在按钮的范围内
if PtInRect(Tcontrol(SpeedButton1).ClientRect,po) then
begin
Form1.Caption:='欢迎';
end
else
Form1.Caption:='88';
end
注意:这个是窗体的MouseMove,你把panel1和SpeedButton的MouseMove都关联上这个事件就可以了。
展开全部
奇怪了
最简单的就是 在
SpeedButton的onMouseMove
写Form1.Caption:='欢迎';
Panel的onMouseMove
写Form1.Caption:='再见';
何必这么麻烦 反正鼠标移出SpeedButton 肯定会触发Panel的onMouseMove事件
最简单的就是 在
SpeedButton的onMouseMove
写Form1.Caption:='欢迎';
Panel的onMouseMove
写Form1.Caption:='再见';
何必这么麻烦 反正鼠标移出SpeedButton 肯定会触发Panel的onMouseMove事件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用的着写这么多代码吗?三句代码搞定.
procedure TForm1.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
Form1.Caption:='欢迎';
end;
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.Caption:='再见';
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.Caption:='小伎俩';
end;
end.
procedure TForm1.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
Form1.Caption:='欢迎';
end;
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.Caption:='再见';
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.Caption:='小伎俩';
end;
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你需要在panel里也添加鼠标移入移出事件。
type
TPanel=class(ExtCtrls.TPanel)
private
procedure MSGEnter(var msg: TMessage); message CM_MOUSEENTER;
procedure MSGLeave(var msg: TMessage); message CM_MOUSELEAVE;
end;
把你的代码放到对应的事件下就好了。
type
TPanel=class(ExtCtrls.TPanel)
private
procedure MSGEnter(var msg: TMessage); message CM_MOUSEENTER;
procedure MSGLeave(var msg: TMessage); message CM_MOUSELEAVE;
end;
把你的代码放到对应的事件下就好了。
追问
我的d7 版本没这个事件
追答
这个自己添加的,就像你的form里的也是添加的。你把上面那段声明放到TForm = class(TFORM)前面,然后按ctrl + shift + c生成代码,把form下的鼠标事件里的代码copy到对应的移入移出事件中去就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询