Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Вниз

И снова MDI   Найти похожие ветки 

 
Smok_er   (2003-01-23 21:45) [0]

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

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


 
Игорь Шевченко   (2003-01-24 10:24) [1]

Вопрос непонятен


 
smok_er   (2003-01-24 11:11) [2]

Есть форма. На ней несколько максимизированных MDI Child"ов. При переключении между ними (например из меню) поверх текущего окна появляется новое, нами выбранное, и максимизируется. В принципе ерунда, но выглядит весьма некрасиво. Может я не правильно их активирую (методом Show)?
Глянул пример текстового редактора из дистрибутива делфи - там то же самое.
И еще один вопрос - при динамическом создании новой формы она сразу становится активной.
Можно ли этого избежать? Т.е. форма создалась, но не активизировалась?
Пробую сразу после создания Hide, но вылетает ошибка, типа MDI Child не может быть скрытым.


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

smok_er (24.01.03 11:11)

1) Не максимизируй.


> Можно ли этого избежать? Т.е. форма создалась, но не активизировалась?


Нельзя. Это закон MDI.

Сдается мне, проблемы с дизайном имеются...


 
Бук   (2003-01-24 11:24) [4]

А если в onClose Child формы написать caMinimize и после содания ее сразу же закрыть? По идее она должна минимизироваться.


 
myor   (2003-01-24 11:31) [5]

2 smok_er
...При переключении между ними...активирую (методом Show)...

а зачем show для уже отображаемого окна?
или это для еще одного (нового)?

нужно сделать активным нужное окно

посмотри пример mdi в репозитории


 
smok_er   (2003-01-24 11:36) [6]

myor © (24.01.03 11:31)

а как активизировать другое MDI окно?
Activate выдает ошибку :(


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

Нельзя. Это закон MDI.
Сдается мне, проблемы с дизайном имеются...

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


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

В примере окна через Show активизируются ?


 
Chubais   (2003-01-24 12:10) [8]


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

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


 
smok_er   (2003-01-24 12:32) [9]

>>если ты имеешь в виду, что перед переключением в новое окно >>показывается оно нормальным, а затем максимизируется-то так
>>устроен MDI

Именно!

>>нужно блокировать обновление окна, открывать нужное, а потом >>рзблокироватьь обновление

Интересно! А пример можно?


 
Игорь Шевченко   (2003-01-24 12:47) [10]

Обычно, показ MDI окон сразу максимизированными - дурной тон в дизайне.


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

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

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


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

Блокируем

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);

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


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

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

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

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

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



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

Strumpf © (24.01.03 12:48)

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

myor © (24.01.03 13:11)

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

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

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


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

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


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

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


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


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


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


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

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


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

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


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

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

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


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

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


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);



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

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


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

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


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

smok_er (24.01.03 16:27)

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


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

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

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


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

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

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


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

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

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

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


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

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


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

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

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

Chubais © (27.01.03 12:07)
:tongue:



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

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

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

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

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

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


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

smok_er (27.01.03 12:34)

Дай полный пример на С. Из того, что ты дал не видно ничего, что относится к MDI.


 
smok_er   (2003-01-27 13:42) [32]

Я еще раз посмотрел исходник. В первый раз дал полностью, с небольшими не играющими роли изменениями.
Даю еще раз:

if(!found)
{
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(bForceActive)
pWnd->ShowWindow(SW_SHOW);
}


 
Игорь Шевченко   (2003-01-27 13:52) [33]

smok_er (27.01.03 13:42)

Либо ты даешь не все, либо это не MDI


 
smok_er   (2003-01-27 14:26) [34]

if (!pWnd->Create(_T("ChildFrame"), "",
WS_CHILD | WS_OVERLAPPEDWINDOW, rectDefault, this))

WS_CHILD Creates a child window. Cannot be used with the WS_POPUP style. (C) MSDN

Да я сам в этих исходниках запутался, но окно создается именно здесь.


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

Ты даешь мало исходников. По этой части я не вижу, что создается именно MDIChild. До тех пор, пока ты не дашь отсальные исходники, разговаривать не о чем.


 
smok_er   (2003-01-27 16:32) [36]

Давайте я закину их на мыло. Все не выложишь их очень много :(


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

Ради бога. Или на сайт и ссылочку


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

smok_er (27.01.03 16:32)

Почта отменяется.

Hotmail automatically scans all attachments using McAfee.

Name of File Virus Scan Result
myie32src.zip Unknown virus scanner failure Virus Found


Вирусы, дружище, рассылай другим путем, плз


 
gsu   (2003-01-27 17:32) [39]

И мне пошли (-:|~


 
smok_er   (2003-01-27 18:21) [40]

Блин, я в шоке
там только cpp и h файлы.
Надо послать McAfee в одно место с такой проверкой на вирусы. Если уж они каждый зипарь за вирус принимают, это просто забавно.
Да и к тому же, Игорь, какой мне смысл Вас вирусить, если я еще не раз буду общаться на этом форуме?

myie32src.zip Unknown virus scanner failure Virus Found

А почему же этот крутой mmcafree не написал название вируса?



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.015 c
1-15684
OlDemon
2003-01-27 13:14
2003.02.06
Запись в свой exe файл


6-15788
brestmarket
2002-12-09 00:48
2003.02.06
Как произвести подмену image в WebBrowser при наведении mouse?


1-15648
AFrolov
2003-01-29 12:37
2003.02.06
Как избавиться от сообщения, что к COM серверу еще подключены


1-15534
sers
2003-01-27 11:10
2003.02.06
Эффекты с графикой


9-15387
Денис Валерьевич
2002-08-19 22:47
2003.02.06
Слепить два спрайта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский