PageControl - DrawTab 程序與TabSheet -TabVisible 屬性問題 |
答題得分者是:Zard
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
我在使用 PageControl 元件時,將 OwnerDraw 屬性設為 true,以便啟用 DrawTab 程序來處理 TabSheet 的標題字樣,原本一切都正常,後來為了操作上的需要,我增加了動態將某些 TabSheet 的 TabSivible 屬性設為 false 的動作,以便隱藏指定的 TabSheet,這下子問題就出現了,由 DrawTab 程序中繪製的 TabSheet 標題,竟然會包含隱藏的標題在內,結果當然就亂成一團了,我以簡要範例說明如下:
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
這是因為 void __fastcall TForm1::PageControl1DrawTab(TCustomTabControl *Control, int TabIndex, const TRect &Rect, bool Active) 的TabIndex的值是該PageControl上可見的第TabIndex個TabSheet, 舉例來說: 若有TabSheet1 ~ TabSheet4 這四個TabSheet, 相對應的 TabIndex 就是0 ~ 4, 但是若TabSheet2 隱藏起來了, 也就是說只剩TabSheet1, TabSheet3, TabSheet4, 而此時TabIndex的值是多少呢?? 結果非你所想的0, 2, 4, 而是0, 1, 2.
所以TabIndex並不會把隱藏的TabSheet給算進去, 當有任一個TabSheet被隱藏起來時, TabIndex就會重新計算, 所以要解決這個問題, 你就要在畫Tab時, 也用同樣的方法, 找出第TabIndex可見的TabSheet.
幫你改了一下, 紅色部份
void __fastcall TForm1::PageControl1DrawTab(TCustomTabControl *Control, int TabIndex, const TRect &Rect, bool Active) { if(Active){ Control->Canvas->Font->Color = clRed; }else{ Control->Canvas->Font->Color = clBlue; } //AnsiString str = ((TPageControl*)Control)->Pages[TabIndex]->Caption; // 找尋第TabIndex可見的TabSheet AnsiString str; for(int i = 0, j = 0; i < ((TPageControl*)Control)->PageCount; i ) { if (((TPageControl*)Control)->Pages[i]->TabVisible) { if (TabIndex != j) j ; else { str = ((TPageControl*)Control)->Pages[i]->Caption; break; } } } TSize text = Control->Canvas->TextExtent(str); Control->Canvas->FillRect(Rect); int x = ((Rect.Right - Rect.Left) - text.cx) / 2; int y = (((Rect.Bottom - Rect.Top) - text.cy) / 2) 1; TRect tmpRect=Rect; if(Active){ OffsetRect(&tmpRect, 1, 1); } Control->Canvas->TextOut(tmpRect.Left x, tmpRect.Top y, str); } |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
抱歉上面有點筆誤, 修正部份用紅字表示: 這是因為 void __fastcall TForm1::PageControl1DrawTab(TCustomTabControl *Control, int TabIndex, const TRect &Rect, bool Active) 的TabIndex的值是該PageControl上可見的第TabIndex個TabSheet, 舉例來說: 若有TabSheet1 ~ TabSheet4 這四個TabSheet, 相對應的 TabIndex 就是0 ~ 3, 但是若TabSheet2 隱藏起來了, 也就是說只剩TabSheet1, TabSheet3, TabSheet4, 而此時TabIndex的值是多少呢?? 結果非你所想的0, 2, 3, 而是0, 1, 2.
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |