标题:求助,关于msgbox 的功能实现
只看楼主
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
结帖率:100%
已结贴  问题点数:20 回复次数:14 
求助,关于msgbox 的功能实现
提问原因: VB 本身的 Msgbox 存在两点限止,1. 每次都显示在中心位置,位置不好指定。 2.样式的确太单调了些。
我的想法: 1.自制对话框,实现Msgbox 的类似功能, 不行的话就  2. 指定Msgbox 显示坐标
我已尝试: 用窗体做了一个对话框,单独确认是可以的,但需要通过窗体,返回“是”,“否”而确定下一步指令时,不能实现。 因为窗体打开后,程序不能挂起,代码还在往后执行。不能像msgbox 本身哪样要确认后,会根据返回的值后再往下执行。  我偿试了DoEvents,Stop 都没有成功。
哪位朋友有这方面的思路或代码的话,帮指点一下。 谢谢了!
搜索更多相关主题的帖子: 返回 窗体 指定 msgbox 执行 
2021-12-08 19:46
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
经过反复偿试,问题解决了,我自己结贴吧,效果还行,思路为:当消息框出来后,让代码停在一个循环中,当点击消息框时,打破这个循环往下执行(同时产生一个变量值指导下一步执行),网络上查到的代码资料全是大篇大篇的还涉及到很多API,不实用。
Msgfrm.Show ' 显示自制的消息框,里面有是否,相当于原msgbox 的VBYS 和 VBNO,点击后会改变全局变量 IsExit
IsExit = False '全局变量
Do While DoEvents '// 设置一个循环直到交出控制权
If IsExit = True Then Exit Do '// 当全局变量为 True 时跳出循环
Loop
If MsgYN = True Then '来自于自制消息框的反馈变量,根据此变量来定义下一步动作
MsgBox "执行"
Else
MsgBox "停止"

不去做永远没有结果!
2021-12-10 13:05
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:20 
Form1中:
程序代码:
Private Sub Command1_Click()
    Dim str As String
    str = "123456"
    frmDlg.Show 1, Me    '模态窗口
    If (frmDlg.Dlgbtn = vbOK) Then
        str = frmDlg.strDlg
    End If
    Text2.Text = str
    
End Sub


frmDlg中:
程序代码:
Public strDlg As String
Public Dlgbtn As VbMsgBoxResult

Private Sub cmdCancel_Click()
    Dlgbtn = vbCancel
    Me.Hide
End Sub

Private Sub cmdOK_Click()
    strDlg = txtDlg.Text
    Dlgbtn = vbOK
    Me.Hide
End Sub

Private Sub Form_Activate()
    strDlg = ""
    txtDlg.Text = ""
End Sub



[此贴子已经被作者于2021-12-10 14:08编辑过]

2021-12-10 13:43
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 3楼 apull
非常感谢! 原来这么简单。
show 1 模态窗口,能够让系统挂起,就这一点点就完全解决了我的问题。
这两天还绕了这么久,自学还是会走很多弯路!!要多向大神请教啊!
感谢!



[此贴子已经被作者于2021-12-10 16:26编辑过]


不去做永远没有结果!
2021-12-10 15:27
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
学VB6要多查MSDN,搞清楚使用的函数和参数的意思,积累多了就好了。
2021-12-10 19:58
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
自己写 msgbox 窗口,建议增加一个功能,定时自动关闭功能。
这个功能使用可选。

授人于鱼,不如授人于渔
早已停用QQ了
2021-12-10 22:13
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 6楼 风吹过b
好建议,我准备写几种模式的,根据传递的参数来改变设置。

不去做永远没有结果!
2021-12-11 16:09
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 5楼 apull
是的,这的确是一个积累的过程,刚开始这一个月搞得很慢,MSDN 安装时没装上。 看来要重装一下。
    现在觉得轻松一些了,大约的语句写法,数组,数据库结构,SQL语句这些都有了一些概念。欠缺积累,各类函数,和一些控件的属性。一些功能的实现,基本上能够写得出来。就是方法和代码都不是最优化的。所以代码的 稳定性,速度,简约,是下一步主要学习的过程。
    当然还有站在使用者的位置来考虑, 操作的便捷性,使用者学习的简易性,数据结构的统一性,还有防止误操作的逻辑设置。我以前在工作中长期和工作流程和数据打交道,知道这个过程会出现的各种各样奇怪的可能。所以现在自己编,往往在这方面考虑和花费的时间最多! 往往开始觉得写的很好的一个模块,后来发现一些极端的情况下,会产生数据误差。就需要推倒重写。
    在工业术语里叫“防呆”,按大白话的说法是,要通过一种方法,防止呆子一样的人,做出呆子一样的操作带来不好的结果。我们要有一种机制来防止其发生。编写应用软件,也用得上这个理念 .....哈哈

不去做永远没有结果!
2021-12-11 16:36
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
回复 7楼 hmj0745
按你这个思路,我也想了一下框架,前几个参数可以照抄 msgbox 的,
那些常量组合,使用AND运算后再比较来确定是否包含某个常量。我发现并不是所有的常量都是一位来表示,也许我没仔细研究。

其中 不传任何值时,也就是 0 时,只存在确定按钮,说明这个按钮是默认的,只有传了其他按钮组合时,才不显示这个按钮。
----------------------
我想到的框架是
1、窗体大小固定。
2、窗体位置不自动居中
3、窗体上按钮,分五组: 1、确定,2、确定+取消,3、yes+no,4、终止+重试+忽略,5、重试+取消。按钮在每组内使用控件数组,其中第1组是默认显示,其他组是默认不显示。
4、图标, 使用 image控件,直接放4个,分别存着4种图标。
5、根据传入的参数,确定是否显示图标,如果显示图标,标签框位置需要移动。
6、根据传入的参数,是否隐藏默认组,显示其他组。同时根据是否设置默认按钮,设置默认按钮。
7、对窗体点击右上角叉进行编程,让用户点击时变成隐藏状态,又要有方法调可以卸载窗体。如设置一个窗体全局过程,带参数调用。未带参数时,隐藏,带参数时,卸载。
8、封装,在模块中定义全局函数,负责有模式显示窗体,在窗体隐藏后读取结果并卸载窗体。

没时间去写代码了,自己只完成了1+2+3(前二组)+4、5(只放了第1个框)+8 ,还差得远。没时间去完成了,所以只发一个自己的思路。
对hlp格式的帮助文件一向不感冒,所以没想到如何去完全这个帮助,忽略掉了。
另外,对于 vbSystemModal ,也忽略掉吧!


授人于鱼,不如授人于渔
早已停用QQ了
2021-12-12 10:42
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 9楼 风吹过b
    你的思路很有系统性,如有时间去完成,从个性化和适应性方面会比Msgbox 好很多。
我想的还有一点就是提示框显示的位置,如何取得程序中某一个控件的绝对坐标(这个最好做成一个全局函数需要时随时调用)
然后提示框显示位置,就可以指定控件的坐标为参考。显示在合适的位置。我还试过用鼠标勾子获取当时点击位的坐标,以此做为参照来指定显示位置,但没有做成,偏差太远。
     在大屏上操作多款软件时,如果本软件处于边界位置,没有处于最大化时,点击提示框却显示在别的软件界面上。就很别扭了。
所以我这几天也一直在想,多层frame 里的控件,相对MID窗的坐标如何获取。不知道有没有表达“上层容器”的语句。如果有的话。就可以写一个函数,从指定控件本身起,查找其在上层容器的Left 和 TOP 值。 这样加起来最终能得到指定控件相对于,MID 窗体的坐标。

不去做永远没有结果!
2021-12-12 12:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507807-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.114658 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved