Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как перенаправить MDIClient на другое место


Автор: Ivan. 15.2.2007, 18:22
На моем счету уже есть несколько MDI программ, но только сейчас столкнулся с такой проблемой:
Есть MDIForm, слева понель (неважно для чего), в оставшемся окне сверху Toolbar, ну а на остальной части необходимо разместить MDIClient (MDIClient создается автоматически).
Проблема в том, что прижатый к Top или Bottom объект имеет приоритет по сравнению с Left или Right. Для решения этой проблемы можно развернуть на клиентскую область панель, а уже на нее положить объект прижатый к Top или Bottom. Возникает другая проблема - MDIClient создается на дне формы!!!
Второй вариант: Я хочу создать TabControl с открытыми формами, а на нем должен разместится MDIClient.
Дак вот как сказать программе, что MDIClient должен разместится не на самой форме, а на каком либо другом объекте (грубо говоря, как уразать ему Parent)?

Автор: Vyacheslav 15.2.2007, 18:41
Честно говоря ничего не понял smile 
Цитата(Ivan. @  15.2.2007,  18:22 Найти цитируемый пост)
Есть MDIForm, слева понель (неважно для чего), в оставшемся окне сверху Toolbar, ну а на остальной части необходимо разместить MDIClient (MDIClient создается автоматически).

Ну и что? Практически все моиприложения были построены по такому принципу
Сверху - интсрументальная панель
Слева - паненель с TreeView, где разворачивалось иерархическое меню.

Вот это я абсолютно не понял
Цитата(Ivan. @  15.2.2007,  18:22 Найти цитируемый пост)
Проблема в том, что прижатый к Top или Bottom объект имеет приоритет по сравнению с Left или Right. Для решения этой проблемы можно развернуть на клиентскую область панель, а уже на нее положить объект прижатый к Top или Bottom. Возникает другая проблема - MDIClient создается на дне формы!!!


Цитата(Ivan. @  15.2.2007,  18:22 Найти цитируемый пост)
Второй вариант: Я хочу создать TabControl с открытыми формами, а на нем должен разместится MDIClient.
Дак вот как сказать программе, что MDIClient должен разместится не на самой форме, а на каком либо другом объекте (грубо говоря, как уразать ему Parent)? 

MDIClient'у думаю никак. А сымитировать с обычным окном очень просто. Создайтес окно и его паренту присвойте 
Sheet
Код

   TForm2* form = new TForm2(this);
   form->Parent = TabSheet1;
   form->Visible =true;


Только думаю, что этот метод Вас врядли устроит. Там куча других проблем возникнет

Автор: Ivan. 15.2.2007, 19:20
Цитата

Сверху - интсрументальная панель
Слева - паненель с TreeView, где разворачивалось иерархическое меню.

Панель инструментов разворачивается на всю ширину, а паненель с TreeView уперается в панель инструментов. А мне нужно наоборот.

Возмем пример программу UEStudio, там конечно не VCL объекты.
При рассмотрении этой программы Spyxxx видно, что MDIClient лежит на TTabControl

Автор: Vyacheslav 16.2.2007, 11:53
Цитата(Ivan. @  15.2.2007,  19:20 Найти цитируемый пост)
При рассмотрении этой программы Spyxxx видно, что MDIClient лежит на TTabControl 

Или на его иммитации smile

Добавлено @ 12:06 
Цитата(Ivan. @  15.2.2007,  19:20 Найти цитируемый пост)
Панель инструментов разворачивается на всю ширину, а паненель с TreeView уперается в панель инструментов. А мне нужно наоборот.

А кто мешает положить панель и прилепить ее сверху, установив ей Allign =alCustom

Anchors = [ akLeft, akTop, akRight] 
Единственное, что тогда придется отрабатывать вручную - это манипуляции  со сплиттером, если он у Вас предусмотрен.

Автор: Ivan. 16.2.2007, 19:12
Цитата(Vyacheslav @  16.2.2007,  11:53 Найти цитируемый пост)
Или на его иммитации 
Какраз таки нет. TabControl развернут на всю форму, а в нутри него MDIClient. По таблице взаимосвязи MDIClient находится на TabControl.
Я таки и хотел сделать имитацию прижав тоненькую полоску TabControl, а остальное типа его Page.
Цитата(Vyacheslav @  16.2.2007,  11:53 Найти цитируемый пост)
Единственное, что тогда придется отрабатывать вручную - это манипуляции  со сплиттером, если он у Вас предусмотрен.
Это как?

Автор: Vyacheslav 16.2.2007, 19:33
Цитата(Ivan. @  16.2.2007,  19:12 Найти цитируемый пост)
Какраз таки нет. TabControl развернут на всю форму, а в нутри него MDIClient. По таблице взаимосвязи MDIClient находится на TabControl.

Почему Вы так уверены? Вы думаете, невозможно сымитировть работу TabControl внеше? Или Вам доступен код?

Автор: Ivan. 17.2.2007, 08:09
user posted image
Действительно MDIClient лежит на одном уровне с TabControl
счего я подумал подругому? Извиняюсь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)