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

如何動態變更大小

答題得分者是:RedSnow
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-20 19:13:59 IP:219.84.xxx.xxx 未訂閱
請問一下: 我如果在Panel上放了一各Label元件.那要如何在Panel變化大小時,Label也跟著同比例變化.因為Label有字體大小的考量,小弟一直沒辦法找到一各完美的比例.請有經驗的人事指點迷津.
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-20 22:20:01 IP:59.115.xxx.xxx 未訂閱
李國維 您好:    我看過站上的不少相關討論,但是和您一樣都沒看到一個方式能獲得完美的比例,我多方測試後找到一個似乎被大家都忽略掉的方法,雖然談不上 "完美",但是卻比先前我看到的方式都要來得簡單,而且效果也較那些繁瑣的方式來得好,您試試看吧:
// 請注意!字型最好是使用向量字 (TureType 或 OpenType)
void __fastcall TForm1::Panel1Resize(TObject *Sender)
{
    Label1->Font->Height = -(Label1->Height-1);
}
由上面範例可以看出來,我使用的方法不是去改變字型的 Size,而是改變它的 Height,如果您對上述範例顯示出來的字型比例不滿意的話,可以試著調整那個 Height 值的計算式,以找出最滿意的顯示效果。 7 天天敲鍵盤 v 時時按滑鼠 8
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-21 10:46:29 IP:219.84.xxx.xxx 未訂閱
RedSnow:感謝你提供的方法.我馬上去試試看...
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-23 17:35:47 IP:59.115.xxx.xxx 未訂閱
李國維 您好:    我回頭再看了一下您的問題,發現我的重點好像有點抓錯....,您問題的重點是在 Label 的縮放?還是字型的縮放?原先我以為您已經做好物件的相關縮放動作,因此在前一篇提供的那段範例是針對字型縮放而設的。    如果我的重點確實抓錯了,可否請您再描述一下您現在要處理的版面配置與欲達到的效果 (如果方便的話,看是不是能貼張圖上來參考一下)?      7 天天敲鍵盤 v 時時按滑鼠 8
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-23 18:24:32 IP:219.84.xxx.xxx 未訂閱
RedSnow 您好:  其實我無法處理的部份您已經幫我解決了.因為我的程式比較複雜所以我將有關縮放的部份程式碼PO上.
//我拉了一各Panel1元件.然後拉了一各Label1元件在Panel1上.
//Label1的字形大小設為36方便觀察
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  float fZoomSize = 0.9;//大於1為放大.小於1為縮小
  Panel1->Height *= fZoomSize;
  Panel1->Width *= fZoomSize;
  Label1->Top *= fZoomSize;
  Label1->Left *= fZoomSize;
  Label1->Width *= fZoomSize;
  Label1->Height *= fZoomSize;
  Label1->Font->Height *= fZoomSize;
}
//---------------------------------------------------------------------------
引言: 李國維 您好: 我回頭再看了一下您的問題,發現我的重點好像有點抓錯....,您問題的重點是在 Label 的縮放?還是字型的縮放?原先我以為您已經做好物件的相關縮放動作,因此在前一篇提供的那段範例是針對字型縮放而設的。 如果我的重點確實抓錯了,可否請您再描述一下您現在要處理的版面配置與欲達到的效果 (如果方便的話,看是不是能貼張圖上來參考一下)? 7 天天敲鍵盤 v 時時按滑鼠 8
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-23 19:05:04 IP:59.115.xxx.xxx 未訂閱
李國維 您好:    好在沒誤會您的題意,我原先測試時的設定如下:< class="code">Panel1->AutoSize = false; Panel1 的 Anchors 四個子屬性 (akLeft, akTop, akRight, akBottom) 全部設為 true Label1->Align = alClient; Label1->Alignment = taCenter; Label1 使用字型為 Arial然後直接以滑鼠調整 Form 的大小,以觀察上述元件與字型的變化。 我剛才使用您的設定方式來做測試,但是多設一組相同的元件,一組延用您的方式來設定字型大小 (用比例來算出要設定的高度),另一組沿用我的方式來設定字型大小 (直接設成與 Label 的高度相同),結果好像 Font 的 Height 不用百分比來計算,而直接設成與 Label 的高度相同時,整體視覺感受會比較好些,您參考看看吧:
// 我把 Label 的 Align 屬性設為 alClient 了
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    float fZoomSize = 0.9;//大於1為放大.小於1為縮小
    Panel1->Height *= fZoomSize;
    Panel1->Width *= fZoomSize;
    Label1->Font->Height *= fZoomSize;        Panel2->Height *= fZoomSize;
    Panel2->Width *= fZoomSize;
    Label2->Font->Height = Label2->Height;
}
7 天天敲鍵盤 v 時時按滑鼠 8
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-24 13:21:12 IP:218.169.xxx.xxx 未訂閱
RedSnow 您好: 感謝熱心幫助.我會在努力嘗試的.如果有更特別的做法.到時候在一起討論
系統時間:2024-04-28 18:13:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!