哪位大侠知道如何捕捉该消息?急,在线等待

cb42239 2002-08-26 05:24:13
TLayoutPanel继承TPanel控件,已经完成了移动和改变大小的功能。
现在假设应用程序拥有三个TLayoutPanel控件pnl1, pnl2, pnl3,当用户的鼠标点击其中
pnl1时,能够在pnl1控件上有一个标记表示现在客户选的就是pnl1,如果用户随后点击pnl2
此时pnl2上应该有此标记,而pnl1上没有。如果随后没有点击pnl2或pnl3,则标记总在pnl1
上。
我不知道要完成此功能应该重载TPanel的什么消息或事件,我重载了OnClick事件但是没
有完成此功能。
...全文
21 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bowhell 2002-08-27
  • 打赏
  • 举报
回复
其实你已走到边缘,既然在ONENTER处理聚焦事件,在ONEXIT中处理不再聚焦事件不就行了。我试了一下,OK。
cb42239 2002-08-26
  • 打赏
  • 举报
回复
Jerry529(在猪的海洋里遨游)
我的Panel是动态创建的,可能不止有3个,那就不能用procedure pnl1Onclick(Sender: TObject);
我声明了一个PanelClick(Sender: TObject)的函数,在动态生成TLayoutPanel时将pnl1.OnClick := PanelClick,pnl2.OnClick := PanelClick,pnl3.OnClick := PanelCLick.....
但是,我在调试该程序时单击了pnl1,pnl2...没有执行pnl1.OnClick,pnl1.OnClick,不知道为什么?
Jerry529 2002-08-26
  • 打赏
  • 举报
回复
FPnls: array[0..2]of TLayerPanel;

FPnls[0] := pnl1;
FPnls[1] := pnl2;
FPnls[2] := pnl3;

procedure pnl1Onclick(Sender: TObject);
begin
if Sender is TLayoutPanel then
with Sender as TLayoutPanel do
UpdatePnls(Name);
end;

procedure UpdatePnls(pnlname: string);
var
i: Integer;
begin
for i := Low(FPnls) to High(FPnls)
begin
//去除FPnls[i]的标记的语句
if FPnls[i].Name = pnlname then
begin
// 获得标记的语句;
end;
end;
end;
================================================================

曾经有一碗热辣辣的烧猪手面放在我面前,我没有珍惜,等到晾凉了之后才后悔莫及。

findcsdn 2002-08-26
  • 打赏
  • 举报
回复
gz
cb42239 2002-08-26
  • 打赏
  • 举报
回复
to y97523szb()
我重载了OnEnter事件但是没有完成此功能。能够具体说一下吗
闪光的小虫子 2002-08-26
  • 打赏
  • 举报
回复
事件OnEnter

别忘了给分!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧