C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Form into dll, Создание формы из DLL
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



Вроде все работает!
Всем спасибо! biggrin.gif
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);
}
//---------------------------------------------------------------------------


User Attached Image Скачать файл
PluginForm.rar



Вернуться в Вопросы программирования в C++Builder