| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1516 人关注过本帖
标题:那个高手有时间帮我完善一下一个类似 messagebox 的函数的??
只看楼主 加入收藏
zjj1974
Rank: 2
等 级:论坛游民
威 望:1
帖 子:58
专家分:38
注 册:2014-8-10
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:15 
那个高手有时间帮我完善一下一个类似 messagebox 的函数的??


*调用dfmsg(msg,cr,msgt,msgc,col1,col2,col3,col4)
* msg 需要显示的内容
* cr 命令按钮控制
* msgt 标题栏显示的内容
* msgc check显示的内容,如果为空则不显示
* col1 界面背景色
* col2 文字颜色
* col3 命令背景色
* col4 命令文字色

*其中f_color_01,f_color_02是我程序的全局变量,用于控制表单的颜色!

PROCEDURE dfmsg
LPARAMETERS msg,cr,msgt,msgc,col1,col2,col3,col4
LOCAL ARRAY tmp_1(1)
LOCAL tmp_2,tmp_3,tmp_4
PUBLIC tmp_5
   * 检查函数的输入数据,并定义默认值   
   DO CASE
      CASE "N"=TYPE("msg")
           msg=ALLTRIM(STR(msg))
      CASE "L"=TYPE("msg")
           msg=""
   ENDCASE
   IF "N" # TYPE("cr")
      cr=0
   ENDIF
   DO CASE
      CASE "N"=TYPE("msgt")
           msgt=ALLTRIM(STR(msgt))
      CASE "L"=TYPE("msgt")
           msgt=""
   ENDCASE
   DO CASE
      CASE "N"=TYPE("msgc")
           msgc=ALLTRIM(STR(msgc))
      CASE "L"=TYPE("msgc")
           msgc=""
   ENDCASE
   IF "N" # TYPE("col1")
      IF "N" = TYPE("f_color_01")
         col1=f_color_01
      ELSE
         col1=14215660
      ENDIF
   ENDIF
   IF "N" # TYPE("col2")
      IF "N" = TYPE("f_color_02")
         col2=f_color_02
      ELSE
         col2=0
      ENDIF
   ENDIF
      IF "N" # TYPE("col3")
      IF "N" = TYPE("f_color_01")
         col3=f_color_01
      ELSE
         col3=14215660
      ENDIF
   ENDIF
   IF "N" # TYPE("col4")
      IF "N" = TYPE("f_color_02")
         col4=f_color_02
      ELSE
         col4=0
      ENDIF
   ENDIF
   * tmp_2 显示行数  tmp_3 每行最长字符数
   IF 0=LEN(msg)
      tmp_2=0
      tmp_3=0
   ELSE   
      tmp_2=alines(tmp_1,msg)
      tmp_3=0
      FOR EACH tmp_4 IN tmp_1
         tmp_3 = MAX(tmp_3,LEN(tmp_4))
      ENDFOR
   ENDIF
   IF 0=LEN(msgc)
      tmp_4=0
   ELSE
      tmp_4=1
      tmp_3 = MAX(tmp_3,LEN(msgc))
   ENDIF
   IF tmp_3 >10
      tmp_3=tmp_3-10
   ELSE
      tmp_3=0
   ENDIF      
   tmp_5=0
   ACTIVATE SCREEN
 
   dfmgs = CREATEOBJECT('Form')
   WITH dfmgs
      .Closable = .F.
      .Height = 80+(tmp_2+tmp_4)*FONTMETRIC(1)
      .Width = 100 +tmp_3*FONTMETRIC(6)
      .backcolor=col1
      .AutoCenter = .T.
      .BorderStyle = 2
      .Caption = msgt
      .FontCondense = .T.
      .MaxButton = .F.
      .MinButton = .F.
      .WindowType = 1
      .AlwaysOnTop = .T.
   ENDWITH
   dfmgs.AddObject('lbl','label')
   WITH dfmgs.lbl
         *.AutoSize = .T.
      .WordWrap = .T.
      .BackStyle = 0
      .forecolor=col2
      .Caption = msg
      .Left = 30
      .Top = 25
      .Height = (tmp_2+tmp_4)*FONTMETRIC(1)
      .Width = LEN(msg)*FONTMETRIC(6)
   ENDWITH   
   dfmgs.AddObject('chk','chkbox')
   WITH dfmgs.chk
      .AutoSize = .T.
      .BackStyle = 0
      .forecolor=col2
      .Caption = msgc
      .Top = 35+tmp_2*FONTMETRIC(1)
      .Left = 30
      .Height = 16
      .Width = 20+LEN(msgc)*FONTMETRIC(6)
   ENDWITH      
   dfmgs.AddObject('cmd1','cmdbtn1')
   WITH dfmgs.cmd1
       .backcolor=col3
       .forecolor=col4
      .Top = 40+(tmp_2+tmp_4)*FONTMETRIC(1)
      .Left = (40+tmp_3*FONTMETRIC(6))/3
      .Height = 20
      .Width = 30
      .Caption = "是"
   ENDWITH
   dfmgs.AddObject('cmd2','cmdbtn2')
   WITH dfmgs.cmd2
       .backcolor=col3
       .forecolor=col4
      .Top = 40+(tmp_2+tmp_4)*FONTMETRIC(1)
      .Left = (40+tmp_3*FONTMETRIC(6))/3*2+30
      .Height = 20
      .Width = 30
      .Caption = "否"
   ENDWITH
   IF LEN(msg)>0
      dfmgs.lbl.visible=.t.
   ENDIF
   IF LEN(msgc)>0
      dfmgs.chk.visible=.t.
      dfmgs.cmd1.enabled=.f.
   ENDIF
   DO CASE
      CASE 0=cr
           dfmgs.cmd1.left=(70+tmp_3*FONTMETRIC(6))/2
           dfmgs.cmd1.visible=.t.
      CASE 1=cr
           dfmgs.cmd1.visible=.t.
           dfmgs.cmd2.visible=.t.   
      CASE 2=cr
           dfmgs.cmd1.caption="确定"
           dfmgs.cmd2.caption="取消"
           dfmgs.cmd1.visible=.t.
           dfmgs.cmd2.visible=.t.      
   ENDCASE
   dfmgs.SHOW
   READ EVENTS
   tmp_2=tmp_5
   RELEASE tmp_5
   RETURN tmp_2
   DEFINE CLASS chkbox AS checkbox
      PROCEDURE Click
         this.Parent.cmd1.enabled=this.Value
   ENDDEFINE   
   DEFINE CLASS cmdbtn1 AS COMMANDBUTTON
      PROCEDURE Click
         tmp_5=1
         thisform.Release()
         CLEAR EVENTS      
   ENDDEFINE
   DEFINE CLASS cmdbtn2 AS COMMANDBUTTON
      PROCEDURE Click
         tmp_5=2
         thisform.Release()
         CLEAR EVENTS      
   ENDDEFINE
ENDPROC

搜索更多相关主题的帖子: 标题栏 背景色 
2014-09-12 11:10
zjj1974
Rank: 2
等 级:论坛游民
威 望:1
帖 子:58
专家分:38
注 册:2014-8-10
收藏
得分:0 
就没有人抽时间看一下吗?
代码看似很长,最前面一段是判断输入的数据是否正确,真正的内容只有后一半!

以后在程序中,涉及到清空数据、删除数据等操作的时候,将界面设置成红色或其他颜色,很有用处的啊!

[ 本帖最后由 zjj1974 于 2014-9-12 14:42 编辑 ]
2014-09-12 14:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
能用就是好的,以后有心得再不断优化。
也可封装成一个表单类。
2014-09-12 15:36
zjj1974
Rank: 2
等 级:论坛游民
威 望:1
帖 子:58
专家分:38
注 册:2014-8-10
收藏
得分:0 
只想把他优化一个函数,也没有高手帮一下忙
2014-09-12 16:25
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
我也先看看,研究研究。
2014-09-13 10:50
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
先看看
2014-09-13 11:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:10 
试写个简单的,有点不如意,又遇到INKEY()。

程序代码:
cMsg = "我们都是来自五湖四海"+0h0D+"为了一个共同的目标"+0h0D+"走到一起来了"
? MsgBox("提示", cMsg, "宋体", 24, RGB(255,0,0), 0)
? MsgBox("提示", cMsg)
RETURN

FUNCTION MsgBox(cTit, cMsg, cFontName, nFontSize, nForeColor, nCmd)
    PRIVATE wRet
    wRet = 0
    oForm = CREATEOBJECT("MsgForm", cTit, cMsg, cFontName, nFontSize, nForeColor, nCmd)
    oForm.Show(2)
    READ EVENTS
    RETURN wRet
ENDFUNC

DEFINE CLASS MsgForm AS Form
    Desktop = .T.
    WindowType = 1 
    AutoCenter = .T.
    MaxButton = .F.
    MinButton = .F.
    nCmd = 0

    ADD OBJECT Label1 AS Label WITH width=SYSMETRIC(1),AutoSize=.T.,WordWrap=.T.
    ADD OBJECT Command1 AS Commandbutton WITH Top=this.Height-35,Left=this.Width-120,;
        Height=25,Width=50,Caption="确定",Anchor=12
    ADD OBJECT Command2 AS Commandbutton WITH Top=this.Height-35,Left=this.Width-60,;
        Height=25,Width=50,Caption="取消",Anchor=12
        
    PROCEDURE Init
        LPARAMETERS cTit, cMsg, cFontName, nFontSize, nForeColor, nCmd
        this.Caption = IIF(!EMPTY(cTit), cTit, "")
        this.Label1.Caption = IIF(!EMPTY(cMsg), cMsg, "")
        this.Label1.FontName = IIF(!EMPTY(cFontName), cFontName, "宋体")
        this.Label1.FontSize = IIF(!EMPTY(nFontSize), nFontSize, 9)
        this.Label1.ForeColor = IIF(!EMPTY(nForeColor), nForeColor, RGB(0,0,0))
        this.nCmd = IIF(!EMPTY(nCmd), nCmd, 0)
    ENDPROC

    PROCEDURE Activate
        INKEY(0.05)
        this.Height = this.Label1.Height + 65
        this.Width = this.Label1.Width + 40
        this.AutoCenter = .T.
        this.Label1.Top = INT((this.ViewPortHeight - this.Label1.Height - 45)/2)
        this.Label1.Left = INT((this.ViewPortWidth - this.Label1.Width)/2)
        IF this.nCmd == 0
            ELSE
             ENDPROC
    
    PROCEDURE UnLoad
        CLEAR EVENTS
    ENDPROC

    PROCEDURE Command1.Click
        wRet = 1
        thisform.Release
    ENDPROC
    PROCEDURE Command2.Click
        wRet = 2
        thisform.Release
    ENDPROC
ENDDEFINE


[ 本帖最后由 吹水佬 于 2014-9-13 21:49 编辑 ]
2014-09-13 17:22
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
平心而论,系统函数 MessageBox()已十分完善,且功能强大。唯一的不足是,对于初学者来说,记住那些代表图标、按钮类型、默认按钮和返回值的数值需花点心思,但这些数值均有规律可循,记住也不难。对话框中的字体、颜色有那么重要吗?个人认为,在一个严肃的商用环境中,要遵循“约定俗成”的惯例,少搞花架子,应将主要精力放在程序的功能、易用性和运行效率方面。从实用性方面来说,设计一个代替 Wait Window 命令的函数可能更实用一些。

泉城飞狐
2014-09-13 19:41
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
萝卜青菜,各有所爱

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-09-14 07:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没明白楼主希望怎么完善,函数不是已经有颜色设置参数了吗。

授人以渔,不授人以鱼。
2014-09-14 11:55
快速回复:那个高手有时间帮我完善一下一个类似 messagebox 的函数的??
数据加载中...
 
   



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

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