delphi7中怎样调整程序适应不同的显示器尺寸?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi7中怎样调整程序适应不同的显示器尺寸?相关的知识,希望对你有一定的参考价值。

用delphi7编程,在手提(是14的宽屏)上,所有窗体最大化时正好全屏。把程序拿到别的电脑上时(显示器尺寸不一样)。窗体不能自动适应显示器的大小,窗体边缘上的按纽就看不到,
请问如何设计?
我试过重载一下WndProc不行的。
窗体最大化时应该能自动的识别显示器分辨率大小的。这也不行的。
特别是在宽屏上设计的程序到了CRT上,右边的就看不到了,不过有水平滑动条的。但这样程序美观性就不好了。
不知有什么好的解决方案?

窗体最大化时应该能自动的识别显示器分辨率大小的。你说的这种情况还没碰到过。如果实在要解决。我想就是重载一下WndProc就行了。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
Private declarations
protected
procedure WndProc(var Message: TMessage); override;
public
Public declarations
end;

var
Form1: TForm1;

implementation

$R *.dfm

TForm1

procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = messages.WM_SYSCOMMAND then
begin
if (Message.WParam = windows.SC_MAXIMIZE) then
begin
with Self do
begin
Top := 0;
Left:= 0;
Width := Screen.Width;
Height := Screen.Height;
end;
end;
end;
inherited WndProc(Message);
end;

end.
参考技术A 关注中 参考技术B 控件的Anchors属性,可以自由设置窗体大小不同时的控件对齐方式,比如设置为[akTop,akRight]这个就可以达到从右向左自动调整的功能啦。
其他的,自己试试看就知道了
参考技术C 重新改变一下窗体中控件的布局,让每个控件根据窗体的大小自动调整自己的大小和位置.

调整按钮以适应不同的屏幕尺寸

【中文标题】调整按钮以适应不同的屏幕尺寸【英文标题】:Resizing button to fit different screen sizes 【发布时间】:2020-01-23 23:24:52 【问题描述】:

我正在尝试使下面的按钮根据不同的屏幕尺寸调整大小,但保持相同的比例(即文本和按钮大小应按比例更改,以便它们在所有屏幕上看起来都相同)。我正在使用 AutoSizeText 包根据屏幕大小调整文本大小,但文本在较小的屏幕上似乎并没有变小,这可能导致按钮奇怪地调整大小。

[![button 1][1]][1] - 更大的屏幕 [![按钮 2][2]][2] - 更小的屏幕

我尝试使用媒体查询来调整按钮的高度和宽度,但这似乎不起作用。

有推荐的方法吗?

class PurchaseButton extends StatelessWidget 
  final Product product;

  PurchaseButton(Key key, @required this.product) : super(key: key);

  @override
  Widget build(BuildContext context) 
    double deviceWidth = MediaQuery.of(context).size.width;

    Container(
      margin: EdgeInsets.symmetric(horizontal: 0.05 * deviceWidth),

    child: Row(
      children: <Widget>[

    Expanded(
      child: MaterialButton(
//      height: SizeConfig.blockSizeVertical * 6,

        onPressed: () async 
          await Provider.of<SubscriptionModel>(context).makePurchase(product);
        ,
        child: Text('Join now! Only $product.priceString',
            style: Theme.of(context).textTheme.body1.copyWith(
                fontWeight: FontWeight.w600, fontSize: 0.03 * deviceWidth)),

        color: Theme.of(context).primaryColor,
      ),
      ),
    ],
    ),
    );
    return Container();
  

【问题讨论】:

【参考方案1】:

有很多方法,这里有一个建议:

用这个小部件树包装你的小部件:

容器:根据屏幕大小来操作宽度, -- Row:我们需要它来强制 Expanded 工作, ---- 已扩展:将其内容扩展至其拥有的整个空间, ------[您要展开的小部件]
@override
Widget build(BuildContext context) 

  double deviceWidth = MediaQuery.of(context).size.width;
  double deviceHight = MediaQuery.of(context).size.height;

  Container(
      // If the button size(Row) is 90% then we give margin 5% + 5% like this
      margin: EdgeInsets.symmetric(horizontal: 0.05 * deviceWidth),

      // We need a Row in order to "Expanded" to work
      child: Row(
        children: <Widget>[
          // Use "Expanded" if you want the button to fill the Row's size
          // Use "Flexible" if you want the button to fit the text inside size.
          Expanded(
            child: MaterialButton(
              onPressed: () 
                print('Hi');
              ,
              child: Text(
                'Join now! Only...',
                style: Theme.of(context)
                    .textTheme
                    .body1
                    .copyWith(fontWeight: FontWeight.w600),
              ),
              color: Theme.of(context).primaryColor,
            ),
          ),
        ],
      ),
    );

关于AutoSizeText,它考虑了文本容器的大小,而不是屏幕大小,我的建议是使用常规的 Text(..) 小部件,其字体大小取自MediaQuery.of(context).size.width

例如

child: Text(
   'Join now! Only...',
   style: Theme.of(context)
          .textTheme
          .body1
          .copyWith(
             fontWeight: FontWeight.w600,
             fontSize: 0.03 * deviceWidth,
          ),
   ),

【讨论】:

谢谢,天哪! - 我按照你说的那样实现了代码,但现在按钮根本没有显示 - 我在解释你的答案时犯了错误吗? (将问题中的代码更新为我现在如何拥有它) 在更新后的代码中,您返回的是空容器return Container();,请查看快照代码的末尾。而是返回该行下方的容器double deviceWidth = MediaQuery.of(context).size.width; 与上述评论无关:关于fontSize: 0.03 * deviceWidth,也许你需要操纵它来找到最佳比例,它不一定是3%。 啊,这完全是我的错,现在完美了!谢谢!我会尝试看看哪种字体大小效果最好:)

以上是关于delphi7中怎样调整程序适应不同的显示器尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

调整按钮以适应不同的屏幕尺寸

c#winform程序开发,不同屏幕尺寸,分辨率,界面 控件 显示问题

如何适应不同的屏幕尺寸

如何调整html中的图像大小以适应屏幕尺寸?

PyQt5调整应用程序以适应不同的显示

尝试调整我的 UIView 容器以适应较小的 iPhone 屏幕尺寸