線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1614
推到 Plurk!
推到 Facebook!

兩個元件之間Use的問題

答題得分者是:ccchen
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-24 14:45:41 IP:61.219.xxx.xxx 未訂閱
請問: 我現在做了兩個元件, 一個是DateEdit繼承MaskEdit,主要功能是能夠做到日期格式判斷和設定Mask。 另一個是DateStyle繼承TComponet,主要是用來存放目前系統的日期格式(m/d/y or y/d/m....)。 因為日期格式是寫在資料庫內,載入到系統,無法寫死在元件內,所以設計了一個DateStyle來讓元件使用者自己手動輸入日期格式到DateStyle內,再由DateEdit連結DateStyle來找取其內容中的日期格式,主要的目的是怕如果今天系統一但變更別的日期格式時,我必須要到每一個Form上去修改DateEdit的日期格式,所以用一個DateStyle來存放日期格式,每個元件去連他。 但是現在面臨到一個問題,如果今天我DateStyle設定為y/m/d格式,如果目前有一個DateEdit連到DateStyle去捉到值時,我去修改DateStyle日期格式為d/m/y,再拉一個DateEdit元件去連DateStyel元件,則在Design Time時DateEdit1的格式為y/m/d,而DateEdit2的格式為d/m/y,雖然在RunTime時,兩個都會變成d/m/y,但是在Design時怕會照成自己判斷錯誤等狀態(Ex:以為沒有改到DateStyle)。 請問: 是否有辦法當我更改DateStyle的日期格式時,則此時所有連到DateStyle(DateEdit use DateStyle)的DateEdit都會變成目前DateStyle的日期格式(不論是在Design Time or Run Time的階段。 之前是有想過DateStyle 下開放屬性,去連結所有的DateEdit元件(Ex: propety DE1 : TDateEdit,然後在Object inspactor中選擇DateEdit1),但一方面專案還在開發,如果又增加使用DateEdit1時,則又要去增加DE2~...,另一個不能用的原因是DateEdit已經Use了DateStyle元件,而DateStyle不能再Use DateEdit,會造成循環Use。 所以想問問看大家,有沒有什麼辦法在我修改了DateStyle元件的日期格式時,原本已經連到DateStyle的DateEdit在Design Time也能立刻改變成新的日期格式。
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-24 15:14:05 IP:61.219.xxx.xxx 未訂閱
抱歉寫一大堆,簡單的說就是 A元件有一個屬性可以連到B元件, B元件存放一個值是要提供給A元件讀取, 目前當我改變B元件的值時,在Design Time時, A元件不會有變動,但在RunTime時正常, 現在要解決的是在Design time和Run time時都要顯示正常的值~~~ 請問有辦法嗎!?
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
Gspeed
一般會員


發表:2
回覆:9
積分:12
註冊:2002-04-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-24 18:36:01 IP:61.228.xxx.xxx 未訂閱
Notification不知道是不是你要的...可查查Help
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-25 10:42:21 IP:203.217.xxx.xxx 未訂閱
1. 如果只是針對目前form,dateStyle改變時要改form上每一dateEdit,則只要在DateStyle中style property之Setvalue, 找到form上斤所有dateedit即可 [例]
procedure TDateStyle.SetStyle(value:string);
var i:integer;
begin
  if csDesigning in ComponentState then
    for i:=0 to TForm(owner).controlcount - 1 do
      if TForm(owner).controls[i] is TDateEdit then
//         change DateEdit's style property
2. 若要在style改變時更改整個project中之TDateEdit則須要寫一個Expert繼承TIAddInNotifier, 此Expert接受TDateStyle類別中style Property更改時之訊息, 並serarch整個project中所有form逐一修改TDateEdit之property 3. DateEdit已Use了DateStyle元件,而DateStyle不能再Use DateEdit,會造成循環Use。 此問題並不存在, 只要使用向前宣告即可 [例] TDateStyle=class; //向前宣告即可 TDateEdit=class(TMaskEdit) ... end; implementation uses DateStyle; //於此use不會造成循環Use 在DateStyle中則可直接於interfacepart uses TDateEdit 4. 針對Date的問題我認為應該不用如此麻煩,GUI上user所看到的日期格式不應依資料庫不同而有差異, 應依user之需求,你可以直接設定shortdateformat之global?數即可更改所有顯示, 至於寫入資料庫時所用之DateFormat你應自行用函數解決, 不應成為user之負擔, 你以為如何 發表人 - ccchen 於 2002/08/25 10:49:48 發表人 - ccchen 於 2002/08/25 10:50:12
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-26 08:14:10 IP:61.219.xxx.xxx 未訂閱
嗯,謝啦~~~ 主要要開發這個元件的原因是因為客戶可能用的日期格式不同, 而主管希望能介由讀取資料庫的方式,不用去更改每個Form上的MaskEdit, 因此想介由所有的MaskEdit連到一個DateStyle後,只要更改DateStyle後就可 以更改所有的MaskEdit的Mask樣式。 不過現在應該可以解決了,謝啦~~
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
系統時間:2024-04-20 12:30:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!