0

我使用具有 15 英寸屏幕笔记本电脑的笔记本电脑制作了一个表格,但是当我将应用程序传输到笔记本电脑时,一些按钮组件是不可见的,尤其是那些在笔记本电脑中可见的表格下方的按钮组件。那么是否有可能使表单调整自身以适应笔记本屏幕的代码,或者如何使用属性来完成?

4

2 回答 2

2

您所要求的也称为resolution independence设计表单,以使其可在非常小和非常大的屏幕(屏幕分辨率)上使用。

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

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

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

您还可以考虑使用TScrollBoxes、TSplitters 并docking允许用户自定义他们的 UI 体验。

您还可以考虑将一些功能放在由按钮调用的额外对话框中,或者在TPageControl选项卡表上隐藏一些控件。

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

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

于 2013-02-19T14:47:43.273 回答
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 是表单的句柄。如果需要,将函数调用放在表单上的 MENU 项或按钮中以手动调用它。

此外,这是一个使用 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 吗?您会遇到问题,但是您可以围绕它们进行编码以实现该控件。

于 2013-02-18T17:14:59.843 回答