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

Common Function?

尚未結案
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-06 15:01:13 IP:203.185.xxx.xxx 未訂閱
我想將幾個form共有的function 合而為一,放在unit那處 如: Unit abc procedure InitForm(FormName: TForm); begin FormName.setHeight(100); ... end; 在其它form會加上uses abc;及.. TABCForm.FormCreate(Sender: TObject); begin InitForm(abcForm); end; 每張form都會有一個procedure叫做setheight(integer), 但有compile error? 它說form沒有underclare到...那應該怎麼辦? 我想做到pass一張form去共用的function,然後呼叫每張form都共有的function,因為這樣我就不用每張form都寫同一個function,請問應該怎樣做呢? 謝
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-06 17:02:29 IP:210.61.xxx.xxx 未訂閱
BorlandUser您好    共用函式放在獨立的單元
unit uCommUtils
  procedure setheight(params...);
form1 uses uCommonUtils form2 uses uCommonUtils . . 在每個form的implementation區段uses這個uCommonUtils
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-06 17:11:05 IP:203.185.xxx.xxx 未訂閱
但是那個共用function 如setheight可以用到每張form的variable或function嗎? 其實情況是這樣的... 每張form都有可以提供add/update/delete等mode...不過不同user會有不同的情度的限制,所以我想當user進入某一張form時, 設定3個變數(add/update/delete)為true或false.因為每張form都會做一個function就是set這3個變數的值,而那3個變數是private,所以我會在每張form都有相對的public set function,所以我想做到pass一張form去某一個function,經過那function 檢查這個form可以做到那些mode,然後set 回那些變數為true/false... 所以我想知點做? 謝!幫忙
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-06 17:39:18 IP:210.61.xxx.xxx 未訂閱
BorlandUser您可用下面的概念去達到您的需求 在共用函式單元宣告及實作
procedure SetFormControl(Sender:TForm;authority:string)
var
  MyForm:TMyForm;
begin
  if Pos('A',authority)>0 then //擁有某個權限
  begin
    if Sender is TMyForm then (Sender as TMyForm).MyOtherControl.Visible:=True;
  end;
  ....
end;
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-06 17:57:02 IP:203.185.xxx.xxx 未訂閱
在vb裏,只要pass一個me(form name)去到一個global module的function裏,如 In MainForm: Call FindRight(me); In Global Module: function SetAddMode(frm as form, status as boolean) if frm.getRight() = 'Normal' then frm.SetAddMode(true) else frm.SetUpdateMode(false) end if end function Here is the VB Code, it can easy to pass the hold form and than call the form's function if the form is public its "property". So, how can I implement the same technology in the Delphi??
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-06 18:18:45 IP:203.185.xxx.xxx 未訂閱
係delphi裏面,有冇好似c 那樣有pass by value和pass by reference? 因為如果我將一個variable psss入去個function裏面,但係無論個value係個function裏面怎樣改,此終都不會改變那value,那有什麼方法可以連那value也改變呢?如: procedure Test; var abc: integer; begin abc := 0; ChangeValue(abc); end; procedure ChangeValue(intTest: Integer); begin intTest := 10; end; At the final, the value of abc still is 0, so, how can I change it to 10 after passs the it to the procedure ChangeValue Thank You very much
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-06 18:37:03 IP:203.204.xxx.xxx 未訂閱
引言: 係delphi裏面,有冇好似c 那樣有pass by value和pass by reference? 因為如果我將一個variable psss入去個function裏面,但係無論個value係個function裏面怎樣改,此終都不會改變那value,那有什麼方法可以連那value也改變呢?如: procedure Test; var abc: integer; begin abc := 0; ChangeValue(abc); end; procedure ChangeValue(Var intTest: Integer);//對於IntTest的改變會反映到呼叫它的變數 begin intTest := 10; end;
BordLandUser 你好 引言:我想做到pass一張form去共用的function,然後呼叫每張form都共有的function,因為這樣我就不用每張form都寫同一個function,請問應該怎樣做呢? 如果是每張的話,我會建議你可以建立BaseForm把每張Form共同Function寫進去,在適當的事件中觸發,你幾乎可以不用再自行呼叫共用的Function 發表人 - chance36 於 2004/04/06 18:44:29
系統時間:2024-11-25 8:31:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!