DLL_EXPORT void SetParentForm (TForm* frm)//експортируемая ф-ция
{
frm->Parent = FormMain->Parent;
frm->Show(); //frm->Visible = true;
..
}
Проблема с копированием объектов в DLL
История такая:
Беру указатель TForm из DLL
Присваиваю Parent этой Формы панели в другой DLL
Все компоненты которые лежали на этой форме не могут переключаться между собой. Т.Е. не обрабатывается табуляция. Что делать? Подскажите пожалуйста.
:mad:
Я у себя попробовал, то что ты говориш - всё пучком, Tab работает...
Цитата: MYTH777
:mad:
История такая:
Беру указатель TForm из DLL
Присваиваю Parent этой Формы панели в другой DLL
Все компоненты которые лежали на этой форме не могут переключаться между собой. Т.Е. не обрабатывается табуляция. Что делать? Подскажите пожалуйста.
:mad:
История такая:
Беру указатель TForm из DLL
Присваиваю Parent этой Формы панели в другой DLL
Все компоненты которые лежали на этой форме не могут переключаться между собой. Т.Е. не обрабатывается табуляция. Что делать? Подскажите пожалуйста.
:mad:
Может быть твоя форма просто не активна?
Цитата: Termi_uc
Прошли проект.
Я у себя попробовал, то что ты говориш - всё пучком, Tab работает...
Я у себя попробовал, то что ты говориш - всё пучком, Tab работает...
Короче бадяга такая
==1.dll==
На форме есть edit-ы и т.д.
Код:
==2.dll==
Код:
SetParentForm(MainForm2);//Передача в 1-ю DLL указателя на форму
...
...
В такой конструкции не работает табуляция и есть еще глюки с Edit-ми,
когда жмешь пр. кн. мыши. Выскакивает сообщение что-типо "Not has parent window".
Цитата: MYTH777
Код:
DLL_EXPORT void SetParentForm (TForm* frm)//експортируемая ф-ция
{
frm->Parent = FormMain->Parent;
frm->Show(); //frm->Visible = true;
..
}
{
frm->Parent = FormMain->Parent;
frm->Show(); //frm->Visible = true;
..
}
А ты уверен, что FormMain->Parent существует.:confused: Хотя даже если FormMain->Parent == NULL, не должны лшибки лезть.
Проверь существуетли FormMain, на момент выполнения SetParentForm, и есть ли у него FormMain->Parent.
Или пиши так
Код:
DLL_EXPORT void SetParentForm (TForm* frm)//експортируемая ф-ция
{
if(!FormMain || !fmr){/*ShowMessage("no one of windows"); */return;}
frm->Parent = FormMain;//FormMain->Parent;
frm->Show(); //frm->Visible = true;
..
}
{
if(!FormMain || !fmr){/*ShowMessage("no one of windows"); */return;}
frm->Parent = FormMain;//FormMain->Parent;
frm->Show(); //frm->Visible = true;
..
}
и будет тебе счастье:D
или так
Код:
DLL_EXPORT void SetParentForm (HWND* wnd)//експортируемая ф-ция
{
if(!FormMain || !wnd){/*ShowMessage("no one of windows"); */return;}
::SetParent(wnd, FormMain->Handle);//FormMain->Parent->Handle;
::ShowWindow(wnd, SW_SHOW);
..
}
{
if(!FormMain || !wnd){/*ShowMessage("no one of windows"); */return;}
::SetParent(wnd, FormMain->Handle);//FormMain->Parent->Handle;
::ShowWindow(wnd, SW_SHOW);
..
}
И вообще, если программа которая запускает эти 2 DLL'ки знает об обоих формах, то лучше в программе напиши процедурку типа
Код:
void SetParentForm(HWND* child, HWND* newParent);