MDIForm動態產生Menu後Click在產生MDIChild |
尚未結案
|
EagleNest
一般會員 發表:5 回覆:12 積分:3 註冊:2002-04-23 發送簡訊給我 |
|
StrongLemon
高階會員 發表:10 回覆:166 積分:105 註冊:2004-04-18 發送簡訊給我 |
請看程式碼片段..
僅抓取重要部分..
先看最下面關連流程.. 上半部為元件部分
/////////////////////// type TPlugMenuItem = class; TPlugIn = class; TRegisterMenuProc = function(PlugIn: TPlugIn): Boolean; TPlugItemClickProc = function(ASender: TObject;APlugMenu: TPlugMenuItem;...): Integer; TPlugIn = class(TComponent) ... public procedure RetrieveMenuItemClickProc; virtual; function MenuItemClick(Sender: TObject; APlugMenu: TPlugMenuItem): Integer; property MenuItemClickProc: TPlugItemClickProc read GetMenuItemClickProc; ... end; function TPlugIn.MenuItemClick(Sender: TObject; APlugMenu: TPlugMenuItem): Integer; begin Assert(APlugMenu <> nil); Result :=APlugMenu.PlugIn.MenuItemClickProc(Sender,APlugMenu,...); APlugMenu.FormReference:=Result; end; procedure TPlugIn.RetrieveMenuItemClickProc; begin FMenuItemClickProc:=ItemClick; end; ///////////////////////////////////////////////// //建立MenuItem時在Tag部分指向元件 tmpobj_Item.Tag:=Integer(AMenuItem); tmpobj_Item.OnClick:=DoMenuItemClick; procedure TMain.DoMenuItemClick(Sender: TObject); begin DoPlugInClick(Sender, TPlugMenuItem(TdxBarButton(Sender).Tag)); end; procedure TMain.DoPlugInClick(Sender: TObject; APlugMenu: TPlugMenuItem); begin Assert(APlugMenu <> nil); if APlugMenu.FormReference <>-1 then begin with TForm(APlugMenu.FormReference) do begin WindowState:=wsMaximized; SetFocus; end; // with Exit; end; APlugMenu.PlugIn.MenuItemClick(Sender, APlugMenu); end; ////////////////////////// function ItemClick(ASender: TObject;APlugMenu: TPlugMenuItem;AMenuID:Integer...):Integer; var i:Integer; begin case AMenuID of 2:Result := Integer(TXXForm.Create(Main,APlugMenu)); ... end; end;//////////////////////////// 關連流程 MenuItem.OnClick->Main.DoMenuItemClick->Main.TMain.DoPlugInClick->PlugIn.MenuItemClick ->PlugIn.MenuItemClickProc->ItemClick->Form.Create(傳你要傳的參數) |
EagleNest
一般會員 發表:5 回覆:12 積分:3 註冊:2002-04-23 發送簡訊給我 |
|
StrongLemon
高階會員 發表:10 回覆:166 積分:105 註冊:2004-04-18 發送簡訊給我 |
1.Create MenuItem不是寫在MDIForm(FMain)上,請問這會有影響嗎?
->這當然不會有影響..可以跑就好..寫在MainForm上是懶得傳MenuBar.. 2.上半部為元件部份就是指公用程式之Unit
->
元件獨立一個Unit
Call Form獨立一個Unit
Call Form部分也可以複製多份->用意在可以將許多AP切割成DLL or BPL 我詳細說明流程好了..
1.建立與畫面上MenuItem關連的元件->TPlugMenuItem..
2.建立TPlugMenuItem集合並管理的元件->TPlugIn..
3.由TPlugIn負責載入資料庫or各種選單資料來源,然後來建立PlugMenuItems..
之後再依PlugMenuItem集合建立畫面上的MenuItem..
4.Create TPlugIn元件時將你寫的CreateChildForm程序Assign..
5.Create MenuItem時Tag=Integer(TPlugMenuItem),DoMenuItemClick
6.因為OnClick事件只會傳遞(Sender: TObject),
所以必須透過DoMenuItemClick藉由Tag(已指向TPlugMenuItem)來傳遞TPlugMenuItem..
7.TPlugMenuItem再Call TPlugIn的已經Assign的CreateChildForm程序..
|
StrongLemon
高階會員 發表:10 回覆:166 積分:105 註冊:2004-04-18 發送簡訊給我 |
|
EagleNest
一般會員 發表:5 回覆:12 積分:3 註冊:2002-04-23 發送簡訊給我 |
引言: 別人寫的範例參考看看吧 http://delphi.ktop.com.tw/topic.php?topic_id=47319這個程式 好像有少東西 不能Run |
EagleNest
一般會員 發表:5 回覆:12 積分:3 註冊:2002-04-23 發送簡訊給我 |
引言:關鍵的 yachangaVCL.pas 沒在壓縮檔內 只能直接跑 .exe檔 由誰能提供 謝謝!!引言: 別人寫的範例參考看看吧 http://delphi.ktop.com.tw/topic.php?topic_id=47319這個程式 好像有少東西 不能Run |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |