VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

實現VFP動態表單的新思路(轉貼)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 1 樓

發表發表於: 星期六 一月 24, 2004 1:50 am    文章主題: 實現VFP動態表單的新思路(轉貼) 引言回覆

實現VFP動態表單的新思路 韋 明
  【摘 要】在管理資訊系統開發中,系統預先設計的介面有時可能不符合用戶的習慣,需要調整或增加新的功能,因此一個動態的表單是很有必要的。在Visual Foxpro 6.0中,實現動態表單通常可以利用AddObject方法在運行時向表單添加合適的控制項物件,並在Form的初始化事件中設置控制項代碼,但這樣設計的表單,不易保存也不易修改。如果我們以編程方式實現,不僅不直觀,而且需要環境的支援編譯後才能運行。視覺化編程語言,主要以表單為資料操作介面,本文詳細分析了Visual Foxpro 6.0表單資料表的結構和內容,通過修改表單資訊庫的內容,實現了表單的動態生成。

  【關鍵字】 表單,動態表單,Visual Foxpro 6.0

  1. 引言

  在管理資訊系統開發中,系統預先設計的介面有時可能不符合用戶的習慣,需要調整或增加新的功能,因此一個動態的表單是很有必要的。在Visual Foxpro 6.0中,實現動態表單通常可以利用AddObject方法在運行時向表單(Form)添加一個控制項物件(Control object),其一般格式為:Object.AddObject(cName, cClass),cName指定新對象的名稱,cClass新增對象的類名。運行時添加一個控制項物件是在Form的初始化事件(Init event)代碼中設置的,添加的控制項物件是不可見的,若要控制項可見需設置控制項物件的Visible 屬性為真(.T.)。在表單中添加合適的控制項物件,設置表單和控制項屬性並編寫代碼,但這樣設計的表單,不易保存也不易修改。如果我們以編程方式實現,不僅不直觀,而且需要環境的支援編譯後才能運行。

  視覺化編程主要以表單為介面,Visual Foxpro 也不例外,調用表單的方式也非常簡單,使用DO FORM <表單名>即可實現調用。本文分析了Visual Foxpro 6.0表單資料表的結構和內容,通過修改表單資訊表的內容,實現了表單的動態生成。

  2. 表單資訊表的結構

  在FOXPRO中,表單的資訊是保存在以. SCX為副檔名的資料庫檔中(備註檔以. SCT為副檔名),瞭解表單資料表的結構有助於問題的解決。表單(.SCX )的表庫結構及欄位含義如表1所示:
表1 表單的表結構
欄位 欄位名 類型 長度 說 明
1 platform c 8 平臺標識
2 uniqueid c 10 物件唯一標識
3 timestamp n 10 時間戳
4 class m 4 對象的類
5 classloc m 4 類所在位置(基類時為空)
6 baseclass m 4 基類(非基類時為空)
7 objname m 4 對象名稱
8 parent m 4 對象容器
9 properties m 4 屬性
10 protected m 4 受保護成員
11 methods m 4 方法(物件的事件代碼)
12 objcode m 4 對象二進位碼
13 ole m 4 ole
14 ole2 m 4 ole2
15 reserved1 m 4 保留1
16 reserved2 m 4 保留2
17 reserved3 m 4 保留3
18 reserved4 m 4 保留4
19 reserved5 m 4 保留5
20 reserved6 m 4 保留6
21 reserved7 m 4 保留7
22 reserved8 m 4 保留8
23 user m 4 為開發者保留
  3. 表單表的欄位內容

  一個新建的不含任何控制項的空表單的資料表(.scx)的內容如圖1所示:

  

  圖1 表單資料表

  .SCX 表中的第一個記錄和最後一條記錄是表單檔的預設值。其內容如下:

  第一條記錄:表單類型和版本資訊

   PLATFORM:COMMENT

   UNIQUEID:Screen

   RESERVED2:VERSION = 3.00

  最後一條記錄:有關表單資訊

   PLATFORM:COMMENT

   UNIQUEID:RESERVED

   PROPERTIES: 宋體, 0, 9, 6, 14, 10, 12, 2, 2

  第二條記錄:資料環境資訊

   PLATFORM:WINDOWS

   CLASS:dataenvironment

   BASECLASS:dataenvironment

   OBJNAME:dataenvironment

   PROPERTIES:Name = "Dataenvironment"

   RESERVED2:1(無數據表時為1,每增加一個資料表增加1)

   RESERVED4:1

  第三條記錄:表單物件資訊

   PLATFORM:WINDOWS

   CLASS:form

   BASECLASS:form

   OBJNAME:Form1

   PROPERTIES:

   Height = 326

   Width = 548

   DoCreate = .T.

   AutoCenter = .T. (居中)

   Caption = "Form1" (可修改)

   Name = "Form1" (可修改)

  4. 表單可添加的控制項物件

  ⑴ 控制項

  控制項(control)是放在一個表單上用以顯示資料、執行操作或使表單更易閱讀的一種圖形物件,如文本框、矩形或命令按鈕等。Visual FoxPro 控制項包括核取方塊、編輯框、標籤、線條、圖像、形狀等等。

  ⑵ 基類

  不同的控制項來自不同的基類。在將一個基本類添加到應用程式之前,用戶需要瞭解該基本類的 Visual FoxPro 基類。某些基本類只能在表單上用作可視物件,而其他基本類是非可視的,可以通過編程運行,而不必放在表單上。Visual FoxPro 基本類文檔描述了每個基本類的基類,用戶可以用來確定某個基本類是否可以添加到表單上、或在應用程式中通過編程運行。

  下表列出了 Visual FoxPro 的基類,並說明如何將其添加到用戶應用程式中。
表2 visual foxpro 的基類
種類a-可以放落到表單上的基類 種類 b-可以放落到表單上或在應用程式中通過編程運行的基類 種類c-只能在應用程式中通過編程運行的基類
checkbox(核取方塊) custom form
combobox(下拉式列示方塊) container formset
commandbutton(命令按鈕) timer toolbar
commandgroup(命令按鈕組) projecthook  
editbox(編輯框) activedoc  
grid(表格)    
hyperlink(超連接)    
image(圖像)    
label(標籤)    
line(線條)    
listbox(列表框)    
ole control(activex控制項)    
optionbutton(選項按鈕)    
optiongroup(選項按鈕組)    
shape(形狀)    
spinner(微調控件)    
textbox(文本框)    
  ⑶ 屬性

  不同的物件具有不同的屬性,屬性既能在設計時刻也可在運行時刻進行設置。下表列出了一個核取方塊可能有的屬性,限於篇幅其他控制項物件的屬性不再一一列舉。
表3 核取方塊常用屬性
屬性 說明
caption 說明性文字。
enabled 能否被用戶選擇。
forecolor 文本的顏色。
top 頂邊的位置。
left 左邊的位置。
mousepointer 滑鼠指標的形狀。
visible 是否可見。
  ⑷ 數據綁定

  表單中可以有兩類控制項:與表中資料綁定的控制項和不與資料綁定的控制項。當用戶使用綁定型控制項時,所輸入或選擇的值將保存在資料源中(資料源可以是表的欄位、臨時表的欄位或變數)。要想把控制項和資料綁在一起,可以設置控制項的 ControlSource 屬性,例如ControlSource = "rs.姓名"。

  5. 動態表單的實現

  為了使生成表單的資料表與Visual Foxpro系統生成表單資料表的一致性,生成表單的過程可按以下步驟進行:

  第一步:添加表單類型和版本資訊。

   PLATFORM:COMMENT;

   UNIQUEID:Screen;

   RESERVED2:VERSION = 3.00。

  第二步:添加資料環境資訊

   資料環境資訊包含如下兩方面內容:

   ① 添加資料環境資訊

   PLATFORM:WINDOWS

   CLASS:dataenvironment

   BASECLASS:dataenvironment

   OBJNAME:dataenvironment

   PROPERTIES:Name = "Dataenvironment"

   RESERVED2:1(無數據表時為1,每增加一個資料表其值加1)

   RESERVED4:1

   ② 添加數據表

   增加一個資料表時,相應的修改以下內容:

   PLATFORM:WINDOWS

   CLASS:cursor

   BASECLASS:cursor

   OBJNAME:cursor1

   PARENT:Dataenvironment

   PROPERTIES:

   Left = 10

   Top = 20

   Width = 100

   Height = 90

   Alias = "rs" (需修改)

   CursorSource = rs.dbf (需修改)

   Name = "Cursor1" (需修改)

   多次添加資料表時,OBJNAME依次為cursor2,cursor3,...,PROPERTIES中的Alias、CursorSource和Name作相應的修改。每增加一個資料表時,資料環境(第二條記錄)的欄位RESERVED2增加1。

   第三步:添加表單定義資訊

   PLATFORM:WINDOWS

   CLASS:form

   BASECLASS:form

   OBJNAME:Form1

   PROPERTIES:

   Height = 326

   Width = 548

   DoCreate = .T.

   AutoCenter = .T.

   Caption = "Form1" (可修改)

   Name = "Form1" (可修改)

   第四步:添加各類控制項

   添加各類控制項時,需指出其基類和屬性。例如:

   PLATFORM:WINDOWS

   CLASS:label

   BASECLASS:label

   OBJNAME:label1

   PARENT:Form1

   PROPERTIES:

   Caption = "Label1"

   Height = 16

   Left = 36

   Top = 24

   Width = 38

   Name = "Label1"

   第五步:添加結束標誌

   PLATFORM:COMMENT

   UNIQUEID:RESERVED

   PROPERTIES:宋體, 0, 9, 6, 14, 10, 12, 2, 2

  根據表單控制項的多少,自動調整或人工調整表單的佈局和大小。

  6. 幾點說明

  ⑴ 物件名稱(OBJNAME) 與屬性(PROPERTIES)中的Name具有一致性。

  ⑵ 表單OBJNAME改變後,與表單名稱有關的內容需作相應改變。

  ⑶ UNIQUEID可以通過函數SYS(2015)實現,TIMESTAMP可以通過函數SYS(3)來實現。

  ⑷ 控制項的名稱可按照它所綁定的欄位的名稱加數位的形式,或基類名加數位的形式。

  在使用過程中,可以採取生成表單與編程相結合的方式實現動態表單,特別是對於比較複雜的控制項(比如,表格grid),有助於減少代碼和增加表單的通用性。

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作