Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 16

Сохранить выбранный пункт меню при запуске

18.08.2014, 16:14. Показов 3050. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простая форма с кнопкой и меню (MainMenu)
Выбрали нужный пункт меню нужно его сохранить,пока не выберут другой пункт
При каждом запуске exe приходиться выбирать пункт заново

Цель
Сохранить последний выбранный пункт меню при каждом запуске без дополнительных файлов (CFG,INI и др.)

Как можно сделать ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.08.2014, 16:14
Ответы с готовыми решениями:

Выделить выбранный пункт меню
Всем привет! Есть код. <div id="navouter"> <div id="nav"> <ul class="lavalamp" id="menu1"> <li class="page_item...

Разработать скрипт, который выводит меню из шести пунктов, причем выбранный пункт меню подсвечивается определенным цветом.Рекомендуется использование
Разработать скрипт, который выводит меню из шести пунктов, причем выбранный пункт меню подсвечивается определенным цветом.Рекомендуется...

CSS.Окрасить выбранный пункт меню
Как сделать в CSS так, чтоб при выборе пункта меню его фон окрашивался и оставался таким пока не выбран другой пункт меню. Через hover не...

32
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
19.08.2014, 11:43
Студворк — интернет-сервис помощи студентам
а вот так =)

C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Mnu=1;
  switch(Mnu)
    {
      case 1 : ShellExecute(NULL, "open", "calc.exe", NULL, NULL, SW_SHOWNORMAL); break;
      case 2 : ShellExecute(NULL, "open", "cmd.exe", NULL, NULL, SW_SHOWNORMAL); break;
      case 3 : ShellExecute(NULL, "open", "mspaint.exe", NULL, NULL, SW_SHOWNORMAL); break;
    }
}
0
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 16
19.08.2014, 11:50  [ТС]
Вот

Checking project dependencies...
Compiling Project1.cbproj (Debug, Win32)
bcc32 command line for "Unit1.cpp"
c:\program files (x86)\embarcadero\studio\14.0\bin\bcc32. exe -D_DEBUG -DUSEPACKAGES -n.\Win32\Debug -I"c:\program files
(x86)\embarcadero\studio\14.0\include\wi ndows\vcl";"C:\Program Files (x86)\Embarcadero\Studio\14.0\include\bo ost_1_39\boost\tr1\tr1";"C:\Program
Files (x86)\Embarcadero\Studio\14.0\include\bo ost_1_39";"c:\program files (x86)\embarcadero\studio\14.0\include";" c:\program files
(x86)\embarcadero\studio\14.0\include\di nkumware";"c:\program files (x86)\embarcadero\studio\14.0\include\wi ndows\crtl";"c:\program files
(x86)\embarcadero\studio\14.0\include\wi ndows\sdk";"c:\program files (x86)\embarcadero\studio\14.0\include\wi ndows\rtl";"c:\program files
(x86)\embarcadero\studio\14.0\include\wi ndows\vcl";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE6\Win32" -y -Q -k -r- -c -tR -tM -tU -tW -C8
-o.\Win32\Debug\Unit1.obj -w-par -Od -v -vi- -H=.\Win32\Debug\Project1.pch -H Unit1.cpp
[bcc32 Error] Unit1.cpp(38): E2034 Cannot convert 'char const[5]' to 'const wchar_t *'
Full parser context
Unit1.cpp(34): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(38): E2342 Type mismatch in parameter 'lpOperation' (wanted 'const wchar_t *', got 'const char *')
Full parser context
Unit1.cpp(34): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(39): E2034 Cannot convert 'char const[5]' to 'const wchar_t *'
Full parser context
Unit1.cpp(34): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(39): E2342 Type mismatch in parameter 'lpOperation' (wanted 'const wchar_t *', got 'const char *')
Full parser context
Unit1.cpp(34): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(40): E2034 Cannot convert 'char const[5]' to 'const wchar_t *'
Full parser context
Unit1.cpp(34): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(40): E2342 Type mismatch in parameter 'lpOperation' (wanted 'const wchar_t *', got 'const char *')
Full parser context
Unit1.cpp(34): parsing: void _fastcall TForm1::Button1Click(TObject *)
Failed
Elapsed time: 00:00:00.1

Добавлено через 2 минуты
char выставил,ошибок этих нет но exe не запускаеться
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
19.08.2014, 11:51
ясно понятно...у меня просто сейчас под рукой только Builder6, он с кодом без L отлично справляется...
Ну ожидайте помощи...создайте Ваш ini файл вручную) когда программа запущена...закройте программу..гляньте что в нем записано. Хотя для начала бы разобраться с ShellExecute.
0
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 16
19.08.2014, 11:58  [ТС]
Что делать ?
Файла с настройками нету, и exe файл не запускает вообще
0
19.08.2014, 11:59

Не по теме:

можно еще сделать шаманский обряд по вызову помощников....
:wizard: D1973 или UI

0
Модератор
 Аватар для D1973
9943 / 6478 / 2460
Регистрация: 21.01.2014
Сообщений: 27,460
Записей в блоге: 3
19.08.2014, 12:05

Не по теме:

Цитата Сообщение от demon_7 Посмотреть сообщение
можно еще сделать шаманский обряд
КТО МЕНЯ ЗВАЛ?!?!? ПОДНИМИТЕ МНЕ ВЕКИ!!! :)


Cefiadri, надо не тупо копипастить код, а создавать свои обработчики событий, аналогичные тем, что в моем примере.
1
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 16
19.08.2014, 12:10  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Cefiadri, надо не тупо копипастить код, а создавать свои обработчики событий, аналогичные тем, что в моем примере.
Ну как сделать ?

Добавлено через 28 секунд
Чтобы работало
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33455 / 21555 / 8248
Регистрация: 22.10.2011
Сообщений: 37,008
Записей в блоге: 12
19.08.2014, 12:11
Цитата Сообщение от Cefiadri Посмотреть сообщение
Ну как сделать ?
Зайти в Object Inspector, на вкладку Events, и назначить событию OnCreate формы обработчик FormCreate. Аналогично и с OnCloseQuery - ему назначить FormCloseQuery (просто выбрать из выпадающего списка)

И, заодно, обработчик nCalcClick должен быть назначен ВСЕМ пунктам меню, а не только первому...
0
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 16
19.08.2014, 12:14  [ТС]
Не знаю exe не запускает и файла с настройками нету

Добавлено через 1 минуту
Не знаю как сделать,как баран на ворота смотрю

Добавлено через 1 минуту
Помогите сделать
0
Модератор
 Аватар для D1973
9943 / 6478 / 2460
Регистрация: 21.01.2014
Сообщений: 27,460
Записей в блоге: 3
19.08.2014, 12:15
Цитата Сообщение от UI Посмотреть сообщение
И, заодно, обработчик nCalcClick должен быть назначен ВСЕМ пунктам меню, а не только первому...
И кроме этого свойство RadioItems == true для всех трех пунктов меню, которые отвечают за выбор программы

Не по теме:

Думал - это очевидно. Ошибся, блин

0
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 16
19.08.2014, 12:33  [ТС]
RadioItems высталенно,В упор не сделать

Добавлено через 3 минуты
exe не запускается и файла настроек нету
делал что писали выше

Добавлено через 5 минут
Что делать ?
Код не работает!

Добавлено через 4 минуты
Мне его не сделать!

Добавлено через 2 минуты
Помогите пожалуйста
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33455 / 21555 / 8248
Регистрация: 22.10.2011
Сообщений: 37,008
Записей в блоге: 12
19.08.2014, 12:39
Вот архив с работающим проектом:
Вложения
Тип файла: 7z code.7z (58.4 Кб, 15 просмотров)
0
Модератор
 Аватар для D1973
9943 / 6478 / 2460
Регистрация: 21.01.2014
Сообщений: 27,460
Записей в блоге: 3
19.08.2014, 13:08
Итак, КМБ по теме "Hello, World" (описываю, как создавал свой проект, приведенный выше)
1. Создаем новый проект: File->New->VCL Form Application - C++ Builder
2. На форму кидаем компроненты TMainMenu и TButton
3. Создаем пункты главного меню.
3.1 Пункт главного меню, называем mnuMain (свойство Name пункта меню), заголовок (свойство Caption) - МЕНЮ
3.2 Создаем подпункт главного меню "Калькулятор":
Name == nCalc
Caption == Калькулятор
Tag == 1
RadioItem == true
3.2 Создаем подпункт главного меню "Командная строка":
Name == nCmd
Caption == Командная строка
Tag == 2
RadioItem == true
3.3 Создаем подпункт главного меню "Редактор Paint":
Name == nPaint
Caption == Редактор Paint
Tag == 3
RadioItem == true
3.4 Создаем разделитель подпунктов главного меню:
Caption == -
3.5 Создаем подпункт главного меню "Выход":
Name == nExit
Caption == Выход
Tag == 0
RadioItem == false
4.Переходим в редактор кода (кнопка F12). Между строками
TForm1 *Form1;
и
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
пишем руками
C++
1
2
int Mnu;
String fCfg;
5. В редакторе меню делаем двойной клик на пункт меню "Калькулятор". Перемещаемся в редактор кода, где уже готов шаблон обработчика события
C++
1
2
3
4
void __fastcall TForm1::nCalcClick(TObject *Sender)
{
  
}
6. Между фигурными скобками пишем
C++
1
2
3
4
((TMenuItem *)Sender)->Checked = true;
   Mnu = ((TMenuItem *)Sender)->Tag;
   Button1->Caption = ((TMenuItem *)Sender)->Caption;
   Button1->Enabled = true;
7. В редакторе меню выделяем пункт меню "Командная строка", в Object Inspector переходим на закладку Events, открываем выпадающий список события OnClick и выбираем nCankClick
8. Повторяем шаг 7 для пункта меню "Редактор Paint"
9. В редакторе меню делаем двойной клик на пункте меню "Выход". В получившемся обработчике события пишем
C++
1
Close();
10. На форме делаем двойной клик. В появившемся обработчике пишем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fCfg = ExtractFilePath(Application->ExeName) + "pMenu.cfg";
  if(FileExists(fCfg))
   {
     TIniFile *Ini = new TIniFile(fCfg);
     int mTag = Ini->ReadInteger("MENU","CheckPoint",0);
     for(int i = 0; i < Form1->ComponentCount; i++)
      {
        if(Components[i]->ClassNameIs("TMenuItem"))
         if(((TMenuItem *)Components[i])->Tag == mTag)
          {
            ((TMenuItem *)Components[i])->Checked = true;
            Button1->Caption = ((TMenuItem *)Components[i])->Caption;
            Mnu = mTag;
            Button1->Enabled = true;
          }
      }
     delete Ini;
   }
11. Щелкаем один раз на форме. Переходим в ObjectInspector, закладка Events, делаем двойной клик на событии OnCloseQuery. В появившемся обработчике пишем
C++
1
2
3
4
TIniFile *Ini = new TIniFile(fCfg);
  Ini->WriteString("MENU","CheckPoint",IntToStr(Mnu));
  delete Ini;
  CanClose = true;
12. Делаем двойной клик на кнопке. В обработчике пишем
C++
1
2
3
4
5
6
switch(Mnu)
    {
      case 1 : ShellExecute(NULL, L"open", L"calc.exe", NULL, NULL, SW_SHOWNORMAL); break;
      case 2 : ShellExecute(NULL, L"open", L"cmd.exe", NULL, NULL, SW_SHOWNORMAL); break;
      case 3 : ShellExecute(NULL, L"open", L"mspaint.exe", NULL, NULL, SW_SHOWNORMAL); break;
    }
13. Запускаем проект - все работает!!!

Добавлено через 8 минут

Не по теме:

По этой инструкции мой сын (10 лет, полный 0 в программировании) только что проект сделал.

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2014, 13:08

При нажатии на пункт меню скрыть его, и показать другой пункт меню
Прошу помощи, как можно допустим при нажатии на пункт меню, его скрыть, и показать другой пункт меню? я делаю так : public boolean...

Как сделать, чтобы Окрашивался выбранный пункт меню, в который перешёл
Есть готовое меню. Как сделать, чтобы при переходе по Выбранному пункту меню, он был окрашен. Т.е. чтобы цвет на нём зафиксировался, и...

Как сделать, чтобы при запуске проги с параметрами, вызывался пункт меню соответствующий введенному параметру?
Добрый день. есть простая консольная прога с меню. хочу, чтобы при запуске проги с параметрами вызывался пункт меню соответствующий...

Сохранить выбранный путь при перезапуске программы
В общем смысл таков, есть textBox и button. Кнопка работает как &quot;обзор&quot;, по нажатию открывается диалоговое окно, выбирается txt-файл, и в...

Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Здравствуйте, почему при нажатии на пункт Action Bar'а вылетает ошибка? @Override public boolean onCreateOptionsMenu(Menu menu)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru