明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Delphi程序設(shè)計(jì)界面的動(dòng)態(tài)調(diào)整

[摘要]如何設(shè)計(jì)美觀(guān)的程序一直是程序員的一大難題,很多程序員可以寫(xiě)出很好的程序,但往往困于拙劣的外觀(guān)。其中如何使美觀(guān)的程序能在不同的環(huán)境下一樣美觀(guān)也同樣困擾著我們,我在一些程序的制作中掌握了一些使程序在不同...
如何設(shè)計(jì)美觀(guān)的程序一直是程序員的一大難題,很多程序員可以寫(xiě)出很好的程序,但往往困于拙劣的外觀(guān)。其中如何使美觀(guān)的程序能在不同的環(huán)境下一樣美觀(guān)也同樣困擾著我們,我在一些程序的制作中掌握了一些使程序在不同環(huán)境同樣美觀(guān)的方法,希望給大家一點(diǎn)啟示。
不同環(huán)境一般有不同的色彩數(shù)和不同的分辨率等等,我只對(duì)這兩種環(huán)境進(jìn)行說(shuō)明。
一. 不同的色彩數(shù)
對(duì)于不同的色彩數(shù)我們可以用啟動(dòng)時(shí)加以判斷并選擇相應(yīng)的配色/圖片方案?稍诖翱诮r(shí)加入程序如下:
procedure TForm1.FormCreate(Sender: TObject);
var
colorbits:Integer;
begin
colorbits :=GetDeviceCaps( h, BITSPIXEL );
case colorbits of
1: //黑白配色方案;
....
4: //16色配色方案;
....
8: //256色配色方案;
....
16: //16位色配色方案;
....
24: //24位色配色方案;
....
32: //32位色配色方案;
....
end;
end;
這樣就可以在不同的顏色環(huán)境下使用不同的配色方案,不同的圖標(biāo)/圖片/色彩均在設(shè)計(jì)者的控制下,可制作出比較好的圖片/彩色環(huán)境,而不至于在真彩時(shí)很不錯(cuò),而在16色時(shí)一塌糊涂。
二. 不同的分辨率
不同的分辨率下原來(lái)的窗口界面可能變得面目全非,對(duì)于這種問(wèn)題,我一般采取以下方式:
先取得分辨率方法有如下:
procedure TForm1.FormCreate(Sender: TObject);
var
sx,sy:Integer;
begin
sx := GetSystemMetrics(SM_CXSCREEN); //分辨率寬
sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
end;
也可以用Screen.width/Screen.Height來(lái)取得
也可以用Var DevMode:TDeviceMode;
Begin
EnumDisplaySettings(nil,0,DevMode)
sx := DevMode.dmPelsWidth
sy := DevMode.dmPelsHeight 來(lái)取得
end
也可以用sx := GetDeviceCaps(GetDC(Form1.Handle), HORZRES)
sx :=GetDeviceCaps(GetDC(Form1.Handle), VERTRES) 來(lái)取得而后有以下幾種方法:
1. 判斷分辨率并選擇相應(yīng)的分辨率方案;
(對(duì)每種分辨率設(shè)計(jì)一套控件/字體的大小方案用于在不同分辨率下選擇)
2. 固定窗口大小;
procedure TForm1.FormResize(Sender: TObject);
begin
width:=640; height:=480;
left:=0; top:=0;
end;
3. 使用procedure ScaleBy(M, D: Integer)這個(gè)過(guò)程來(lái)對(duì)可視控件進(jìn)行大小調(diào)節(jié)(此過(guò)程不調(diào)節(jié)窗口大小,也不變動(dòng)控件的left和top,對(duì)控件的大小按M/D比例來(lái)調(diào)節(jié)),具體如下:
procedure TForm1.FormCreate(Sender: TObject);
//假設(shè)原來(lái)的設(shè)計(jì)環(huán)境為800x600
var
FWidth:integer;
begin
if(Screen.width<> 800)then
begin
FWidth:=Width;
Scaled:=TRUE;
Font.Size:=(Width DIV FWidth)*Font.Size;//字體大小調(diào)整
ScaleBy(Screen.Width,800); //控件大小調(diào)整
Height:=longint(Height)*longint(Screen.Height)DIV 600;
Width:=longint(Width)*longint(Screen.Width)DIV 800;//窗口大小調(diào)整
end;
end;
用此種方法比較實(shí)用,而且使用比較簡(jiǎn)單,基本能適應(yīng)大多數(shù)環(huán)境。
4. 調(diào)節(jié)分辨率到所需的分辨率(即設(shè)計(jì)時(shí)的分辨率,此法對(duì)要求封閉的系統(tǒng)比較有用,如工控、觸摸屏等等)
procedure TForm1.FormCreate(Sender: TObject);
var
FWidth:integer;
DevMode:TDeviceMode;
begin
if(Screen.width<> 800)then
begin
  Result:=EnumDisplaySettings(nil,0,DevMode); //取得舊的顯示參數(shù)
  if Result then
  begin
  DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
 DevMode.dmPelsWidth:=800;
  DevMode.dmPelsHeight:=600;
ChangeDisplaySettings(DevMode,0); //設(shè)置新的顯示參數(shù)
end;
end;
當(dāng)然,我們還可以使用Delphi的法寶第三方控件,我找的有ResScale 控件,此控件能夠適應(yīng)多種不同屏幕分辨率,自動(dòng)改變TForm上控件位置及尺寸的控件,控件位置會(huì)儲(chǔ)存于.INI文件或注冊(cè)表中。你還可以找到更好的控件或者方法,找到的話(huà)告訴我一下mail me: sjj@netease.com