Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Сохранить и извлеч данные

13.10.2011, 15:20. Показов 2379. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Посоветуйте друзья как мне записать в реестр Label1->Caption и как его потом извлеч обратно в Label1->Caption.
Очень надо!
спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.10.2011, 15:20
Ответы с готовыми решениями:

Как извлеч данные из списка?
заполняю я вот таким образом список: while (WorkSheet.Cells.Value != null) { try { ...

Не понятки с COM портом не могу извлеч данные?
Всем привет ребята помогите реализовать. На до изъят (читать) данные из Ком порта я тут написал кое что тут открытия порта ...

Сохранить из формы данные в таблицу, при том чтобы данные добавлялись а не заменялись
Здравствуйте. Нужно сохранить из формы данные в таблицу при том чтобы данные добавлялись а не заменялись)) и еще одна проблемка не знаю как...

25
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
13.10.2011, 15:39
Специально для Вас писал Работа с реестром в C++ Builder
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
13.10.2011, 15:48  [ТС]
Все понятно кроме одного как вместо этого:
C++
1
reg->WriteString("MyName","Nitan");
Написать Label->Caption.

Я просто не хочу свой реестр пачкать пока у меня получится то что нужно.
Моя версия правильна?

C++
1
reg->WriteString("Label","Caption");
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
13.10.2011, 15:56
C++
1
reg->WriteString("Caption",Label1->Caption);
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
13.10.2011, 17:18  [ТС]
Я понимаю что поднадоел, чесно самому стыдно
Утешает одно что я не спрашиваю одно и тоже по два раза.

Вопрос:
Как вписать в реестр следующие параметры:
C++
1
2
ChekBox1->Checked
HotKey1->HotKey
И еще один момент остается не ясным
Если мне нужно вписать несколько Label->Caption для каждого отдельный ключ создавать надо?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
13.10.2011, 17:38
Samrisbe,как это должно выглядеть в реестре? Допустим для чекбокса:
Box1Check REG_DWORD 0x00000001 (if true) or 0x00000000 (if false)
Если так устроит, то Reg->WriteInteger("Box1Check", 1 (or 0)) ;
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.10.2011, 17:45
а ты второй раз не переспрашивай, а просто спрашивай по-новой

1. ChekBox1->Checked - записывай туда просто 0 или 1 , дык, уважаемый nick42 уже объяснил в лицах
2. HotKey1->HotKey - это я не понял.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
13.10.2011, 17:48
HotKey или ShortCut имеет формат unsigned short, так что WriteInteger тоже сгодится.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
13.10.2011, 18:14
Вот это:
C++
1
ChekBox1->Checked
Можно еще и так записать:
C++
1
int(ChekBox1->Checked)
К тому же существует функция WriteBool.

Добавлено через 40 секунд
Цитата Сообщение от Samrisbe Посмотреть сообщение
Если мне нужно вписать несколько Label->Caption для каждого отдельный ключ создавать надо?
Зачем? Создавайте несколько параметров в одном ключе.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
13.10.2011, 19:03  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
а ты второй раз не переспрашивай, а просто спрашивай по-новой

1. ChekBox1->Checked - записывай туда просто 0 или 1 , дык, уважаемый nick42 уже объяснил в лицах
2. HotKey1->HotKey - это я не понял.
HotKey1->HotKey - это какая выбрана комбинация клавиш в компоненте HotKey1
Старость не радость
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.10.2011, 19:30
учти, сынок, молодость, увы, это такая болячка, которая проходит со временем...

HotKey1->HotKey - я никогда не пользовался компонентом для создания шорткатов, потому оно мне и было неведомо , в прочем, как и многими другими компонентами для много чего еше другого, ну, не люблю, я в общем, эти фалоимитаторы .
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
15.10.2011, 15:13  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
Samrisbe,как это должно выглядеть в реестре? Допустим для чекбокса:
Box1Check REG_DWORD 0x00000001 (if true) or 0x00000000 (if false)
Если так устроит, то Reg->WriteInteger("Box1Check", 1 (or 0)) ;
Я немного помучался но всеже смог сохранить в реестре CheckBox->Checked вот так:
C++
1
2
3
4
5
6
7
8
9
10
// Сохраняем CheckBox4->Checked в реестре
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
if (reg) {
TRegistry *reg=new TRegistry(); //Создали обьект reg класса TRegistry
reg->RootKey=HKEY_CURRENT_USER;  //Для начала необходимо указать раздел, с которым мы будем работать
reg->OpenKey("Software\\Project1\\Check",true); //Мы создали ключ, если же такой ключ уже существовал
reg->WriteInteger("Box4Check", 1 );// записали параметр
reg->CloseKey();   //Закрываем ключ
delete reg;       //Освобождаем память
reg = NULL;}      // закончили запись в реестр
Все прекрасно записалось в чем я не убедился проверив реестр.

И вот я уже который день вожусь и не могу понять как считать эти данные и присвоить CheckBox4->Checked исходя из записи в реестре?
Я мыслю в сторону переменной но немогу понять какое ей дать значение, подправьте плиз.
Вот мои труды по считыванию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Считываем CheckBox4 с реестра
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
if (reg) {
TRegistry *reg=new TRegistry(); //Создали обьект reg класса TRegistry
reg->RootKey=HKEY_CURRENT_USER;  //Как и при записи указываем раздел с которым будем работать
reg->OpenKeyReadOnly("Software\\Project1\\Check"); //Теперь открываем ключ для чтения 
  // Далее в трех строчках запутался
bool  test; 
test=reg->ReadInteger("Box4Check");   //Заносим значение, указан при этом нужный нам параметр
CheckBox4->Checked = (test);
 
reg->CloseKey();   //Закрываем ключ
delete reg; //Освобождаем память
reg = NULL;} // закончили считывание
Я бы так сказал в трех соснах заблудился

Добавлено через 20 минут
Я тормоз, и функция правильно работает а проблема вот в чем перед тем как считать данные с реестра CheckBox4 я считываю данные Label1->Caption по томуже принцыпу и когда я случайно удалил блок где считывались данные для Label1->Caption у меня все заработало и данные для CheckBox4 четко заняли свое место!

Однако теперь характер проблемы таков: Как мне решить проблему такого соседства?
Ато у меня подряд читают из реестра следующие компаненты:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::FormCreate(TObject *Sender)
Label1
Label2
Label3
CheckBox2
CheckBox3
CheckBox4
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.10.2011, 15:16
тебе где-то выше советовали: WriteBool / ReadBool / FassPitbull
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
15.10.2011, 15:58  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
тебе где-то выше советовали: WriteBool / ReadBool / FassPitbull
Я уже понял причина не в самой функции а в том что таких две подряд идут в
(void __fastcall TForm1::FormCreate(TObject *Sender){)
и компилятор на это негодует. Другими словами CheckBoxов несколько.

Добавлено через 28 минут
Спасибо все работает! Наконец таки разобрался как работать с реестром.

Только один вопрос так правильно сделанно или есть ошибка?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
if (reg) {
TRegistry *reg=new TRegistry(); //Создали обьект reg класса TRegistry
reg->RootKey=HKEY_CURRENT_USER;  //Как и при записи указываем раздел с которым будем работать
reg->OpenKeyReadOnly("Software\\Password"); //Теперь открываем ключ для чтения 
AnsiString test;
test=reg->ReadString("Caption");   //Заносим значение, указан при этом нужный нам параметр
Label27->Caption = (test); // записываем в лабел пароль
reg->CloseKey();   //Закрываем ключ
delete reg; //Освобождаем память
 
}
 
if (reg) {
TRegistry *reg=new TRegistry(); //Создали обьект reg класса TRegistry
reg->RootKey=HKEY_CURRENT_USER;  //Как и при записи указываем раздел с которым будем работать
reg->OpenKeyReadOnly("Software\\Check"); //Теперь открываем ключ для чтения 
 
bool  tes; // Вот здесь явно ошибка
tes=reg->ReadInteger("Box4Check");   //Заносим значение, указан при этом нужный нам параметр
CheckBox4->Checked = (tes);
 
reg->CloseKey();   //Закрываем ключ
delete reg; //Освобождаем память
reg = NULL;} // закончили считывание
0
15 / 15 / 1
Регистрация: 29.05.2011
Сообщений: 45
15.10.2011, 16:34
Цитата Сообщение от Samrisbe Посмотреть сообщение
C++
1
reg = NULL; // закончили считывание
это совершенно не имеет смысла, если reg - локальная переменная. можно, конечно, но не за чем.

и ещё: одна из причин того, что "с возрастом" винда начинает тормозить - это распухший реестр. если смысл ваших манипуляций в том, чтобы запомнить и восстановить состояния контролов между запусками программы, лучше используйте ини-файл. это проще (в плане кодирвания) и не засоряет систему.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.10.2011, 16:41
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
AnsiString test;
bool tes; // Вот здесь явно ошибка
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
 
if (reg) {
// TRegistry *reg=new TRegistry(); //Создали обьект reg класса TRegistry
  reg->RootKey=HKEY_CURRENT_USER;  //Как и при записи указываем раздел с которым будем работать
  reg->OpenKeyReadOnly("Software\\Password"); //Теперь открываем ключ для чтения 
  test=reg->ReadString("Caption");   //Заносим значение, указан при этом нужный нам параметр
  Label27->Caption = test; // записываем в лабел пароль
// reg->CloseKey();   //Закрываем ключ
// delete reg; //Освобождаем память
// }
// if (reg) {
// TRegistry *reg=new TRegistry(); //Создали обьект reg класса TRegistry
// reg->RootKey=HKEY_CURRENT_USER;  //Как и при записи указываем раздел с которым будем работать
  reg->OpenKeyReadOnly("Software\\Check"); //Теперь открываем ключ для чтения 
// bool tes; // Вот здесь явно ошибка
// не пробовал записать WriteBool и теперь уже читать
// tes=reg->ReadBool("Box4Check"); ?
  tes=reg->ReadInteger("Box4Check"); //Заносим значение, указан при этом нужный нам параметр
  CheckBox4->Checked = tes;
// или, если писал integer - 
//  int checkcheck = reg->ReadInteger("Box4Check");
//  CheckBox4->Checked = checkcheck;
}
reg->CloseKey();   //Закрываем ключ
delete reg; //Освобождаем память
reg = NULL;} // закончили считывание
C++
1
reg = NULL; // закончили считывание
не закончили считывание, а обнулили указатель, что есть гламурно
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
15.10.2011, 16:57  [ТС]
Читаю "Работа с реестром" от уважаерого Nitan,
и по ней пытаюсь осуществить проверку наличия ключа в реестре, и не могу понять куда ее прикрутить в моем случае.
Ато проблема в том что они отсутствуют при первом пуске, и windows выдает ошибку.
Вопрос как проверить наличие ключа и если да то читаем если нет то закрыть ключ?


Насчет замусорить реестр, так вот он и без меня замусорен, и как не породоксально самая пачкающая программа призванна служить на защите системы, реч идет об антивирусе.
А я всеголиш сохраняю в реестре 6 параметров, что на мой взгляд капля в море.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.10.2011, 17:20
C++
1
2
if (reg->ValueExists("Caption") == 1)
  test=reg->ReadString("Caption");
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
15.10.2011, 18:01  [ТС]
Я совсем запутался, по одиночке каждая работает, а подряд две не хотят.
Что значит это сообщение об ошибке?
C++
1
2
[BCC32 Error] Unit1.cpp(227): E2238 Multiple declaration for 'reg'
[BCC32 Error] Unit1.cpp(214): E2344 Earlier declaration of 'reg'
Здесь в коментах отметил строки которые посвечиваются:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    // Считываем пароль с реестра
    TRegistry *reg = new TRegistry(); // ПОДСВЕТКА ОШИБКИ 2
    reg->RootKey=HKEY_CURRENT_USER;
    reg->OpenKey("Software\\Password\\",true);
    AnsiString test;
    if (reg->ValueExists("Caption") == 1) {
    test=reg->ReadString("Caption");
    Label27->Caption = (test); }
    reg->CloseKey();
    reg = NULL;
 
    //------------------------------
 
    // Считываем CheckBox4 с реестра
    TRegistry *reg = new TRegistry();   // ПОДСВЕТКА ОШИБКИ 1
    reg->RootKey=HKEY_CURRENT_USER;
    reg->OpenKey("Software\\Box\\Check4",true);
    bool  tes;
    if (reg->ValueExists("Box4Check") == 1) {
    tes=reg->ReadInteger("Box4Check");
    CheckBox4->Checked = (tes); }
    reg->CloseKey();
    reg = NULL;
На отсутствие ключа больше не жалуется, спасибо!
0
15 / 15 / 1
Регистрация: 29.05.2011
Сообщений: 45
15.10.2011, 18:06
Цитата Сообщение от LK Посмотреть сообщение
C++
1
if (reg->ValueExists("Caption") == 1)
ну господа!!! тип bool для того и придуман, чтобы можно было написать:
C++
1
if (reg->ValueExists("Caption"))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2011, 18:06
Помогаю со студенческими работами здесь

Сохранить данные в бинарный файл, после чего данные должны отобразиться на консоли
Задача в том,чтобы сохранить данные в бинарный файл(data.bin),после чего,данные должны отобразиться на консоли.После закрытия консоли и...

Как можно сохранить данные в listWiew после закрытия формы (чтоб данные там оставались)
Никак не выходит. Все перепробовал

Как можно сохранить данные из ListView в Txt или Access, чтоб после закрытия формы данные остались

Как извлеч корень
Подскажите с помощю какой команды в С++ можно извлеч корень из числа. Нашел такой вариант как команда pow, ноона почему-то не работает, ...

Извлеч кубический корень
Доброго времени суток!можно ли в Vb.Net извлекать кубический корень , или корень n-степени?Как это сделать? спасибо


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru