Re: Отобразить на форме Tlabel из dll
От: pdn_mail  
Дата: 09.10.08 05:52
Оценка:
Ну ладно, хорошо, зайдем с другого боку.
Если разместить нижеприведенный код в коде приложения главной формы, то он работает
TForm1 *F=Form1;
TLabel *debuglabelmc=new TLabel(F);
debuglabelmc->Parent=F;
debuglabelmc->Top=F->Label1->Top+60; 
debuglabelmc->Left=F->Label1->Left;  
debuglabelmc->Caption="test";
debuglabelmc->BringToFront();
debuglabelmc->Update();
debuglabelmc->Show();


Если его помеcтить в dll
showlabel(TForm *MainForm)
{
TForm1 *F=(TForm1*)MainForm;
TLabel *debuglabelmc=new TLabel(F);
debuglabelmc->Parent=F;
debuglabelmc->Top=F->Label1->Top+60; 
debuglabelmc->Left=F->Label1->Left;  
debuglabelmc->Caption="test";
debuglabelmc->BringToFront();
debuglabelmc->Update();
debuglabelmc->Show();
}

то debuglabelmc->Parent=F; вызывает ошибку
Project application.exe raised exception class EConvertError with message 'Cannot assing a TFont to a TFont'. Process stoped. Use Step or Run to continue.
Причем любым другим свойствам объекта дает присваивать значения и вызываются методы нормально.

Да блин, опять косяк какой-то. а теперь то что надо? почему он не дает присвоить значение свойства Parent созданного в dll объекта? только из-за того что Owner у него при создании была главная форма приложения?

Что интересно в таком варианте все работает из dll, хоть и вылетает на присваивании Parent, но debuglabelmc на форме появляется
showlabel(TForm *MainForm)
{
TForm1 *F=(TForm1*)MainForm;
TLabel *debuglabelmc=new TLabel(F);
debuglabelmc->Top=F->Label1->Top+60; 
debuglabelmc->Left=F->Label1->Left;  
debuglabelmc->Caption="test";
debuglabelmc->Update();
debuglabelmc->Parent=F;
debuglabelmc->BringToFront();
debuglabelmc->Show();
}


Получается что для Label присваивать значение Parent не надо и последующие строки тоже не обязательны. Достаточно для отображения на форме следующего кода в dll ?
showlabel(TForm *MainForm)
{
TForm1 *F=(TForm1*)MainForm;
TLabel *debuglabelmc=new TLabel(F);
debuglabelmc->Top=F->Label1->Top+60; 
debuglabelmc->Left=F->Label1->Left;  
debuglabelmc->Caption="test";
debuglabelmc->Update();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.