有關TForm size 的問題 |
尚未結案
|
SamSam1230
中階會員 ![]() ![]() ![]() 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
SamSam1230
中階會員 ![]() ![]() ![]() 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
SamSam1230 您好: 抱歉,前一篇打錯字了,您說的沒錯,是 MaxWidth 才對。 如果 MainForm 沒有設定該屬性的話,MainForm 的寬度就等於沒有加以限制,而您對 Splitter 兩端的物件都設定了 MinWidth,所以會在 Splitter 向右調整時,系統會先將右邊物件的寬度先調小,當寬度等於 MinWidth 的設定時,右邊的物件就無法再縮小了,於是就會迫使 MainForm 加大寬度,以至於超出 Windows 的可視範圍。 您也可以依據實際的需求,在 MainForm 的 OnResize 事件中以 MainForm 的現有寬度為基準,來動態設定左右兩個物件的最大、最小寬度。
|
SamSam1230
中階會員 ![]() ![]() ![]() 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
xfile
初階會員 ![]() ![]() 發表:21 回覆:80 積分:25 註冊:2004-10-02 發送簡訊給我 |
引言: RedSnow 你好 以下有兩個問題 1. 我已經把mainform 的 maxwidth 設定為 1024, 當我按maxmized,最大就不會超出windows 可見的範圍, 但當我是拉splitter 的時候,還會超出的這時候只好手動在 splitter 的 OnMove 事件中即時判定大小以便做限制 引言: 2. 如果要知道現在windows 的resolution , 要怎樣呢? 因為如果當程式放到另外的電腦,不同的resolution , design time 的時候設定會不夠動態 謝謝大大用 SystemParametersInfo 這個 API 來取得目前解析度 SystemParametersInfo(SPI_GETWORKAREA,0,&rec,SPIF_SENDCHANGE); rec 是 RECT 型態的變數 |
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
SamSam1230 您好:
引言: 以下有兩個問題 1. 我已經把mainform 的 maxwidth 設定為 1024, 當我按maxmized,最大就不會超出windows 可見的範圍, 但當我是拉splitter 的時候,還會超出的 2. 如果要知道現在windows 的resolution , 要怎樣呢? 因為如果當程式放到另外的電腦,不同的resolution , design time 的時候設定會不夠動態我不太清楚您設定 MinWidth 的原因為何,因此不知道我的建議是否能滿足您的需求,您可否先試試看下列設定能否達到您的需求? 方法一: 1. 取消左右兩個物件的 MinWidth 設定。 2. 將 Spillter 的 MinSize 設為 1。 這樣設定反而比較簡單些,因為您的預期是將 Splitter 向右調整時,不讓 MainForm 的寬度向右增大,如果您的右方物件寬度有可能會呈現寬度為 0 的現象時,那麼上述的設定既簡單又方便,您不妨一試。 方法二: void __fastcall TForm1::Splitter1CanResize(TObject *Sender, int &NewSize, bool &Accept) { if((this->ClientWidth - Splitter1->Width - NewSize) < ListBox2->Constraints->MinWidth){ Accept = false; } }上述的設定是透過 Splitter 的 OnCanResize 事件,可以在 Splitter 向右調整時,達到右方物件 (ListBox2) 所設定的 MinWidth 時,不會將 MainForm (例子中的 Form1) 的寬度向右增大。(我的環境是 BCB 4.0,上述設定經過測試可以正常運作) 另外有關螢幕的解析度,可以使用下列方式取得: Screen->Width您參考一下。 發表人 - RedSnow 於 2005/03/22 20:07:57 |
SamSam1230
中階會員 ![]() ![]() ![]() 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
方法二: void __fastcall TForm1::Splitter1CanResize(TObject *Sender, int &NewSize,
bool &Accept)
{
if((this->ClientWidth - Splitter1->Width - NewSize) < ListBox2->Constraints->MinWidth){
Accept = false;
}
} 不知道是不是因為我用的delphi 4.0 , 所以 this 這個keyword complier 有問題 不知道什麼原因, 方法一行不通
|
SamSam1230
中階會員 ![]() ![]() ![]() 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
linuswang
一般會員 ![]() ![]() 發表:0 回覆:1 積分:0 註冊:2005-02-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |