![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
И снова MDI [D6, WinXP]
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 окон сразу максимизированными - дурной тон в дизайне.
Может быть. Но имхо если предыдущая форма была максимизирована, а вновь показываемую сделать обычной - то этот тон будет еще дурнее!