![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() есть кусок кода:
Код:
procedure TConnectToServerForm.FormShow(Sender: TObject); var Registry: TRegistry; begin Registry := TRegistry.Create; // Set position in list server Registry.RootKey := HKEY_CURRENT_USER; Registry.OpenKey('Software\Configurator', true); try SQLServerCombobox.ItemIndex := Registry.ReadInteger('LastIndexServerList'); except SQLServerCombobox.ItemIndex := 0; end; Registry.CloseKey; // Set login in list server Registry.RootKey := HKEY_CURRENT_USER; Registry.OpenKey('Software\Configurator', true); try SQLLoginEdit.Text := Registry.ReadString('LastLoginServerList'); except SQLLoginEdit.Text := ''; end; Registry.CloseKey; Registry.Free; end; Exeption c текстом: First chance exception at $75F59617. Exception class ERegistryException with message 'Failed to get data for 'LastIndexServerList''. Process configurator.exe (3932) Выскакивает только один раз при чтении именно этого Int значения. При чтении строкового параметра exception не выскакивает. Почему при чтении строкового параметра exception не выскакиевает? Ни одного из параметров в реестре нет. Ни строкового ни интового. --- win7, d2010 |
#2
|
|||
|
|||
![]() программу запускаешь с правами админа?
|
#3
|
||||
|
||||
![]() Не в провах админа дело. Просто он читаетзначение, а его нету. там где у тебя SQLServerCombobox.ItemIndex := 0; добав ище одну строку
WriteInteger('Value',0); У тебя созастца отдельная ячейка в реестре и при следующем запуске ошибку выбивать не будет. Не твори зла, и жизнь повернется к тебе передом ![]() |
#4
|
|||
|
|||
![]() Цитата:
|
#5
|
||||
|
||||
![]() Rat, при чтении строкового параметра ошибки и не будет т.к. значение отсутствие значения это уже есть какая-то строка, а для числа это недопустимое значение, вот он и ругается.
Я делал так: Код:
function IntKeyIsPresent(rKey:HKEY; Path, Name:string; var KeyValue:integer):boolean; begin Result:=False; try R:=TRegistry.Create; R.RootKey:=rKey; R.OpenKey(Path,True); if R.KeyExists(Name)=True then begin KeyValue:=R.ReadInteger(Name); Result:=True; end else KeyValue:=0; R.CloseKey; Except R.Free; end; end; Поживу - увижу, Доживу - узнаю, Выживу - учту. ![]() [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#6
|
||||
|
||||
![]() потому что в писании написано:
Цитата:
Последний раз редактировалось NumLock, 08.09.2010 в 16:09. |
#7
|
|||
|
|||
![]() NumLock, Вы правы. Проглядел это в хелпе.
Всё теперь понятно. Еще вопросик в догонку. Я так понял что Registry.RootKey := HKEY_CURRENT_USER; необходимо вызывать каждый раз перед открытием ключа, иначе после Registry.CloseKey; у меня Registry.RootKey становиться равным последнему открытому ключу. Это заметно при записи. Код:
procedure TConnectToServerForm.FormClose(Sender: TObject; var Action: TCloseAction); var i : Integer; Registry: TRegistry; begin // Save list servers Registry := TRegistry.Create; Registry.RootKey := HKEY_CURRENT_USER; Registry.OpenKey('Software\Configurator\ListServer', true); for i := 0 to SQLServerComboBox.Items.Count - 1 do begin Registry.WriteString('server' + IntToStr(i), SQLServerCombobox.items.Strings[i]); end; Registry.CloseKey; Registry.RootKey := HKEY_CURRENT_USER; // Save position from server list to registry Registry.OpenKey('Software\Configurator', true); Registry.WriteInteger('LastIndexServerList', SQLServerCombobox.ItemIndex); Registry.CloseKey; Registry.RootKey := HKEY_CURRENT_USER; // Save login servers to registry Registry.OpenKey('Software\Configurator', true); Registry.WriteString('LastLoginServerList', SQLLoginEdit.Text); Registry.CloseKey; Registry.Free; end; Если не указывать Registry.RootKey := HKEY_CURRENT_USER; то у меня создаются ключи Software\Configurator\Software\Configurator Я прав? Последний раз редактировалось Rat, 08.09.2010 в 17:29. |
#8
|
||||
|
||||
![]() TRegistry создается с RootKey = HKEY_CURRENT_USER. RootKey сам не меняется, что, имхо, правильно.
|