Не получается передать указатель на Форму
в тексте модуля прописываю
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);
то всё работает.
а во вторых вместо
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 __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* является плохим стилем разработки програм на С++, т.к. здесь налицо пренебрежение типовой безопасностью.
Использование void* является плохим стилем разработки програм на С++, т.к. здесь налицо пренебрежение типовой безопасностью.
Согласен. Но зато удобно
Согласен. Но зато удобно
Согласен :D
Согласен. Но зато удобно
К тому же мне надо не совсем это.
Создается указатель на форму
TDiagramForm *pDiagramForm = new TDiagramForm(this);
а затем вызываются процедуры для рисования диаграм на этой формы
/*void*/ FDiagram1(pDiagramForm);
/*void*/ FDiagram2(pDiagramForm);
для того чтобы создавать диаграммы на ОДНОЙ форме.
А если сделать, как Вы мне подсказали, то при вызове каждой функции будет создаваться новая форма. Это раз. А два мне не очень нравится такой подход: почему нужно создавать посреднический указатель, ведь в приведенном мной примере для случая TLabel все работает. Почему же нельзя объявить указатель на мою пресловутую pDiagramForm?????????
void __fastcall TUserForm::FDiagram1(TDiagramForm *pDiagramForm);
К тому же мне надо не совсем это.
Создается указатель на форму
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]
{
...
}
/*void*/ FDiagram1(pDiagramForm);
/*void*/ FDiagram2(pDiagramForm);
Как я уже сказал там где объявлены и реализуються эти фунцуии , подключи файл pDiagramForm.h
И во вторых форма не будет создаваться ДВА раза
в этих функциях ты как бы создаешь форму, но потом указываешь адрес нужной тебе формы. Только после использования не вздумай сделать delete а то удалишь нужную (рабочую) форму. Просто в конце пиши p=NULL; и еще как вариант везде используй (ничего не создавая)
(TDiagramForm *) pDigramForm->Label1->Caption = "";
Да и еще, некоторые объекты классов VCL нельзя использовать как параметры. Но ссылку на форму я так и передавал
Всем большое спасибо за помощь!