powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание Frame
20 сообщений из 20, страница 1 из 1
Создание Frame
    #40019418
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форме есть 6 кнопок, нажатие на которые вызывает создание нужного фрейма
Пример одной из кнопок, остальные по аналогии.

Код: plaintext
1.
2.
3.
4.
void __fastcall TfmMain::sSpeedButton1Click(TObject *Sender)
{
OpenFrame(FrameMenuDirectory, true);
}



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

Код: plaintext
1.
2.
3.
4.
5.
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)

Подскажите в чем может проблема
...
Рейтинг: 0 / 0
Создание Frame
    #40019427
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscomПодскажите в чем может проблема

Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание Frame
    #40019570
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

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

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



Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
DM->CurrentMenuFrame = new TFrame FrameType(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;
}



Таким образом?
Как правильно написать на С++ строку Delphi
DM.CurrentMenuFrame := FrameType.Create(Self);
?
...
Рейтинг: 0 / 0
Создание Frame
    #40019575
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscomТаким образом?

Нет. Читай документацию вместо метода тыка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание Frame
    #40019718
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.
TFrame - тип (объявление), место в памяти не занимает (если забыть о переменных класса и прочих RTTI), по нему new понимает, сколько байт нужно выделить (ну, и еще кое-что, что сейчас не важно)
FrameType - переменная, конкретный кусок памяти, содержащий ссылку на класс TFrame, просто адрес в памяти, зачем он new?
Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
DM->CurrentMenuFrame = new TFrame(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;
}
...
Рейтинг: 0 / 0
Создание Frame
    #40019859
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bk0010
Dimitry Sibiryakov
Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.
TFrame - тип (объявление), место в памяти не занимает (если забыть о переменных класса и прочих RTTI), по нему new понимает, сколько байт нужно выделить (ну, и еще кое-что, что сейчас не важно)
FrameType - переменная, конкретный кусок памяти, содержащий ссылку на класс TFrame, просто адрес в памяти, зачем он new?
Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
DM->CurrentMenuFrame = new TFrame(MenuPanel);
DM->CurrentMenuFrame->Parent = MenuPanel;
}



хочу создать новый фрейм с указаным именем
...
Рейтинг: 0 / 0
Создание Frame
    #40019869
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscom
хочу создать новый фрейм с указаным именем

Код: plaintext
1.
2.
3.
4.
5.
6.
void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
    FrameType = new TFrame(MenuPanel);
    DM->CurrentMenuFrame = FrameType;
    DM->CurrentMenuFrame->Parent = MenuPanel;
}

так?
...
Рейтинг: 0 / 0
Создание Frame
    #40019901
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorych
sidiscom
хочу создать новый фрейм с указаным именем

Код: plaintext
1.
2.
3.
4.
5.
6.
void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
    FrameType = new TFrame(MenuPanel);
    DM->CurrentMenuFrame = FrameType;
    DM->CurrentMenuFrame->Parent = MenuPanel;
}

так?


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

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




если так, то фрейм не отображается
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
OpenFrame(FrameMenuDirectory, true);

void __fastcall TfmMain::OpenFrame(TFrame *FrameType, bool Animated)
{
    FrameType = new TFrame(MenuPanel);
    DM->CurrentMenuFrame = FrameType;
    DM->CurrentMenuFrame->Parent = MenuPanel;
}
...
Рейтинг: 0 / 0
Создание Frame
    #40019954
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscom, так напиши
Код: plaintext
1.
 FrameType = new TFrameMenuDirectory( MenuPanel );

кто ж кроме тебя знает, какой именно фрейм ты создаёшь)
...
Рейтинг: 0 / 0
Создание Frame
    #40019965
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychкто ж кроме тебя знает, какой именно фрейм ты создаёшь)

Фишка в том, что он и сам не знает. Ему тип фрейма должен приходить в параметре, но в С++
нет такой фичи, как указатель на тип, он есть только в Дельфи и, соответственно, Билдере.
А потому - надо читать документацию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание Frame
    #40020020
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

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

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


Спасибо.
Значит задача была заранее обречена на провал. Получается, что одной функцией я не смогу реализовать создание различных фреймов, которые указываю в параметре функции.
...
Рейтинг: 0 / 0
Создание Frame
    #40020036
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscomПолучается, что одной функцией я не смогу реализовать создание различных фреймов, которые
указываю в параметре функции.

У других это как-то получается (например, при вызове Application->CreateForm()), но ты,
наверное, да, не сможешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание Frame
    #40020045
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

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

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


Согласен, очень слаб в этом.
Вы писали, (но в С++ нет такой фичи, как указатель на тип,)
как тогда передать в Application->CreateForm()) какой нужно?
...
Рейтинг: 0 / 0
Создание Frame
    #40020051
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscomВы писали, (но в С++ нет такой фичи, как указатель на тип,)
как тогда передать в Application->CreateForm()) какой нужно?

Так, как написано в документации в Билдеру, который не совсем С++.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание Frame
    #40020294
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно использовать в Application->CreateForm())
GetClass(), чтобы получить указатель на класс?
...
Рейтинг: 0 / 0
Создание Frame
    #40020340
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscom
Мне нужно использовать в Application->CreateForm())
GetClass(), чтобы получить указатель на класс?
передай в параметре число.
Потом если 1 то создать фрейм Паровоз. Если 2 то Самолет.
Пробуй. И код сюда.
...
Рейтинг: 0 / 0
Создание Frame
    #40020345
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, сначала надо использовать мозг чтобы получить знания из документации.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание Frame
    #40020414
sidiscom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

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


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

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


Я не программист и им не работаю, нравится это как хоби.
Я разбирал демо от AlphaControls, пытаясь перевести код с Delphi, а там не так просто.
Условиями можно, но хотел более оптимизированный код (мне так казалось)
...
Рейтинг: 0 / 0
Создание Frame
    #40020434
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscomЯ не программист и им не работаю, нравится это как хоби.

Хобби это когда человеку нравится возиться с чем-то самостоятельно, а не просить помощь
при малейших затруднениях.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание Frame
    #40020435
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sidiscom
нравится это как хоби.
значит надо искать простые задачи. А не динамику, конструктор классов, фабрику фреймов.
Начать с блокнота.exe где записаны дни рождения.

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

"Слона нужно есть по частям" любимая поговорка прогеров.
Сделайте УСЛОВИЯМИ!
Не надо экстерном!
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание Frame
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]