Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уникальное имя раздела реестра. 
:(
    Опции темы
Егор (к сожалению, не Летов)
Дата 24.8.2002, 02:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как можно реализовать следующее?

В реестре нужно создать раздел
HKEY_LOCAL_MACHINE\MyKey\00000
при добавлении следующей записи, нужно создать раздел
HKEY_LOCAL_MACHINE\MyKey\00001
и так далее. То есть, если раздел 00000 сушествует - создать 00001, если и 00001 сушествует - создать 00002 и т.д и т.п. Идей у меня пока нет, топчусь на одном месте, как видите. Вот и решил спросить.

Пример обязателен, хоть какой-нибудь.  :hmmm

:baaa
  Вверх
Vit
Дата 24.8.2002, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Код

 var t:TStringlist;
begin
 t:=TStringList.create;
 try
   with TRegistry.create do
     try
       RootKey:=HKEY_LOCAL_MACHINE;
       OpenKey('Software\MyKey',true);
       GetKeyNames(t);
       t.Sorted:=true;
       t.sort;
       if t.count>0 then
         OpenKey(Format('%.5d',[strtoint(t[t.count-1])+1]), true)
       else
         OpenKey('00000', true);
       WriteString('A','A');
     finally
       free;
     end;
 finally
   t.free;
 end;
end;



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Егор (к сожалению, не Летов)
Дата 24.8.2002, 03:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо. На этом форуме действительно профи помогают.
Агой (пока по чешски, или привет, точно уже не помню).  ;-)
  Вверх
Song
Дата 24.8.2002, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Для этой цели использую GUI - всегда будет уникальной, хотя и неудобоваримой как Ваш ключ.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Егор (к сожалению, не Летов)
Дата 27.8.2002, 22:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не работает. Ошибочка вот такая:

Project Project1.exe raised exception class EConvertError with message
"MPEG-4DC' Is nol a valid Inleger value". Process slopped. Use Slep or Run to
conllnue.


Вот код:

Код
procedure NewUninstallKey;
var
UnikKey:TStringlist;
begin
 Reg := TRegistry.Create;
try
 Reg.RootKey:=HKEY_LOCAL_MACHINE;
 UnikKey:=TStringList.Create;
  if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Uninstall', True) then
   begin
    Reg.GetKeyNames(UnikKey);
    UnikKey.Sorted:=true;
    UnikKey.sort;
     if UnikKey.count > 0 then
      Reg.OpenKey(Format('%.5d',[StrToInt(UnikKey[UnikKey.count-1])+1]), True)
     else
      Reg.OpenKey('\00000', true);
//       Reg.WriteString('DisplayName', FrmChange.txtDn.text);
//       Reg.WriteString('UninstallString', FrmChange.txtUnstr.text);
    end;
  Reg.CloseKey;
  Reg.Free;
except
 Reg.CloseKey;
 Reg.Free;
 UnikKey.Free;
end;
// FrmChange.Hide;
// ReadUninstalKey;
end;

  Вверх
Vit
Дата 27.8.2002, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Ну так я расчитывал что у тебя будут только папки "00000", "00001" и т.д., а у тебя там появилась "MPEG-4DC". Тебе надо или исключить их появление или обрабатывать эту ситуацию.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Егор (к сожалению, не Летов)
Дата 27.8.2002, 23:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Тебе надо или исключить их появление или обрабатывать эту ситуацию.


Я не понимаю.
  Вверх
Vit
Дата 28.8.2002, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Собственно моя ошибка в том, что видимо нельзя давать готовый код - он будет просто вставлен и вопрошающий так и не поймёт что он делает :(

В данном случае надо исключить не числовые значения из массива UnikKey - т.е. там надо оставить значения "00000", "00001" и т.п. и исключить типа "MPEG- 4DC", кроме того, естественно я не предполагал что будет посторонний мусор, поэтому надо придумать как обработать ситуацию если попадётся например ключ "234" - сортируются то строки, не цифры, так что такие значения если найдены то должны быть тоже исключены.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Егор (к сожалению, не Летов)
Дата 28.8.2002, 00:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Объясни что делает следующий фрагмент кода (желательно по-подробнее):

Format('%.5d',[StrToInt(UnikKey[UnikKey.count-1])+1])




:baaa  :baaa
  Вверх
Vit
Дата 28.8.2002, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Функия Format позволяет вставлять в строку различные значения. Например

Format('Егор (%s %s) ',['который', 'не Летов']) вернёт строку:
'Егор (который не Летов)'

т.е. вместо %s будут вставлены значения строк из массива в квадратных скобках

Format('%d Попугаев',[38]) вернёт строку:

'38 Попугаев'

т.е. вместо %d будет вставлено число (не строка) из массива

теперь в нашем случае:


Format('%.5d', ....

"%.5d" обозначает что мы вставляем число и что это число будет пятизначным, т.е. если мы вставим

Format('%.5d', [1]) то получим строку "00001"


"UnikKey.count-1" - номер последней строки в массиве (отсортированном по порядку)

UnikKey[UnikKey.count-1] - последняя строка в массиве

StrToInt - перевод строки в число (она как раз и генерит ошибку, когда попадается строка, которую нельзя конвертировать в целое число)

StrToInt(UnikKey[UnikKey.count-1]) взять последнюю строку в массиве и конвертировать ее в число

StrToInt(UnikKey[UnikKey.count-1])+1 - взять следуещее число


Format('%.5d',[StrToInt(UnikKey[UnikKey.count-1])+1]) - следующее число конвертировать в 5тизначнное число в виде строки


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Егор (к сожалению, не Летов)
Дата 31.8.2002, 22:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не выходит у меня без ошибки создать ключ. Может, кто поможет?
  Вверх
Vit
Дата 4.9.2002, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Ok, значит задача состоит в том чтобы убрать из массива названий все что не являются цифрами, и сделать это надо здесь:

    Reg.GetKeyNames(UnikKey);
   //сюда вставляет код который удаляет все ключи из UnikKey, которые не являются цифрами
    UnikKey.Sorted:=true;


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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