| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблема с расположением элементов на форме |
| Автор: Valart 30.3.2011, 10:57 |
| В общем, есть неразрешимая проблема! Есть MDI-форма на ней расположен CategoryPanelGroup (align=alLeft) и TabControl (align=alTop). http://s2.ipicture.ru/uploads/20110330/Gg1FFMxv.png Так вот каким образом сделать так, чтобы alLeft имел приоритет над alTop? http://s2.ipicture.ru/uploads/20110330/5T7RI5tK.png Единственное, что пришло в голову так это бросить TabControl на Panel и менять размер TabControl по изменению размера формы. Но в результате получается не совсем тот вид, который нужен. http://s2.ipicture.ru/uploads/20110330/tUCAR0QJ.png |
| Автор: Valart 30.3.2011, 12:15 |
В принципе, на скрине всё показано... Стандартно alTop имеет приоритет над alLeft, т.е. alTop, грубо говоря, отнимает у alLeft место. Если поставить у TabControl alClient, то не будет места для отображения MDIChild. TabControl в данном случае используется для переключения между дочерними окнами. |
| Автор: Frees 30.3.2011, 12:25 |
| для TabControl не делай align, а используй Ancher, что бы правый его край двигался вместе с формой |
| Автор: Poseidon 30.3.2011, 12:33 | ||
|
| Автор: Valart 30.3.2011, 17:02 | ||||
Если для TabControl не делать Align, то дочерние окна подлезают под него. Добавлено через 4 минуты и 21 секунду
Нет, не проще. В программе иногда нужно будет рассматривать одновременно два или больше окон. Да и форм предполагается большое количество. |
| Автор: Valart 3.4.2011, 18:35 |
| Судя по всему, проблема действительно неразрешимая, хотя кажется такой простой... |
| Автор: superVad 3.4.2011, 18:43 |
| Кинь справа панель с alClient. А уже на эту панель TabControl alTop. |
| Автор: Valart 4.4.2011, 15:26 | ||
Ты сам пробовал? Если панель будет alClient, то где будут отображаться дочерние окна? Подсказываю: под панелью. |
| Автор: Frees 4.4.2011, 16:15 | ||
для дочерних окон можно парентом панель сделать, и они будут на ней показываться. |
| Автор: Valart 4.4.2011, 17:01 | ||
Пробовал уже. Но что-то не получилось. Не отображается у меня дочернее окно на панели. Если у тебя получилось, то пожалуйста напиши как? |
| Автор: _Dimon_ 5.4.2011, 01:17 |
| 1) Есть компонент TsFrameBar из пакета http://alphaskins.com (для СНГ бесплатно даже в ком. целях). Можно поменять MDI-Child на фреймы(а можно и не менять). События обработки есть в этом компоненте. (ну это другой вариант) 2) Не могу понять, почему не работает так, как предложил Frees в последнем посте. Может не так понял, но судя поскриншотам задача легко решается. З.Ы. Напиши как создаешь чилд-форму, может там че не то, хз...................... |
| Автор: Frees 5.4.2011, 06:23 | ||||||||
нет я так не пробовал, поэтому и не посоветовал такой вариант в своем первом посте.
попробовал, не работает.. просто присвоить Parent не работает
при присвоении
|
| Автор: Valart 5.4.2011, 09:58 | ||
|
| Автор: Valart 5.4.2011, 13:57 | ||
А он, этот TsFrameBar, может быть контейнером для форм? |
| Автор: Valart 5.4.2011, 17:17 |
Попробовал сделать вот так:![]() Т.е. бросил на форму CategoryPanelGroup (alLeft), Panel1 (alClient). На Panel1: TabControl (alTop) и Panel2 (alClient). Ну и написал Form2.Parent := Panel2. При этом Form1 и Form2 обычные, не MDI, формы. Но сразу же обнаружились недостатки: нельзя переключиться на форму, кликнув мышкой в произвольное место на ней, а только по заголовку; размер дочерней формы автоматически не меняется при изменении размера родительской. Т.е. всё это нужно будет дописывать руками. |
| Автор: Valart 6.4.2011, 09:11 | ||
Ну, с этим компонентом всё понятно. Не подойдёт он по ряду причин. Там же для переключения используются вертикально расположенные кнопки-заголовки, да и как с помощью него открыть на просмотр несколько окон? В общем, не годится! |
| Автор: Valart 6.4.2011, 11:44 |
| Кстати, кто-нибудь знает компонент-наследник от TabControl или TabSet для переключения между окнами? |
| Автор: Frees 6.4.2011, 12:09 |
| я такой знаю http://www.tmssoftware.com/site/aot.asp |
| Автор: Valart 6.4.2011, 12:26 |
На сколько я понял, TAdvOfficeMDITabSet платный и годится только для переключения между MDI. А бесплатных аналогов с поддержкой обычных окон нет? |
| Автор: Valart 8.4.2011, 14:56 |
| В общем, решил, что всё-таки буду использовать MDI-формы. Потому как иначе возникнут лишние заморочки с доделыванием обычных форм до свойств и поведения MDI. Для переключения между дочерними окнами нашел вот это: http://www.mitec.cz/mdibg.html. А вот решение моего вопроса: http://www.sql.ru/forum/actualthread.aspx?tid=767142 http://s1.ipicture.ru/ |
| Автор: Gwire 12.4.2011, 14:01 | ||||
Как вариан могу предложить следуюшее:
|
| Автор: Gwire 12.4.2011, 14:17 | ||||
А по поводу переключения. В TabSet.Tag присваивай указатель формы которая связана с ним
|
| Автор: Gwire 12.4.2011, 14:45 | ||
| Cовет: Чтобы не парить мозги что написать в AlignControls 1) Сохрани в папку с проектом файл Controls.pas. 2) Добавь его к проекту 3) И поменяй местами строки как тебе нравится (найди поиском):
PS: Этот вариант мне лично понравился. |
| Автор: Valart 13.4.2011, 10:29 |
| Gwire, спасибо, но вариант с sql.ru мне нравится больше. Он, скажем так, более красивый. А по переключению, я просто не хочу обрабатывать вручную. Делал так когда-то, только с TabSet. Есть хороший бесплатный компонент, так почему его не использовать? |