⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datawin.txt

📁 DataWindow Object 的几个有用的属性
💻 TXT
📖 第 1 页 / 共 3 页
字号:
普通窗口也能拥有工具条!  

    在 PB 中有一点非常不好,只有 MDI Frame 类型的窗口才可以具备工具条。 
  
      
    有时我们窗口又不是 MDI 。但是又需要工具条,怎么办?没办法只能硬把  


    这个窗口设为 MDI Frame 类型。工具条也就出来。问题好象解决了。但是  
  

    PB 的工具条还可以随意拖动。本来设计时工具条在窗口上方,结果用户把它 
  
   
    拖到下面,一下把我的窗口中的控件就给挡住了。怎么办?  

    很简单,不让用户拖动工具条。  

    将 Application 对象的 ToolbarUserControl 属性设置为 False 。从此, 
用户就不能拖动工具条了。  

    这种程序看上去仍有一点美中不足。人家的工具条都可以拖来拖去,显得我 
们的有点不专业!!!  

    其实还有方法使得用户将工具条拖来拖去还不会挡住任何控件。  
   
    想知道答案?到本站点找!!!  


    提示:绝对不是要大家自己做工具条,完全是使用了一点 PB 技巧。  
利用 PB 建库  

    许多数据库开发人员都喜欢直接使用 DBMS 提供的管理工具建库。其实如果 
要用 PB 作为软件的前台开发工具,那么建库最好也是使用 PB (除非是 PB 无 
法完成的建库操作)。因为使用 PB 建库可以节省许多的前台开发工作。  
    例如:我们在 Database 画笔中建表时可以直接为各个字段设定好样式。  

    可以设定 Header、Label。这样基于这个表的所有 DataWindow Object 关于 
该字段的 Header、Label都已经设定好了。这样无须一个一个设置,也不用担心 
会出现不一致的现象。  
    你还可以在 Database 画笔中为各个字段设定有效性原则,设定好出错时的 
错误信息等。这样就为后面建立 DataWindow 省了不少功夫,而且所有的 DataW 
indow 都一致。 关于 Database 画笔的使用还有很多,许多书上都有详细的介绍 
。一句话在 Database   
画笔中建库只要用得好就可以大大的减少后期工作量。需要提醒一点的就是,当 
 DataWindow 建好之后,再去 Database 画笔中更改 Header、Label等各属性后 
,DataWindow 也不会发生任何变化!  
随意改变父类  

    pb程序员可以随意改变一个对象的父类。具体方法如下:  
    将对象EXPORT成源代码形式。找到形式 global type Objectname from Ano 
therObjectName   
两行,一般都在源代码的前面。将AnObjectName该成你的父类。如果你的子类重 
载父类中的函数,则必须将子类的函数定义成父类函数的形式。同样这也可以在 
源代码里更改,只需更改函数头以及函数体的第一句申明和函数体的最后一句结 
束语。并却子类中重载父类的函数的函数必须排在  
子类自身的函数前面,否则在INPORT时会非法操作。源代码该完后即可INPORT生 
成对象。  
拖动无标题窗口  

    现在有许多应用程序都具备那些无标题可拖动的窗口。有关这种窗口在 VB、 
DELPHI中的制作的文章也有不少。本篇文章将讲述如何在 PB 中实现。  
    在 PB 中实现这种窗口的拖动与在 VB、Delphi 中一样,采用移花接木的技 
巧。当鼠标拖动时Windows 首先会向鼠标下的窗口发送一个 wm_nchittest   
消息,窗口收到这个消息后再由窗口的消息处理函数进行处理,消息处理函数将 
会返回一个整数表示鼠标正处于窗口的什么部位。大家只需要知道的是处理函数 
返回2,表示鼠标正处于窗口的标题栏上。根据这一点,我们只要截获这条消息, 
然后直接返回2。这样不管鼠标真正位于窗口的什  
么部位,WINDOWS 一律认为鼠标位于标题栏上。因此,用户自然可以拖动窗口。 
下面是具体的步骤:  

    1 为窗口定义用户自定义事件  
        Event Name: ue_nchittest  
          Event ID: pbm_nchittest  

    2 在事件 ue_nchittest 中编写代码  
        Return 2  

    3 大功告成  

    大家不妨采用这种方法为 Button 、Text 等可视控件也加上上述的事件与代 
码。看看有什么情况?说不定你就可以开发一套自己的可视化开发工具!!!  


疑问:  
    当然这种方法很好的解决了无标题窗口仍然可以拖动的问题。但是如果我这 
个窗口还需要一个背景图片。如果放置一个 PictureBox 这种方法就无效了。因 
为窗口无法接受 wm_nchittest 消息,被 PictureBox 挡住了。怎么办?答案就 
在本站点!!!  

    拖动无标题窗口还有一种方法,在窗口的 MouseDown 事件中编写如下脚本  

      Send ( Handle ( this ), 274, 61458, 0 )  
    至于这种方法的原理是什么,暂时还没弄明白。用这种方法制作的窗口在运 
行时与第一种方法制作的窗口还有点不一样。只能是留给大家一起去探讨了。  

    
拖动无标题窗口  

    现在有许多应用程序都具备那些无标题可拖动的窗口。有关这种窗口在 VB、 
DELPHI中的制作的文章也有不少。本篇文章将讲述如何在 PB 中实现。  
    在 PB 中实现这种窗口的拖动与在 VB、Delphi 中一样,采用移花接木的技 
巧。当鼠标拖动时Windows 首先会向鼠标下的窗口发送一个 wm_nchittest   
消息,窗口收到这个消息后再由窗口的消息处理函数进行处理,消息处理函数将 
会返回一个整数表示鼠标正处于窗口的什么部位。大家只需要知道的是处理函数 
返回2,表示鼠标正处于窗口的标题栏上。根据这一点,我们只要截获这条消息, 
然后直接返回2。这样不管鼠标真正位于窗口的什  
么部位,WINDOWS 一律认为鼠标位于标题栏上。因此,用户自然可以拖动窗口。 
下面是具体的步骤:  

    1 为窗口定义用户自定义事件  
        Event Name: ue_nchittest  
          Event ID: pbm_nchittest  

    2 在事件 ue_nchittest 中编写代码  
        Return 2  

    3 大功告成  

    大家不妨采用这种方法为 Button    

拖动具有背景图片的无标题窗口  

背景知识:  
    截获 wm_nchittest 消息,并返回 2。从而实现无标题窗口可拖动。  

    我们知道通过截获 wm_nchittest 消息并返回 2,可以实现实现无标题窗口 
可拖动的功能。但是这个 wm_nchittest 必须由窗体截获。如果我们要在窗口上 
显示一幅背景图,那么问题就出现了。放置一个 PictureBox ?调用 WIN API 直 
接对窗体绘画?如果是放置一个 PictureBox   
那么消息 wm_nchittest 将会被 PictureBox 挡住无法传到窗体中。调用 API 直 
接对窗体绘画当然可以成功,但是这要求你对 API 绘画熟悉。本文将采用一种非 
常简单的方法解决这个问题。  

    我们首先分析一下放置了 PictureBox 后,窗体为什么会接收不到 wm_nchi 
ttest 消息。熟悉 MFC 的朋友可能会知道 PictureBox 的父类实际上是 Window 
 。也就是说 PictureBox 是一个特殊的窗体。所以很自然 wm_nchittest 消息传 
递给 PictureBox   
了,窗体也就接收不到了。那么有没有可能 PictureBox 仍然在窗口上,但是消 
息却传给窗口。可以,将 PictureBox 隐藏而且图片仍然显示在窗口上!  

    PictureBox.Setredraw ( False )  
    PictureBox.Hide ()  

    问题解决, PictureBox 隐藏了,而且图片仍然在窗口上。这样 wm_nchitt 
est 消息就直接传到窗体了(也许有读者会想,PictureBox 截获 wm_nchittest 
 消息后再将该消息发送给窗口!很遗憾这样做不行)。  

    下面是该方法的源代码:  
    1. 假设窗体名为 w_main,PictureBox 控件名为 p_1 。      

    2. 为 p_1 截获 wm_mousemove 消息  
          为 p_1 定义用户自定义事件  
             Event Name: ue_mousemove  
             Event   ID: pbm_mousemove  
          在 ue_mousemove 事件中编写代码  
             This.Setredraw ( False )  
             This.Hide ()  

    3. 为 w_main 截获 wm_nchittest 消息  
          为 w_main 定义用户自定义消息  
             Event Name: ue_nchittest  
             Event   ID: pbm_nchittest  
          在 ue_nchittest 事件中编写代码  
             Return 2  

    4. 为 w_main 截获 wm_paint 消息  
          为 w_main 定义用户自定义消息  
             Event Name: ue_paint  
             Event   ID: pbm_paint  
          在 ue_paint 事件中编写代码  
             This.Setredraw ( True )  
             This.Show ()  

    说明:  
       
      步骤 2 用意:当鼠标移动到窗口时 p_1 便隐藏了,这样用户随时都可以 
拖动窗口。  

      步骤 4 用意:窗口上仍然显示图片只是因为 p_1 不再重画,所以虽然 p 
_1 隐藏了,但是图片仍然保留在窗口上。也正是这个原因,如果有任何其他窗体 
或控件挡住了 图片那么图片便无法恢复。因此我们要截获 wm_paint 消息,重新 
显示一次 p_1 。  


    至此,所有问题圆满解决!!!  

有效性原则  

    用户可以在程序运行是动态更改DATAWINDOW的有效性原则  
    使用 GetValidate 和 SetValidate 函数。  

    在数据库画笔中建立的有效性原则将保存到PB的系统表中,  
    也就是说原则一旦建立,可以适用于该数据库中任何相同类型的字段。  
    此时设置的有效性原则将是DATAWINDOW OBJECT 中默认的有效性原则。  
   
    注意:若数据库中有效性原则发生了变化,DATAWINDOW OBJECT 中有效性原 
则不会发生变化!  

有效性原则中的表达式:  

    程序员可以使用任何POWERSCRIPT 函数,甚至是用户自定义函数!@col代表 
当前行列col的数据。如果被检验的列属于字符串类型,则程序员可以使用MATCH 
函数。在DATABASE 画笔中定义有效性原则时点击MATCH按扭,即可自动生成MATC 
H函数。  

    MATCH函数规则:match(@col,Textpattern),Textpattern 有点类似于正规 
表达式  

    Textpattern 的构造方式如下:  

    Textpattern 分两部分:1、特殊符,2、非特殊符  

     特殊符:  

       符号 ^:与字符串的第一个字符进行比较。  
         例 ^C 比较字符串的第一个字母是否为 C 。  

       符号 $:与字符串的最后一个字符进行比较。  
         例 s$ 比较字符串最后一个字母是否为 s 。  

       符号 .:任意一个字符。即通配符。  

     转义符 \: 恢复特殊字符的原义。  

       符号[]: 方括号中字符代表“或”关系。  
         例如:[AEIOU]代表A、E、I、O或U。括号中可以有连字符"-"。[A-Z]代 
表任意一个大写字母。如果方括号中的第一个字符是 ^,表示除去括号内的任意 
字符。  

       符号 *:重复零次或多次  

       符号 +:重复一次或多次  

       符号 ?:重复零次或多次  
   
         例子:  
AB      Any string that contains AB; for example, ABA, DEABC, graphAB_ 
one  
B*      Any string that contains 0 or more Bs; for example, AC, B, BB, 
 BBB, ABBBC, and so on  
AB*C    Any string containing the pattern AC or ABC or ABBC, and so on 
 (0 or more Bs)  
AB+C    Any string containing the pattern ABC or ABBC or ABBBC, and so 
 on (1 or more Bs)  
ABB*C   Any string containing the pattern ABC or ABBC or ABBBC, and so 
 on (1 B plus 0 or more Bs)  
^AB     Any string starting with AB  
AB?C    Any string containing the pattern AC or ABC (0 or 1 B)  
^[ABC]  Any string starting with A, B, or C  
[^ABC]  A string containing any characters other than A, B, or C  
^[^abc] A string that begins with any character except a, b, or c  
^[^a-z]$        Any single-character string that is not a lowercase le 
tter (^ and $ indicate the beginning and end of the string)  
[A-Z]+  Any string with one or more uppercase letters  
^[0-9]+$        Any string consisting only of digits  
^[0-9][0-9][0-9]$       Any string consisting of exactly three digits  

^([0-9][0-9][0-9])$     Any consisting of exactly three digits enclose 
d in parentheses  

PB 的跨平台  

    其实除了 JAVA 的 CLASS 文件是跨平台的,用 PB 编译出来的 PBD 文件同 
样是跨平台的文件。你可以在任何平台下制作 PBD 文件,然后发行到任何一个平 
台上。当你的应用程序升级时你只需要发行你更改过的 PBD 文件,当然前提是你 
的应用程序的 Library List   
没有发生变化。如果你的应用程序的 Library List 发生了变化,那么你只能重 
新编译你的 EXE 与 所有的 PBD 然后再发行。  
SetRedraw(FALSE)  

    SetRedraw () 是 PB 中几乎所有的可是控件都具备的函数。SetRedraw 的用 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -