社区
C++ Builder
帖子详情
小难题!!!!!
COKING
2003-01-12 12:05:17
怎么在SaveDialog没选定文件的时候,按《确定》键把它关掉?
...全文
75
16
打赏
收藏
小难题!!!!!
怎么在SaveDialog没选定文件的时候,按《确定》键把它关掉?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
COKING
2003-01-13
打赏
举报
回复
ok!!!!谢了!!!!@_@
「已注销」
2003-01-12
打赏
举报
回复
您预先写一个默认的filename 如“未命名”(当然 您得取一个再蹊跷点的 如 @未命名)
这样就可以支持“确定”了
你发现还是“未命名”
那么你就可以判断用户没有选中了
Friecin
2003-01-12
打赏
举报
回复
SaveDialog是封装WinAPI标准对话框的,如果你想这么做,就需要直接调用API函数,来进行调整:
int DialogBoxParam(HINSTANCE hinstance,LPCTSTR lpTemplateName,HWND hWndParent,DLGPROC lp DialogFunc,LPARAM dwInitParam);
具体我没有试验过。
还有,说说你的意图,也许可以用其他方式解决实际问题。
s98231106
2003-01-12
打赏
举报
回复
不知道
jishiping
2003-01-12
打赏
举报
回复
不知道楼主为什么要这样做?是不是想让用户选择一个目录啊?如果这样的话,可以使用
BCB的函数SelectDirectory就可以了。
bool __fastcall SelectDirectory(const AnsiString Caption, const WideString Root,
AnsiString &Directory);
jishiping
2003-01-12
打赏
举报
回复
用API写可以,但是用BCB的控件就不行了。
warton
2003-01-12
打赏
举报
回复
如果filename不为空,就可以了
l_clove
2003-01-12
打赏
举报
回复
SaveDialog在没选定的时候,filename不是""么,判断一下就可以了吧
jishiping
2003-01-12
打赏
举报
回复
这个方法,对于SaveDialog一样使用,因为"保存"和“打开”按钮的ID是一样的,都是IDOK,也就是1。
jishiping
2003-01-12
打赏
举报
回复
我开始也是这么写的,可是不行啊,后来就改用钩子了。Windows可能做了什么手脚吧,至于是什么手脚,我就没有去研究了(估计是钩子方面的)。另外我举个例子,MessageBox这个函数,大家都不陌生。可是你用FindWindowEx,却怎么也找不到MessageBox这个窗口。用钩子才可以找到这个窗口句柄。
COKING
2003-01-12
打赏
举报
回复
再问一下,JSP大哥,下面的代码为什么不可以呀!!!你的代码SaveDialog可以吗?
FARPROC OldProc;
LRESULT CALLBACK MyProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM Param)
{
if(uMsg==WM_COMMAND&&wParam==ID_OK)
return MessageBox(0,"aaaa","bbbb",MB_OK);
else
return CallWindowProc(OldProc,hwnd,uMsg,wParam,Param);
}
//----------------------------------------------------------------
void __fastcall TForm1::SaveDialog1Show(TObject *Sender)
{
(long)OldProc=SetWindowLong(SaveDialog1->Handle,GWL_WNDPROC,(long)MyProc);
}
halibut
2003-01-12
打赏
举报
回复
要只是想选取目录,用SelectDirectory()函数就行啊!
jishiping
2003-01-12
打赏
举报
回复
在执行完OpenDialog1->Execute()后,用ExtractFileDir(OpenDialog1->FileName)就得到选择的目录了。
jishiping
2003-01-12
打赏
举报
回复
下面的代码就可以了,但是需要注意,OpenDialog1的属性ofFileMustExist
必须为false才可以。
static HWND hOkWnd = NULL;
static HHOOK hHook = NULL;
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(hHook, nCode, wParam, lParam);
MOUSEHOOKSTRUCT* pmhs = (MOUSEHOOKSTRUCT*)lParam;
if (wParam==WM_LBUTTONUP && pmhs->hwnd==hOkWnd) {
SendMessage(GetParent(hOkWnd), CDM_SETCONTROLTEXT,
edt1, (long)"(None)");
}
return 0;
}
//OpenDialog1的OnShow事件
void __fastcall TForm1::OpenDialog1Show(TObject *Sender)
{
hOkWnd = GetDlgItem(GetParent(OpenDialog1->Handle), IDOK);
hHook = SetWindowsHookEx(WH_MOUSE, (FARPROC)MouseProc,
NULL, GetCurrentThreadId());
}
//OpenDialog1的OnClose事件
void __fastcall TForm1::OpenDialog1Close(TObject *Sender)
{
if (hHook!=NULL) UnhookWindowsHookEx(hHook);
}
大大怪老张
2003-01-12
打赏
举报
回复
用jsp提供的函数来选择目录就好了。
COKING
2003-01-12
打赏
举报
回复
我确实要选目录的!
我用SetWindowLong 替换了对话框的WND_PROC后。来处理WM_COMMAND消息,
居然在点<确定>时,WM_COMMAND它是不触发的,而其他消息都能抓到的。
《确定》的ID 为ID_OK,
《取消》的ID 为ID_CANCEL,
这些我知道的。在点《确定》时处理。我要处理的。。。
c语言
难题
,c语言
难题
,求大虾解答!!!!!
该程序读取名为'r.txt'的文件,将其中的内容按条件处理后写入'w.txt'。它首先读取直到遇到'@'字符,然后对数字进行特定操作,将连续的数字拆分并插入空格,最后将处理后的字符串输出到目标文件。
Java-day05
博主在2021年9月29日的博客中分享了自己在解决编程问题时遇到的挑战,主要涉及递归和方法重载的概念。面对一道
难题
,起初博主尝试使用while循环解决,但教师指出所有能用循环解决的问题都可以用递归方式处理。因此,博主决定重新尝试用递归方法来解决第五题。博客鼓励读者积极面对挑战,加油,少年!!!!!
大坑!!!!!
博主分享了一次编程挑战的经历,在解决一道名为“橱窗布置”的题目时遇到了
难题
。尽管自己的代码看似合理,但在提交后却遭遇了广泛的错误。通过对比标准程序并使用书籍中的测试数据进行验证,最终发现了问题所在。
总结!!!!!
探讨当前物体检测中面临的两大
难题
:小物体检测与多类别识别,分享实际操作中的经验与思考。
急,在线等!!!!!
博客作者急求问题错误所在及解决办法,但未明确具体问题内容。
C++ Builder
13,874
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章