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

如何讓程式自動判斷桌面顯示大小?

答題得分者是:pigbaby
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-09 09:07:06 IP:211.22.xxx.xxx 未訂閱
我是用Delphi6 在1024x768 桌面寫的程式 ,當然程式畫面大小也差不多跟1024x768 差不多大,但是有些電腦為800x600 ,我要如何讓我的程式能自動縮放在(1024x768 ~ 800x600 ) 或是如果有人設的不一樣,可以跟著縮放程式畫面呢??    ======================= 謝謝各位大德不吝賜教!! 小弟感激不進 =======================
------

南無藥師琉璃光如來
保佑您
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-09 11:55:33 IP:60.248.xxx.xxx 未訂閱
你可以利用 Screen.Width & Screen.Height 取得當前解析度啦 不過,沒那麼美好可以自動縮放,這部份得自己來.... 其實... 還有 Small Font & Large Font 的問題.... >"< 視窗程式就是這點令人討厭,唉....
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-09 12:05:29 IP:61.218.xxx.xxx 未訂閱
以下為檢查是否為 800 X 600 如不是就設定為800 x 600 程式結束時再改回來 old_Windows_Width :=screen.width ; old_Windows_Height :=screen.height ; if (old_Windows_Width<>800) or (old_Windows_Height<>600) Then DynamicResolution(800, 600) ; function DynamicResolution(X, Y: word): BOOL; var lpDevMode: TDeviceMode; begin Result := EnumDisplaySettings(nil, 0, lpDevMode); if Result then begin lpDevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT; lpDevMode.dmPelsWidth := X; lpDevMode.dmPelsHeight := Y; Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL; end; end;
pcboy
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-09 12:27:24 IP:210.69.xxx.xxx 未訂閱
這要自己重新計算每個元件擺放的位置 例如原本 Button1 的 Top 和 Left 分別是 X1, Y1 如果 Form 解析度從 1024 x 768 轉到 800x600, 新的 X2, Y2 為 X1 := Button1.Top; Y1 := Button1.Left; X2 = X1 * 600 div 768; Y2 = Y1 * 800 div 1024; Button1.Top := X2; Button1.Left := Y2; 沒有簡便的作法, 建議您最好將程式畫面控制在 800x600 內 ********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-09 12:44:40 IP:61.218.xxx.xxx 未訂閱
>>可以跟著縮放程式畫面呢 EasySize 依照視窗大小自動調整內容物大小 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19173 試試看還不錯用!!
pcboy
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-09 12:54:17 IP:210.69.xxx.xxx 未訂閱
完整的簡單範例    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  Form1_Old_Height , Form1_Old_Width : Integer;
  Form1_New_Height , Form1_New_Width : Integer;      Button1_Old_Top , Button1_Old_Left : Integer;
  Button1_New_Top , Button1_New_Left : Integer;    implementation    {$R *.dfm}    procedure TForm1.FormCreate(Sender: TObject);
begin
  // 先紀錄所有元件位置 和 原來 Form 大小
  Form1_Old_Height := Form1.Height;
  Form1_Old_Width := Form1.Width;      Button1_Old_top := Button1.Top;
  Button1_Old_Left := Button1.Left;    end;    procedure TForm1.FormResize(Sender: TObject);
begin      Form1_New_Height := Form1.Height;
  Form1_New_Width := Form1.Width;      Button1_New_top := Button1_Old_top * Form1_New_Height  div Form1_Old_Height;
  Button1_New_Left := Button1_Old_Left * Form1_New_Height  div Form1_Old_Height;      Button1.Top:= Button1_New_top;
  Button1.Left:= Button1_New_Left;    end;    end.    
********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

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


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-09 14:06:00 IP:211.22.xxx.xxx 未訂閱
謝謝各位的解答< > 我要再次請問一下< > Dear jeffreck 你提到的 EasySize 物件,我也試著加入我的程式但是沒有效果出來, 不知我用法對不對,可否有明確的加入EasySize 物件的範例或用法‧ Dear pcboy2 你所提到的使用方式是要將我程式中所有使用到的元件,都要加入你寫的範例中 FormCreate & FormResize 是不是‧ < >謝謝你們冗長的回覆 ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
pcboy
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-09 14:15:26 IP:210.69.xxx.xxx 未訂閱
對 小弟沒用過 EasySize 元件, 不知功能如何, 支援哪幾個版本 Delphi 或支援哪些元件 (3rd Party 元件支援嗎 ?) , 自己控制最保險 ********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-09 21:43:55 IP:61.70.xxx.xxx 未訂閱
引言: Dear jeffreck 你提到的 EasySize 物件,我也試著加入我的程式但是沒有效果出來, 不知我用法對不對,可否有明確的加入EasySize 物件的範例或用法‧
//先設定好原設計尺寸 可在 FormCreate self.Width :=800; self.Height:=600; self.FormResizer1.InitializeForm ; ------------- //改為目前尺寸 可在 FormShow self.Width :=1024; self.Height:=768; self.FormResizer1.ResizeAll; 它有原始碼可以參考看看 另外 在DBCtrlGrid會有問題要修正一下 但DBCtrlGrid 也少人用
pigbaby
初階會員


發表:2
回覆:84
積分:47
註冊:2002-09-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-10 13:16:19 IP:210.200.xxx.xxx 未訂閱
請參閱這邊 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=60013 豬寶寶有寫了一個小範例 ^^
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-12 09:01:26 IP:220.130.xxx.xxx 未訂閱
謝謝各位喔< > 豬寶寶的你的程式真是短小精幹< >讚的啦< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
系統時間:2024-05-08 10:18:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!