3

我在 ScrollBox 中有 6 个 RichEdit 控件。它们需要从上到下依次左对齐,但我需要不固定宽度,所以当文本长度超过 ScrollBox 宽度时,我可以使用滚动条滚动查看全文。

如果我设置:

RichEdit1.Align := alTop;
RichEdit2.Align := alTop;
RichEdit3.Align := alTop;
RichEdit4.Align := alTop;
RichEdit5.Align := alTop;
RichEdit6.Align := alTop;

它们完美对齐并在设计中保持固定,因此不会意外移动它们,但宽度固定。不好。

如果我手动对齐它们,那么单击它们时它们不会固定并且可以移动,我需要一直重新排列。恼人的。

图片显示在所有带有 Align = alTop 且宽度固定为 ScrollBox 宽度的 RichEdits 顶部。底部示例是所有 RichEdits 的手动对齐,其宽度可以超出 ScrollBox 的宽度,但它们可以在设计中移动:

在此处输入图像描述

所以,我想让它们像 alTop 一样固定在左侧,顶部,但不固定宽度。我怎样才能做到这一点?

4

2 回答 2

5

在设计时使用Align = alTop. 然后,在运行时(例如OnCreate表单)设置Align := alNone,并根据需要更改宽度。

于 2016-08-13T16:52:22.813 回答
3

如果防止意外移动是您的目标,我看到两种解决方案。

使用 Delphi 的“锁定控制”选项

Edit > Lock Controls,但这是一个临时解决方案,没有保存,关闭/重新打开时,它将再次被禁用。

将它们全部对齐在面板内

然后将该面板设置为您需要的宽度。但是,这仍然不会阻止您意外移动面板 - 只是编辑控件。即使这样,您仍然可以重新排列对齐的控件 - 如果您不小心将一个控件拖到其邻居的边缘之外。

这是一个示例 DFM 结构:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 340
  ClientWidth = 392
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object ScrollBox1: TScrollBox
    Left = 24
    Top = 8
    Width = 329
    Height = 281
    TabOrder = 0
    object Panel1: TPanel
      Left = 3
      Top = 3
      Width = 500
      Height = 217
      TabOrder = 0
      object Edit1: TEdit
        Left = 1
        Top = 1
        Width = 498
        Height = 21
        Align = alTop
        TabOrder = 0
        Text = 'Edit1'
        ExplicitLeft = 40
        ExplicitTop = 48
        ExplicitWidth = 121
      end
      object Edit2: TEdit
        Left = 1
        Top = 22
        Width = 498
        Height = 21
        Align = alTop
        TabOrder = 1
        Text = 'Edit2'
        ExplicitLeft = 16
        ExplicitTop = 56
        ExplicitWidth = 121
      end
      object Edit3: TEdit
        Left = 1
        Top = 43
        Width = 498
        Height = 21
        Align = alTop
        TabOrder = 2
        Text = 'Edit3'
        ExplicitLeft = 40
        ExplicitTop = 96
        ExplicitWidth = 121
      end
      object Edit4: TEdit
        Left = 1
        Top = 64
        Width = 498
        Height = 21
        Align = alTop
        TabOrder = 3
        Text = 'Edit4'
        ExplicitLeft = 32
        ExplicitTop = 128
        ExplicitWidth = 121
      end
      object Edit5: TEdit
        Left = 1
        Top = 85
        Width = 498
        Height = 21
        Align = alTop
        TabOrder = 4
        Text = 'Edit5'
        ExplicitLeft = 56
        ExplicitTop = 160
        ExplicitWidth = 121
      end
      object Edit6: TEdit
        Left = 1
        Top = 106
        Width = 498
        Height = 21
        Align = alTop
        TabOrder = 5
        Text = 'Edit6'
        ExplicitLeft = 80
        ExplicitTop = 192
        ExplicitWidth = 121
      end
    end
  end
end

另一方面,这激发了我研究如何LockChildren在级别上实现布尔属性TControl,当启用该属性时,它会阻止您移动或调整其子控件的大小。


实际上,我刚刚在 Delphi 中发现了一个带有“锁定控件”选项的明显错误。如果在表单上启用它,然后关闭并重新打开表单,控件将不再锁定。但同时,如果您转到“编辑”菜单,“锁定控件”选项会显示为好像它仍然处于启用状态(即使它不是)。我想我在 Delphi 7 中记得这个错误 waaaaaay,但我仍然在 Delphi 10 Seattle 上看到它。

编辑我发现 QC 报告仍然打开:

http://qc.embarcadero.com/wc/qcmain.aspx?d=82764

于 2016-08-13T16:52:21.920 回答