動態元件之動態事件失效 |
答題得分者是:RaynorPao
|
shinnuei
一般會員 發表:32 回覆:48 積分:21 註冊:2002-03-13 發送簡訊給我 |
小弟有一個動態產生元件後指定事件給每一個元件的問題想要請教,
因為動態事件有時候很正常,但有時候卻是不正常的,原始碼如下…
void __fastcall TForm1::CreateVirtualPanel(int ScreenWidth,int ScreenHeight,int SplitPixel) { panelDynamic = new TPanel(this); panelDynamic->Parent = this; panelDynamic->Caption = ""; panelDynamic->Width = 176; panelDynamic->Height = 132; panelDynamic->Left = 280; panelDynamic->Top = 0; // panelDynamic->OnClick = dynPanelClick; int hei = Screen->Height; int wid = Screen->Width; ehei = SplitPixel; ewid = SplitPixel; int hCount = ScreenHeight / ehei; wCount = ScreenWidth / ewid; int panelCount = hCount * wCount; int phei = panelDynamic->Height / hCount; int pwid = panelDynamic->Width / wCount; for (int i=0;iParent = this->panelDynamic; panel[i]->Left = (i%wCount) * pwid; panel[i]->Top = (i/wCount) * phei; panel[i]->Height = phei; panel[i]->Width = pwid; panel[i]->Caption = IntToStr(i); panel[i]->OnClick = dynPanelClick; panel[i]->OnMouseMove = dynPanelMouseMove; 指定動態事件OnMouseMove panel[i]->Name = pszNamePrefix IntToStr(i 1); } } \\----------------------------------------------------------------------------------- void __fastcall TForm1::dynPanelMouseMove(TObject *Sender, TShiftState Shift,int X, int Y) { for(int i=0; i <Form1->ComponentCount; i++) if(Components[i]->ClassNameIs("TPanel")) { TPanel *tmpPanel = (TPanel *)Components[i]; if(tmpPanel->Name.SubString(1,7) == pszNamePrefix) { if(tmpPanel->Caption.ToInt() == (int)((TPanel *)Sender)->Caption.ToInt()) { tmpPanel->Color = clSkyBlue; CountPos(wCount,ewid,ehei,(int)((TPanel *)Sender)->Caption.ToInt()); } else tmpPanel->Color = clBtnFace; } } }而我debug 的結果,錯誤會出現在在上面紅色字的地方 Form1->ComponentCount = 0 為什麼這個變數會變成 0 呢?他不是 Form1 上所有元件的總數嗎? 發表人 - taishyang 於 2003/10/16 21:59:36 |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 小弟有一個動態產生元件後指定事件給每一個元件的問題想要請教, 因為動態事件有時候很正常,但有時候卻是不正常的,原始碼如下…shinnuei 你好: 小弟大概看了一下你的程式碼 (並沒有實際測試),我想問題應該是出在 Owner ,你在 Form1 只動態建立了 1 個 TPanel (panelDynamic),而剩下的 TPanel 都動態建立在 panelDynamic 上面,因此你標示為紅色的那一行,看看改成這個 樣子行不行呢?? panelDynamic->ComponentCount 備註: (1)有問題請再提出 (>> --void __fastcall TForm1::CreateVirtualPanel(int ScreenWidth,int ScreenHeight,int SplitPixel) { panelDynamic = new TPanel(this); panelDynamic->Parent = this; panelDynamic->Caption = ""; panelDynamic->Width = 176; panelDynamic->Height = 132; panelDynamic->Left = 280; panelDynamic->Top = 0; // panelDynamic->OnClick = dynPanelClick; int hei = Screen->Height; int wid = Screen->Width; ehei = SplitPixel; ewid = SplitPixel; int hCount = ScreenHeight / ehei; wCount = ScreenWidth / ewid; int panelCount = hCount * wCount; int phei = panelDynamic->Height / hCount; int pwid = panelDynamic->Width / wCount; for (int i=0;iParent = this->panelDynamic; panel[i]->Left = (i%wCount) * pwid; panel[i]->Top = (i/wCount) * phei; panel[i]->Height = phei; panel[i]->Width = pwid; panel[i]->Caption = IntToStr(i); panel[i]->OnClick = dynPanelClick; panel[i]->OnMouseMove = dynPanelMouseMove; 指定動態事件OnMouseMove panel[i]->Name = pszNamePrefix IntToStr(i 1); } } \\----------------------------------------------------------------------------------- void __fastcall TForm1::dynPanelMouseMove(TObject *Sender, TShiftState Shift,int X, int Y) { for(int i=0; i <Form1->ComponentCount; i++) if(Components[i]->ClassNameIs("TPanel")) { TPanel *tmpPanel = (TPanel *)Components[i]; if(tmpPanel->Name.SubString(1,7) == pszNamePrefix) { if(tmpPanel->Caption.ToInt() == (int)((TPanel *)Sender)->Caption.ToInt()) { tmpPanel->Color = clSkyBlue; CountPos(wCount,ewid,ehei,(int)((TPanel *)Sender)->Caption.ToInt()); } else tmpPanel->Color = clBtnFace; } } }而我debug 的結果,錯誤會出現在在上面紅色字的地方 Form1->ComponentCount = 0 為什麼這個變數會變成 0 呢?他不是 Form1 上所有元件的總數嗎?
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
shinnuei
一般會員 發表:32 回覆:48 積分:21 註冊:2002-03-13 發送簡訊給我 |
To RaynorPao:
這一次改成 panelDynamic->ComponentCount 更奇怪,無論怎麼測都是 0 這一個 ComponentCount 的功用不是取得屬於某一個元件的"子元件"嗎?
BCB Help 說明如下:
Use ComponentCount to find or verify the number of components owned by a component, or when iterating through the Components list to perform some action on all owned components. ComponentCount is used internally for such iterative procedures.
|
shinnuei
一般會員 發表:32 回覆:48 積分:21 註冊:2002-03-13 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |