07.09.2010, 09:49 | #1 |
Участник
|
Размеры элементов дизайна формы
Доброго времени суток!
Буду рад получить помощь в ответе на вопрос: Имеется форма с дизайном, состоящим из двух групп, разделенных горизонтальным сплиттером (по оси X), т.е. дизайн имеет 3 колонки (TableGroup, CtrlSplitHor, RightGroup). В левой группе дизайна располагается Tab и, соответственно, TabPage, в котором располпгается Grid с большим количеством полей. В правой группе находится ActiveX-контрол HTMLView (также расположенный на TabPage), в который загружаются изображения. Скриншот дизайна в AOT прилагается к данному сообщению. При первом запуске формы или после сброса пользовательских данных при указанном оформлении дизайна Grid вместе с Tab'ом, на котором он расположен, выходит за пределы формы, контролов правой группы так же не видно на форме. Для их отображения необходимо растянуть форму и передвинуть сплиттер, чтобы сократить размеры таба с гридом. В случае, если поменять местами группы в дизайне (TableGroup и RightGroup), то размеры элементов дизайна подстраиваются под размеры всего дизайна формы, то есть на Gride появляется горизонтальный скролл, и элементы обеих групп отображаются нормально. Все контролы, включая группы, табы, грид имеют значение свойства width "COLUMN WIDTH". Почему от очередности положения контролов меняется их отображение на форме, а именно размер? Последний раз редактировалось samolalex; 07.09.2010 в 09:57. |
|
07.09.2010, 10:38 | #2 |
MCP
|
Добрый день!
Потому что при init() формы вы вызываете метод: X++: public void init() { ; super(); formSplitterVertical = new SysFormSplitter_X(ctrlSplitVertical,Tree, this); }
__________________
AXIOMA |
|
|
За это сообщение автора поблагодарили: GBH (1). |
07.09.2010, 10:41 | #3 |
MCP
|
Т.е. если вы меняете в дизайне порядок групп RightGroup и TableGroup, нужно менять имя параметра _FormSizeControl при инициализации сплиттера
__________________
AXIOMA |
|
07.09.2010, 10:55 | #4 |
Участник
|
kornix, суть заключалась немного в другом, но вы меня подтолкнули на правильные мысли относительно параметров сплиттера, за что вам спасибо:
инициализировать его (сплиттер) необходимо в методе run в данном случае, плюс к этому указывается необязательный параметр - ширина контрола, расположенного слева от сплиттера (int _startUpWidth - это ширина контрола, расположенного слева от сплиттера, при первом запуске формы). X++: public void run() { super(); _formSplitterHorisontal = new SysFormSplitter_X(ctrlSplitHor, TableGroup, element, 900); } Последний раз редактировалось samolalex; 07.09.2010 в 10:58. |
|
07.09.2010, 11:10 | #5 |
MCP
|
Да, действительно ответил не совсем на ваш вопрос Ну, главное что вам все удалось
Вообще, в tutorial формах, в примере с сплиттером его инициализация вызывается в методе init, не совсем понимаю разницу, откуда его вызывать. По идее в методе run обычно уже запускаются какие-нибудь алгоритмы, а в методе init разнообразные форматирования, добавления чего-нибудь программно и т.п.
__________________
AXIOMA |
|
|
За это сообщение автора поблагодарили: samolalex (1). |
07.09.2010, 11:55 | #6 |
Участник
|
Информацию про инициализацию сплиттера в методе run() взял отсюда:
Глюк с вертикальным сплиттером Здесь обсуждается проблема немного другого рода, но тем не менее, смежная с поставленной мной. |
|
|
За это сообщение автора поблагодарили: kornix (1). |
07.09.2010, 12:00 | #7 |
Участник
|
Обратите внимание, что в упомянутой ветке более правильное решение указано Maxim Gorbunov Глюк с вертикальным сплиттером
__________________
Ivanhoe as is.. |
|
07.09.2010, 12:04 | #8 |
Участник
|
Согласен, что ответ Максима является более правильным, но в контексте моей задачи решение с инициализацией в методе run() также является вполне приемлемым.
|
|
07.09.2010, 12:06 | #9 |
Участник
|
По теме: какая ширина стоит у вашей левой / правой группы? В свойствах Design указано, что колонок 3?
__________________
Ivanhoe as is.. |
|
07.09.2010, 12:13 | #10 |
Участник
|
Ширина обеих групп = "columnWidth", в свойствах дизайна указано 3 колонки.
|
|
13.12.2010, 16:50 | #11 |
Участник
|
Заметил на днях, что система некоректно определяет размеры клиентской области окна в случае если на нём находится StringEdit, у которого свойство LabelPosition выставлено в значение "Above" (и свойство Label не пусто), а свойство Height равно "Auto" либо константе. В результате вместо увеличения размеров по вертикали появляется полоса прокрутки. Ситуацию исправляет изменение свойства Height на "Column height", но эта замена не всегда равносильна, например если в качестве расширенного типа используется Memo.
P.S.: AX2009 Последний раз редактировалось S.Kuskov; 13.12.2010 в 18:42. |
|
|
|