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

Вниз

Главное MDI-окно в DLL. Возможно ли?   Найти похожие ветки 

 
Viking   (2003-12-10 15:17) [0]

Добрый день, господа!

Столкнулся вот с какой проблемой:

Вызывается MDI-приложение из DLL-библиотеки.
Главная форма создаётся с типом fsMDIForm.
Но при вызове дочерних форм получаю следующую ошибку:
"Cannot create form. No MDI forms are currently active".

Причем дело не в передаче MDI-child"у
параметра Application!
Как то неправильно ведёт себя именно ГЛАВНАЯ форма!

Вот как я её создаю в DLL.

procedure RunMyForm(параметры);StdCall;
var
MainForm:TMainForm;
begin
MainForm := TMainForm.Create(Application);
with MainForm do
begin
try
Caption := TD_PC;
Show;
except
on e:exception do
ShowExceptionMsg(E);
end;
end;

end;

Создание MDI-child формы приводит к ошибке.

procedure TMainForm.CreateChildClick(Sender: TObject);
var
TestMDIChild:TTestMDIChildForm;
begin
inherited;
TestMDIChild := TTestMDIChildForm.Create(Self);

ChildForm.Caption := "Окно № "+IntToStr(MDIChildCount));

end;

Причем когда всё это делается в EXE-файле - всё работает нормально!

В чем может быть дело?
Заранее спасибо!


 
Viking   (2003-12-10 15:46) [1]

Уточняю вопрос.

Цитата
"Когда вы пытаетесь отобразить дочернюю форму MDI, VCL проверяет, является ли действительным свойство MainForm объекта Application."

А для DLL - Application.MainForm пустое!
Что же получается?!
Приплыли?!

И форма откуда вызывается моя DLL-тоже не MDI.

То есть просто нельзя запустить MDI-приложение из DLL?!
Как же так?!!!!


 
cdadmitriy   (2003-12-10 16:48) [2]

попробуй

procedure RunMyForm(Var Application:TApplication);StdCall;
....
Application.MainForm:=MainForm;

....


 
Viking   (2003-12-10 17:06) [3]

2 cdadmitriy:

Просто так
Application.MainForm:=MainForm;
нельзя, т.к.

Application.MainForm "read only" свойство!

Но!
Я кажется разобрался!

Вместо
// MainForm := TMainForm.Create(Application);
использую
Application.CreateForm(TMainForm, MainForm);

И всё работает!
При первом вызове
Application.CreateForm как раз и устанавливается значение
Application.MainForm!

Правда почему то теперь "отвалились" стандартные action (типа WindowsCoscad, TileHorizontally e.t.c.) для работы с MDI - окнами... :-(

Пришлось их рисовать вручную...

Но это уже совсем другая история...


 
Viking   (2003-12-11 13:09) [4]

Вопрос в догонку!

Всё вышеуказанное работает, но... только когда MDIMain форма вызавается из DLL через ShowModal !

Как вызвать эту же форму не в модальном режиме?
Чтобы можно было переключиться обратно в родительскую форму после запуска!

Нелп миии!!!



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

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

Наверх




Память: 0.45 MB
Время: 0.011 c
1-75227
Ig
2003-12-10 21:31
2003.12.23
Записать значения в ListBox Из Реестра?


14-75332
От_сишника
2003-12-01 09:17
2003.12.23
EAccessViolation ? в С++


8-75275
Изя
2003-08-26 13:13
2003.12.23
PNG в JPEG реальность?


4-75449
Юрий Ж.
2003-10-28 16:05
2003.12.23
TabControl на WinAPI?


14-75325
Вованчик
2003-12-01 11:22
2003.12.23
Сервер БД





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