如何設計美觀的程式一直是程式設計師的一大難題,很多程式設計師可以寫出很好的程式,但往往困於拙劣的外觀。其中如何使美觀的程式能在不同的環境下一樣美觀也同樣困擾著我們,我在一些程式的製作中掌握了一些使程式在不同環境同樣美觀的方法,希望給大家一點啟示。
不同環境一般有不同的色彩數和不同的解析度等等,我只對這兩種環境進行說明。
一. 不同的色彩數
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;
這樣就可以在不同的顏色環境下使用不同的配色方案,不同的圖示//色彩均在設計者的控制下,可製作出比較好的/彩色環境,而不至於在真彩時很不錯,而在16色時一塌糊塗。
二. 不同的解析度
不同的解析度下原來的視窗介面可能變得面目全非,對於這種問題,我一般採取以下方式:
先取得解析度方法有如下:
procedure tform1.formcreate(sender: tobject);
var
sx,sy:integer;
begin
sx := getsystemmetrics(**_cxscreen); //解析度寬
sy := getsystemmetrics(**_cyscreen); //解析度高
end;
也可以用screen.width/screen.height來取得
也可以用var devmode:tdevicemode;
begin
enumdisplaysettings(nil,0,devmode)
sx := devmode.dmpelswidth
sy := devmode.dmpelsheight 來取得
end
也可以用sx := getdevicecaps(getdc(form1.handle), horzres)
sx :=getdevicecaps(getdc(form1.handle), vertres) 來取得而後有以下幾種方法:
1. 判斷解析度並選擇相應的解析度方案;
(對每種解析度設計一套控制項/字型的大小方案用於在不同解析度下選擇)
2. 固定視窗大小;
procedure tform1.formresize(sender: tobject);
begin
width:=640; height:=480;
left:=0; top:=0;
end;
3. 使用procedure scaleby(m, d: integer)這個過程來對可視控制項進行大小調節(此過程不調節視窗大小,也不變動控制項的left和top,對控制項的大小按m/d比例來調節),具體如下:
procedure tform1.formcreate(sender: tobject);
//假設原來的設計環境為800x600
var
fwidth:integer;
begin
if(screen.width<> 800)then
begin
fwidth:=width;
scaled:=true;
font.size:=(width div fwidth)*font.size;//字型大小調整
scaleby(screen.width,800); //控制項大小調整
height:=longint(height)*longint(screen.height)div 600;
width:=longint(width)*longint(screen.width)div 800;//視窗大小調整
end;
end;
用此種方法比較實用,而且使用比較簡單,基本能適應大多數環境。
4. 調節解析度到所需的解析度(即設計時的解析度,此法對要求封閉的系統比較有用,如工控、觸控螢幕等等)
procedure tform1.formcreate(sender: tobject);
var
fwidth:integer;
devmode:tdevicemode;
begin
if(screen.width<> 800)then
begin
result:=enumdisplaysettings(nil,0,devmode); //取得舊的顯示引數
if result then
begin
devmode.dmfields:=dm_pelswidth or dm_pelsheight;
devmode.dmpelswidth:=800;
devmode.dmpelsheight:=600;
changedisplaysettings(devmode,0); //設定新的顯示引數
end;
end;
當然,我們還可以使用delphi的法寶第三方控制項,我找的有resscale 控制項,此控制項能夠適應多種不同螢幕解析度,自動改變tform上控制項位置及尺寸的控制項,控制項位置會儲存於.ini檔案或登錄檔中。你還可以找到更好的控制項或者方法,找到的話告訴我一下mail me: [email protected]
delphi中IDispath介面的實現類
delphi中idispath介面的實現類,由oleauto單元的tautoobject類進行了主要實現 實際是進行了乙個轉接實現tautoobject並沒繼承idispatch介面,而是裡面的乙個成員變數繼承了乙個idispatch介面 物件的 vmtautotable 68 位置儲存了auto表...
Delphi 的介面 3 關於介面的釋放
檔案 unitunit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,stdctrls type tform1 class tform button1 tbutton ...
動態調整iframe頁面的大小
今天遇到了乙個問題,在父頁面內有乙個iframe能自動根據載入頁面的大小而動態調整頁面大小。特此記錄下解決方法 父頁面main.html內js 動態調整iframe的大小 function changeiframesize iframecontentheight iframe頁面載入處理函式 fun...