如何把自訂的Form當成參數傳入Procedure(TMyForm)? |
答題得分者是:eaglewolf
|
douglas
初階會員 發表:24 回覆:42 積分:38 註冊:2008-03-05 發送簡訊給我 |
請教諸位大大:
描述結構如下 我有多個報表列印表單, 每個報表在列印的時候都需要參考同一個項目清單 例: 列印各國獅子的出生率, 那就是要參考到國家項目清單; 列印某國流浪狗數量統計, 也是需要參考國家項目清單. 各個報表列印表單都可以共用此項目清單 但是項目清單又需要根據不同的報表表單進行初始化設定 所以我在這些報表表單、項目表單之外, 另外於一個空白的unit撰寫一段Procedure 用以敘述建立此項目表單以及初始化的程式 因為初始化需要根據不同的報表列印表單進行設定 所以才嘗試直接把報表列印表單的主體當成參數傳入 Procedure Mathodaaa(var MainForm: Type); 這樣報表列印表單要使用項目表單的時候只需要引用第三方unit 然後呼叫Mathodaaa一行敘述就可以完成建立、初始化設定 日後維護亦只需修改此第三方unit 請教這個觀念不知是否有誤? @~@||| 還是自訂的視窗物件是沒有一個共用的型態可以定義的嗎? 目前是改以Procedure Methodaaa(參數1; 參數2; 參數3....); 把項目表單初始化所需的資訊全部帶入解決 |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
就看你的myMainForm的type是如何宣告的
假設是 type TmyMainForm = class(TForm) end; 那就是 uses myMainForm; Procedure Methodaaa(form:TmyMainForm); ===================引 用 douglas 文 章=================== 請教諸位大大: 我把一段程式寫在一個獨立的unit裡當做Procedure 當myMainForm呼叫這個Procedure會動態建立一個mySubForm並完成初始化 我想要在這個Procedure裡帶入myMainForm當作參數 請教該如何設定參數的型態?Procedure Methodaaa(var myMainForm: Type); ?
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
douglas
初階會員 發表:24 回覆:42 積分:38 註冊:2008-03-05 發送簡訊給我 |
eaglewolf 您好:
因為mySubForm是想要設計成共用的 就是可能會有myMainForm1, myMainForm2, myMainForm3...去呼叫使用 若是以大大的建議, 是否必須在每個MainForm都要引用還有撰寫呼叫的敘述? 或是需要針對每個自訂視窗都要有一個對應的多載敘述(overload)? 我就嘗試在第三方unit裡撰寫這段Procedure 把主視窗當成參數傳入 這樣要使用mySubForm的時候只需要引用第三方unit, 然後一行敘述就可以完成 所以才會有 Procedure Methodaaa(Type); 這樣的想法 請教這個觀念不知是否有誤? @~@||| 還是自訂的視窗物件是沒有一個共用的型態可以定義的嗎? 目前是改以Procedure Methodaaa(參數1; 參數2; 參數3....); 把mySubFrom所需的資訊全部帶入解決 ===================引 用 eaglewolf 文 章=================== 就看你的myMainForm的type是如何宣告的 假設是 type TmyMainForm = class(TForm) end; 那就是 uses myMainForm; Procedure Methodaaa(form:TmyMainForm); |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
不是很確定你的需要
我猜一下 你想要有一個表單 放置了一些 控制項 ,而這些是其他表單 都會需要用到的? 如果是的話 那麼 其他表單應該直接繼承該表單 以你的例子來說: myMainForm1 應該類似底下的宣告 type TmyMainForm1 = class(TmySubForm) end; IDE上的操作 不要直接新增表單 而是新增其他 然後切換到 你專案名稱的頁籤 再選擇mySubForm p.s. 你可能須要重新命名表單名稱及Type名稱...比較不會造成混淆. ===================引 用 douglas 文 章=================== eaglewolf您好: 因為mySubForm是想要設計成共用的 就是可能會有myMainForm1,myMainForm2,myMainForm3...去呼叫使用 若是以大大的建議, 是否必須在每個MainForm都要引用還有撰寫呼叫的敘述? 或是需要針對每個自訂視窗都要有一個對應的多載敘述(overload)? 我就嘗試在第三方unit裡撰寫這段Procedure 把主視窗當成參數傳入 這樣要使用mySubForm的時候只需要引用第三方unit,然後一行敘述就可以完成 所以才會有 Procedure Methodaaa(Type); 這樣的想法 請教這個觀念不知是否有誤? @~@||| 還是自訂的視窗物件是沒有一個共用的型態可以定義的嗎? 目前是改以Procedure Methodaaa(參數1; 參數2; 參數3....); 把mySubFrom所需的資訊全部帶入解決 ===================引 用 eaglewolf 文 章=================== 就看你的myMainForm的type是如何宣告的 假設是 type TmyMainForm = class(TForm) end; 那就是 uses myMainForm; Procedure Methodaaa(form:TmyMainForm);
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
1. 注意循環參照
2. Procedure Methodaaa(TForm: aForm) and your form must be a descendant of TForm ===================引 用 douglas 文 章=================== eaglewolf您好: 因為mySubForm是想要設計成共用的 就是可能會有myMainForm1,myMainForm2,myMainForm3...去呼叫使用 若是以大大的建議, 是否必須在每個MainForm都要引用還有撰寫呼叫的敘述? 或是需要針對每個自訂視窗都要有一個對應的多載敘述(overload)? 我就嘗試在第三方unit裡撰寫這段Procedure 把主視窗當成參數傳入 這樣要使用mySubForm的時候只需要引用第三方unit,然後一行敘述就可以完成 所以才會有 Procedure Methodaaa(Type); 這樣的想法 請教這個觀念不知是否有誤? @~@||| 還是自訂的視窗物件是沒有一個共用的型態可以定義的嗎? 目前是改以Procedure Methodaaa(參數1; 參數2; 參數3....); 把mySubFrom所需的資訊全部帶入解決 ===================引 用 eaglewolf 文 章=================== 就看你的myMainForm的type是如何宣告的 假設是 type TmyMainForm = class(TForm) end; 那就是 uses myMainForm; Procedure Methodaaa(form:TmyMainForm); |
douglas
初階會員 發表:24 回覆:42 積分:38 註冊:2008-03-05 發送簡訊給我 |
我描述一下結構
我有多個報表列印表單, 每個報表在列印的時候都需要參考同一個項目清單 例: 列印各國獅子的出生率, 那就是要參考到國家項目清單; 列印某國流浪狗數量統計, 也是需要參考國家項目清單. 各個報表列印表單都可以共用此項目清單 但是項目清單又需要根據不同的報表表單進行初始化設定(如: 表單顯示位置...) 所以我在這些報表表單、項目表單之外, 另外於一個空白的unit撰寫一段Procedure 用以敘述建立此項目表單以及初始化的程式 因為初始化需要根據不同的報表列印表單進行設定 所以才嘗試直接把報表列印表單的主體當成參數傳入 Procedure Mathodaaa(var MainForm: Type); 不過大大您的建議卻讓我有意外的收穫 感謝感謝 ^_^ ===================引 用 eaglewolf 文 章=================== 不是很確定你的需要 我猜一下 你想要有一個表單 放置了一些 控制項 ,而這些是其他表單 都會需要用到的? 如果是的話 那麼 其他表單應該直接繼承該表單 以你的例子來說: myMainForm1 應該類似底下的宣告 type TmyMainForm1 = class(TmySubForm) end; IDE上的操作 不要直接新增表單 而是新增其他 然後切換到 你專案名稱的頁籤 再選擇mySubForm p.s. 你可能須要重新命名表單名稱及Type名稱...比較不會造成混淆. |
douglas
初階會員 發表:24 回覆:42 積分:38 註冊:2008-03-05 發送簡訊給我 |
syntax您好:
我提出我理解的想法再請您指教 若是我要把這些Procedure擠在同一個uinit敘述程式 是否要針對不同的myFormX進行多載描述? Procedure Methodaaa(var tmpForm: TmyFormA) overload; Procedure Methodaaa(var tmpForm: TmyFormB) overload; ...TFormX 等等 所以每個自訂的myFromX就是獨立一個TmyFormX型別, 而不能當作一般的TForm這個型別嗎? ===================引 用 syntax 文 章=================== 1. 注意循環參照 2. Procedure Methodaaa(TForm: aForm) and your form must be a descendant of TForm |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
以你舉的例子
我大概會這樣做 (1) 建一個QueryBaseForm 放三個標籤 分別為 國別 起始日期 結束日期 放一個下拉式選單 存放國別資料 放兩個 datetimepicker 存放查詢/統計的起迄日期 放兩個按鈕 分別為 查詢/統計 及 離開 (2) 建兩個表單 繼承自 QueryBaseForm 分別為 QueryLionBornRateForm, QueryStrayDogCountForm (3) 在兩個子表單 調整控制項的位置 或增加各自所需的控制項 以及完成各自的查詢/統計功能 ===================引 用 douglas 文 章=================== 我描述一下結構 我有多個報表列印表單, 每個報表在列印的時候都需要參考同一個項目清單 例: 列印各國獅子的出生率, 那就是要參考到國家項目清單; 列印某國流浪狗數量統計, 也是需要參考國家項目清單. 各個報表列印表單都可以共用此項目清單 但是項目清單又需要根據不同的報表表單進行初始化設定(如: 表單顯示位置...) 所以我在這些報表表單、項目表單之外, 另外於一個空白的unit撰寫一段Procedure 用以敘述建立此項目表單以及初始化的程式 因為初始化需要根據不同的報表列印表單進行設定 所以才嘗試直接把報表列印表單的主體當成參數傳入 Procedure Mathodaaa(var MainForm: Type); 不過大大您的建議卻讓我有意外的收穫 感謝感謝 ^_^ ===================引 用 eaglewolf 文 章=================== 不是很確定你的需要 我猜一下 你想要有一個表單 放置了一些 控制項 ,而這些是其他表單 都會需要用到的? 如果是的話 那麼 其他表單應該直接繼承該表單 以你的例子來說: myMainForm1 應該類似底下的宣告 type TmyMainForm1 = class(TmySubForm) end; IDE上的操作 不要直接新增表單 而是新增其他 然後切換到 你專案名稱的頁籤 再選擇mySubForm p.s. 你可能須要重新命名表單名稱及Type名稱...比較不會造成混淆.
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL
編輯記錄
eaglewolf 重新編輯於 2010-03-11 22:23:46, 註解 無‧
|
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
若不使用多載的方式
就必須在Methodaaa中加以轉型 (tmpForm as TmyFormA) ===================引 用 douglas 文 章=================== syntax您好: 我提出我理解的想法再請您指教 若是我要把這些Procedure擠在同一個uinit敘述程式 是否要針對不同的myFormX進行多載描述? Procedure Methodaaa(var tmpForm: TmyFormA) overload; Procedure Methodaaa(var tmpForm: TmyFormB) overload; ...TFormX 等等 所以每個自訂的myFromX就是獨立一個TmyFormX型別, 而不能當作一般的TForm這個型別嗎? ===================引 用 syntax 文 章=================== 1. 注意循環參照 2. Procedure Methodaaa(TForm: aForm) and your form must be a descendant of TForm
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |