Delphi程序设计界面的动态调整

本文介绍了如何使Delphi程序在不同色彩数和分辨率的环境下保持美观。通过在程序启动时判断色彩数,选择合适的配色方案;利用GetDeviceCaps获取分辨率并调整控件大小和字体尺寸,确保在不同分辨率下界面布局合理。此外,还提到了第三方控件ResScale作为适应屏幕分辨率的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何设计美观的程序一直是程序员的一大难题,很多程序员可以写出很好的程序,但往往困于拙劣的外观。其中如何使美观的程序能在不同的环境下一样美观也同样困扰着我们,我在一些程序的制作中掌握了一些使程序在不同环境同样美观的方法,希望给大家一点启示。    
  不同环境一般有不同的色彩数和不同的分辨率等等,我只对这两种环境进行说明。    
  一.   不同的色彩数    
  对于不同的色彩数我们可以用启动时加以判断并选择相应的配色/图片方案。可在窗口建立时加入程序如下:    
  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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值