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

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

13.10.2011, 15:20. Показов 2350. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru