使表格适合笔记本电脑桌面

时间:2013-02-17 23:27:40

标签: delphi delphi-7

我使用具有15英寸屏幕笔记本电脑的笔记本电脑制作了一个表格但是当我将应用程序转移到笔记本电脑时,一些按钮组件是隐形的,特别是那些在笔记本电脑中可见的表格下方。 那么是否有可能使代码使表单适应笔记本屏幕或如何使用属性进行调整?

2 个答案:

答案 0 :(得分:2)

您要求的内容也称为resolution independence,这意味着设计您的表单,使其可用于非常小的非常大的屏幕(屏幕分辨率)。

传统上,这是使用AnchorsAlign属性完成的,因此控件可以根据特定布局调整大小和位置。

较新的Delphi版本也有MarginsAlignWithMargins,因此自动对齐可以在控件之间保留一些空间。

许多其他工具包使用的另一种方法是使用显式布局概念。这可以在Delphi中使用TGridPanelTFlowPanel来完成,但在我的经验中效果不是很好。那里有更好的布局管理系统(如DevExpress Layout Control)。

您还可以考虑使用TScrollBox es,TSplitterdocking来允许用户自定义其UI体验。

您还可以考虑在按钮调用的额外对话框中添加一些功能,或隐藏TPageControl标签页上的某些控件。

缩放也是可能的(参见Steves的答案),但它会使表单看起来很奇怪并且可以大大减少用户体验,因为控件变得太小或者用户很难点击正确的控件或字体太小等等。 / p>

如果努力工作很好或者您拥有完全不同的设备(如智能手机与工作站),甚至可能需要使用完全不同的表单或可能使用客户端/服务器或多层体系结构共享的不同应用程序同样的商业逻辑,但这实际上超出了这个问题的范围......

答案 1 :(得分:1)

您可以阅读Zarko Gajic在http://delphi.about.com/od/standards/a/aa030700a.htm撰写的文章,了解缩放中的一些陷阱。

这是一个可能有用的功能:

 procedure ScaleForm(theF: TForm; ScreenWidth, ScreenHeight: LongInt) ;
    begin
      theF.Scaled := True;
      theF.AutoScroll := False;
      if (Screen.Width <> ScreenWidth) then 
        begin
          theF.Height :=LongInt(theF.Height) * LongInt(Screen.Height) div ScreenHeight;
          theF.Width := LongInt(theF.Width) * LongInt(Screen.Width) div ScreenWidth;
          theF.ScaleBy(Round(Screen.Width,ScreenWidth)) ;
        end;

{the following lines work on an Xp PC but seem to have no effect on Win 7
  theF.Position := poScreenCenter;  //poDefault, poDesigned,poDesktopCenter,poOwnerFromCenter,poMainFormcenter
  theF.Font.Name := 'Arial';  //to scale properly, you have to use a scalable font.
}

end;

在应用程序的OnCreate处理程序ScaleForm(Form1,screen.width,screen.height)中调用该函数; Form1是表单的句柄。如果需要,将函数调用放在表单上的菜单项或按钮中以手动调用它。

此外,这是一个使用ScaleBy函数的简单过程。 ScaleBy可用于以增量向下(或向上)调整表单的大小 直到整个表格适合上网本。该示例使用10%的增量。根据您在应用程序中使用的控件,这可能就是您所需要的。许多控件将自动缩放。有更优雅和复杂的解决方案。在XE2中有一个功能 称为ChangeScale,它可能很有用,但它可能在Delphi 7中不可用。请记住,并非所有控件都能正常扩展。您可能还有更多工作要做。

procedure TPktForm1.ScaleDown1Click(Sender: TObject);
begin
  ScaleBy(90,100);   //changes this form  where ScaleBy(percentage reduction of reduced form, percentage original form);
  Form_A.ScaleBy(90,100);  //changes other forms in the application
  Form_B.ScaleBy(90,100);

  Application.ProcessMessages;
end;

或者您可以在表格的OnCreate中添加Scaleby(659,Screen.Height),其中'659'是编程的原始表格高度以填充屏幕或Scaleby(Screen.Height,659);使表格更小。是的,就缩小比例而言,这种技术可以做什么是有限的。从桌面到上网本在这里运行良好。

网上有很多例子。你在使用DBGrid吗?您将遇到问题,但是您可以围绕它们编写该控件的代码。