2016-08-13 4 views
2

ScrollBox에 6 개의 RichEdit 컨트롤이 있습니다. 그들은 위에서 아래로 순차적으로 왼쪽 정렬해야하지만 고정되어 있지 않아야하므로 스크롤 막대를 사용하여 텍스트 길이가 ScrollBox 너비를 초과 할 때 전체 텍스트를 볼 수 있습니다.고정 너비가 아닌 컨트롤을 왼쪽 위를 정렬하는 방법은 무엇입니까?

내가 설정 한 경우 :

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

가 완벽하게 정렬하고 그래서 실수로 이동할 수없는 디자인에 고정 된 상태를 유지하지만 폭이 고정됩니다. 안좋다.

내가 수동으로 정렬하면, 클릭 할 때 고정되어 있지 않으며 이동할 수 있으며 항상 정렬해야합니다. 성가신.

위 그림은 Align = alTop 및 너비가있는 모든 RichEdit은 ScrollBox 너비로 고정되어 있습니다. 아래 예는 스크롤 박스의 폭을 넘어 갈 수있는 폭 모든 RichEdits의 수동 정렬로,하지만 그들은 디자인에 주위를 이동할 수 있습니다 그들로 왼쪽 상단에 고정 얻을

그래서 enter image description here

, 내가 좋아하는 것 alTop은하지만 너비를 고정하지는 않습니다. 이것을 어떻게 할 수 있습니까?

+0

올바르게 배치하면 메뉴 항목 편집 - 잠금 제어로 구성 요소가 실수로 이동하는 것을 방지 할 수 있습니다. –

+0

alTop 정렬 수준을 찾고 있지만 너비는 엄격하지 않습니다. 예, 디자인에 잠겨 있고 런타임에 정렬 상태를 유지합니다. –

+0

'Align = alTop'을 사용하면 너비가 부모에 고정됩니다. –

답변

4

설계시 사용 Align = alTop에서.그런 다음 런타임 (예 : 양식의 OnCreate)에 Align := alNone을 설정하고 너비를 원하는대로 변경하십시오.

+0

그건 꽤 똑똑한 것 같아요. 내가 필요로하는 것처럼 작동 할 것입니다. –

+1

이것은 분명히 비슷한 상황에서 어떻게 할 것인가입니다. 그래서 저는 제 대답을 다시 열었습니다. –

+0

내가 가진 12 개의 ScrollBox에 대해 OnCreate의 변경 시간이 얼마나 걸릴지 테스트해야합니다. 나는 런타임에 정렬을 바꾸는 것에 대한 좋은 경험이 없다. 잠시 동안 또는 한 개의 컨트롤을 변경할 때 완전히 다른 프로세스가 완료되기 전에 다른 컨트롤이 시작된다. –

3

우발적 인 이동을 방지하는 것이 목표라면, 두 가지 해결책이 있습니다.

사용 델파이의 "잠금 제어"옵션

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 부울 속성을 구현하는 방법을 조사하기 위해 나에게 영감을하고있다 그 자식 컨트롤.


사실, 방금 "잠금 제어"옵션으로 델파이의 명백한 버그를 발견했습니다. 양식에서 사용하도록 설정 한 다음 양식을 닫았다가 다시 열면 해당 컨트롤이 더 이상 잠기지 않습니다. 그러나 동시에 "편집"메뉴로 이동하면 "컨트롤 잠금"옵션이 여전히 활성화되어있는 것처럼 나타납니다 (그렇지 않은 경우에도). 나는이 버그를 델파이 7에서 다시 생각해 냈지만 델파이 10 시애틀에서는 여전히 그것을보고있다.

편집 나는 여전히 열려 품질 관리 보고서를 발견

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

+0

이 버그는 잠금 컨트롤을 사용하지 않는 이유입니다. 잠시 후 스위치를 켜면 나중에 컨트롤의 모서리가 잠긴 것처럼 보입니다 (파란색 대신 회색 점 - 잠긴 컨트롤을 나타냄). 그러나 나는 그들을 움직일 수 있습니다. –

+0

@ 마이크 왜 내가 다른 해결책을 제공했는지. –

+0

그 해결책이 어떻게 도움이 될지 잘 모르겠습니다. 때로는 내가 그들을 선택할 때 성가신 행동을하니, 부모가 상관없이 움직일 것입니다. 어떤 경우에도 재정렬이 필요합니까? 아니면 패널에서 무언가를 놓치고 있습니까? –