Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
На форме есть 6 кнопок, нажатие на которые вызывает создание нужного фрейма
Пример одной из кнопок, остальные по аналогии.

void __fastcall TfmMain::sSpeedButton1Click(TObject *Sender)
{
OpenFrame(FrameMenuDirectory, true);
}


FrameMenuDirectory - созданный фрейм

void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
DM->CurrentMenuFrame = new FrameType(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;
}


DM - DataModule, в нем
TFrame *CurrentMenuFrame;

выходят ошибки:
[BCC32 Error] unMain.cpp(122): E2303 Type name expected
unMain.cpp(115): parsing: void _fastcall TfmMain::OpenFrame(TFrame *,bool)
[BCC32 Error] unMain.cpp(122): E2034 Cannot convert 'int *' to 'TFrame *'
unMain.cpp(115): parsing: void _fastcall TfmMain::OpenFrame(TFrame *,bool)
[BCC32 Error] unMain.cpp(122): E2379 Statement missing ;
unMain.cpp(115): parsing: void _fastcall TfmMain::OpenFrame(TFrame *,bool)

Подскажите в чем может проблема
17 ноя 20, 14:06    [22233723]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

sidiscom
Подскажите в чем может проблема

Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.

Posted via ActualForum NNTP Server 1.5

17 ноя 20, 14:13    [22233738]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
Dimitry Sibiryakov

sidiscom
Подскажите в чем может проблема

Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.



void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
DM->CurrentMenuFrame = new TFrame FrameType(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;
}


Таким образом?
Как правильно написать на С++ строку Delphi
DM.CurrentMenuFrame := FrameType.Create(Self);
?
17 ноя 20, 17:06    [22233970]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

sidiscom
Таким образом?

Нет. Читай документацию вместо метода тыка.

Posted via ActualForum NNTP Server 1.5

17 ноя 20, 17:12    [22233977]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
bk0010
Member

Откуда:
Сообщений: 5001
Dimitry Sibiryakov
Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.
TFrame - тип (объявление), место в памяти не занимает (если забыть о переменных класса и прочих RTTI), по нему new понимает, сколько байт нужно выделить (ну, и еще кое-что, что сейчас не важно)
FrameType - переменная, конкретный кусок памяти, содержащий ссылку на класс TFrame, просто адрес в памяти, зачем он new?
void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
DM->CurrentMenuFrame = new TFrame(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;
}
17 ноя 20, 22:44    [22234234]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
bk0010
Dimitry Sibiryakov
Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.
TFrame - тип (объявление), место в памяти не занимает (если забыть о переменных класса и прочих RTTI), по нему new понимает, сколько байт нужно выделить (ну, и еще кое-что, что сейчас не важно)
FrameType - переменная, конкретный кусок памяти, содержащий ссылку на класс TFrame, просто адрес в памяти, зачем он new?
void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
DM->CurrentMenuFrame = new TFrame(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;
}


хочу создать новый фрейм с указаным именем
18 ноя 20, 11:42    [22234449]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
egorych
Member

Откуда: и зачем;
Сообщений: 4809
sidiscom
хочу создать новый фрейм с указаным именем

void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
    FrameType = new TFrame(MenuPanel);
    DM->CurrentMenuFrame = FrameType;
    DM->CurrentMenuFrame->Parent = MenuPanel;
}
так?
18 ноя 20, 12:14    [22234472]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
egorych
sidiscom
хочу создать новый фрейм с указаным именем

void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
    FrameType = new TFrame(MenuPanel);
    DM->CurrentMenuFrame = FrameType;
    DM->CurrentMenuFrame->Parent = MenuPanel;
}
так?


Ошибки пропадают, приложение компилируется, но фрейм не отображается.

Если пишу так, то фрейм отображается
DM->CurrentMenuFrame = new TFrameMenuDirectory(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;



если так, то фрейм не отображается
OpenFrame(FrameMenuDirectory, true);

void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
    FrameType = new TFrame(MenuPanel);
    DM->CurrentMenuFrame = FrameType;
    DM->CurrentMenuFrame->Parent = MenuPanel;
}
18 ноя 20, 13:04    [22234533]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
egorych
Member

Откуда: и зачем;
Сообщений: 4809
sidiscom, так напиши
 FrameType = new TFrameMenuDirectory( MenuPanel );
кто ж кроме тебя знает, какой именно фрейм ты создаёшь)
18 ноя 20, 14:54    [22234635]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

egorych
кто ж кроме тебя знает, какой именно фрейм ты создаёшь)

Фишка в том, что он и сам не знает. Ему тип фрейма должен приходить в параметре, но в С++
нет такой фичи, как указатель на тип, он есть только в Дельфи и, соответственно, Билдере.
А потому - надо читать документацию.

Posted via ActualForum NNTP Server 1.5

18 ноя 20, 15:08    [22234652]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
Dimitry Sibiryakov

egorych
кто ж кроме тебя знает, какой именно фрейм ты создаёшь)

Фишка в том, что он и сам не знает. Ему тип фрейма должен приходить в параметре, но в С++
нет такой фичи, как указатель на тип, он есть только в Дельфи и, соответственно, Билдере.
А потому - надо читать документацию.


Спасибо.
Значит задача была заранее обречена на провал. Получается, что одной функцией я не смогу реализовать создание различных фреймов, которые указываю в параметре функции.
18 ноя 20, 16:26    [22234729]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

sidiscom
Получается, что одной функцией я не смогу реализовать создание различных фреймов, которые
указываю в параметре функции.

У других это как-то получается (например, при вызове Application->CreateForm()), но ты,
наверное, да, не сможешь.

Posted via ActualForum NNTP Server 1.5

18 ноя 20, 16:59    [22234768]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
Dimitry Sibiryakov

sidiscom
Получается, что одной функцией я не смогу реализовать создание различных фреймов, которые
указываю в параметре функции.

У других это как-то получается (например, при вызове Application->CreateForm()), но ты,
наверное, да, не сможешь.


Согласен, очень слаб в этом.
Вы писали, (но в С++ нет такой фичи, как указатель на тип,)
как тогда передать в Application->CreateForm()) какой нужно?
18 ноя 20, 17:29    [22234784]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

sidiscom
Вы писали, (но в С++ нет такой фичи, как указатель на тип,)
как тогда передать в Application->CreateForm()) какой нужно?

Так, как написано в документации в Билдеру, который не совсем С++.

Posted via ActualForum NNTP Server 1.5

18 ноя 20, 17:42    [22234795]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
Мне нужно использовать в Application->CreateForm())
GetClass(), чтобы получить указатель на класс?
19 ноя 20, 11:37    [22235186]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
sidiscom
Мне нужно использовать в Application->CreateForm())
GetClass(), чтобы получить указатель на класс?
передай в параметре число.
Потом если 1 то создать фрейм Паровоз. Если 2 то Самолет.
Пробуй. И код сюда.
19 ноя 20, 13:17    [22235273]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

Нет, сначала надо использовать мозг чтобы получить знания из документации.

Posted via ActualForum NNTP Server 1.5

19 ноя 20, 13:24    [22235282]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
sidiscom
Member

Откуда:
Сообщений: 133
Dimitry Sibiryakov

Нет, сначала надо использовать мозг чтобы получить знания из документации.


Что Вы хотите своими сообщениями доказать?
Вы Великий, Умный, что еще хотите услышать?
Я дурак, который не понимает и ни чего не включает.
Вам стало легче? (у Вас больше половины таких пустых сообщений на этом форуме)

PetroNotC Sharp
sidiscom
Мне нужно использовать в Application->CreateForm())
GetClass(), чтобы получить указатель на класс?
передай в параметре число.
Потом если 1 то создать фрейм Паровоз. Если 2 то Самолет.
Пробуй. И код сюда.


Я не программист и им не работаю, нравится это как хоби.
Я разбирал демо от AlphaControls, пытаясь перевести код с Delphi, а там не так просто.
Условиями можно, но хотел более оптимизированный код (мне так казалось)
19 ноя 20, 15:00    [22235400]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

sidiscom
Я не программист и им не работаю, нравится это как хоби.

Хобби это когда человеку нравится возиться с чем-то самостоятельно, а не просить помощь
при малейших затруднениях.

Posted via ActualForum NNTP Server 1.5

19 ноя 20, 15:27    [22235437]     Ответить | Цитировать Сообщить модератору
 Re: Создание Frame  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
sidiscom
нравится это как хоби.
значит надо искать простые задачи. А не динамику, конструктор классов, фабрику фреймов.
Начать с блокнота.exe где записаны дни рождения.

sidiscom
Условиями можно, но хотел более оптимизированный код (мне так казалось)

"Слона нужно есть по частям" любимая поговорка прогеров.
Сделайте УСЛОВИЯМИ!
Не надо экстерном!
19 ноя 20, 15:28    [22235439]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить