Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: CL | DM;

Вниз

Может 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 вся ветка

Текущий архив: 2002.09.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-14130
hotKEY
2002-08-22 09:27
2002.09.05
Как считать и преобразовать в строковый вид параметр Hotkey?


14-14252
Joy
2002-08-11 16:45
2002.09.05
Люди, помогите, pls....


1-14023
AndreFJ
2002-08-26 14:39
2002.09.05
Как использовать анимированный курсор в программе?


3-13974
RDA
2002-08-15 09:45
2002.09.05
Деревья в специализированных компонентах


3-13953
sel
2002-08-16 11:33
2002.09.05
экспорт Excel