Delphi程序设计界面的动态调整
点击次数:60 次 发布日期:2008-11-09 08:39:52 作者:源代码网
|
源代码网推荐 不同环境一般有不同的色彩数和不同的分辨率等等,我只对这两种环境进行说明。 源代码网推荐 一. 不同的色彩数 源代码网推荐 对于不同的色彩数我们可以用启动时加以判断并选择相应的配色/图片方案。可在窗口建立时加入程序如下: 源代码网推荐 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(SM_CXSCREEN); //分辨率宽 源代码网推荐 sy := GetSystemMetrics(SM_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: sjj@netease.com 源代码网推荐 源代码网供稿. |
