pb教程入门到精通初级授课笔记_第1页
pb教程入门到精通初级授课笔记_第2页
pb教程入门到精通初级授课笔记_第3页
pb教程入门到精通初级授课笔记_第4页
pb教程入门到精通初级授课笔记_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DoubleClicked触发时机事件参数常用编程双击数据窗口时触发改时间dwo row窗口显示详细信息上机选中多行数据,删除数据Dw_1.getselectrow()作用:在row 行之后查找第一个选中行的行号返回: row 的第一个被选中的行的行号Row=0 表示从头开始查找上机:险种多行数据删除选中的数据/典型的错误算法long ll_index /循环变量for ll_index = 1 to dw_1.rowcount()if dw_1.iected(ll_index) then dw_1.deleterow(ll_index)next/正确的 1long ll_index /循环变

2、量for ll_index =dw_1.rowcount()to 1 step -1if dw_1.iected(ll_index) then dw_1.deleterow(ll_index)next/效率高点正确long ll_selectedrowll_selectedrow = dw_1.getselectedrow(0) do while ll_selectedrow 0dw_1.deleterow(ll_selectedrow) ll_selectedrow = dw_1.getselectedrow(0)loopRetrieveStartRetrieveRowRetrieverEn

3、d触发时机 上述 3 个事件对应的是 开始检索前,每检索到一行数据时,检索结束时常用编程 上述三个事件对应的是 进度信息显示前的准备工作,检查是否终止了编程并显示进度信息,显示结束信息返回值 对于前面两个事件的含义是 0 继续 1-放弃上机:带有检索进度条和中止检索功能的编程、打开数据源dw_1.settransobject(sqlca)/绑定事务对象这里先索数据在 modifi 中先定义一个实例变量egerii_continue 用来得到行数返回值的因为:返回值 对于前面两个事件的含义是0 继续 1- 放弃在数据窗口的事件中写入if messagebox(提示,数据量很大,是否真的要检索,Q

4、uestion!,yesno!,2) = 2 then return 1st_1.visible = true /进度条可见ii_continue = 0/把实例变量定为 0 开始检索在这个事件中st_1.Text = 正在检索第 + string(row) + 行。retur_continue在这个事件中st_1.Text = 检索完毕,共 + String(RowCount) + 行/提示正在检索多少航 timer(3)/间隔多少秒之后 st_1.Text点击检索按钮 dw_1.retrieve()开始检索在停止按钮中ii_continue= 1 赋值为 1 停止检索在整个 parent

5、中st_1.visible = false timer(0)让检索条不可见并 吧 timer 赋值为在 resize 事件汇总dw_1.x = 2dw_1.y = 2dw_1.width = newwidth - 2*dw_1.x dw_1.height = newheight - cb_1.height - 20cb_1.x = dw_1.x + dw_1.width - cb_1.widthcb_1.y = dw_1.y + dw_1.height + 1cb_2.x = cb_1.x -cb_2.width - 20cb_2.y = cb_1.yst_1.x = dw_1.x + (dw

6、_1.width - st_1.width)/2st_1.y = dw_1.y + (dw_1.height - st_1.height)/2数据窗口控件 常用函数 Settransobject /绑定事务对象 Retrieve 检索数据 Scrollnextpage 后翻页 Scrollpriorpage 前翻页DeletedRow 删除一行InsertRow一行 在制定航如果是 0 就在最后一行Update 如果是 0 就成功了 ModifiedCount 计算修改的行 Deletedcount 计算删除的行两个相加来判断是否修改 GetitemxSetitem 指定的单元赋值 行是 ro

7、w 类型 列 string 或者不确定的eger 类型的 第三个参数的类型是Iected如果是选中的就返回 true 如果不是就返回 false选中指定的行 如果是 0 的换就是选中所有的行在指定的行之后查找第一个被选中的行 如果是 0 的花表示从头开始查宅selectRowgetselectrow数据窗口对象FreeFrom 项目比较多的数据录入或者显示 Grid 数据量 行数比较多的录入或者显示 Tabular 报表,无网格线Comite 表报多个数据窗口整合到一起(稍微多点)不能用与数据录入Crosstab 数据统计 Graph 数据统计 Group 数据统计Label 某些特定应用,适

8、合做客户联系应用N-up 列少 数据量大的显示 (数据的行数非常多)RichText内容来自数据库的TreeView 层次化显示数据窗口对象数据源Quick Select 快速选择SQL Select 多个表关联,可使用系统表Query 固定来源,现实不同 时,使用 提高效率这三种是没有区别的 只是显示数据的瞬间是不一样的只影响开发时候在程序部署之后没有影响的External 不从数据库取数据Store Procedure 数据来自过程Web Service 数据来自 Web Service保存的 Query操作查看关系点等号就可以也可以在这里面也显示的是关系条件如果要用Query 类型的就在

9、这里面选择自己刚才建立的Query 的数据类型的自己定义 多少都没有关系可以在这里加其中如果要加的话 最后一列也是要改的要跟前面的内容是一致的数据窗口对象- 总体介绍数据窗口的带Header 每页显示一样,在最上端 Detail 每行显示一次 具体的数据 Summary 最后显示一次 合计 Footer 每页显示一次 最下端显示和数据是分开的 就是有些数据不想让用户看到但是还要用到就把他在数据窗口中闪电但是不会在数据库中删除 还是可以取到数据的常用对象 : text line column 等修改对应的 sql 语句字体相关格式相关 EditRadioButtonsCheckBox如果是选中的

10、就给数据库传送YDropDownDWEditMask下拉菜单数据窗口是ddd_格式的字体相关if(salary 60000,rgb(255,0,0),rgb(0,0,0)比如要显示 超过六万的为红色其他为黑色 就可以在 text color 后面的那个小按钮里面写上代码先建一个数据窗口 ddd_dept 然后把表头给覆盖并把 dept_id 放到前面然后在 d_emploee 中的 dept_id 中的 Edit 属性中的 datawindows 中选刚才建的数据窗口Display column 是看到的Dolumn 是数据列也就是存到数据中的列上机 下拉子数据窗步骤:用做下拉列表框1、 制作

11、一个 Tabular 或者 Grid 类型的数据窗口起名 ddd_xx要点:1 背景颜色白色 2 数据的字体宋体 九号2、 制作一个 External 型、Freeform 或者 tabular 的数据窗口要点:1 背景和窗口的背景颜色一致列的类型要兼容第一步中制作的要用做本列数据列的数据类型只有 1 列就可以列的编辑风格是 dddw,关联第一步的数据窗口并选中 always show arrow显示箭头列的背景颜色设置为白色列的边框设置为 3d lowered 凹进去的效果3、 在窗口上放置一个数据窗口控件并编程要点 1 关联第 2 布制作的数据窗口对象2 边框设置为 none一值34高度调

12、整成和数据窗口对象detail 带的高度接近编程 在constructor 事件中编程代码 This.SetTransObject(sqlca) This.Retrieve This.insertRow(0)就是先建一个数据窗口用来连接数据库然后在建立一个数据窗口用来呈现出下拉的窗口样式用的是 External然后 在第三步中建立一个数据窗口用来放第二部的数据下来窗口然后调整样式具体的操作选择然后调整一下宽度表头名称保存然后用都可以然后然后先随便树上吧前边的删掉吧 style type 改成dropdowndw 类型的这个选上然后显示内容与数据列都改好然后修改列的边框设置为 3d lowere

13、d 凹进去的效果最终效果保存名称建一个 windows 窗口 在建一个数据窗口然后关联上第二部的数据窗口吧 windows 中的边框属性设置为第一个也就是没有 border显示效果图拖动数据windows 的数据窗口调整到合适的位置最后的结果是这样的数据窗口对象 列的属性边框也可以在border 也是可以的高度:固定高度,自动高度自动高度还要配合 detail 带设置选中然后右键实在不行还要把这列的edit 中的自动水平滚动勾掉自动垂直滚动加上是否允许修改:protect、displayonly tabsequence就是是否要编辑里面的内容 只要有一个设置成不能修改就不能修改选一列 在 ge

14、neral 中有 protect 选项如果是 0 的话表示不保护另一个是 1 保护 保护就是不让编辑也不让选中右侧的图标可以设置表示有条件的保护、输入的时候只能在小图标中输入Edit 中有 displayonly 打上勾就是可以选中可以但是不能删除就是 tabsequence值越大得到光标的顺序就越靠后如果是 0 就永远得不到光标Auto Horizontal Scroll 自动横向滚动Limit显示数据窗口对象 计算域和计算列计算域和计算列的比较相同点:都可以计算区别:能否编辑、pb 函数还是数据库函数常用表达式If 判断Page 和 PageCount GetRow 和 CurrentRo

15、w Today 和 SstringSum 和 Count补充递归:特点:函数自己调用自己1、 什么情况用递归:Gf_adds(n)Gf_adds(100)= 100 + gf_adds(99) Gf_adds(99)= 99 + gf_adds(99).。Gf_adds(2)= 2 + gf_adds(1) Gf_adds(1)= 1If n = 1 then Return 1ElseReturn n-gf_adds(n 1 )End if计算域中常用的函数If(关系表达式,值 1,值 2) 值 1 值 2 类型要一致成立返回 1 不成立返回 2 可以嵌套使用如if(IsRowNew(),新,

16、if(isRowModified(),该,旧)IsRowNew()如果是新的就显示新如果是修改过的 isRowModified(),就显示改如果没动就显示旧的if(isRowModified(),新, if(IsRowNew(),该,旧)也是可以的 只是更注重谁的问题了 这样在新的数据上改动的话会显示改动Page 和 PageCount如在表头上加上共多少页 共 + pagecount() +页 还可以加上当前第 + page () +页 GetRow 和 CurrentRowGetRow 得到行号 就是在每一行前面的那个CurrentRow就是得到当前行比如选中所有的列在右侧general

17、中的 border 中 修改if(getrow() = currentrow(),6,0)选中哪一行哪一行突起扩展如选中哪一行哪一行变颜色在 font 的 textcolor 中if(getrow() = currentrow(),rgb(255,0,0),rgb(0,0,0)today就是得到当前日期打印日期 + today()String 就是格式的转换打印日期 + string(today(),yyyy 年 mm 月 dd 日)Sum 和 Count对一群数据进行操作Sum(列 for 范围) 范围是保留字:page、计算当前页All 对所有的计算 group 1 对第一个分组进行计算s

18、um(salary for all)是在 insert 中找到 sum合计是在 summary总共显示一次然后每页的是用域的 每页的是在Count 是一共多少行footer 每页最后显示一次在最后加上工资的百分之多少先用计算域计算列 在 data source 里面在 compute 里面 加上 salary * 0.1 tax不可以修改可以修改内容2011 年 11 月 22 日 17:22:1135 讲 17 分钟菜单和 mdi 应用菜单设计设计短平快观察菜单的特点 :级联,快捷键,工具条等使用弹出菜单中的 insert sub常用属性item工具条相关属性常规图标、按下时的图标、分隔条、

19、显示几个工具条、图标之间的间隙快捷键相关属性带箭头的叫级联层菜单的一些属性建立菜单就是点右键宣倒数第二项加就是加中划线Text 就是显示的旗袍帮助如果运行程序 然后点图标右键 showtext 就显示图标的信息Toolbaritemspace 就是空多少然后 order 图标就是显示的顺寻 数值小的面大的在后面Barindex 显示在第几个工具槽上 只要不同就会显示在不同的行上Microhelp 就是显示帮助信息的 左下角首先要把 window 窗口的类型改成 mdihelp 的然后在窗口的 general 中的 microhelp 中输入显示的内容要把 菜单挂上首先建立一个窗口属性为 mdi

20、 的 然后在加入就可以了name快捷键就在 general 中的 shortcut key 选中就可以了还可以选上 ctrl alt shift 就是组合这些键按下图标 toolbaritemdownname 就是按下的图标菜单和 mdi 的应用 菜单层序菜单指代词 parentWindow 菜单的两种使用:挂在窗口上的菜单:常规菜单编程即可在窗口或者控件上的弹出菜单:需要使用系统对象类型的变量 。复习 create destroy 语句用到函数 poerx poerY 和 Pop上机 演示右键弹出菜单弹出菜单Pop弹出菜单作用:在指定的位置弹出菜单语法:name.pop(x,y)鼠标右键调用

21、菜单新建一个窗口然后在rbuttondown 事件中写入m_main lm_temp /定义一个菜单类型的变量lm_temp = create m_main /创建这个菜单lm_temp.m_基础知识.pop(poerX(),poerY() /在指定的位置点右键显示指定的菜单/lm_temp.pop(poerX(),poerY() /在指定的位置点右键显示菜单destroy lm_temp /内存如果说很多的窗口都用到了这个菜单但是每个窗口的菜单功能是不一样的可以在菜单的事件中调用每个窗口自己的事件比如说建立一个公用的菜单建立菜单检索保存删除关闭在检索中写入这样的代码parentwindow.

22、tevent(ue_retrieve)如果点击了就调用 用户自定义的检索事件然后再建一个窗口w_pop1 在窗口的 newevent 中建一个新的事件 ue_retrieve 事件messagebox(提示,这是检索方式 1)写入本窗口的检索代码然后在 rbuttondown 事件中写入点击鼠标右键弹出菜单的代码lm_temp /定义一个菜单类型的变量lm_temp = createlm_temp.m_data.pop/创建这个菜单(poerX(),poerY() /在指定的位置点右键显示菜单 erX(),poerY() /在指定的位置点右键显示菜单/lm_temp.popdestroy lm

23、_temp(po然后在建一个重复上面的操作w_pop2菜单和 mdi 应用介绍 mdi 应用的 FrameSheet- - mdi 应用介绍那个包括所有的东西 就是一个容器opensheet 打开的窗口都再 mdi_1 的范围之内Mid 的常用编程 菜单中的编程Mdi_1 控件的控制就是下面的空白处上机:将前面的程序调整为 mdi 应用上机:美化 mdi 窗口上机:编写公用的菜单函数下面状态栏的设计:就在 w_maype 中改成 mdi 格式的 然后建三个静态文本框设计成一样的 然后在 resize 中mdi_1.x = 1mdi_1.y = 1mdi_1.width = newwidth -

24、 2*mdi_1.x mdi_1.height = newheight - mdi_1.y -st_1.heightst_1.x = 1st_1.y = newheight - st_1.height - 2 st_1.width = (newwidth - 2*st_1.x - 4)/3st_2.x = st_1.x + st_1.width + 2 st_2.y = st_1.yst_2.width = st_1.widthst_3.x = st_2.x + st_2.width + 2 st_3.y = st_1.yst_3.width = st_1.width p_1.x = st_3

25、.xp_1.y = st_1.y在 open 事件中st_3.text = 当前时间 + string(today(),yyyy 年 mm 月 dd 日) + + string(now(),hh 时 mm 分 ss 秒) timer(1)/设置一个 timer 事件显示时间在 timer 事件中也写入 就可每一秒刷新一次了st_3.text = 当前时间 + string(today(),yyyy 年 mm 月 dd 日) + + string(now(),hh 时 mm 分 ss 秒) & &OpenSheet在 mdi 或者 mdihelp 类型的frame 中打开窗口并且使打开的窗口成为

26、 sheet语法OpenSheet(winvar,win,frame,layout)Winvar:window 类型的保存的是刚打开的 sheet 的Win:string 类型的要打开的窗口的类名Frame:窗口的名称,应该是 mdi 或者是 mdihelp 类型的窗口eger 类型的 自动显示当前打开的 sheet 的标题到第几个菜单下面Layout 枚举型窗口布局 窗口是什么样的状态 比如说平补啊之类的其实就是在window 中的 mdi 中打开 如果 mdi 没有了你要显示的窗口也会找不到mdi_1.x = 1mdi_1.y = 100 /为了让 mdi 中打开的窗口显示全面mdi_1.

27、width = newwidth - 2*mdi_1.x mdi_1.height = newheight - mdi_1.y -st_1.heightst_1.x = 1st_1.y = newheight - st_1.height - 2 st_1.width = (newwidth - 2*st_1.x - 4)/3st_2.x = st_1.x + st_1.width + 2 st_2.y = st_1.yst_2.width = st_1.widthst_3.x = st_2.x + st_2.width + 2 st_3.y = st_1.yst_3.width = st_1.

28、width p_1.x = st_3.xp_1.y = st_1.y在 m_main 的 99 乘法表中/open(w_99)window lw_sheet /定义一个 window 类型的变量openSheet(lw_sheet,w_99,parentwindow,3,layered!) w_99 相当于类名就把w_99 在 lw_sheet/制定的 parentwindow 中打开 以平补的方式 也就相当于吧 w_99 赋值给 lw_sheet3 的意思就是保存在菜单的第三个中比如说 word 的就保存 在视图中/original! 原始的补充函数GetSheet作用:得到第一个 shee

29、t语法:Frame.GetSheet()返回值:窗口类型的window 类型 找到第一个 sheetGetNextSheet作用:找到下一个 sheet语法:Frame.GetNextSheet(sheet)返回值:window 类型的Claame作用:得到指定窗口的类名语法:claame(sheet)返回值:string,类名在 m_main 中建一个新的函数/*=*函数定义:mf_OpenSheet(string as_win,eger ai_multi)*参数解释:as_win*- 要打开的窗口类名 ai_multi 是否允许打开多次 1 允许 0 表示不允许*如果允许打开多个就在 sh

30、eet 打开的窗口的标题加上 1*都涉及到前边已经打开了多少个 sheet*=*/Window lw_temp /定义一个窗口类型的变量eger li_count/标题增加的次数lw_temp = parentwindow.getsheet()/得到第一个打开的 sheetdo while isvalid(lw_temp) /如果没有打开 sheet 就跳出if clasheet 的类名ame(lw_temp) = as_win then /检查找到的的 sheet 的类名是不是现在要打开的if ai_multi = 1 then /如果是 1 表示允许打开多次li_count = li_co

31、unt + 1 /如果有的话就累加 1elselw_temp.bringtotop = true /就是把窗口放在最前面显示 return/结束end if end if/打开 sheetlw_temp = parentwindow.getnextsheet(lw_temp)/找下一个 sheet loopli_count = li_count + 1/边的值的基础上+1opensheet(lw_temp,as_win,parentwindow,3,layered!)/先打开 sheetif ai_multi = 1 then lw_temp.title = lw_temp.title + +

32、string(li_count)/如果允许打开多次就修改标题然后在窗口的一个菜单中修改代码mf_opensheet(w_99,1) /1 表示逊于打开多次2011 年 11 月 23 日 17:59:50 38 讲 15 分 16 秒给 mdi 加背景制作背景窗口1、 做一个窗口,在窗口上放置 picture 控件,取消 pic 的 originasize 属性 选择,设置窗口的类型 popup 取消 tit的位置p_1.x = 1p_1.y = 1ar 属性,设置初始状态为最大化在窗口的 resize 事件中调整p_1.width = newwidth - 2*p_1.x p_1.heigh

33、t = newheight - 2*p_1.y吧窗口的enable 属性去掉这样就不能切换到了2、 在 w_main_type 窗口中用 open 事件中打开背景opensheet(iw_temp,w_background,this,-1,original!),用 opensheet在定义实例变量的地方定义 Window iw_temp 这就就不会影响别的事件的打开然后吧Pb9.0 显示的话是把新作的 pic 窗口的enable 属性选上然后 就能最大话了但是这样就能调节大小了 待解决Tag 属性:,程序使用,不会显示在用户界面mf_opensheet(this.tag,0)这样每个文件都是用

34、的这个了直接粘贴就可以并把每个按钮的 tag 改成想打开的窗口的名称Opensheetwithparm 就是传送的新建一个窗口string ls_parmls_parm = message.stringparmthis.title = ls_parm在菜单中Windowlw_sheetopensheetwithparm(lw_sheet,这是测试标题,w_opensheetwithparm,parentwindow,3,original!)打开窗口并把第一个引号里面的东西给要打开的窗口有使用价值的程序是菜单里面的函数/*=*函数定义:mf_OpenSheet(string as_win,ege

35、r ai_multi)*参数解释:as_win*- 要打开的窗口类名 ai_multi 是否允许打开多次 1 允许 0 表示不允许*如果允许打开多个就在 sheet 打开的窗口的标题加上 1*都涉及到前边已经打开了多少个 sheet*=*/Window lw_temp /定义一个窗口类型的变量eger li_count/标题增加的次数if as_win = or isnull(as_win) then returnlw_temp = parentwindow.getsheet()/得到第一个打开的 sheetdo while isvalid(lw_temp) /如果没有打开 sheet 就跳出

36、if clasheet 的类名ame(lw_temp) = as_win then /检查找到的的 sheet 的类名是不是现在要打开的if ai_multi = 1 then /如果是 1 表示允许打开多次li_count = li_count + 1 /如果有的话就累加 1elselw_temp.bringtotop = true /就是把窗口放在最前面显示 return/结束end if end if/打开 sheetlw_temp = parentwindow.getnextsheet(lw_temp)/找下一个 sheet loopli_count = li_count + 1/边的

37、值的基础上+1opensheet(lw_temp,as_win,parentwindow,3,layered!)/先打开 sheetif ai_multi = 1 then lw_temp.title = lw_temp.title + +string(li_count)/如果允许打开多次就修改标题如果允许打开多次就加窗口 w_splash 首先显示,在application 的 open 的最前面显示登陆窗口w_login主窗口 w_main存在 错误的代码 String ls_pass string ls_userideger li_countls_userid = sle_1.text

38、ls_pass = sle_2.text/交点切换if ls_userid = or isnull(ls_userid) then sle_1.setfocus() /得到交点 returnend ifif ls_pass = or isnull(ls_pass) then sle_2.setfocus() /得到交点 returnend ifselect count(*)o:li_countfrom sys_userswhere userid =: ls_userid and pass =: ls_pass; if li_count 0 thenclosewithreturn(parent,

39、suc)elsesle_1.text = sle_2.text = sle_1.setfocus() ii_count = ii_count - 1 if ii_count = 0 thenmessagebox(提示,不允许反复尝试!,stopsign!)closewithreturn(parent,err) end if2011 年 11 月 24 日 17:02:3040 从头看入门知识点串讲编译部署的完整步骤:编译的三个要点 三个必须悬赏使用帮主查找 pb 的支撑文件变成基础3 中作用范围的变量变量的 2 个If 判断的特例 分支和循环语句指代词使用 sql 语句 游标的使用步骤常见字符

40、串处理编程Split全角半角转换加密常用字符串处理函数mid len replace char asc,以及生命是赋值的特点eger fill5 个可编程对象 application Window Application 对象在 open 事件中初始化工作环境连接数据库 从 dbProfile 3) 打开主操作窗口在 close 事件中:disconnect在 Idle 事件中:屏幕保护 Function 对象接口规划编程规范窗口及控件function userobjectWindowType:response 资源独占式 登陆屏保 传递信息窗口之间传递信息的方式打开传递关闭传递Resize 事件的编程思路Open 事件中的耗时程序的处理 Closequery 事件的编程返回值的作用常用控件数据窗口控件和数据 窗口对象菜单设计菜单用菜单 菜单编辑 Mdi 应用定制 mdi 编程思路背景登陆编程思路通用菜单函数打开 sheet 的编程标示符名变量命名 作用范围+类型缩写_描述对象命名 对象类型缩写_描述W_窗口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论