如何在没有固定宽度的情况下将控件左对齐和上对齐?
How to align controls left and top without fixed width?
我在 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 一样固定在左侧,顶部,但不固定宽度。我怎样才能做到这一点?
如果防止意外移动是您的目标,我认为有两种解决方案。
使用 Delphi 的 "Lock Controls" 选项
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
另一方面,这启发了我研究如何在 TControl
级别上实现 LockChildren
布尔值 属性,启用后会阻止您移动或调整大小它的子控件。
实际上,我刚刚在 Delphi 中的 "Lock Controls" 选项中发现了一个明显的错误。如果在窗体上启用它,然后关闭并重新打开窗体,控件将不再被锁定。但与此同时,如果您转到 "Edit" 菜单,"Lock Controls" 选项似乎仍然处于启用状态(即使它不是)。我想我记得这个错误 waaaaaay 回到 Delphi 7,但我仍然在 Delphi 10 西雅图看到它。
编辑 我发现 QC 报告仍然打开:
在设计时使用 Align = alTop
。然后,在运行时(例如,表单的 OnCreate
)设置 Align := alNone
,并根据需要更改宽度。
我在 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 一样固定在左侧,顶部,但不固定宽度。我怎样才能做到这一点?
如果防止意外移动是您的目标,我认为有两种解决方案。
使用 Delphi 的 "Lock Controls" 选项
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
另一方面,这启发了我研究如何在 TControl
级别上实现 LockChildren
布尔值 属性,启用后会阻止您移动或调整大小它的子控件。
实际上,我刚刚在 Delphi 中的 "Lock Controls" 选项中发现了一个明显的错误。如果在窗体上启用它,然后关闭并重新打开窗体,控件将不再被锁定。但与此同时,如果您转到 "Edit" 菜单,"Lock Controls" 选项似乎仍然处于启用状态(即使它不是)。我想我记得这个错误 waaaaaay 回到 Delphi 7,但我仍然在 Delphi 10 西雅图看到它。
编辑 我发现 QC 报告仍然打开:
在设计时使用 Align = alTop
。然后,在运行时(例如,表单的 OnCreate
)设置 Align := alNone
,并根据需要更改宽度。