![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi 7, реестр. [D7, XP]
Guz © (2010-03-22 15:54:00)Здравствуйте, уважаемые форумчане. Недавно открыл для себя Дельфи, и начал писать простейшие программы. В данный момент пытаюсь разобраться в работе с реестром. Но никак не могу понять, в чём ошибка в нижеследующем коде.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Reg:TRegIniFile;
begin
Reg:=TReginifile.Create('Test_my') ;
Reg.WriteString('','','1');
Reg.Free
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Key:TRegistry;
begin
Key.RootKey:= HKEY_CURRENT_USER;
if Key.ValueExists('test_my') then
begin
Key.OpenKey('Test_my', true);
Key.ReadString('');
Key.CloseKey;
Key.Free
end;
end;
При закрытии программы пишет ошибку. Почему?
Текст ошибки привести затруднительно, нет интернета на компьютере с Дельфи.
Игорь Шевченко (2010-03-22 18:32:00) [1]http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Медвежонок Пятачок (2010-03-22 16:37:00) [2]отличий нет.
вызывать конструктор надо для обоих.
guzerus (2010-03-22 16:36:00) [3]У меня алгоритм такой.
Программа должны быть на один запуск. Значит при закрытии вы прописываем данные в реестр, а при открытии проверяем наличие этих данных. Если есть-не запускается.
Пока что я проверю только запись и чтение, проверки ещё не делал.
В комментариях, что у меня где делается.
procedure TForm1.FormCreate(Sender: TObject);
var
Key:TRegistry; // Переменная
begin
Key.RootKey:= HKEY_CURRENT_USER;// Указываем, в какой из веток.
if Key.ValueExists('test_my') then {В этой ветке проверяем, существует ли наша переменная}
begin // Если да
Key.OpenKey('Test_my', true); // То открываем её, читаем, освобождаем...
Key.ReadString('');
Key.CloseKey;
Key.Free
end;
end;
{Если же переменной нет, то ничего. Создастся переменная при закрытии программы.}
Просто я не очень ясно понимаю, в чём отличие TRegistry от Reginifile. Вроде-бы Registry это значение ключа, так как прочитать моно только один параметр. А RIF это весь ключ.
guzerus (2010-03-22 16:36:00) [4]У меня алгоритм такой.
Программа должны быть на один запуск. Значит при закрытии вы прописываем данные в реестр, а при открытии проверяем наличие этих данных. Если есть-не запускается.
Пока что я проверю только запись и чтение, проверки ещё не делал.
В комментариях, что у меня где делается.
procedure TForm1.FormCreate(Sender: TObject);
var
Key:TRegistry; // Переменная
begin
Key.RootKey:= HKEY_CURRENT_USER;// Указываем, в какой из веток.
if Key.ValueExists('test_my') then {В этой ветке проверяем, существует ли наша переменная}
begin // Если да
Key.OpenKey('Test_my', true); // То открываем её, читаем, освобождаем...
Key.ReadString('');
Key.CloseKey;
Key.Free
end;
end;
{Если же переменной нет, то ничего. Создастся переменная при закрытии программы.}
Просто я не очень ясно понимаю, в чём отличие TRegistry от Reginifile. Вроде-бы Registry это значение ключа, так как прочитать моно только один параметр. А RIF это весь ключ.
С спасибо за нормальное обращение, не ожидал.
Сергей М. (2010-03-22 16:19:00) [5]
> При закрытии программы пишет ошибку
По идее ошибка должна возникнуть уже при открытии.
procedure TForm1.FormCreate(Sender: TObject);
var
Key:TRegistry;
begin
// Key := TRegistry.Create; // <- создание объекта, почему-то отсутствующее у тебя в коде
Key.RootKey:= HKEY_CURRENT_USER; // <- иначе обращение к свойству несуществующего объекта обязано вызвать исключительную ситуацию
guzerus (2010-03-22 16:18:00) [6]Удалено модератором
Плохиш (2010-03-22 16:15:00) [7]
> При закрытии программы пишет ошибку. Почему?
У вас ошибка в программе.
> Текст ошибки привести затруднительно, нет интернета на компьютере
> с Дельфи.
Проблемы индейцев шерифа не волнуют.