Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MDI [D5, Win2k]


tsarevep ©   (2002-06-12 10:16:00) 

Доброе время суток всем!
Подскажите пожалуйста если кто сталкивался. У меня 9 Childform в MDI, каждая форма это отдельный редактор со своим меню и toolbar"ом. Все формы - "auto-create" и их закрытие или сворачивание не должно быть возможно. Все они должны быть в "Maximized", без системного меню. Я установил флаги "BorderStyle в bsNone" и "biSystemMenu в False". А проблема получается в том что при переключение между формами их WindowState становится wsNormal.Если это возможно подскажите пожалуйста.
С уважением.


tsarevep   (2002-06-12 16:04:00) [1]

Конечно помог, СПАСИБО!
А с PageControl"ом я пытался сначала. Не хотел с MDI связываться.
И вот чего получилось...
Один из редакторов это Html редактор почти один в один как Homesite 5.0 , то есть сверху идет меню, потом два toolbara слева поверху, справа Pagecontrol c кучей вкладок. Вообщем как в Делфи.
Дальше ниже идет PageControl для переключения между редакторами
еще ниже PageControl с вкладками "Browse и Html "дальше "Мемо"
со split разделителем еще ниже "minibrowser при редактировании"
потом опять "pagecontrol" с названиями файлов.А потом еще окно вывода. Вот и получилось PageControl один на одном. Клиентской области почти не осталось. Да и еще с горячими клавишами проблема, их просто не хватает для такого объема кнопок. Например в одном редакторе по сочитанию Ctrl + J всплывает "listbox" с набором функций, а в других редакторах другой "listbox" например c атрибутами, и делать if else и Visible туда сюда я пробывал - ничего хорошего из этого не получается. Поэтому и пытаюсь MDI.
Еще раз спасибо.
С уважением.


McSimm   (2002-06-12 12:33:00) [2]

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

Если мой совет помог справиться с проблемой, то можно и так.


tsarevep   (2002-06-12 12:14:00) [3]

Огромное спасибо!

А PageControl интересно конечно же и выгоднее было бы.
Но куда я дену меню( у одного Find-пункта разные направления) и toolbar"ищи а запихать их под вкладки не симпотично. Или я не так понял?.
С уважением.


McSimm   (2002-06-12 11:58:00) [4]

Это происходит потому, что форма при активации сначала отрисовывается в "нормальном" состоянии, а затем максимизируется.

Можно сделать иначе.
Верните формам biSystemMenu = true.
Уберите из события OnActivate то что я предложил ранее
в описании форм перекройте
protected
procedure CreateParams(var Params: TCreateParams); override;
...
procedure TMDIChild.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style and not WS_SYSMENU
end;
После этого у форм исчезнут кнопки и системное меню, но при переключении они не будут менять состояние

Хотя я бы все же сделал на основе PageControl. Объясню почему.

- Внешний вид будет тот-же, что и в вашем случае. (закладочки можно скрыть)

- Формы Autocreate, поэтому все созданы и открыты.

- Все MDI формы разные, т.е. не являются экземплярами какого-то одного типа.

Все это позволяет использовать PageControl без какого-либо ущерба как ресурсам, так и внешнему виду.


tsarevep   (2002-06-12 11:28:00) [5]

Тут новый вопрос родился. Чего то перирисовка такая долгая получается при переключении между формами. Может как то можно её устранить?.
С уважением.


tsarevep   (2002-06-12 11:07:00) [6]

Там каждая форма со свом TabControl. И имеет возможность редактирования нескольких документов. А один PageControl мне бы ничего не дал. У меня только на одной Child-форме Toolbar чуть больше чем в Dеlphi(22 вкладки на PageControle и 270 кнопок), и причем формы отличаются по направлению. Например Undo-buffer для
звуков и картинок отличается от текстового и еще штук 500 таких загвоздок. А девять разных программ уже делал 28 Mb получились
вот и объеденяю невозможное.
А за ответ огромная благодарность. Я просто никогда с MDI не сталкивался. Еще раз спасибо.
С уважением.


McSimm   (2002-06-12 10:44:00) [7]

А по вопросу -
procedure TMDIChild.FormActivate(Sender: TObject);
begin
WindowState := wsMaximized
end;


McSimm   (2002-06-12 10:34:00) [8]

Может для такого приложения лучше подойдет не MDI, а форма с TPageControl?


Наверх

Титульная страница Поиск, карта сайта Написать письмо