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

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

И снова MDI [D6, WinXP]


Страницы:   1 2 3

Smok_er ©   (2003-01-23 21:45:00) 

Мастера! При переключении между максимизированными MDI Child"ами возникает некрасивый эффект как бы максимизации активизированной формы. Активизирую методом show.

Как можно этого избежать?


smok_er   (2003-01-27 12:34:00) [21]

>>Что-то не припомню я в Паскале такого класса...

Странно, я помню.
Пример: есть форма, я назвал ее ChildForm. Автоматически создается класс TChildForm. :)

>>Вот пример создания без активации на Си, как сделать подобное на делфи?

>>MDI-child"ы создаются по-другому.

Я же сказал, что в примере на Си. И попросил сказать, как такое сделать на паскале.


Игорь Шевченко   (2003-01-27 12:15:00) [22]

Можно еще через CreateWindowEx с указанием Exstyle = WS_EX_MDICHILD, но Parent"ом все равно должен быть MDIClient.

Можно еще через CreateMDIWindow :-)

Chubais © (27.01.03 12:07)
:tongue:


Chubais   (2003-01-27 12:07:00) [23]

афторитетно так:подтверждаю


Игорь Шевченко   (2003-01-27 11:39:00) [24]

MDI-child"ы создаются по-другому.

WindowHandle := SendMessage(Application.MainForm.ClientHandle,
WM_MDICREATE, 0, Longint(@CreateStruct));

То, что приведено в примере, к MDI-Child никоим боком не относится.


Strumpf   (2003-01-26 15:43:00) [25]

>smok_er (24.01.03 16:51)
>Это тоже самое, что на паскале TChildForm видимо...

Что-то не припомню я в Паскале такого класса...


smok_er   (2003-01-24 17:30:00) [26]

Игорь Шевченко © (24.01.03 17:07)

Как это не относится?
В этом куске создается MDIChild. Причем каким то образом оно изначально не активировано.


Игорь Шевченко   (2003-01-24 17:07:00) [27]

smok_er (24.01.03 16:27)

Это же к MDI никаким боком не относится


smok_er   (2003-01-24 16:51:00) [28]

Это тоже самое, что на паскале TChildForm видимо...


Strumpf   (2003-01-24 16:31:00) [29]

CChildFrame - это что за класс?


smok_er   (2003-01-24 16:27:00) [30]

Вот пример создания без активации на Си, как сделать подобное на делфи?


try
{
pWnd = new CChildFrame;
}
catch(...)
{
return NULL;
}

if(pWnd == NULL)
return NULL;
pWnd->m_bForceActive = bForceActive;

if (!pWnd->Create(_T("ChildFrame"), "",
WS_CHILD | WS_OVERLAPPEDWINDOW, rectDefault, this))
{
delete pWnd;
return NULL;
}

if(NeedActive)
pWnd->ShowWindow(SW_SHOW);


smok_er   (2003-01-24 16:20:00) [31]

>>И я видел. Только окошки были не максимизированы, а аккуратно подстроены под размер главного окна.

Я видел именно максимизированные!


myor   (2003-01-24 15:33:00) [32]

к сожалению, сейчас ничего посмотреть не могу.
похоже, новое окно берет настройки последнего активного (максимизированного) окна и при отображении максимизируется.
попробуй минимизировать текущее активное окно (или упорядочить все окна каскадом) перед открытием (созданием) нового.


REA   (2003-01-24 15:29:00) [33]

Еще хуже выглядит сохранение Desktop - приходится все MDI Child восстановить, чтобы узнать их настоящий размер. Или он где-то еще зарыт?


Игорь Шевченко   (2003-01-24 15:28:00) [34]


> Эту ветку я начал не из-за того, что я хочу сам не знаю
> что. Я реально видел прогу, у которой при переключении окошек
> максимизации не было видно, и которая создает окошки без
> активизации!


И я видел. Только окошки были не максимизированы, а аккуратно подстроены под размер главного окна. Даже сам такую писал.
Но непонятен смысл.


Chubais   (2003-01-24 15:26:00) [35]

тебя ответ
Strumpf © (24.01.03 12:48)
не удовлетворил? других вариантов нет


smok_er   (2003-01-24 15:21:00) [36]

Неужели вопрос уже закрыт?
Ответьте пожалуйста...


smok_er   (2003-01-24 13:29:00) [37]

Strumpf © (24.01.03 12:48)

Большое спасибо! Дома буду пробовать.

myor © (24.01.03 13:11)

>>что, то же самое?
>>прога из репозитория создает и открывает окна каскадом, не >>максимизируя (у меня так было).

Теперь попробуйте максимизировать какое-то окно, после чего попереключаться между окнами через пункты меню, внимательно вглядываясь в окошки. Только вот дело в том, что пример - простейший текстовый редактор, а у меня это браузер и выглядит еще хуже :(, так как дольше этот эффект виден :(

Эту ветку я начал не из-за того, что я хочу сам не знаю что. Я реально видел прогу, у которой при переключении окошек максимизации не было видно, и которая создает окошки без активизации!


myor   (2003-01-24 13:11:00) [38]

smok_er (24.01.03 11:36)
...а как активизировать другое MDI окно?...

еще одно mdi или еще одно child в единственном mdi?
mdiform имеем свойство activemdichild (readonly).
для активации окна есть процедуры next и previous
можеть, хелп поможет?

...Я посмотрел пример в репозитории - там тоже самое!...

что, то же самое?
прога из репозитория создает и открывает окна каскадом, не максимизируя (у меня так было).


Strumpf   (2003-01-24 12:48:00) [39]

Блокируем

SendMessage(Handle,WM_SETREDRAW,0,0);
или
LockWindowUpdate(Handle);

Разблокируем

SendMessage(Handle,WM_SETREDRAW,1,0);
RedrawWindow(Handle,NULL,0,RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN);

или
LockWindowUpdate(0);

соответственно.


smok_er   (2003-01-24 12:48:00) [40]

Игорь Шевченко © (24.01.03 12:47)
Обычно, показ MDI окон сразу максимизированными - дурной тон в дизайне.

Может быть. Но имхо если предыдущая форма была максимизирована, а вновь показываемую сделать обычной - то этот тон будет еще дурнее!


Страницы:   1 2 3

Наверх

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