全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2883
推到 Plurk!
推到 Facebook!

請教 displayformat

答題得分者是:sryang
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-03 09:22:38 IP:61.216.xxx.xxx 未訂閱
請教各位: 我用的DBGrid元件是TwwDBGrid元件,在DataModule中用ADOQUERY, 在用到數值的Field時,用DisplayFormat來秀出(如1,000,000.00的數值) <#,###,###.00> 但奇怪的是,每個table的Field都可秀出,卻只有一個table(收支)的Field 設了Displayformat無效? 請問是否可以解決?
ying0515
中階會員


發表:90
回覆:168
積分:81
註冊:2003-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-03 09:44:43 IP:61.218.xxx.xxx 未訂閱
請問該欄位型態為何?是實體還是虛擬欄位? Delphi follower
------
Delphi
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-03 10:44:00 IP:61.66.xxx.xxx 未訂閱
引言: 請教各位: 我用的DBGrid元件是TwwDBGrid元件,在DataModule中用ADOQUERY, 在用到數值的Field時,用DisplayFormat來秀出(如1,000,000.00的數值) <#,###,###.00> 但奇怪的是,每個table的Field都可秀出,卻只有一個table(收支)的Field 設了Displayformat無效? 請問是否可以解決?
如果你是在DataModule中指定format格式的話, 請把這些指定格式的動作 移到 form 上的 onactive (或oncreate, 或 onIdle)上來做就可以解決了! 原因:不明, 我也曾發生這樣的狀況(不過我是用editmask), 百般查無結果 後來移到form上來寫就出來了!
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-03 15:49:13 IP:61.216.xxx.xxx 未訂閱
引言: 請問該欄位型態為何?是實體還是虛擬欄位? Delphi follower
是實體欄位.在SQL server中是numeric.
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-03 15:50:21 IP:61.216.xxx.xxx 未訂閱
引言:
引言: 請教各位: 我用的DBGrid元件是TwwDBGrid元件,在DataModule中用ADOQUERY, 在用到數值的Field時,用DisplayFormat來秀出(如1,000,000.00的數值) <#,###,###.00> 但奇怪的是,每個table的Field都可秀出,卻只有一個table(收支)的Field 設了Displayformat無效? 請問是否可以解決?
謝謝,我試試看! 如果你是在DataModule中指定format格式的話, 請把這些指定格式的動作 移到 form 上的 onactive (或oncreate, 或 onIdle)上來做就可以解決了! 原因:不明, 我也曾發生這樣的狀況(不過我是用editmask), 百般查無結果 後來移到form上來寫就出來了!
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-03 16:44:03 IP:61.216.xxx.xxx 未訂閱
引言: 如果你是在DataModule中指定format格式的話, 請把這些指定格式的動作 移到 form 上的 onactive (或oncreate, 或 onIdle)上來做就可以解決了! 原因:不明, 我也曾發生這樣的狀況(不過我是用editmask), 百般查無結果 後來移到form上來寫就出來了!
ADOQUERY.FieldByName 找不到 DisplayFormat可以寫? 只看到DisplayLabel等可以寫? 請問是否不可程式指定呢?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-04 22:24:55 IP:61.66.xxx.xxx 未訂閱
引言: ADOQUERY.FieldByName 找不到 DisplayFormat可以寫? 只看到DisplayLabel等可以寫? 請問是否不可程式指定呢?
你必須把欄位拉到FIELD EDITOR中才能建立DISPLAYFORMAT
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-05 09:40:06 IP:61.225.xxx.xxx 未訂閱
引言: 你必須把欄位拉到FIELD EDITOR中才能建立DISPLAYFORMAT
抱歉!可能是我沒把意思表達清楚..造成您的誤會. 我原先是把在Field Editor的Field用Displayformat設定 '#,###,###,###.00',但除了收支的table之外,其他所有table 都正確可秀出. 因您回覆說要在Form的Onactive指定格式,但我找不到可在 程式中寫DisplayFormat的方式,故想請問該如何寫才正確,謝謝!
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-05 11:22:10 IP:61.225.xxx.xxx 未訂閱
我找到原因了,因為我在Field的OnGetText 中有以下程式 if Sender.Asinteger = 0 then Text := '' else Text := sender.AsString; 故Displayformat 出不來, 可是如果我把此段程式刪除 ,雖Displayformat會秀出, 但我要如何把數值為零的,不秀出任何值呢? 發表人 - skycap 於 2003/09/05 14:37:29
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-05 11:22:57 IP:61.66.xxx.xxx 未訂閱
你這樣試試看    1.把所有欄位拉到 field editor, displayformat不要設定 2.在 unit 中的 private 寫 procedure StartRun(Sender: Tobject; var Done: boolean); 3.在implementation實作下寫    
procedure TForm1.StartRun(Sender: Tobject; var Done: boolean);
          var xhandle: longInt;
begin
     xhandle:= FindWindow('TForm1',nil);
     if xhandle = 0 then exit;
     Application.ProcessMessages;
     Application.OnIdle:= nil;
     Done:= True;         Table1P1.DisplayFormat:= '###,###,###.00';
     .....  // P1 為實際你要FORMAT的欄位名稱, 把所有要FORMAT的欄位
                  依此方式全部在此註解
end;
4.在 Form1.onCreate 的最後面下這一行code Application.onIdle:= StartRun; 這些動作是指當form完全被create之後回到Idle(就是閒閒美帶子的時候), 會 被觸發 StartRun的procedure, 這時才去指定 format, 雖然我的狀況不是用 displayformat而是 editmask, 但與你是一樣的狀況, 所有的field的editmask 都有用, 就唯獨有一個field的mask不出來, 之前我也是直接在fieldeditor中 直接指定或者在datamodule中指定的, 然後不經意的情況下在此設定, 竟然都 可以出來了, 所以試試看了! 祝順利!
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-05 14:58:34 IP:61.225.xxx.xxx 未訂閱
引言: 你這樣試試看 ... ...
多謝您的指導!但可能是因為在Field的OnGetText即指定了asstring 所以才無法作displayformat? 我再試試看有無其他事件可用!
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-05 17:21:27 IP:61.57.xxx.xxx 未訂閱
引言: 多謝您的指導!但可能是因為在Field的OnGetText即指定了asstring 所以才無法作displayformat? 我再試試看有無其他事件可用!
那麼,就把你的 OnGetText 改成:
if Sender.Asinteger = 0 then
    Text := ''
  else
    Text := FormatFloat(TNumericField(Sender).DisplayFormat, Sender.AsFloat);
試試看吧 加油喔,喵~ 發表人 - sryang 於 2003/09/05 17:23:18
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
skycap
一般會員


發表:10
回覆:14
積分:4
註冊:2002-11-07

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-09-06 11:01:13 IP:61.216.xxx.xxx 未訂閱
引言: 那麼,就把你的 OnGetText 改成:
if Sender.Asinteger = 0 then
    Text := ''
  else
    Text := FormatFloat(TNumericField(Sender).DisplayFormat, Sender.AsFloat);
試試看吧 加油喔,喵~ 發表人 - sryang 於 2003/09/05 17:23:18
成功了!多謝您了! 也謝謝P.D.板主的指導,讓我找出問題的原因.. 遺憾答題得分只能選定一人,但還是要表達我的感謝!
系統時間:2024-05-18 14:35:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!