Delphi 使窗体适合笔记本电脑桌面

Delphi 使窗体适合笔记本电脑桌面,delphi,delphi-7,Delphi,Delphi 7,我使用一台屏幕为15英寸的笔记本电脑制作了一个表单,但当我将应用程序转移到笔记本电脑时,一些按钮组件是不可见的,尤其是那些在表单下方的组件,它们在笔记本电脑中是可见的。 那么,是否有可能使用一种代码来调整表单以适应笔记本电脑屏幕,或者如何使用属性来实现这一点呢?您可以阅读Zarko Gajic at的文章,以了解缩放中的一些陷阱 以下是一个可能有帮助的函数: procedure ScaleForm(theF: TForm; ScreenWidth, ScreenHeight: LongInt)

我使用一台屏幕为15英寸的笔记本电脑制作了一个表单,但当我将应用程序转移到笔记本电脑时,一些按钮组件是不可见的,尤其是那些在表单下方的组件,它们在笔记本电脑中是可见的。
那么,是否有可能使用一种代码来调整表单以适应笔记本电脑屏幕,或者如何使用属性来实现这一点呢?

您可以阅读Zarko Gajic at的文章,以了解缩放中的一些陷阱

以下是一个可能有帮助的函数:

 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中添加Scaleby(659,Screen.Height),其中“659”是用于填充屏幕的编程原始表单高度或Scaleby(Screen.Height,659);使窗体变小。是的,这项技术可以做的事情是有限的,比如缩小规模。在这里,从台式机到上网本很好


网上有很多例子。您正在使用DBGrid吗?您将遇到一些问题,但是您可以针对该控件编写代码。

您可以阅读Zarko Gajic at的文章,了解扩展中的一些陷阱

以下是一个可能有帮助的函数:

 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中添加Scaleby(659,Screen.Height),其中“659”是用于填充屏幕的编程原始表单高度或Scaleby(Screen.Height,659);使窗体变小。是的,这项技术可以做的事情是有限的,比如缩小规模。在这里,从台式机到上网本很好


网上有很多例子。您正在使用DBGrid吗?您将遇到问题,但是您可以为该控件围绕这些问题进行编码。

您所要求的也被称为
分辨率独立性
,这意味着设计表单以使其在非常小和非常大的屏幕上可用(屏幕分辨率)

这通常使用
锚定
对齐
属性来完成,以便控件可以根据特定布局调整大小和放置位置

较新的Delphi版本还具有
边距
与边距对齐
,以便自动对齐可以在控件之间保留一些空间

许多其他工具包使用的另一种方法是使用显式布局概念。这可以通过Delphi中的
TGridPanel
TFlowPanel
来实现,但以我的经验来看,效果并不好。有更好的布局管理系统(如)

您还可以考虑使用<代码> TSCRoBOBOX ES,<代码> TSplitter <代码> >和<代码>对接< /代码>,以允许用户自定义他们的UI体验。

您还可以考虑将一些功能添加到额外的对话框中,这些按钮是由按钮调用的,或者在“代码> TPAGECUTROL选项卡页上隐藏一些控件。

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


如果您的努力是巨大的,或者如果您有完全不同的设备(如智能手机和工作站),那么甚至可能需要有完全不同的形式或不同的应用程序,它们可能使用客户端/服务器或多层体系结构来共享相同的业务逻辑,但这实际上超出了这个问题的范围…

您所要求的也被称为
分辨率独立性
,这意味着设计表单使其在非常小和非常大的屏幕上可用(屏幕分辨率)

这通常使用
锚定
对齐
属性来完成,以便控件可以根据特定布局调整大小和放置位置

较新的Delphi版本还具有
边距
与边距对齐
,以便自动对齐可以在控件之间保留一些空间

许多其他工具包使用的另一种方法是使用显式布局概念。这可以通过Delphi中的
TGridPanel
TFlowPanel
来实现,但以我的经验来看,效果并不好。有更好的布局管理系统(如)

您还可以考虑使用<代码> TSCRoBOBOX ES,<代码> TSplitter <代码> >和<代码>对接< /代码>,以允许用户自定义他们的UI体验。

您还可以考虑将一些功能添加到额外的对话框中,这些按钮是由按钮调用的,或者在“代码> TPAGECUTROL选项卡页上隐藏一些控件。

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


如果您的努力是巨大的,或者如果您有完全不同的设备(如智能手机和工作站),那么甚至可能需要有完全不同的形式或不同的应用程序,它们可能使用客户端/服务器或多层体系结构来共享相同的业务逻辑,但这实际上超出了这个问题的范围…

很抱歉,我完全错过了delphi标签:p我的错。很抱歉。您需要创建表单的动态/响应设计。e、 g.对子控件使用对齐、锚定和滚动框,以便表单以任何分辨率进行自我调整。或者您可以使用布局管理器:@kobik您应该写下此注释作为答案。@JensMühlenhoff,我的注释太明显了,OP也没有回应。欢迎您自己发布一个答案,并包括所有关于布局管理器(+1)和缩放的有用评论。很抱歉,我完全错过了delphi标签:P my bad。很抱歉。您需要创建表单的动态/响应设计。e、 g.对子控件使用对齐、锚定和滚动框,以便窗体以任何分辨率自动调整。或者您可以使用布局管理器:@kobik您应该将此注释作为答案。@JensMühlenhoff,我的注释太明显了