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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите! реестр+Tstrings, срочно! я уже запутался... 
:(
    Опции темы
h2o
Дата 21.10.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

ListBox1.Clear;                                                                         //TListBox
REG:= TRegistry.Create;
REG.RootKey:=HKEY_CURRENT_USER;
REG.OpenKey('Software\MySoft\Proga\Names',false);
REGTempBase:= TStringList.Create;                                       // TStrings       
TempBase:= TStringList.Create;                                             // TStrings 
REG.GetValueNames(REGTempBase);                                     //Получаю имена и их значения (!пути!)
exeFileName:=('my.exe');                                                       //String 
cfgFileName:=('my.cfg');                                                          //String 

 for i:=0 to REGTempBase.Count - 1 do                           
begin                                                        
  exeFilePath:=REGTempBase.Strings[i]+'\'+exeFileName;           //String          
  cfgFilePath:=REGTempBase.Strings[i]+'\'+cfgFileName;             //String        
  IF (FileExists (exeFilePath)) THEN                      
   begin
     IF (FileExists (cfgFilePath)) THEN
      begin
       TempBase.Add(REG.ReadString(REGTempBase.Strings[i]));      //вот тут и...
       ListBox1.Items.Add(TempBase.Strings[i]);                                //вот тут я неправильно делаю!!!
      end;
   end
  else exit; 
end;
REG.CloseKey;
REG.Destroy;


Смысл:
в переменную REGTempBase я заношу имена и пути из реестра. После проверки IF (FileExists (exeFilePath)) и IF (FileExists (cfgFilePath)) если всё правда, то тогда берём нужную строку из переменной REGTempBase (эта строка в реестре выглядит как"имя:прога, значение:c:\proga\"), и заносим её в переменную TempBase. А дальше из переменной TempBase я все данные заношу в ListBox1.
Я это делаю для того, чтобы, если в реестре есть имена и пути... а одно из условий не выполняется, чтобы у меня переменная TempBase содержала тока те значения, которые прошли проверки, и я дальше смогу работать с переменной. ведь списки TempBase и в REGTempBase получаются разные!!!
Но у меня что-то никак не получается такое сотворить? замучался...
Вопрос: как правильно осуществить описанную мной запись... исправив 2 строки:
Код

       TempBase.Add(REG.ReadString(REGTempBase.Strings[i]));
       ListBox1.Items.Add(TempBase.Strings[i]);


З.Ы. если эти 2 строки заменить 1й то всё работает, но мне нужно как я описал, тоесть с TempBase:
Код

     ListBox1.Items.Add(REG.ReadString(REGTempBase.Strings[i]));


надеюсь понятно обьеснил...

жду помосчи! очень срочно нужно!!! люди..... хелп!!!

Это сообщение отредактировал(а) h2o - 21.10.2005, 12:59
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Romikgy
Дата 21.10.2005, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Добавь в локальные переменные
Код

tempstr: string;

и измени так:
Код

tempstr:=REG.ReadString(REGTempBase.Strings[i]);
TempBase.Add(tempstr);    
ListBox1.Items.Add(tempstr);

Надеюсь я тебя правильно понял smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 21.10.2005, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



А может просто после цикла выполнить
ListBox1.Items.AddStrings(TempBase); smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 21.10.2005, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Romikgy
это всё равно что
Код

       TempBase.Add(REG.ReadString(REGTempBase.Strings[i]));
       ListBox1.Items.Add(REG.ReadString(REGTempBase.Strings[i]));

да ещё и выделение памяти под 1 переменную, да ещё и лишние такты проца....
экономим память....

я сам вообще поди не правильно делаю!

если у меня используется REG.GetValueNames(REGTempBase); , тоесть я всё заношу в REGTempBase. а потом использую TempBase.Add(REG.ReadString(REGTempBase.Strings[i]));
это ведь не правильно??? зачем тут REG.ReadString(REGTempBase.Strings[i]), точнее REG.ReadString??? это неправильно?
Добавлено @ 12:35
зачем то опять REG.ReadString ведь можно по другому???
Добавлено @ 12:39
Цитата
А может просто после цикла выполнить
ListBox1.Items.AddStrings(TempBase);


а чё, так будет работать?

Это сообщение отредактировал(а) h2o - 21.10.2005, 12:37
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Romikgy
Дата 21.10.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Я думал , что понял оказывается , что нет smile
Что тебе нужно ? Что именно не работает? Я из твоих вопросов не понял smile
Цитата(h2o @ 21.10.2005, 12:34)
да ещё и выделение памяти под 1 переменную, да ещё и лишние такты проца....
экономим память....

Дык и не пользовался бы VCL раз экономишь такты проца smile
И знаешь чем мой вариант лучше, тем что нет чтения типа
Цитата(h2o @ 21.10.2005, 11:59)
ListBox1.Items.Add(TempBase.Strings[i]);

Потому как если у тебя было выполненно правильно условие только для первого случая, а потом 3 записи совпадений небыло , то при совпадении в четвертой строке !!! у тебя будет пытатся считать из 4 строки данные , которых в помине нет! ведь было только одно совпадение!!!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
h2o
Дата 21.10.2005, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



я и сам намудрил...

Повторюсь, и попытаюсь обьяснить точнее
REG.GetValueNames(REGTempBase); -этим я записываю в REGTempBase содержимое реестра.
В реестре по пути HKEY_CURRENT_USER\Software\MySoft\Proga\Names\ находится
________________________________________________
|имя | тип | значение |
________________________________________________|
|(по умолчанию) | REG_SZ | значение не присвоено |
| C:\games\HL2\ | REG_SZ | Half-Life 2 |
| C:\games\D3\ | REG_SZ | Doom3 |
| C:\games\q3\ | REG_SZ | Quake3 |
| C:\games\DS2\ | REG_SZ | Dungeon Siege 2 |
________________________________________________

Дак вот, в переменную REGTempBase я записываю всё это (к примеру - "Half-Life 2 - C:\games\HL2\ ")

Потом, проверяю условия... и емли всё правда, то
ListBox1.Items.Add(REG.ReadString(REGTempBase.Strings[i]));- этим я беру из REGTempBase "значение" = "Half-Life 2 "
а вот в TempBase мне надо записать все данные!!! тоесть он должен соответствовать REGTempBase , но его содержимое уже будет зависеть от условий!!! TempBase должен содержать как "значение" так и "имя "

тоесть если содержимое REGTempBase =
________________________________________________
|имя | тип | значение |
________________________________________________|
|(по умолчанию) | REG_SZ | значение не присвоено |
| C:\games\HL2\ | REG_SZ | Half-Life 2 |
| C:\games\D3\ | REG_SZ | Doom3 |
| C:\games\q3\ | REG_SZ | Quake3 |
| C:\games\DS2\ | REG_SZ | Dungeon Siege 2 |
________________________________________________

и условие не выполняется на Half-Life 2 и Quake3, то содержимое TempBase должно быть =
________________________________________________
|имя | тип | значение |
________________________________________________|
|(по умолчанию) | REG_SZ | значение не присвоено |
| C:\games\D3\ | REG_SZ | Doom3 |
| C:\games\DS2\ | REG_SZ | Dungeon Siege 2 |
________________________________________________

а содержимое ListBox1:
_______________
Doom3 |
Dungeon Siege 2 |
_______________|

Тоесть: вопрос в следующем - как мне это сделать?
с ListBox1.Items.Add(REG.ReadString(REGTempBase.Strings[i])) - всё правильно! так надо
а вот что с TempBase?

приведу код ещё раз!

Код

ListBox1.Clear;                                                                         //TListBox
REG:= TRegistry.Create;
REG.RootKey:=HKEY_CURRENT_USER;
REG.OpenKey('Software\MySoft\Proga\Names',false);
REGTempBase:= TStringList.Create;                                       // TStrings       
TempBase:= TStringList.Create;                                             // TStrings 
REG.GetValueNames(REGTempBase);                                     //Получаю имена и их значения (!пути!)
exeFileName:=('my.exe');                                                       //String 
cfgFileName:=('my.cfg');                                                          //String 

 for i:=0 to REGTempBase.Count - 1 do                           
begin                                                        
  exeFilePath:=REGTempBase.Strings[i]+'\'+exeFileName;           //String          
  cfgFilePath:=REGTempBase.Strings[i]+'\'+cfgFileName;             //String        
  IF (FileExists (exeFilePath)) THEN                      
   begin
     IF (FileExists (cfgFilePath)) THEN
      begin
       //TempBase:=REGTempBase.Strings[i];                     //вот тут??? как правильно???
       //TempBase.Add.Всё_что_в(REGTempBase.по_счёту_[i])              //или так?
       ListBox1.Items.Add(REG.ReadString(REGTempBase.Strings[i])); 
      end;
   end
  else exit; 
end;
REG.CloseKey;
REG.Destroy;

--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Romikgy
Дата 21.10.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Код

ListBox1.Clear;                                                                         //TListBox    
REG:= TRegistry.Create;    
REG.RootKey:=HKEY_CURRENT_USER;    
REG.OpenKey('Software\MySoft\Proga\Names',false);    
REGTempBase:= TStringList.Create;                                       // TStrings        
TempBase:= TStringList.Create;                                             // TStrings    
REG.GetValueNames(REGTempBase);                                     //Получаю имена и их значения (!пути!)    
exeFileName:=('my.exe');                                                       //String    
cfgFileName:=('my.cfg');                                                          //String    
 for i:=0 to REGTempBase.Count - 1 do                            
begin                                                         
  exeFilePath:=REGTempBase.Strings[i]+'\'+exeFileName;           //String           
  cfgFilePath:=REGTempBase.Strings[i]+'\'+cfgFileName;             //String         
  IF (FileExists (exeFilePath)) THEN                       
   begin    
     IF (FileExists (cfgFilePath)) THEN    
      begin    
      
       TempBase.Add(REGTempBase.Strings[i]);              // строка :)    
       ListBox1.Items.Add(REG.ReadString(REGTempBase.Strings[i]));    
      end;    
   end    
  else exit;    
end;    
REG.CloseKey;    
REG.Destroy;

Если на в TempBase и ключ и значение , то
Код

 TempBase.Add(REGTempBase.Strings[i]+" "+REG.ReadString(REGTempBase.Strings[i]));              // строка :)    

Терь так как ты хотел?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
h2o
Дата 21.10.2005, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



чё то не работает! значит не то!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
h2o
Дата 21.10.2005, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



проще вопрос:
как из одного TStrings записать определённые данные в другой TStrings???
мне надо чтобы
Код

procedure qwerty;
var TempBase1, TempBase2 :TStrings;
begin
REG:= TRegistry.Create;
REG.RootKey:=HKEY_CURRENT_USER;
REG.OpenKey('Software\MySoft\Proga\Names',false);
TempBase1:= TStringList.Create;                                           
TempBase2:= TStringList.Create;                                      
REG.GetValueNames(TempBase1);    

TempBase2:=TempBase3;


надо TempBase2=TempBase3 тока без некоторых данных! как в примере выше когда без Half-Life 2 и Quake3
Добавлено @ 15:49
СТОП! Ничего не понимаю! все заработало!

Код

TempBase.Add(REGTempBase.Strings[i]); 


не понимаю! я потом обращаюсь и работаю с TempBase как с TStrings. я предполагал, что для правильной работы ему нужны все данные, а не только имена!

всё просто до тупости!

Romikgy
спасибо! всё заработало как надо!
с TempBase.Add(REGTempBase.Strings[i]+" "+REG.ReadString(REGTempBase.Strings[i])); - не работает!

да вообще, как этот TStrings хранит в себе данные, в каком виде? как хоть это вывести куда-нибудь чтоб посмотреть?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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