如何讓程式自動判斷桌面顯示大小? |
答題得分者是:pigbaby
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
以下為檢查是否為 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 發送簡訊給我 |
這要自己重新計算每個元件擺放的位置
例如原本 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 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
完整的簡單範例
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 發送簡訊給我 |
謝謝各位的解答< >
我要再次請問一下< > Dear jeffreck
你提到的 EasySize 物件,我也試著加入我的程式但是沒有效果出來,
不知我用法對不對,可否有明確的加入EasySize 物件的範例或用法‧ Dear pcboy2
你所提到的使用方式是要將我程式中所有使用到的元件,都要加入你寫的範例中
FormCreate & FormResize 是不是‧ < >謝謝你們冗長的回覆 =======================
謝謝各位大德不吝賜教!!
小弟感激不進< >
=======================
------
願 南無藥師琉璃光如來 保佑您 |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |