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

MDIForm動態產生Menu後Click在產生MDIChild

尚未結案
EagleNest
一般會員


發表:5
回覆:12
積分:3
註冊:2002-04-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-20 00:08:54 IP:218.167.xxx.xxx 未訂閱
請問各位高手及大大 ,使用MDIForm(FMain)動態產生出menu後自己寫了OnClick事件在另一個Unit上當公用函數,想開啟MDIChild(FChild1)該如何寫及傳遞參數,因為Menu Item的資料都存在資料庫Table中,包含MDIChild Form Name 可否提供範例程式 謝謝!!
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-20 02:03:45 IP:211.74.xxx.xxx 未訂閱
請看程式碼片段.. 僅抓取重要部分.. 先看最下面關連流程..    上半部為元件部分
///////////////////////
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-20 14:10:29 IP:61.219.xxx.xxx 未訂閱
對不起!! 可能沒寫清楚,動態Create MenuItem 與 動態CreateChildForm的程序我都寫在公用的Unit上,Create MenuItem不是寫在MDIForm(FMain)上,請問這會有影響嗎 還是您指的上半部為元件部份就是指公用程式之Unit 看起來有點複雜,可再指導指導嗎? 謝謝!!
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-21 00:34:03 IP:210.68.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-21 14:51:16 IP:221.169.xxx.xxx 未訂閱
別人寫的範例參考看看吧 http://delphi.ktop.com.tw/topic.php?topic_id=47319
EagleNest
一般會員


發表:5
回覆:12
積分:3
註冊:2002-04-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-22 14:32:50 IP:218.167.xxx.xxx 未訂閱
引言: 別人寫的範例參考看看吧 http://delphi.ktop.com.tw/topic.php?topic_id=47319
這個程式 好像有少東西 不能Run
EagleNest
一般會員


發表:5
回覆:12
積分:3
註冊:2002-04-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-22 14:50:15 IP:218.167.xxx.xxx 未訂閱
引言:
引言: 別人寫的範例參考看看吧 http://delphi.ktop.com.tw/topic.php?topic_id=47319
這個程式 好像有少東西 不能Run
關鍵的 yachangaVCL.pas 沒在壓縮檔內 只能直接跑 .exe檔 由誰能提供 謝謝!!
系統時間:2024-05-17 17:56:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!