[問題] 動態TForm使用事件處理器

看板C_and_CPP (C/C++)作者 (Leeng)時間11年前 (2014/07/10 10:18), 11年前編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCB(XE2) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) VCL 問題(Question): 我用一個function,一次可動態產生一個TForm;該Form底下會有一個TMemo 我希望Resize該Form時,可同時調整Memo的寬高。 程式碼(Code):(請善用置底文網頁, 記得排版) class MemoForm { public: MemoForm(){} ~MemoForm(){} TForm *_Form; TMemo *_Memo; }; MemoForm *CreateMemoForm(String str) { MemoForm *mFrm = new MemoForm; // Implement _Form mFrm->_Form = new TForm(Form1); mFrm->_Form->Caption = str; mFrm->_Form->OnResize = MemoFormResize; // Implement _Memo mFrm->_Memo = new TMemo(Frm->_Form); mFrm->_Memo->Parent = mFrm->_Form; mFrm->_Memo->ScrollBars = ssBoth; mFrm->_Memo->Top = 0; mFrm->_Memo->Left = 0; mFrm->_Memo->Width = mFrm->_Form->Width - 5; mFrm->_Memo->Height = mFrm->_Form->Height - 28; mFrm->_Memo->Lines->Add(str); mFrm->_Form->Show(); return mFrm; } void __fastcall TForm1::MemoFormResize(TObject *Sender) { TForm *pForm = dynamic_cast<TForm*>(Sender); if(pForm) { /*pForm->_Memo->Width = _Form->Width-5; pForm->_Memo->Height = _Form->Height-28;*/ // Compilation failed, for _Memo is not a member of TForm } } 有沒有辦法在事件處理器中,連結到_Memo??? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.192.2 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1404958719.A.DB0.html ※ 編輯: Leeng (60.251.192.2), 07/10/2014 10:20:06 自問自答 = = 前面implement TForm和TMemo,利用Form->Tag記錄Memo的指標 mFrm->_Form->Tag = (int)mFrm->_Memo; Resize時再讀回來 TMemo *pMemo = (TMemo*)pForm->Tag; pMemo->Width/Height = ....... 問題勉強算是解決了,但有沒有除了tag更好的方法? 萬一Form底下有很多元件,就不可能通通存到Tag 謝謝 ※ 編輯: Leeng (60.251.192.3), 07/10/2014 10:50:04

07/10 11:57, , 1F
把 mFrm 存到 _Form->Tag 可以拿到所有元件
07/10 11:57, 1F
有道理!!謝謝

07/10 11:58, , 2F
不過原始程式碼有幾個地方變數名好像跑掉了 (Form1? Frm?)
07/10 11:58, 2F
因為mFrm->_Form是在Form1底下產生的,這樣呼叫沒錯

07/10 11:58, , 3F
不是很確定, 可能有更好的方法
07/10 11:58, 3F
如果要把整個class傳進去,可能要在class定義event..... 先這樣吧 謝謝 ※ 編輯: Leeng (60.251.192.3), 07/10/2014 12:51:35
文章代碼(AID): #1JlVV_sm (C_and_CPP)
文章代碼(AID): #1JlVV_sm (C_and_CPP)