動態產生多個 TMenuItem |
答題得分者是:dan59314
|
ken_huang
一般會員 發表:3 回覆:2 積分:1 註冊:2003-04-16 發送簡訊給我 |
|
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
|
ken_huang
一般會員 發表:3 回覆:2 積分:1 註冊:2003-04-16 發送簡訊給我 |
|
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
Sorry, 應該宣告為 pointer Array,修正如下 TMenuItem **mnu; mnu=new TMenuItem*[2]; 另外補充,下面是 BCB Help 裡面的應用解說 //************************************ TMenuItem *NewItem = new TMenuItem; // create the separator
NewItem->Caption = "-";
Window1->Add(NewItem); // add it to the Window menu
// now create and add a menu item for each form
for (int I = 0; i < Screen->FormCount; I )
{
NewItem = new TMenuItem;
NewItem->Caption = Screen->Forms[I]->Name;
Window1->Add(NewItem);
}
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
Ken Huang: 您參考這一篇Delphi的Add a MenuItem to a menu dynamically
http://greatis.com/delphi/components-addmenuitem.html 改寫成BCB試試,裡頭有範例可以參考!有問題再討論! 網路志工聯盟----Visita網站http://www.vista.org.tw
---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/04/16 10:59:46
|
ken_huang
一般會員 發表:3 回覆:2 積分:1 註冊:2003-04-16 發送簡訊給我 |
引言: Sorry, 應該宣告為 pointer Array,修正如下 TMenuItem **mnu; mnu=new TMenuItem*[2]; 另外補充,下面是 BCB Help 裡面的應用解說 //************************************ TMenuItem *NewItem = new TMenuItem; // create the separator NewItem->Caption = "-"; Window1->Add(NewItem); // add it to the Window menu // now create and add a menu item for each form for (int I = 0; i < Screen->FormCount; I ) { NewItem = new TMenuItem; NewItem->Caption = Screen->Forms[I]->Name; Window1->Add(NewItem); }感謝大家 我已經找到了 TPrinter *prn; prn = Printer(); int numPrinters = prn->Printers->Count; TStrings *allPnt = prn->Printers; for(int i=0;i |
firewing
一般會員 發表:23 回覆:47 積分:19 註冊:2002-12-13 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
提供給你參考參考...
[code cpp] //--------------------------------------------------------------------------- #ifndef fMainH #define fMainH //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp><br />#include //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: TButton *Button1; TMainMenu *MainMenu1; void __fastcall Button1Click(TObject *Sender); private: void __fastcall DO_OnMenuItemClick(TObject *Sender); public: __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif [/code] [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "fMain.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Menu = NULL; try{ MainMenu1->Items->Clear(); TMenuItem *A = new TMenuItem(this); A->Caption = "Dynamic Created MenuItem"; for(int i=0; i<5; i ){ String S; TMenuItem *B = new TMenuItem(this); B->Caption = S.sprintf("Sub-MenuItem%d", i); B->OnClick = DO_OnMenuItemClick; A->Add(B); } MainMenu1->Items->Add(A); } __finally{ Menu = MainMenu1; } } //--------------------------------------------------------------------------- void __fastcall TForm1::DO_OnMenuItemClick(TObject *Sender) { TMenuItem *mi = (TMenuItem*)Sender; ShowMessage(mi->Caption); } //--------------------------------------------------------------------------- [/code] ===================引 用 firewing 文 章=================== 請問各位大大~如何實現作者所要求的呢( 動態產生多個 TMenuItem )? 我看不懂作者最後的答覆~ 謝謝~
編輯記錄
jow 重新編輯於 2007-12-11 16:15:22, 註解 無‧
|
firewing
一般會員 發表:23 回覆:47 積分:19 註冊:2002-12-13 發送簡訊給我 |
jow 大大謝謝你的回覆~你貼的我有看過~但我有一個問題:
for 迴圈內 TMenuItem *B = new TMenuItem(this); 會不會造成記憶體遺失? 因為 前幾次使用的 B 並無被釋放 ===================引 用 jow 文 章=================== 提供給你參考參考... [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "fMain.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Menu = NULL; try{ MainMenu1->Items->Clear(); TMenuItem *A = new TMenuItem(this); A->Caption = "Dynamic Created MenuItem"; for(int i=0; i<5; i ){ String S; TMenuItem *B = new TMenuItem(this); B->Caption = S.sprintf("Sub-MenuItem%d", i); B->OnClick = DO_OnMenuItemClick; A->Add(B); } MainMenu1->Items->Add(A); } __finally{ Menu = MainMenu1; } } //--------------------------------------------------------------------------- void __fastcall TForm1::DO_OnMenuItemClick(TObject *Sender) { TMenuItem *mi = (TMenuItem*)Sender; ShowMessage(mi->Caption); } //--------------------------------------------------------------------------- [/code] ===================引 用 firewing 文 章=================== 請問各位大大~如何實現作者所要求的呢( 動態產生多個 TMenuItem )? 我看不懂作者最後的答覆~ 謝謝~
編輯記錄
firewing 重新編輯於 2007-12-11 16:11:53, 註解 無‧
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
(1)MainMenu1->Items->Clear(); 這裡應該就會先清除之前產生的TMenuItem, 包含用A產生的.
(2)因為在Create TMenuItem時, 指定 Owner 為 this, 意即 TForm1, 所以當程式結束時, 由Owner 負責將最後產生的MenuItem 釋放 (3)當程式離開Button1Click()後, A, B 便會失效, 因為離開了它們被宣告的範圍, (所以在程式其他地方, 也就不能以這些物件指標來引用TMenuItem了) 所以我認為不會有記憶體遺漏的問題 個人看法, 謹供參考... ===================引 用 firewing 文 章=================== jow 大大謝謝你的回覆~你貼的我有看過~但我有一個問題: for 迴圈內 TMenuItem *B = new TMenuItem(this); 會不會造成記憶體遺失? 因為 前幾次使用的 B 並無被釋放 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |