Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ресурсы в C++ Builder, Как создать меню не используя VCL? 
V
    Опции темы
ZufuS
Дата 3.5.2007, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Как создать меню не используя VCL?
PM   Вверх
586
Дата 3.5.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



1) CreateMenu
2) В ресурсах:

1) создаёшь res-файл
2) добавляешь в проект
3) редактируешь в редакторе ресурсов и сохраняешь (т.е. добавляешь в ресурсы меню)
4) компилируешь приложение

Это сообщение отредактировал(а) 586 - 3.5.2007, 00:49
PM   Вверх
Klin
Дата 3.5.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(586 @  3.5.2007,  01:43 Найти цитируемый пост)
3) 1)Берешь редактор ресурсов

Если нужно создать отдельный RES файл, то используйте программу brcc32, которая находится в папке BIN у билдера.

Добавлено через 27 секунд
вот так блин, все изменяем smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
HappyLife
Дата 3.5.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Рекомендую Restorator 2005
PM MAIL   Вверх
ama_kid
Дата 3.5.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



ZufuS
Когда надоест баловаться предложенными выше игрушками - можешь попробовать создать меню на чистом API:
Код
// .cpp - ФАЙЛ
...
void __fastcall TForm1::OnCommandMessage(TMessage& Message)
{
  if (Message.WParamLo==ID_EXIT)
    {
        Close();
    }
  if (Message.WParamLo==ID_HELP)
    {
        MessageBox(NULL,"You've got help now!",NULL,MB_OK);
    }
    TForm::Dispatch(&Message);
};

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    MyMenu = CreateMenu();
    MyFileMenu = CreateMenu();
    MyHelpMenu = CreateMenu();
    AppendMenu(MyFileMenu, MF_STRING,ID_OPEN,"Open...");
    AppendMenu(MyFileMenu, MF_SEPARATOR,NULL,"");
    AppendMenu(MyFileMenu, MF_STRING,ID_EXIT,"Exit...");
    AppendMenu(MyHelpMenu, MF_STRING,ID_HELP,"Help");
    AppendMenu(MyHelpMenu, MF_SEPARATOR,NULL,"");
    AppendMenu(MyHelpMenu, MF_STRING,ID_ABOUT,"About...");
    AppendMenu(MyMenu,MF_POPUP | MF_STRING,(unsigned int)MyFileMenu,"File");
    AppendMenu(MyMenu,MF_POPUP | MF_STRING,(unsigned int)MyHelpMenu,"Help");
    ::SetMenu(this->Handle,MyMenu);
}
...
// .h - ФАЙЛ 
...
#define ID_EXIT 100
#define ID_OPEN 101
#define ID_HELP 102
#define ID_ABOUT 103
...
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
    HMENU MyMenu;
    HMENU MyFileMenu;
    HMENU MyHelpMenu;
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
protected:
    void __fastcall OnCommandMessage(TMessage& Message);
BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER( (WM_COMMAND),TMessage,OnCommandMessage)
END_MESSAGE_MAP(TForm)
...


Это сообщение отредактировал(а) ama_kid - 3.5.2007, 12:33


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Klin
Дата 3.5.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(HappyLife @  3.5.2007,  10:15 Найти цитируемый пост)
Рекомендую Restorator 2005 

Он разве умеет создавать res файлы?


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
HappyLife
Дата 3.5.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Klin
Он больше ничего и не умеет)
на wasm.ru валяется версия с кряком.
Пользуюсь регулярно. Нравиться.

Это сообщение отредактировал(а) HappyLife - 3.5.2007, 19:34
PM MAIL   Вверх
Klin
Дата 3.5.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



У самого стоит (только старее), я имел ввиду, что умеет только редактировать. Похоже пора обновить, спасибо за линк smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
ZufuS
Дата 4.5.2007, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Пробовал сделать примеры, которые находил в интернете, но при попытке создать *.res он не создавался. Хотелось бы рабочий пример.
PM   Вверх
Klin
Дата 4.5.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Создание ресурсов с помощью brcc32 (который находится в папке BIN):

1) Создаем файл с расширением RC (к примеру file.rc)
2) С помощью любого текстового реадктора пишем в нем нужные файлы в следующей форме:
  Название_ресурса Тип_ресурса Путь_к_файлу
 пример: MyMenu MENU  "menu.txt"
3) Открываем RC файл в brcc32 (или просто кидаем RC файл на иконку brcc32) и получаем RES файл
4) Прописываем в программе:
Код

 #pragma resource "File.res"



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
dumb
Дата 4.5.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



столкнулся тут недавно...
хозяйке на заметку(Builder < 2006):

симпотомы: если в ресурс попадает иконка, содержащая более 4х изображений, resource linker'у становится сильно плохо, и процесс сборки приложения обрывается внутренней ошибкой.

что делать: "дробить" иконку, либо ставить 2006, где эта проблема пофиксена.
PM MAIL   Вверх
Klin
Дата 4.5.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(Klin @  4.5.2007,  15:12 Найти цитируемый пост)
Создание ресурсов с помощью brcc32 (который находится в папке BIN):

Ошибся, меню легче делается smile
1) Создаем файл с расширением RC (к примеру file.rc)
2) Записываем в него код меню (взято из хелпа):
Код

sample MENU
BEGIN
     MENUITEM "&Soup", 100
     MENUITEM "S&alad", 101
     POPUP "&Entree"
     BEGIN
          MENUITEM "&Fish", 200
          MENUITEM "&Chicken", 201, CHECKED
          POPUP "&Beef"
          BEGIN
               MENUITEM "&Steak", 301
               MENUITEM "&Prime Rib", 302
          END
     END
     MENUITEM "&Dessert", 103
END

3) Открываем RC файл в brcc32 (или просто кидаем RC файл на иконку brcc32) и получаем RES файл
4) Прописываем в программе.

Цитата(dumb @  4.5.2007,  15:21 Найти цитируемый пост)
симпотомы: если в ресурс попадает иконка, содержащая более 4х изображений, resource linker'у становится сильно плохо, и процесс сборки приложения обрывается внутренней ошибкой.

Как ресурсы используешь?

Добавлено через 9 минут и 53 секунды
Цитата(Klin @  4.5.2007,  15:26 Найти цитируемый пост)
3) Открываем RC файл в brcc32 (или просто кидаем RC файл на иконку brcc32) и получаем RES файл

Или просто добавляешь RC файл к проекту (меню Project->Add to project или Shift + F11)  и оно добавится автоматически.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
dumb
Дата 4.5.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(Klin @  4.5.2007,  14:26 Найти цитируемый пост)
Как ресурсы используешь?

по-фи-гу как. smile как угодно - все равно ошибку даст.
PM MAIL   Вверх
ZufuS
Дата 4.5.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Klin, файл res сотворился, непонятно только что дальше с ним делать. Я заменил им project1.res. Если я правильно понял, то имя, в данном случае sapmle, это типа константа, которой надо присвоить число.(?) Поэтому я вместо sample написал 1234 и в инициализации объекта оконного класса написал
Код

wcl.lpszMenuName = MAKEINTRESOURCE(1234);

но меню не появилось.

Это сообщение отредактировал(а) ZufuS - 4.5.2007, 18:25
PM   Вверх
Klin
Дата 4.5.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(ZufuS @  4.5.2007,  19:23 Найти цитируемый пост)
но меню не появилось.

Я бы удивился smile
На самом деле все просто:
Код

 ::SetMenu(Handle,LoadMenu(0,"sample"));


Добавлено через 1 минуту и 13 секунд
А если нужно что-то изменить или события добавить ;), то используй свойство Menu (this->Menu);


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1366 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.