全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4387
推到 Plurk!
推到 Facebook!

怎樣使窗體大小改變時,其上的控件也按比例改變?

尚未結案
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-20 11:52:17 IP:59.33.xxx.xxx 未訂閱
WIN2000下的1024*768情況下編譯的程序,到WIN98下800*600分辨率上運行,如何使它的界面看上去和1024*768的時候看的一樣呀? 怎樣使窗體大小改變時,其上的控件也按比例改變?看了一些文章說的很玄,但是運行牠的代碼卻實現不了? 那位做過給個詳細的説明及源代碼?謝謝 ken
------
ken
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-20 12:10:50 IP:61.222.xxx.xxx 未訂閱
用 ScaleBy 如:
....
  private
    LastW,LastH :Integer;
    ReSizeLock : Boolean;
  public
.....
procedure TForm1.FormCreate(Sender: TObject);
begin
  ReSizeLock := False;
  LastW := Width;
  LastH := Height;
end;    procedure TForm1.FormResize(Sender: TObject);
begin
  if ReSizeLock then Exit;      if Width<>LastW then
  Try
    ReSizeLock := True;
    Scaled:=True;
    SetBounds(Left,Top
             ,(Width*LastW) Div LastW
             ,(Height*LastH) Div LastH);
    ScaleBy(Width,LastW);
    LastW := Width;
    LastH := Height;
  Finally
    ReSizeLock := False;
  end;
end;
PS. 由於沒有時間再做修正了。可能有一些小問題。 僅提供參考一下原理 發表人 - wameng 於 2005/05/20 14:47:12
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-20 14:47:59 IP:210.69.xxx.xxx 未訂閱
procedure ScaleBy(M, D: Integer); 每執行一次, 元件縮小為原來 M/D    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
begin
  // 每按一次, 元件縮小為原來 3/4
  ScaleBy(3,4);
end;    end.
********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-21 07:41:59 IP:59.33.xxx.xxx 未訂閱
pcboy2: 謝謝你給我的回答,雖然是可以實現窗體同控件一起變小, 可是怎麼樣才能控制到跟隨分辨率的大小而改變呢??? 那位高手有做個相同類似的例子的啊??我想很多都做過的. 只是不想回答小弟的問題吧??? ken
------
ken
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-21 22:43:39 IP:61.229.xxx.xxx 未訂閱
試試把form.scald設為False看看....
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-23 01:06:28 IP:203.204.xxx.xxx 未訂閱
ScaleBy(600, 768); 或 ScaleBy(800, 1024);    因為 600/768 = 800 / 1024 = 0.78125    偵測解析度可用 X := Screen.Width Y := Screen.Height    例如你的 form 是設計為 800 x 600, 切換到 任意解析度自動調整大小, 可用下面程式碼    
inplementation 
const 
  ScreenWidth: LongInt = 800; 
  ScreenHeight: LongInt = 600;     {$R *.DFM}     procedure TForm1.FormCreate(Sender: TObject); 
begin 
  scaled := true; 
  if (screen.width <> ScreenWidth) then 
  begin 
    height := longint(height) * longint(screen.height) div ScreenHeight; 
    width := longint(width) * longint(screen.width) div ScreenWidth; 
    scaleBy(screen.width, ScreenWidth); 
  end; 
end; 
********************* 如果您滿意答案,請結案 ********************* 發表人 - pcboy2 於 2005/05/23 01:16:26
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-23 14:15:57 IP:61.146.xxx.xxx 未訂閱
pcboy2 再次謝謝你給我的回答.根據你的原代碼 implementation const ScreenWidth: LongInt = 800; ScreenHeight: LongInt = 600; procedure Tfrmmain.FormCreate(Sender: TObject); begin scaled := true; if (screen.width <> ScreenWidth) then begin height := longint(height) * longint(screen.height divScreenHeight; width := longint(width) * longint(screen.width) div ScreenWidth; scaleBy(screen.width, ScreenWidth); end; end; 這樣做了一個例子..雖然能達到各控件大小的變化,但里面字的大小不會跟著變的.例如 DBGrid1 控件.它的網格不會變同時網格標題的字也不會變... 不知能否實現像Window操作系統那樣什麼都跟著變呢??? ken
------
ken
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-24 10:54:49 IP:61.222.xxx.xxx 未訂閱
事實上,這樣的結果是可以預期的。 要不然為何有些遊戲,進入遊戲就會馬上切換目前解析度至遊戲自訂解析度。 你也可以這樣做,只不過在切換視窗時,需還原為原先的解析度。 然而善用Align 繼使在改變解析度後,不至於畫面亂了。 或者提供幾種解析度的判斷及程式畫面切換。 另外Window 作業系統的改變解析度,是利用硬體及驅動做到的。 或者可以參考http://vcl.vclxx.org/DELPHI/D32FREE/AUTOSIZE.ZIP 也是利用ScaleBy 但有加入字型大小的設定。 但我覺得這些效果都不盡理想。 參考 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-24 13:56:57 IP:59.33.xxx.xxx 未訂閱
wameng: 謝謝你的回答,可是小弟還是做不出你提供給我的 例子,可能小弟太笨罷.... 不知你有沒有做過呢????要是有可否給源代碼呢?? 萬分感謝!!! 要是哪位高手有更好的實例的話,但願能提供給大 家參考!!!! ken
------
ken
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-24 21:58:09 IP:220.131.xxx.xxx 未訂閱
試試以下的元件, 蠻好用的 ResizerPanel v2.11 for Delphi Developed by Carlos Barbosa email: delphicomp@carlosb.com home page: http://www.carlosb.com 努力會更接近成功
------
努力會更接近成功
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-25 09:37:59 IP:59.33.xxx.xxx 未訂閱
pceyes 我試過用Delphi7.0安裝ResizerPanel v2.11,雖然可以安裝進去,可是 沒有那麼VCL元件出件在工具條中的.是什麼原因啊??? 不知應該怎麼用你這個無件呢??可否告知,在此謝過!!! ken
------
ken
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-05-25 14:37:22 IP:220.131.xxx.xxx 未訂閱
為了你的問題,我裝了一下d7,我曾用過d3及d5版本的resizer,d7現在才安裝 因為我不會貼圖, 因此沒畫面給你看 但它的readme.htm己經有講, 放在第二頁Additional的最後面,你仔細找就可以找到了.good luck! 努力會更接近成功
------
努力會更接近成功
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-05-26 10:49:52 IP:59.33.xxx.xxx 未訂閱
pceyes 謝謝你給我的提示.我是安裝了VCL,里面有ResizerPanel1,NoBDEResizerPanel1,BitBtn1, SpeedButton1四個控件.我拉這四個控件到窗體 里面然之后運行,再拉窗體大小,可是都是不會變 同普通Delphi自帶的沒區別,難道還要寫代碼的? 麻煩你教教我可以嗎?? 是了,其實我也是用Delphi5.0的,不知哪里 還有ResizerPanel v2.08下載呢???不過最主要 的還是教會我怎麼用,有勞.在此謝過.... ken
------
ken
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-05-26 12:48:05 IP:220.131.xxx.xxx 未訂閱
以下是我之前用d5寫的程式,我重新用d7編譯過 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=71850 NoBDEResizerPanel1 <- 我一般都用這個 ResizerPanel1 <- 這給資料庫(database)感知元件用的 把它當做一般panel用就好了,完全不用寫程序 再把你要的元件放上去就好了. 再試一下吧! good luck! 於之前的版本,你可以到delphi 32 深度歷險 或 torry's delphi page去找 努力會更接近成功
------
努力會更接近成功
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-05-26 14:13:52 IP:59.33.xxx.xxx 未訂閱
Dear pceyes:     很感謝你對我問題的回答和對我的幫助. 但我還是實現不到你那功能.或許小弟笨還是 我的VCL有問題呢.假如vcl有問題就RUN不到. 這是什麼原因呢??pceyes兄並不是我沒有認真 測試過.而是真的不行喲!!!上面的那些圖是我 做試驗的結果.請指教是什麼問題呢??? 有勞...      順便問問你是哪里的啊???我們方不方便 有個聯系呢??我有些關於工程的事想同你商量. ken
------
ken
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-05-26 14:52:11 IP:220.131.xxx.xxx 未訂閱
看到你的畫面,右及下的scoll bar才真正知道問題所在 請把NoBdePanel1的Align設為alClient就可以了. 所以要誏別人了解,能力真的不夠.謝謝你的耐心配合,很多人早就不玩了,這麼難用. 我住在台灣,目前在台中縣豐原市工作, 右邊的名字按下有我的電子郵件,我用快十年了,可以連絡 另外,我目前寫程式純為興趣,非工作需要,交交朋友,互相研究可以. 努力會更接近成功
------
努力會更接近成功
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-05-26 15:14:32 IP:61.146.xxx.xxx 未訂閱
Dear pceyes: 真的非常感謝你的幫助,真的行了喲!! 真的太高興了,沒想到你時時刻刻都在網 上的喲!!!最讓我佩服你的是:你還是一個 業餘人員.以後請pceyes兄多多指教喲!! 真的很高興能與你成為朋友. 不過沒想到的是你離我是那麼的遠.我 還以為你是大陸這邊的喲!!!哈哈說到臺灣 與中國不知老兄是怎麼認為的呢?? 是了,現在你給我那麼好用的控件現在 卻沒有ResizerPanel v2.08,我怎麼安裝到 Delph5.0那里呢??不知pceyes兄可不可E-Mail 給我(哈哈,我知道你有的)或是給我具體網站讓 我下載呢!!在此再行謝過!!! 雖然我倆不是同齡人,但願可以成為知識的 好朋友.... ken
------
ken
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-05-26 19:15:36 IP:59.33.xxx.xxx 未訂閱
pceyes: 這個是我的郵箱.你也可以E-Mail到我的ken@hoders.com 或是lin1002001314@21cn.com這個郵箱來.哇你們真的舒服喲!!! 難道你們不用上班的嗎??? 不會那麼早就下班了吧???我們可要上 到18:00喲. 麻煩你給我發那VCL好嗎??不過說到政事,我可沒你們強啊!!!!!不過 我想知識是無邊界的,但願你不要聽你媽的話不教我喲!!!!哈哈哈 ~0~ 我想你不會的..... ken
------
ken
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-05-27 16:07:40 IP:59.33.xxx.xxx 未訂閱
pceyes 兄: 謝謝你給我發這元件,可是下載解壓後 不安裝不上的,我是按照它的要求這樣做的. 首先把解壓後的文件拷貝到 C:\BorlandDelphi5.0\Lib .中然後打開Delphi5.0 ,Select Component->Install Component ,Select Lib->NoBDERP.pas 當走到這步的時候就出錯了,錯誤信息是: [Error] NoBDERP.pas(279): Undeclared identifier: 'TWarningListForm' [Error] NoBDERP.pas(286): Undeclared identifier: 'TResizerPanelEditor' 這是沒有定義這些名稱的意思,應怎麼解決呢?? 又有勞pceyes 兄了...... ken
------
ken
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-05-27 17:11:40 IP:220.131.xxx.xxx 未訂閱
為了你, 我又裝了一次d5, 移除d3和d7 你的程序確實沒錯, readme.htm 是和你的安裝方式一樣 但它可能錯了, 我直接用resizer.pas安裝, 也不管它下方的訊息, 反正它裝起來了 編譯也過了, 對了,我甚至沒有做它copy至c:\program files\boland\delphi5\lib的動作. 真的很奇怪,為什麼我常在d3-d7的版本安裝<->反安裝,好像瘋子呀! =因為有些元件只有d3有,有的只能在d7編譯,又不太會改元件,(懶得學怎樣改)反正安裝移除比較簡單,不過d5比較討厭,不能從硬碟按裝,真想寫一個自動安裝機器人程式,不然確實沒有一勞永逸的好法子. 努力會更接近成功
------
努力會更接近成功
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#21 引用回覆 回覆 發表時間:2005-06-04 16:02:05 IP:59.33.xxx.xxx 未訂閱
pceyes 怎麼你的郵件我發不到給你的啊?? 想同你聊聊都不行....現在下班沒有啊? 對於你發給我那個VCL到現在我都還 沒有裝上去喲...有什麼高招啊??我現在 急著用啊!!!你有沒有其它版本啊??給我 發過來行不行啊??我找了很多網站都沒有 找到啊..你知道在哪里找嗎???幫我找找 行嗎??現在我的工程在停滯中.... 麻煩你幫個忙....不知哪位看過我 們的討論有這個VCL的.給小弟發個E-Mail. ken
------
ken
系統時間:2024-05-08 0:25:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!