Форум: "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