Delphi :框架中GridPanel的自动缩放

yfwxisqw  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(356)

我在一个框架中有一个单行GridPanel,其中充满了按钮,当高度或宽度发生变化时,我不想按比例缩放。

在发布之前,我将alClient的对齐设置为使用父对象的完整大小,但我不知道如何进行缩放。
你有什么建议?

fwzugrvs

fwzugrvs1#

GridPanel中,你有一个ColumCollection,其中有四个(根据你的图片)TColumnItems
对于每个TColumnItem,将SizeStyle属性设置为ssPercent(默认值),并将Value属性设置为25.
因为当您编辑一栏时,其他栏的大小会自动调整,所以当您将表单(或框架)检视变更为文字时,编辑这些值会比较容易。在框架上按一下鼠标器右击,然后选取View as Text
编辑后,其外观如下所示。

object GridPanel1: TGridPanel
    Left = 0
    Top = 0
    Width = 426
    Height = 108
    Align = alClient
    Caption = 'GridPanel1'
    ColumnCollection = <
      item
        Value = 25.000000000000000000
      end
      item
        Value = 25.000000000000000000
      end
      item
        Value = 25.000000000000000000
      end
      item
        Value = 25.000000000000000000
      end>
    ControlCollection = <
    ...
    >
    RowCollection = <
      item
        Value = 100.000000000000000000
      end>
    TabOrder = 0
    object Button1: TButton
      Left = 1
      Top = 1
      Width = 106
      Height = 106
      Align = alClient
      Caption = 'Button1'
      TabOrder = 0
      ExplicitLeft = 40
      ExplicitTop = 32
      ExplicitWidth = 75
      ExplicitHeight = 25
    end
    ...other buttons
    ExplicitWidth = 320
    ExplicitHeight = 153
  end

您的回应:
这是我忘了提到我已经做过的事情。为了澄清,我的问题与在调整框架(或可能是周围的表单)大小时强制一定的高宽比(在我的例子中为1:1)有关。
我假设比例1:1适用于每个按钮,所以4:1适用于整个帧。
因为用户可以调整窗体的高度或宽度(或两者),而我们只有一个公共的OnResize事件可以依靠,所以我建议如下:
声明两个私有变量,形式为

OldCW, OldCH: integer; // for client width and client height respectively

OnResize事件,其形式为:

procedure TForm4.FormResize(Sender: TObject);
begin
  if ClientWidth <> OldCW then
    ClientHeight := ClientWidth div 4
  else
    ClientWidth := ClientHeight * 4;
  OldCW := ClientWidth;
  OldCH := ClientHeight;
end;

最后,对于您将来的问题:请说明您已经尝试过哪些方法来解决问题,以及这些尝试失败的原因。

相关问题