社区
C++ Builder
帖子详情
如何实现如下功能(200分)
JWhiteHorse
2003-01-29 11:14:01
鼠标移入ComboBox控件,控件自动下拉,
移出ComboBox控件和下拉框,自动收缩。
...全文
55
11
打赏
收藏
如何实现如下功能(200分)
鼠标移入ComboBox控件,控件自动下拉, 移出ComboBox控件和下拉框,自动收缩。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
牧牛人软件
2003-01-30
打赏
举报
回复
Adayuer([±0℃]) 的建议很好!
补充一点BCB6是:
private: // User declarations
Classes::TWndMethod OldComBoxWP;
以前的版本是:
private: // User declarations
Controls::TWndMethod OldComBoxWP
孩皮妞野
2003-01-29
打赏
举报
回复
有事,说一下思路。
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
oldProc = ComboBox1->WindowProc;
ComboBox1->WindowProc = ComboProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboProc(TMessage& msg)
{
if(msg.Msg == CM_MOUSEENTER){
ComboBox1->Perform(CB_SHOWDROPDOWN,(WPARAM)TRUE,0);
::SetCapture(ComboBox1->Handle);
msg.Result = true;
}else if(msg.Msg == WM_MOUSEMOVE){
// 取得下拉区的位置。
RECT r;
ComboBox1->Perform(CB_GETDROPPEDCONTROLRECT,0,LPARAM(&r));
if(!点在r中或ComboBox1的客户区){
::ReleaseCapture(ComboBox1->Handle);
ComboBox1->Perform(CB_SHOWDROPDOWN,(WPARAM)FALSE,0);
}
msg.Result = true;
}else
oldProc(msg);
}
JWhiteHorse
2003-01-29
打赏
举报
回复
关键在于ComboBox的下拉框的移出事件比较难判断。
Libran
2003-01-29
打赏
举报
回复
关键在于如何捕获移入和移出事件,以前有过讨论,可以搜索一下
ComboBox的下拉和收缩,用ComboBox->DroppedDown属性就可以控制
Billy_Chen28
2003-01-29
打赏
举报
回复
发送下拉消息
大大怪老张
2003-01-29
打赏
举报
回复
哎呀,楼主下次把问题写在题目里,搜索的时候有的放矢.
牧牛人软件
2003-01-29
打赏
举报
回复
家里要安装BCB
favorit
2003-01-29
打赏
举报
回复
可惜在家里没有BCB,要不然也可以学习一下了:)
Jim3
2003-01-29
打赏
举报
回复
学习
牧牛人软件
2003-01-29
打赏
举报
回复
给你我的代码,下拉菜单名称较长EnrolDateComboBox,
加一个Timer1,Timer1->Enabled=false; Timer1->Interval=100;
*.h:
private: // User declarations
Classes::TWndMethod OldComBoxWP;
void __fastcall NewComBoxWP(TMessage &Msg);
//---------------------------------------------------------------------------
__fastcall TNoteForm::TNoteForm(TComponent* Owner)
: TForm(Owner)
{
OldComBoxWP = EnrolDateComboBox->WindowProc;
EnrolDateComboBox->WindowProc = NewComBoxWP;
}
//---------------------------------------------------------------------------
RECT r;
void __fastcall TNoteForm::Timer1Timer(TObject *Sender)
{
POINT pos;
GetCursorPos(&pos);
if(!(pos.x>r.left && pos.x<r.right && pos.y >r.top && pos.y < r.bottom)){
EnrolDateComboBox->DroppedDown=false;
Timer1->Enabled=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TNoteForm::NewComBoxWP(TMessage& msg)
{
switch (msg.Msg)
{
case CM_MOUSEENTER:
{
EnrolDateComboBox->DroppedDown=true;
msg.Result = true;
break;
}
case CM_MOUSELEAVE:
{
POINT pos;
Timer1->Enabled=true;
GetCursorPos(&pos);
EnrolDateComboBox->Perform(CB_GETDROPPEDCONTROLRECT,0,LPARAM(&r));
if(!(pos.x>r.left && pos.x<r.right && pos.y >r.top && pos.y < r.bottom)){//★★★当鼠标向下移时,就无法判断CM_MOUSELEAVE,在Timer1Timer()判断。
EnrolDateComboBox->DroppedDown=false;
}
msg.Result = true;
break;
}
case WM_DESTROY:
{
EnrolDateComboBox->WindowProc = OldComBoxWP;
break;
}
}
OldComBoxWP(msg);
}
有问题再问
nxyc_twz
2003-01-29
打赏
举报
回复
楼上写的不错,实际上就是检测鼠标位置(通过鼠标移动事件),然后发送鼠标单击消息(WM_LBUTTONDOWN)!
android listView顶部悬浮效果
实现
本篇文章将详细介绍如何在Android中
实现
ListView的顶部悬浮
功能
。 首先,我们理解一下“顶部悬浮”效果的原理。当ListView滚动时,如果某个列表项(如标题)到达顶部,它应该被固定在屏幕顶部,即使ListView继续...
android 获取相册列表的
实现
源码
该项目
实现
的
功能
如下: 获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以
实现
图片多选,然后进入所选择的图片界面,在该界面内可以
实现
所选图片的上传等
功能
。 该项目最大特色: 1...
Android中滑屏
实现
本篇文章将深入探讨如何在Android中
实现
滑屏
功能
,同时重点解析`Scroller`类的作用及其工作原理。 首先,要理解滑屏的基本概念。在Android中,滑屏通常是通过触摸事件(MotionEvent)来检测用户的滑动操作。当用户...
基于Unity3D简单UI框架
基于Unity3D和NGUI
实现
的简单的UI框架,
实现
内容如下 1.加载,显示,隐藏,关闭页面,根据标示获得相应界面实例 2.提供界面显示隐藏动画接口 3.单独界面层级,Collider,背景管理 4.根据存储的导航信息完成界面导航...
音乐播放器LitePlayer 源码实例下载(博文详解)
功能
介绍如下: 1、获取本地歌曲列表,
实现
歌曲播放
功能
。 2、利用硬件加速感应器,摇动手机
实现
切换歌曲的
功能
3、利用jsoup解析网页数据,从网络获取歌曲列表,同时
实现
歌曲和歌词下载到手机本地的
功能
。 4、通知...
C++ Builder
13,870
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章