?? 統計圖在vfp中的實現.txt
字號:
實用技巧
談 動 態 統 計 圖 在VFP 中 的 實 現
河 南 萬 寶 股 份 有 限 公 司 電 算 中 心
梁 宏
( 請 作 者 和 我 們 聯 系)
---- 計 算 機 世 界 報1998 年 第7 期I3 版 刊 出 了《 動 態 統 計 圖 在VFP 中 的 實 現》 一 文。 文 中 作 者 給 出 了 通 過 調 用 以 下 方 法 實 現 動 態 出 圖:
DO (_GENGRAPH) WITH (PARM1),(PARM2),...(PARM9)
---- 由 于_GENGRAPH 是VFP 的 系 統 變 量, 它 其 實 就 是 指 向WZGRAPH.APP, 也 就 是 說 該 方 法 實 質 上 就 是 通 過 調 用VFP 附 帶 的 向 導 例 程 來 工 作。
---- 利 用 該 方 法 確 實 能 夠 實 現 統 計 圖 的 生 成, 但 非 常 遺 憾 的 是 該 方 法 只 能 運 行 在VFP 的" 懷 抱" 中, 一 旦 脫 離 了VFP 的 開 發 環 境, 你 得 到 的 不 再 是 統 計 圖 形 而 是 一 條 錯 誤: 只 有 在 開 發 環 境 中 才 能 使 用 本 功 能 ! 很 顯 然, 這 種 方 法 極 不 實 用, 我 們 總 不 能 把 自 己 開 發 的 軟 件 和VFP.EXE 一 塊 發 行 給 我 們 的 用 戶 吧 ?
---- 統 計 圖 以 其 形 象 直 觀, 界 面 友 好 而 讓 我 們 的 用 戶 深 愛 不 已, 但 如 何 在 我 們 的 程 序 中 實 現 自 由 的 動 態 圖 形 生 成 呢 ? 下 面 筆 者 給 出 本 人 精 心" 制 造" 的" 零 件"----- 自 動 統 計 圖 生 成 類: h3> 一、" 零 件" 加 工:
---- 自 定 義 一 個 基 類 為"CUSTOM " 的 自 定 義 類: "LHGENGRAPH", 為 其 添 加 下 列 屬 性:
---- AutoRefresh : 值 為 .T., 作 用: 控 制 新 生 成 圖 形 是 否 刷 新 原 圖 形 格 式.
---- HasLegend : 值 為 .T., 作 用: 控 制 圖 形 是 否 有" 圖 例".
---- MainType : 值 為 0, 作 用: 選 定 生 成 圖 形 的 主 類 型 號
---- SaveTable : 值 為 空 , 作 用: 用 來 指 定 生 成 圖 形 的 存 放 表, 要 求 該 表 須 有GEN 類 型 字 段.
---- SubType : 值 為 0, 作 用: 選 定 生 成 圖 形 的 次 類 型 號( 值 為 零 為 自 動 選 擇).
---- Title : 值 為" 梁 先 生", 作 用: 生 成 圖 形 的 標 題.( 如 為 空 則 無 標 題).
---- WorkTable : 值 為 空, 作 用: 指 定 統 計 數 據 的 來 源. 要 求 該 表 的 第 一 列( 最 左 列) 為 統 計 的X 軸( 中 時 間, 部 門 等).
---- 為 該 類 添 加 以 下 方 法:
---- LhGenGraph 作 用: 調 用 該 方 法 即 可 自 動 生 成 統 計 圖 形.
---- GetRecVAl 作 用: 由LhGenGraph 方 法 調 用. 取 得 記 錄 值.
---- 以 下 為LhGenGraph 方 法 的 具 體 內 容:
*-- 動態統計圖生成
*-- 單位:河南萬寶股份有限公司 電算中心
*-- 作者:梁宏
LOCAL lcWorktable,lcSavetable,lcTitle,
llAutogen,llLegend,lnMtype , lnStype
*-- 工作表,保存表,圖表標題,自動刷新 ,
圖例 ,圖形主格式,圖形子格式
lcWorktable=THIS.WorkTable
lcSavetable=THIS.SaveTable
lcTitle =THIS.Title
llAutogen =THIS.AutoRefresh
llLegend =THIS.HasLegend
lnMtype =THIS.MainType
lnStype =THIS.Subtype
IF ISBL(lcWorktable) .OR. ISBL(lcSavetable)
=MESSAGEBOX("請先指定工作表和產生圖形回存表!",
64,"梁宏提示:")
RETU
ENDIF
#DEFINE CRLF CHR(13)+CHR(10)
#DEFINE TAB CHR(9)
LOCAL lnCursele,lcData,lnFnumber,lLoop,llOpenwTable,
llOpensTable,;
lnWcurrec,loForm,LHole,lcFieldval,lcFname
lnCursele=SELE()
llOpenwTable=.T.
llOpensTable=.T.
IF USED("&lcWorktable")
SELE &lcWorktable
llOpenwTable=.F.
ELSE
SELE 0
USE &lcWorktable
ENDIF
lnWcurrec=RECN()
lnFnumber=FCOUNT()
IF lnFnumber< 2
=MESSAGEBOX("工作表最少應包含兩個字段!",
64,"梁宏提示:")
RETU
ENDIF
lcData=" "+TAB
FOR lLoop=2 TO lnFnumber && 取字段名
lcData=lcData+FIELD(lLoop)
IF !EMPTY(FIELD(lLoop+1))
lcData=lcData+TAB
ENDIF
ENDFOR
lcData=lcData+CRLF
GO TOP
SCAN
FOR lLoop=1 to lnFnumber
lcFieldval=THIS.GetRecVal(FIELD(lLoop))
IF lLoop< >lnFnumber
lcData=lcData+lcFieldval+TAB
ELSE
lcData=lcData+lcFieldval+CRLF
ENDIF
ENDFOR
ENDSCAN
IF llOpenwTable
USE
ELSE
GO lnWcurrec
ENDIF
IF USED("&lcSavetable")
SELE &lcSavetable
llOpensTable=.F.
ELSE
SELE 0
USE &lcSavetable
ENDIF
IF RECC()=0
APPE BLANK
ENDIF
lnFnumber=FCOUNT()
FOR lLoop=1 TO lnFnumber+1
IF TYPE(FIELD(lLoop))="G"
EXIT
ENDIF
ENDFOR
IF lLoop >lnFnumber
=MESSAGEBOX("指定的保存表中不含有< 通用 >字段,
因此無法生成圖表",64,"梁宏提示:")
RETU
ENDIF
lcFname=FIELD(lLoop)
IF llAutogen
APPEND GENERAL &lcFname DATA lcData
CLASS "MSGRAPH.CHART"
ELSE
APPEND GENERAL &lcFname DATA lcData
ENDIF
loForm=CREATEOBJECT("FORM")
loForm.ADDOBJECT("LHole","OLEBOUNDCONTROL")
loForm.LHole.STRETCH=2
lcCsource=lcSavetable+"."+lcFname
loForm.LHole.CONTROLSOURCE=lcCsource
loForm.LHole.HEIGHT= _SCREEN.HEIGHT
loForm.LHole.WIDTH=_SCREEN.WIDTH
lcError=ON("ERROR")
ON ERROR APPEND GENERAL &lcFname
DATA lcData CLASS "MSGRAPH.CHART"
loForm.LHole.HasLegend=llLegend
IF ISBL(lcTitle)
loForm.LHole.HasTitle = .F.
ELSE
loForm.LHole.HasTitle = .T.
loForm.LHole.ChartTitle.Caption = lcTitle
ENDIF
IF lnMtype< >0 .AND. lnStype< >0
loForm.LHole.AutoFormat(lnMtype,lnStype)
ENDIF
IF !ISBL(lcError)
ON ERROR &lcError
ELSE
ON ERROR
ENDIF
loForm.RELEASE
* FLUSH
IF llOpensTAble
USE
ENDIF
SELE (lnCURSELE)
以下為GetRecVAl 方法的具體內容:
*-- 轉換字段值
LPARAMETER lcFieldname,lcFval,lcFtype
lcFieldname=&lcFieldname
lcFtype=TYPE("lcFieldname")
DO CASE
CASE lcFtype="D"
lcFval=DTOC(lcFieldname)
CASE lcFtype="C"
lcFval=ALLT(lcFieldname)
CASE lcFtype="T"
lcFval=TTOC(lcFieldname)
OTHERWISE
lcFval=ALLT(STR(lcFieldname))
ENDCASE
RETU lcFval
二、 應 用 指 南:
---- 你 可 以 將 本 類 加 入 到 你 的 表 單 上( 比 如 對 象 名 為LHGENGRAPH1), 再 加 入 一 個 按 鈕 用 以 觸 發LHGENGRAPH 的LHGENGRAPH 方 法。 當 然 你 需 要 給LHGENGRAPH1 提 供 至 少 兩 個 參 數, 那 就 是WorkTable 和SaveTAble, 即 工 作 表 和 圖 形 生 成 回 存 表。 要 得 到 這 兩 個 表 其 實 很 簡 單, 只 需 用SELE 語 句 選 定 你 需 要 進 行 統 計 分 析 的 數 據 列 和 用CREATE TABLE 命 令 創 建 一 個 含 有GEN 類 型 字 段 的 表 即 可。 將SaveTable 的GEN 字 段 拖 放 到 表 單 形 成OLEBOUNDCONTROL 對 象( 該 對 象 即 為 生 成 的 統 計 圖 形)。 調 整 該 對 象 大 小 及 屬 性 至 滿 意。 在 此, 提 供 一 個 技 巧: 運 行 表 單, 雙 擊OLEBOUNDCONTROL 對 象 進 入 編 輯 狀 態, 調 整 該 圖 形 的 背 景 等 屬 性, 比 如 背 景 填 充 為" 大 理 石" 面 等, 退 出 編 輯 狀 態 后, 將LHGENGRAPH1 的AUTOREFRESH 屬 性 設 為.F., 以 后 再 刷 新 該 圖 形 時 將 采 用 你 調 整 好 的 格 式。 這 樣, 你 就 可 以 得 到 一 個 十 分 優 美 的 統 計 圖 形 了。 更 讓 人 興 奮 的 是 本 功 能 即 使 脫 離VFP 開 發 環 境 仍 然 是 運 轉 自 如。 你 完 全 可 以 將 她 集 成 到 你 的EXE 文 件 中 發 行 給 你 的 用 戶。 注 意 在 生 成" 安 裝" 時, 應 該 選 中MSGRAPH 選 項。 免 費 訂 閱
實用技巧分類
Office應用
CAD
C、C++
數據庫應用
Delphi
Internet應用
Java
Notes應用
操作系統應用
PowerBuilder
VB
Visual Foxpro
其他類
上周 排行榜
如 何 投 稿 ?
在日常的工作生活中,我們對計算機軟硬件技術的應用開發肯定有許多的心得體會,拿來和眾人分享:讓別人得到他們想要的,使自己找到苦苦尋覓的;小的點點滴滴,大的工程系統,這里都需要。投稿 的關鍵在“技巧”二字,知他人所不知,這樣的稿件本欄最最歡迎! 大家公認的 好文章自然會有好的獎勵。希望每個人在這里都有所收獲...
中國惠普
3Com中國
Motorola中國
CA中國
Cabletron
Sony在中國
西門子WinCC
愛普生中國
中國建設銀行
德州儀器(TI)
問博醫藥
--------------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -