我使用具有 15 英寸屏幕笔记本电脑的笔记本电脑制作了一个表格,但是当我将应用程序传输到笔记本电脑时,一些按钮组件是不可见的,尤其是那些在笔记本电脑中可见的表格下方的按钮组件。那么是否有可能使表单调整自身以适应笔记本屏幕的代码,或者如何使用属性来完成?
2 回答
您所要求的也称为resolution independence
设计表单,以使其可在非常小和非常大的屏幕(屏幕分辨率)上使用。
传统上,这是使用Anchors
和Align
属性完成的,因此控件可以根据特定布局调整大小和位置。
较新的 Delphi 版本也有Margins
,AlignWithMargins
因此自动对齐可以在控件之间保留一些空间。
许多其他工具包使用的另一种方法是使用显式布局概念。这可以在 Delphi 中完成TGridPanel
,TFlowPanel
但根据我的经验,效果不是很好。那里有更好的布局管理系统(例如DevExpress Layout Control)。
您还可以考虑使用TScrollBox
es、TSplitter
s 并docking
允许用户自定义他们的 UI 体验。
您还可以考虑将一些功能放在由按钮调用的额外对话框中,或者在TPageControl
选项卡表上隐藏一些控件。
缩放也是可能的(参见 Steves 的回答),但它会使表单看起来很奇怪,并且会大大降低用户体验,因为控件变得太小或者用户很难点击正确的控件或者字体太小等。
如果工作量很大,或者如果您拥有完全不同的设备(如智能手机与工作站),甚至可能需要拥有完全不同的表单或不同的应用程序,这些应用程序可能使用客户端/服务器或多层架构来共享相同的业务逻辑,但这实际上超出了这个问题的范围......
您可以阅读 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 吗?您会遇到问题,但是您可以围绕它们进行编码以实现该控件。