Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание Frame / 20 сообщений из 20, страница 1 из 1
17.11.2020, 14:06
    #40019418
sidiscom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
На форме есть 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
17.11.2020, 14:13
    #40019427
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
sidiscomПодскажите в чем может проблема

Оператор new требует имя типа после себя и это написано в первом сообщении об ошибке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.11.2020, 17:06
    #40019570
sidiscom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
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
17.11.2020, 17:12
    #40019575
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
sidiscomТаким образом?

Нет. Читай документацию вместо метода тыка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.11.2020, 22:44
    #40019718
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
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
18.11.2020, 11:42
    #40019859
sidiscom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
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
18.11.2020, 12:14
    #40019869
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
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
18.11.2020, 13:04
    #40019901
sidiscom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
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
18.11.2020, 14:54
    #40019954
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Frame
sidiscom, так напиши
Код: plaintext
1.
 FrameType = new TFrameMenuDirectory( MenuPanel );

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

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

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

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


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

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

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

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


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

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

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


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

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


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

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

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

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


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