0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 16

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

18.08.2014, 16:14. Показов 3067. Ответов 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
9945 / 6480 / 2460
Регистрация: 21.01.2014
Сообщений: 27,462
Записей в блоге: 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
33463 / 21563 / 8248
Регистрация: 22.10.2011
Сообщений: 37,016
Записей в блоге: 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
9945 / 6480 / 2460
Регистрация: 21.01.2014
Сообщений: 27,462
Записей в блоге: 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
33463 / 21563 / 8248
Регистрация: 22.10.2011
Сообщений: 37,016
Записей в блоге: 12
19.08.2014, 12:39
Вот архив с работающим проектом:
Вложения
Тип файла: 7z code.7z (58.4 Кб, 15 просмотров)
0
Модератор
 Аватар для D1973
9945 / 6480 / 2460
Регистрация: 21.01.2014
Сообщений: 27,462
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru