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

請教高手們 ^_^ 如何在動態產生的視窗中 存取裡面的物件

尚未結案
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-12 11:48:16 IP:140.124.xxx.xxx 未訂閱
高手們 小弟有個問題 想了很久 都try不出來 請各位幫幫忙拉 感激不盡 問題如下 我想設計一個MDI的視窗程式,首先我建立兩個Form Form1--->auto-create form Form2--->available form 再利用 void __fastcall TForm1::CreateMDIChild(String Name) { TForm2 *ChildForm; ChildForm=new TForm2(Application); ChildForm->Caption="子表單" IntToStr(MDIChildCount); ChildForm->Image1->AutoSize=true; ChildForm->Image1->Picture->LoadFromFile(Name); } 來動態建立多個子視窗 再利用 TForm 的MDIChildren[i] 來控制子視窗的Image1物件 但卻有錯誤訊息 請問 還有其他方法來存取 動態產生的子視窗中的物件嗎?
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-12 15:42:55 IP:61.56.xxx.xxx 未訂閱
剛剛如你所說作了一次, 發現沒問題啊!? 我是用BCB5, 在新建一個project時,我是選 File->new->Projects 選 MDI Application, 有了雛型後,在Form2(MDIChild)加上一個Image物件, 並先指定一個圖來測試,結果可以啊!部分如下: void __fastcall TMainForm::CreateMDIChild(String Name) { TMDIChild *Child; //--- create a new MDI child window ---- Child = new TMDIChild(Application); Child->Caption = Name; if (FileExists (Name)) { Child->Memo1->Lines->LoadFromFile(Name); Child->Image1->Picture->LoadFromFile ("D:\\test\\car1.bmp"); } } 請問您的錯誤訊息是什麼!?
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-12 21:23:45 IP:140.124.xxx.xxx 未訂閱
謝謝 費心 我的問題出在  當子視窗唯10個時  無法分辨出不同視窗之間的Image1元件 source code 如下    if(MDIChildCount>0){         int Width,Height;         long int Count=0,Pixels_matrix[10][1000000];         Graphics::TBitmap *TheBitmap;         Byte *ptr;         for(int a=MDIChildCount-1;a>=0;a--){ 這裡error-----> TheBitmap=MDIChildren[a]->Image1->Picture->Bitmap;                 Width=TheBitmap->Width;                 Height=TheBitmap->Height;                 TheBitmap->PixelFormat=pf8bit;                 for(int y=0;yScanLine[y]; for(int x=0;x
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-12 21:55:36 IP:140.135.xxx.xxx 未訂閱
danielkelly您好:    會不會是因為之前的問題(out of stack)而導致這樣的現象呢???    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30309 純粹猜測< > 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-13 13:31:01 IP:61.56.xxx.xxx 未訂閱
喔!我懂你的意思了, 因為 MDIChildren[a]的回傳值是 TForm * 而非TMDIChild * 所以Compiler時會有錯誤, 我試了一下,下面這個方法就可以了, 請試用看看: if(MDIChildCount>0) { TComponent *TheComponent; Graphics::TBitmap *TheBitmap; AnsiString str1= "Image1"; for(int a=MDIChildCount-1;a>=0;a--) { TheComponent= MDIChildren[a]->FindComponent(str1); if (TheComponent) { TheBitmap=((TImage *)TheComponent)->Picture->Bitmap; //這裡再填入您要對TheBitmap作處理的程式 } } }
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-14 12:51:55 IP:140.124.xxx.xxx 未訂閱
感謝  已經問題已經解決 可以執行了 只不過 單存的好奇心  想知道 TComponent *TheComponent;  - TheComponent= MDIChildren[a]->FindComponent(str1);    ->以上這一行不就代表 了將TheComponent 指定給Image1 了媽 TheBitmap=((TImage *)TheComponent)->Picture->Bitmap   -->為什摸 還要加上這一行了      謝謝  
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-14 20:50:15 IP:61.56.xxx.xxx 未訂閱
呵呵~~不用客氣! 我只是直接依照您的需求將程式碼摳到我的BCB試, 所以那一行的確不必再用了.. sorry 造成您的誤解~~ ======================= ● 學孩無牙,唯勤是岸 ● ======================= 因為無牙,所以要勤奮的吸.. 待他日羽翼豐滿時,別忘了 這個滋潤我們成長的園地~~
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-16 00:11:20 IP:140.124.xxx.xxx 未訂閱
OK 問題圓滿解決摟 多謝
系統時間:2024-05-16 0:02:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!