运用VisualFoxPro的CommonDialogs控件
来源:优易学  2011-11-29 13:31:38   【优易学:中国教育考试门户网】   资料下载   IT书店

  Flags 属性的行动与 VFP 的 MESSAGEBOX() 的 DialogBoxType 参数相似;青年人网提示可以按你的需要添加多个不同的值来组合它的外观和行为。不幸的是,即使 flag 对于多种类型的对话框具有相同的意思,但它可能有不同的值。
  例如,显示帮助按钮 flag 对于颜色对话框是 0x8 而对于文件对话框是 0x10。
  因为各个对话框的设置值相当神秘,我创建了一个叫做 COMMDLG.H 的包含文件用于定义各个不同的值的常数。要设置控件的 Flags 属性,简单的添加你想组给的设置值即可。
  例如,要显示帮助按钮和复盖警告,可以这样设置:
  This.oCommonDialog.Flags = cnFILEDLG_OVERWR99vE + cnFILEDLG_SHOWHELP
  以下是最常用的 Flags 选择(其它的参见帮助文件):
  Allow Multiple File Selection (0x200;cnFILEDLG_MULTIPLE 在 COMMDLG.H 文件中):允许选择多个文件。如果开启了这一开关,对话框的出现与一般的 Windows 95 对话框相当不同,除非你也添加了 0x80000 (cnFILEDLG_EXPLORER) 到 Flags 中;注意帮助文件中的该值是错误的 0x8000。
  Prompt if File Doesn't Exist (0x2000;cnFILEDLG_PROMPTNEW):提示用户创建一个目前尚不存在的文件。如果开启该选项,就不需要开启"Path Must Exist" 和 "File Must Exist" 标志,由于它们是自动设置的("Path Must Exist" 开启且"File Must Exist" 关闭)。该标志未用于 Save 对话框。
  File Must Exist (0x1000;cnFILEDLG_FILEEXIST):如果用户输入的文件名不存在,显示一个错误信息。如果开启该选项,"Path Must Exist" 标志自动开启。该标志未用于 Save 对话框。
  Path Must Exist (0x800;cnFILEDLG_PATHEXIST):如果用户输入的路径不存在,显示一条错误信息。VFP 的 GETFILE() 和 PUTFILE() 函数的该开关是永远地开启的,这可能也是你为什么要选择 Common Dialogs 控件的理由吧。
  Hide Read Only (0x4;cnFILEDLG_HIDERO):隐藏对话框中的"只读"复选框。
  Help Button (0x10;cnFI
  LEDLG_SHOWHELP):在对话框中显示帮助按钮。
  Overwrite Prompt (0x2;cnFILEDLG_OVERWR99vE):如果用户输入了一个已存在的文件名,显示一个"复盖该文件"信息 。该标志仅用于 Save 对话框。VFP 的 PUTFILE() 函数总是保持该开关为开,这可能是你为什么要选择 Common Dialogs 控件的另一个理由。
  Share Aware (0x4000;cnFILEDLG_SHAREAWARE):允许用户选择一个已被其它应用程序打开的文件。
  Don't Change Directory (0x8;无常数定义):文件对话框会做一些你可能不希望的事:如果用户选择了一个与当前目录不同的目录,在退出对话框时,该目录将变为当前目录。该设置可避免出现上述情况。
  派生 Common Dialogs
  为使 Common Dialogs 控件更易于使用,我创建了一个该控件的抽象子类,叫做 SFCommonDialog (在源代码中的 ACTIVEX.VCX 类库中)。SFCommonDialog 具有两个新的自定义属性:lShowHelpButton (设置它为 .T.来显示帮助按钮) 和 lCancelled (如果用户取消了该对话框,设置它为 .T.)。还有一个新的自定义方法 (SetFlags) 用于设置一些属性,这样我们可以发现用户是否在对话框中选择了取消。设置自定义属性 lCancelled 为 .T.时,Error 方法处理用户选择取消的情况(CancelError 自动设置为 .T.这样可以在用户选择取消时,触发一个错误)。
  我还创建了一个叫做 SFFileDialog 的 SFCommonDialog 的子类,用于特定的文件对话框。SFFileDialog 使用 COMMDLG.H 包含文件。它具有一些自定义属性用于为 Flags 属性提供不同的选项,这样你不必记住什么常数用于什么设置。这些属性,在默认情况下均设置为 .F.,它们是lAllowMultiple,lFileMustExist,lOverWritePrompt,lPathMustExist,lPromptNew,lShareAware 和 lShowReadOnly。另一个自定义属性,cPath,设置为用户选择的文件名中的路径。cOldCurrDir 是一个受保护的自定义属性用于用于保存调用对话框前的当前目录。一个自定义的数组属性,aFiles,用于保存用于保存用户选择的文件名(没有路径)。两个自定义方法 OpenFile() 和 SaveFile() 用于显示适当的对话框。这两个方法调用 SaveDirectory() 和 RestoreDirectory() 自定义方法来保存和恢复当前目录,SetFlags() 设置先前提到过的自定义属性来将 Flags 属性设置为适当的值,SetProperties() 适当地设置 cPath,lCancelled 和 aFiles 属性。
  好了,现在我们建立了它,SFFileDialog 有什么好处?只要我需要让用户选择一个文件时,我使用它.因为它在外观和行为上给我以比 PUTFILE() 或 GETFILE() 更多的控制能力。例如,假定你的应用程序中有一个导入功能。如果用户具有三个要导入的文件,你调用 PUTFILE() 或 GETFILE() 三次吗?当他们可以在一次选择多个文件并让导入函数进行一次性处理时,你的应用程序显然更易于使用,特别是在处理费时较多时,这种优势更为明显。
  这里说明如何使用该控件。从项目管理器中拖放一个 SFFileDialog 对象到表单中。SFFileDialog 是一个非可视控件,因此它在运行时不会显现在表单中(如果对于显示一个对话框的对象是一个非可视类感到奇怪,记住对话框在控件的方法未被调用前是不会显示的)。按需要设置控件的各种属性。例如,要允许用户选择多个文件,设置 lAllowMultiple 属性为 .T.,表单上的相关按钮的 Click() 方法将会调用 SFFileDialog 对象的 OpenFile() 方法来显示一个打开文件对话框。当从 OpenFile() 返回时,它会检查 lCancelled 属性来确定用户是否在对话框中按下了取消按钮。如果没有,代码会使用 aFiles (包含选定文件的文件名) 和 cPath (包含文件所在的目录名) 属性来导入文件。这些代码看起来象下面所示:
  with Thisform.oFileDialog .OpenFile() if not .lCancelled for lnI = 1 to alen(.aFiles) lcFile = .cPath + .aFiles[lnI] Thisform.ImportFile(lcFile) next lnI endif endwith
  源代码中的 COMMDLG 表单是一个打开和保存对话框。它包含一个 SFFileDialog 对象,并且表单中的许多对象的 ControlSource 具有该对象的属性。你可以设置不同的标志和其它属性并单击"测试"按钮来查看对话框的外观和行为效果。
  其它注意事项
  VFP 的 GETFILE() 和 PUTFILE() 函数有一些 Common Dialogs 控件所不具备的功能:
  可以指定文件名旁边显示的文本来代替默认的 "File name" 。但是,由于指定的要显示的文本很短(只有 10 个字符),所以它没有多大意义。
  GETFILE() 允许你指定打开按钮旁的提示信息并指明是否显示一个"新建"或"无"按钮。
  正如先前所提及,当在对话框中选择取消时,GETFILE() 和 PUTFILE() 返回一个空的文件名。你可以设置 CancelError 属性为 .T. 来处理这种情况并捕捉1429 号错误(典型地设置 FileName 和 FileTitle 属性为空)。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训