Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TThread почему ошибка?

2.1K
12 июля 2004 года
bleed
22 / / 05.07.2003
Всем привет,
сегодня пол дня бился, никак не могу понять как сделать чтобы работало:
Есть главная форма(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 почему?
Заранее спасибо.
487
12 июля 2004 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by bleed
Всем привет,
сегодня пол дня бился, никак не могу понять как сделать чтобы работало:
Есть главная форма(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 естественно будет не определен.

2.0K
13 июля 2004 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by ddnh_bc


Если я ни разу не ошибаюсь - то проблема в следующем:
TFSaveBase *FSaveBase= new TFSaveBase(this);

Ты определяешь ЛОКАЛЬНЫЙ указатель на класс - который потом используешь в методе ShowInfo - а в для этого метода FSaveBase естественно будет не определен.




правильно. Строкой TFSaveBase *FSaveBase= new SaveBase(this);

создается один указатель, а в функции
void __fastcall ThSaveBase::ShowInfo()
{
ShowMessage(FSaveBase->Label1->Caption);
}
используется другой. В файле реализации класса TFSaveBase наверняка есть такая строка в самом начале TFSaveBase *FSaveBase;


Вот этот указатель и используется. Если в головном файле убирается строка с криейт форм, то надо для порядка и объявление указателя на эту форму убирать в родном файле, который IDE генерит.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог