2013-02-17 94 views
0

我使用笔记本电脑制作了一个带有15英寸屏幕笔记本电脑的表格,但是当我将应用程序转移到笔记本时,某些按钮组件不可见,尤其是那些在笔记本电脑中可见的表格以下的按钮组件。 那么是否有代码的可能性,使窗体调整自己以适应笔记本电脑屏幕或如何使用属性可以完成?制作适合笔记本电脑的桌面

+0

对不起,我完全错过了delphi标签:P我的坏。对于那个很抱歉。 – Tkingovr 2013-02-18 13:59:47

+5

您需要创建表单的动态/响应式设计。例如使用Align,Anchors,ScrollBoxes作为子控件,以便表单使用任何分辨率进行自我调整。 – kobik 2013-02-18 14:04:13

+1

或者你可以使用布局管理器:http://stackoverflow.com/questions/2372797/delphi-layout-manager-form-b​​uilder-opensource – 2013-02-18 14:07:12

回答

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可用于以 为增量向下(或向上)调整表单的大小,直到整个表单适合Netbook。该示例使用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吗?你会遇到问题,但是你可以为他们编写代码。

+2

您可能会以这种方式放大缩小,但缩小?我对此表示怀疑。 – 2013-02-18 20:09:38

+0

是的,要向下缩放,请尝试编辑后的Scaleby(Screen.Height,659)。谢谢你的提示。 – SteveJG 2013-02-18 21:07:21

+1

虽然缩放是一个选项,但我会反对它(尤其是对缩小比例),因为它会影响可用性(控件变得更小,文本更难阅读等等),因此Cosmin +1 – 2013-02-19 09:59:26

2

你所要求的也叫做resolution independence,这意味着设计你的窗体使它们可以在非常小的和非常大的屏幕(屏幕分辨率)上使用。

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

较新的德尔福版本也有MarginsAlignWithMargins,以便自动对齐可以保留控件之间的一些空间。

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

您也可以考虑使用TScrollBox es,TSplitter s和docking以允许用户自定义他们的UI体验。

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

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

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

+1

+1也值得一提的是'Constraints '。这是一个非常好的视频[教程](http://www.youtube.com/watch?feature=player_embedded&v=FNWcy8S2k4Y) – kobik 2013-02-19 15:25:04

相关问题