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

Ваш аккаунт

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

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

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

Не получается передать указатель на Форму

2.4K
25 августа 2003 года
slego
25 / / 19.08.2003
Не получается объявить функции в C++ Builder:

в тексте модуля прописываю
void __fastcall TUserForm::Diagram(TChartSeries *pSeries)
{
...
}
void __fastcall TUserForm::Diagram(TDiagramForm *pDigramForm);
{
...
}

А в заголовочном файле:
public:
void __fastcall Diagram(TChartSeries *pSeries);
void __fastcall Diagram(TDiagramForm *pDigramForm);

:( В заголовочном файле на месте этих объявленных функций вылазит ошибка
[C++ Error] choice.h(72): E2293 ) expected.

Причем, если по аналогии проделать, допустим, подобную "процедуру" с классом метки:
void __fastcall TUserForm::Diagram(TLabel *plab)
{
...
}
и соответственно объявить в заголовочном файле
void __fastcall Diagram(TLabel *plab);
то всё работает.
293
25 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Ну вопервых подключи файлы где у тебя объявлены эти классы
а во вторых вместо
void __fastcall Diagram(TChartSeries *pSeries);
void __fastcall Diagram(TDiagramForm *pDigramForm);

лучше пиши
void __fastcall Diagram(void *pSeries);
void __fastcall Diagram(void *pDigramForm);
и внутри функций делай так
TDiagramForm *a = new TDiagramForm(0);
a = (TDiagramForm *) pDigramForm
3
25 августа 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by SEDEGOFF
Ну вопервых подключи файлы где у тебя объявлены эти классы
а во вторых вместо
void __fastcall Diagram(TChartSeries *pSeries);
void __fastcall Diagram(TDiagramForm *pDigramForm);

лучше пиши
void __fastcall Diagram(void *pSeries);
void __fastcall Diagram(void *pDigramForm);
и внутри функций делай так
TDiagramForm *a = new TDiagramForm(0);
a = (TDiagramForm *) pDigramForm



Использование void* является плохим стилем разработки програм на С++, т.к. здесь налицо пренебрежение типовой безопасностью.

293
25 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Цитата:
Originally posted by Green


Использование void* является плохим стилем разработки програм на С++, т.к. здесь налицо пренебрежение типовой безопасностью.



Согласен. Но зато удобно

3
25 августа 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by SEDEGOFF


Согласен. Но зато удобно



Согласен :D

2.4K
25 августа 2003 года
slego
25 / / 19.08.2003
Цитата:
Originally posted by SEDEGOFF


Согласен. Но зато удобно



К тому же мне надо не совсем это.
Создается указатель на форму
TDiagramForm *pDiagramForm = new TDiagramForm(this);
а затем вызываются процедуры для рисования диаграм на этой формы
/*void*/ FDiagram1(pDiagramForm);
/*void*/ FDiagram2(pDiagramForm);

для того чтобы создавать диаграммы на ОДНОЙ форме.
А если сделать, как Вы мне подсказали, то при вызове каждой функции будет создаваться новая форма. Это раз. А два мне не очень нравится такой подход: почему нужно создавать посреднический указатель, ведь в приведенном мной примере для случая TLabel все работает. Почему же нельзя объявить указатель на мою пресловутую pDiagramForm?????????
void __fastcall TUserForm::FDiagram1(TDiagramForm *pDiagramForm);

3
25 августа 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by slego


К тому же мне надо не совсем это.
Создается указатель на форму
TDiagramForm *pDiagramForm = new TDiagramForm(this);
а затем вызываются процедуры для рисования диаграм на этой формы
/*void*/ FDiagram1(pDiagramForm);
/*void*/ FDiagram2(pDiagramForm);

для того чтобы создавать диаграммы на ОДНОЙ форме.
А если сделать, как Вы мне подсказали, то при вызове каждой функции будет создаваться новая форма. Это раз. А два мне не очень нравится такой подход: почему нужно создавать посреднический указатель, ведь в приведенном мной примере для случая TLabel все работает. Почему же нельзя объявить указатель на мою пресловутую pDiagramForm?????????
void __fastcall TUserForm::FDiagram1(TDiagramForm *pDiagramForm);



Если у тебя в коде так же, как и в примере на форуме, то компилиться не будет из-за точки с запятой:

void __fastcall TUserForm:iagram(TDiagramForm *pDigramForm)[COLOR=red];[/COLOR]
{
...
}

293
25 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Цитата:
Originally posted by slego

/*void*/ FDiagram1(pDiagramForm);
/*void*/ FDiagram2(pDiagramForm);


Как я уже сказал там где объявлены и реализуються эти фунцуии , подключи файл pDiagramForm.h

И во вторых форма не будет создаваться ДВА раза
в этих функциях ты как бы создаешь форму, но потом указываешь адрес нужной тебе формы. Только после использования не вздумай сделать delete а то удалишь нужную (рабочую) форму. Просто в конце пиши p=NULL; и еще как вариант везде используй (ничего не создавая)
(TDiagramForm *) pDigramForm->Label1->Caption = "";

Да и еще, некоторые объекты классов VCL нельзя использовать как параметры. Но ссылку на форму я так и передавал

2.4K
25 августа 2003 года
slego
25 / / 19.08.2003
Всем большое спасибо за помощь!
455
29 августа 2003 года
vitorg
55 / / 20.05.2000
Цитата:
Originally posted by slego
Всем большое спасибо за помощь!

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