2016-08-13 57 views
2

我在ScrollBox中有6个RichEdit控件。它们需要按照从上到下的顺序左对齐,但是我需要宽度不固定,因此当文本长度超出ScrollBox宽度时,可以使用滚动条滚动以查看全文。如何对齐左侧和顶部的控件而不固定宽度?

如果我设置:

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

他们完全对齐,并保持固定的设计,这样可以不小心移动它们,但宽度被固定。不好。

如果我手动对齐它们,那么点击它们时它们不会被固定,并且可以移动并且我需要重新整理所有时间。烦人。

图片显示顶部所有RichEdits与Align = alTop和宽度固定为ScrollBox宽度。 底部的例子是与宽度可以超越滚动框的宽度都RichEdits的人工比对,但他们可以围绕在设计中移动:

enter image description here

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

+0

您可以通过菜单项编辑 - 锁定控件将组件正确放置后防止意外移动组件。 –

+0

寻找alTop对齐的级别,但对宽度不严格。是的,所以他们被锁定在设计中并保持在运行时保持一致。 –

+0

使用'Align = alTop'可以将宽度修正为父级。 –

回答

4

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

+0

我想这很聪明。它会像我需要的那样工作。 –

+1

这当然是我在类似的情况下做的,所以我重新打开了我的答案。 –

+0

需要测试在OnCreate中更改12个ScrollBoxes所需的时间。我在运行时没有很好的改变对齐的经验,它要么需要一段时间,要么在改变一个控件时,在完成改变的过程完成之前,所有其他的开始移动... –

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 

在另一方面,这也激发了我调查我怎么能实现对TControl水平。启动时,会阻止您移动或上浆一个LockChildren布尔属性其子控件。


其实我只是在Delphi中发现了一个明显的“锁控件”选项。如果您在窗体上启用它,然后关闭并重新打开窗体,则控件不再被锁定。但与此同时,如果进入“编辑”菜单,则“锁定控制”选项将显示为仍然启用(即使不是)。我想我回想起Delphi 7中的这个bug,但是我仍然在Delphi 10 Seattle上看到它。

编辑我发现QC报告仍处于打开状态:

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

+0

这个错误是我不使用锁定控件的原因。当我稍后打开它时,控件的角落仍然显示锁定(灰色点而不是蓝色 - 表示锁定控件),但我可以将它们移动。 –

+0

@Mike这就是为什么我给你提供了另一种解决方案。 –

+0

不知道该解决方案将如何帮助。当我选择他们时,他们有时候很烦人 - 所以,无论他们是哪个父母,他们都会移动,对吗?在任何情况下都需要重新排列,或者我是否缺少Panel的某些内容? –

相关问题