Eugene |
Отправлено: 27.02.2006, 20:31 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Всем привет!
Прошелся по форуму, а ответ на вопрос не нашел. А вопрос в следующем:
Пожалуйста, объясните кто-нибудь, как создавать форму в dll.
Просто в программе я это могу сделать: создать форму, элементы на ней и протом этим всем управлять. Теперь мне нужно все это делать из dll.
Я пробовал сделать по аналогии, но не получилось. Форма создавалась, а элементы на форме не появлялись. И как делать обработку событий (например, нажатие кнопки на форме)?
Буду благодарен за приведенные примеры или ссылки по теме.
Заранее спасибо!
|
|
Rius |
Отправлено: 28.02.2006, 06:39 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
пример встраивания формы из dll в основную прогу
можно и гораздо проще — в проекте dll-ки создается форма, в экспортируемой функции при вызове эта форма создается и показывается как модальная, после закрытия перед выходом из функции форма удаляется.
еще: набираем "форма в dll" и включаем "Искать все слова".
Отредактировано Rius — 28/02/2006, 09:44
|
|
Guest |
Отправлено: 28.02.2006, 10:31 |
|
Не зарегистрирован
|
QUOTE |
Прошелся по форуму, а ответ на вопрос не нашел.
|
Простите — плохо искали. Обсуждалось неоднократно.
Например тут Dll + Form1->Show() ...
|
|
Gedeon |
Отправлено: 28.02.2006, 14:56 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
ну и на xportal тоже эту тему избили до крови.
|
|
Eugene |
Отправлено: 01.03.2006, 20:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Вроде все работает!
Всем спасибо! |
|
Eugene |
Отправлено: 02.03.2006, 22:27 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
2Rius
Как я уже сказал, все работает. Теперь возникла другая проблема, а именно:
При нажатиях на кнопку на основной форме можно вызвать много дочерних форм из dll. На дочерней форме находится кнопка и в событиях прописаны действия. Вроде бы все нормально, однако, эти события обрабатываются только у последней вызванной формы. Можно ли это как-нибудь исправить? Мне нужно, чтобы события обрабатывались в каждой форме. |
|
Rius |
Отправлено: 03.03.2006, 07:01 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
вот вроде работает
dll:
CODE | DLL_API TWinControl *dGetForm(TApplication *App)
{
TWinControl *wc = new TFormDLL(NULL);
TApplication *AppTmp = Application;
Application = App;
App = AppTmp;
// formdll->Show();
return wc;
}
//---------------------------------------------------------------------------
DLL_API void dKillForm(TApplication *App, TWinControl *wc)
{
if(wc != NULL)
{
// delete formdll;
delete wc;
Application = App;
}
} |
host:
CODE | TWinControl *wc1, *wc2;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//
wc1 = dGetForm(DllApp);
wc1->Left = 10;
wc1->Top = 10;
wc1->Parent = TS1;
wc1->Show();
// f->Align = alClient;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
dKillForm(DllApp, wc1);
}
//--------------------------------------------------------------------------- |
|
|