TThread почему ошибка?
сегодня пол дня бился, никак не могу понять как сделать чтобы работало:
Есть главная форма(FMain) на ней есть кнопка BitBtn2 по нажатию которой происходит след:
void __fastcall TFMain::BitBtn2Click(TObject *Sender)
{
TFSaveBase *FSaveBase= new TFSaveBase(this);
FSaveBase->Show();
}
где TFSaveBase другая форма на которой находится компонент Label1, как уже поняли создается динамически. При ее событии Show:
void __fastcall TFSaveBase::FormShow(TObject *Sender)
{
ThSaveBase * THSave = new ThSaveBase(false);
THSave->FreeOnTerminate=true;
}
где ThSaveBase - поток
соответственно
void __fastcall ThSaveBase::Execute()
{
Synchronize(ShowInfo);
}
void __fastcall ThSaveBase::ShowInfo()
{
ShowMessage(FSaveBase->Label1->Caption);
}
Так вот при запуске приложения ругается(EAccessViolation) на FSaveBase->Label1->Caption в последней функции так вот если функция создается не динамически(создается еще в WinMain) то все ок, а если динамически то ошибка, я так понимаю он не может определить обьект Label почему?
Заранее спасибо.
Всем привет,
сегодня пол дня бился, никак не могу понять как сделать чтобы работало:
Есть главная форма(FMain) на ней есть кнопка BitBtn2 по нажатию которой происходит след:
void __fastcall TFMain::BitBtn2Click(TObject *Sender)
{
TFSaveBase *FSaveBase= new TFSaveBase(this);
FSaveBase->Show();
}
где TFSaveBase другая форма на которой находится компонент Label1, как уже поняли создается динамически. При ее событии Show:
void __fastcall TFSaveBase::FormShow(TObject *Sender)
{
ThSaveBase * THSave = new ThSaveBase(false);
THSave->FreeOnTerminate=true;
}
где ThSaveBase - поток
соответственно
void __fastcall ThSaveBase::Execute()
{
Synchronize(ShowInfo);
}
void __fastcall ThSaveBase::ShowInfo()
{
ShowMessage(FSaveBase->Label1->Caption);
}
Так вот при запуске приложения ругается(EAccessViolation) на FSaveBase->Label1->Caption в последней функции так вот если функция создается не динамически(создается еще в WinMain) то все ок, а если динамически то ошибка, я так понимаю он не может определить обьект Label почему?
Заранее спасибо.
Если я ни разу не ошибаюсь - то проблема в следующем:
TFSaveBase *FSaveBase= new TFSaveBase(this);
Ты определяешь ЛОКАЛЬНЫЙ указатель на класс - который потом используешь в методе ShowInfo - а в для этого метода FSaveBase естественно будет не определен.
Если я ни разу не ошибаюсь - то проблема в следующем:
TFSaveBase *FSaveBase= new TFSaveBase(this);
Ты определяешь ЛОКАЛЬНЫЙ указатель на класс - который потом используешь в методе ShowInfo - а в для этого метода FSaveBase естественно будет не определен.
правильно. Строкой TFSaveBase *FSaveBase= new SaveBase(this);
создается один указатель, а в функции
void __fastcall ThSaveBase::ShowInfo()
{
ShowMessage(FSaveBase->Label1->Caption);
}
используется другой. В файле реализации класса TFSaveBase наверняка есть такая строка в самом начале TFSaveBase *FSaveBase;
Вот этот указатель и используется. Если в головном файле убирается строка с криейт форм, то надо для порядка и объявление указателя на эту форму убирать в родном файле, который IDE генерит.