Почему мой TSplitter не в том месте? - PullRequest
5 голосов
/ 11 марта 2011

У меня есть диалог, который выглядит примерно так:

---------------------------------------------
|                                           |
| CONFIG AREA                               |
| Align: alTop                              |
--------------------------------------------- <-static boundary
|                                           |
| DISPLAY AREA 1                            |
| Align: alTop                              |
============================================= <-TSplitter Align: alTop
|                                           |
| DISPLAY AREA 2                            |
| align: alClient                           |
--------------------------------------------- <-bottom of dialog

Однако во время выполнения сплиттер отображается не между областью отображения 1 и областью отображения 2, а между областью конфигурациии область отображения 1, приводящая к некоторым раздражающим проблемам интерфейса.В обработчиках событий формы, связанных с настройкой, нет ничего, что изменяло бы свойства Visible или Align любого из этих компонентов.Кто-нибудь знает, почему разделитель не загружается в том месте, где он находится в конструкторе форм?

Ответы [ 3 ]

11 голосов
/ 11 марта 2011

(Невозможно воспроизвести.) Сплиттеры - хитрая штука.Я всегда пишу код для их размещения.В этом случае я бы сделал

procedure Form1Show(Sender: TObject);
begin
  Splitter1.Top := DisplayArea2.Top;
end;
7 голосов
/ 11 марта 2011

У меня были подобные проблемы в прошлом. Они были вызваны:

  1. контролирует то, что сделано невидимым.
  2. Порядок создания контроля.

Я думаю, что сплиттер создается после области конфигурации и перед областью отображения1. Если вы создадите его после области отображения 1, все будет в порядке.

6 голосов
/ 11 марта 2011

У меня тоже была такая же проблема в прошлом. TSplitter должен быть размещен между двумя TPanel, например:

+---------------------------------------------+
|+-------------------------------------------+|
||                                           ||
|| CONFIG AREA                               ||
|| Align: alTop                              ||
|+-------------------------------------------+|
||                                           ||
|| DISPLAY AREA 1                            ||
|| Align: alClient                           ||
|+-------------------------------------------+|
+---------------------------------------------+
=============================================== <-TSplitter Align: alTop
|                                             |
| DISPLAY AREA 2                              |
| align: alClient                             |
----------------------------------------------- <-bottom of dialog

Область конфигурации и область отображения 1 теперь должны содержаться внутри TPanel с Align: = alTop, и либо область конфигурации, либо область отображения 1 должна быть выровнена по alClient.

Надеюсь, это поможет

...