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

Вниз

Может Message?   Найти похожие ветки 

 
Dmk   (2002-07-01 04:27) [0]

Подскажите плз господа! Куда передается управление после активации MDI формы? И можно ли назначить свой обработчик дальнейших событий? Может Message какой нибудь окно посылает?
Хотя последний который я видел используя WinSight был WM_MDIGETACTIVE. А что дальше происходит?


 
SPeller   (2002-07-01 07:32) [1]

Передается контролу какому-нибудь. Как в обычном окне всё происходит.


 
Dmk   (2002-07-02 00:40) [2]

Хотелось бы удостовериться, что MDIForm уже активна и готова к созданию Child"ов. Может через потоки удобнее это сделать?
Т.е. один поток содает форму, другой управляет ей. Хотя наверняка есть другие способы.
А задача такая: Запустить приложение с параметром, создать MDI форму, а после, если есть параметр создать Child"а.
Беда в том, что если создавать Child"а в одном из событий MainForm: OnShow, OnActivate возникает ошибка. Can"t create Child window, no MDI form currently active.


 
Игорь Шевченко   (2002-07-02 09:53) [3]

MainForm должна иметь стиль fsMDIForm :-)))


 
Dmk   (2002-07-03 01:24) [4]

Игорь! Она у меня всегда fsMDIForm :)
Только не понятно почему эта ошибка появляется?! :|
Дело в том, что Child форма наследник класса TForm -> TDrawForm, а MainForm -> TForm. Может из-за этого не хочет?


 
Игорь Шевченко   (2002-07-03 09:51) [5]

Dmk © (03.07.02 01:24)


> Запустить приложение с параметром, создать MDI форму, а
> после, если есть параметр создать Child"а


Это как прикажете понимать ? Что MDI-формы нету ?

Если быть более точным, то форма со стилем fsMDIForm должна быть Application.MainForm. Судя по сообщению об ошибке, у вас это условие не выполняется.

С уважением,


 
Dmk   (2002-07-04 01:54) [6]

К сожалению у меня c MainForm все в порядке. Она MDIForm.
Вот что я делаю:

1. Запускаю приложение с параметром.
2. В событии OnShow или OnActivate проверяю есть ли параметр. Если есть, то загружаю указанный файл. Определяю всякую всячину для будущей Child формы. В этом же событии пытаюсь создать Child форму.
3. После появляется ошибка.

Я хотел сделать как в Фотошопе. Появляется MainForm. Потом читается файл, а затем создается Child. Но у меня MainForm до чтения файла даже не показывается. А если дождаться появления формы то куда после ПОЛНОЙ активации передается управление?
Если WindowProc, то для начала чтения все равно нельзя узнать активировалась форма или нет. Последнее сообщение которое удалось отловить - это WM_MDIGETACTIVE. Но и после него MainForm не активирована.А событий в которых можно создать Child больше нет.

ЧТО мне делать?


 
Dmk   (2002-07-04 02:06) [7]

Ээх. Пришлось сделать открытие так:

Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
-> OpenOnRequest; {Функция чтения}
Application.CreateForm(TChannelForm, ChannelForm);
Application.CreateForm(TInfForm, InfForm);
Application.CreateForm(TSepForm, SepForm);
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TSupFilesForm, SupFilesForm);
Application.CreateForm(TPrintForm, PrintForm);
Application.CreateForm(TBatchForm, BatchForm);
Application.CreateForm(TDirForm, DirForm);
Application.CreateForm(TColorSettingsForm, ColorSettingsForm);
Application.CreateForm(TxLutForm, xLutForm);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TICC_Form, ICC_Form);
Application.CreateForm(TiForm, iForm);
Application.CreateForm(TcForm, cForm);
Application.Run;
//...............................................
Корректно ли так делать?


 
SPeller   (2002-07-04 02:33) [8]

Где-то здесь был пример как дождаться завершения загрузки приложения.


 
Игорь Шевченко   (2002-07-04 10:17) [9]

Создание Child надо делать после завершения функции Application.CreateForm(TMainForm, MainForm) так как она устанавливает Application.MainForm, если этот вызов стоит первым.

До того, в событиях MainForm не гарантируется установка Application.MainForm в корректное значение.

Лучше всего на событии FormCreate/Show/Activate сказать PostMessage(Self.Handle, UM_CREATEMYCOOLCHILD, ChildParam1, ChildParam2) и написать обработчик этого сообщения. Тогда оно выберется из очереди сообщений в тот момент, когда Application/MainForm будет установлено в значение, позволяющее создавать MDIChild-формы.

С уважением,


 
msts   (2002-07-04 11:11) [10]

если нужно выполнить действие после загрузки программы
кинь на главную форму TTimer с малым значение задержки и назначь событие - в обработчике останови таймер а далее делай что нужно
такой подход более соответсвует идеологии Delphi



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

Форум: "WinAPI";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
14-14255
~Rand~
2002-08-07 23:36
2002.09.05
Restorator


1-14014
Hamlet
2002-08-23 09:56
2002.09.05
dll и основная программа


1-13989
Mr.Kirya
2002-08-25 22:34
2002.09.05
Панель


14-14235
alex_white
2002-08-10 13:13
2002.09.05
Ищу и не могу найти


7-14317
МитяЙ2
2002-06-22 09:57
2002.09.05
Клава...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский