2016-08-13 2 views
2

У меня есть 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. Bottom пример с ручным выравниванием всех RichEdits, что ширина может выходить за пределы ширины ScrollBox, но они могут быть перемещены в дизайне:

enter image description here

Итак, я хотел бы получить их фиксированные налево, сверху, как делает alTop, но не фиксирует ширину. Как я могу это достичь?

+0

Вы можете предотвратить случайное перемещение компонентов по элементу меню Edit - Lock Controls после их правильной установки. –

+0

Ищите уровень выравнивания alTop, но не строго для ширины. Да, поэтому они заперты в дизайне и остаются выровненными во время выполнения. –

+0

Использование 'Align = alTop' фиксирует ширину для родителя. –

ответ

4

В момент использования в конструкции Align = alTop.Затем во время выполнения (e, g, OnCreate формы) установите Align := alNone и измените ширину, как вам нравится.

+0

Это довольно умно, я думаю. Это будет работать так, как мне было нужно. –

+1

Это, конечно, то, как я сделал бы это в подобной ситуации, поэтому я снова открыл свой ответ. –

+0

Необходимо будет проверить, сколько времени изменится в OnCreate для 12 ScrollBoxes, которые у меня есть. У меня нет очень хорошего опыта в изменении выравнивания во время выполнения, это занимает некоторое время или при смене одного элемента управления все остальные начинают перемещаться, прежде чем процесс полного изменения будет выполнен ... –

3

Если предотвращение случайного перемещения является вашей целью, я вижу два решения.

Использование в Delphi «Controls Lock» вариант

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 с опцией «Блокировка управления». Если вы включите его в форме, затем закройте и повторно откройте форму, элементы управления больше не будут заблокированы. Но в то же время, если вы перейдете в меню «Редактировать», опция «Блокировать блокировки» появится, как будто она все еще включена (хотя это не так). Я думаю, что я помню эту ошибку waaaaaay еще в Delphi 7, но я все еще вижу ее на Delphi 10 Seattle.

EDIT Я нашел отчет QC еще открыт:

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

+0

Эта ошибка является причиной того, что я не использую блокировки. Когда я включаю его через некоторое время, углы управления по-прежнему остаются заблокированными (серые точки вместо синего - с указанием заблокированных элементов управления), но я могу их перемещать. –

+0

@Mike Вот почему я предоставил вам другое решение. –

+0

Не знаете, как это поможет решение. Иногда они раздражающе двигаются, когда я их выбираю - так, они будут двигаться независимо от того, в каком родителе они есть, правильно? В любом случае требуется переупорядочить, или я что-то пропускаю с помощью панели? –

Смежные вопросы