Ĺadny brzuch
Mam problem... Jak się stosuje TRY w delphi? Chodzi mi o błąd, który może powstać, gdy dany klucz w rejestrze nie istnieje.
Try
begin
// jakieś instrukcje
end;
except
end;
end;
TRATAT
aha między except a end; musisz umieścić obsługe błendu np. ShowMessage(BŁŚD);
TRATAT
cytat:Pawell napisał:
Mam problem... Jak się stosuje TRY w delphi? Chodzi mi o błąd, który może powstać, gdy dany klucz w rejestrze nie istnieje.
Przykładowy kod:
Registry := TRegistry.Create; try Registry.RootKey := HKEY_LOCAL_MACHINE; if not Registry.KeyExists('SOFTWAREJakis_program') then ShowMessage ('Klucz nie istnieje'); finally Registry.Free; end;
Funkcja KeyExists sprawdza czy dany klucz istnieje - i jeśli tak jest to zwraca wartość True (a w przeciwnym wypadku - wartość False).
Jeśli chodzi o działanie bloku try ... finally to jest tak:
Wykonywany jest kod pomiędzy liniami try a finally i w wypadku jego wykonania lub w przypadku wystąpienia wyjątku - następuje wykonanie instrukcji występujących po słowie finally.
Instrukcje po finally są wykonywane zawsze.
W kodzie który podałem po finally następuje zniszczenie obiektu Registry.
| GG:5365367 | ICQ:245363570 |
cytat:radekw1988 napisał:
Try
begin
// jakieś instrukcje
end;
except
end;
end;
No blisko - ale nie dokładnie tak.
Za dużo beginów i endów ;)
Wg mnie powinno być tak:
try [i]jakieś instrukcje[/i] except on [i]wyjątek[/i] do begin [i]obsługa wyjątku[/i] end; end;
| GG:5365367 | ICQ:245363570 |
I znowu problem :frown: Coś jest nie tak. Jak to powinno być?
Klucz u mnie istnieje, ale kiedy jest "If reg.keyexists(Nero) Then", to program w to nie wchodzi! A kiedy IF not, to wchodzi dalej i odczytuje z tego klucza. Dlaczego skoro klucz istnieje musi być IF NOT?
If not reg.keyexists(Nero) Then begin
If ((reg.ReadInteger(Nero))=1) then begin
....
end;
end;
cytat:Pawell napisał:
I znowu problem :frown: Coś jest nie tak. Jak to powinno być?
Klucz u mnie istnieje, ale kiedy jest "If reg.keyexists(Nero) Then", to program w to nie wchodzi! A kiedy IF not, to wchodzi dalej i odczytuje z tego klucza. Dlaczego skoro klucz istnieje musi być IF NOT?
Użyłeś złej funkcji.
KeyExists - sprawdza czy istnieje dany klucz
ValueExists - sprawdza czy istnieje dana wartość
Dlatego jak sprawdzałeś przy użyciu KeyExists czy istnieje klucz Nero to dostawałeś False - no bo nie ma takiego klucza, jest tylko wartość o tej nazwie.
Czyli w Twoim przypadku kod powinien wyglądać np. tak:
if reg.ValueExists(Nero) then if ((reg.ReadInteger(Nero))=1) then begin ... end;
Gdyby dalej coś nie działało to daj znać.
| GG:5365367 | ICQ:245363570 |
Dzięki Oxi, już wszystko działa jak należy!
:bananas:
Na www.4programmers.net jest artykół bodajrze Adama Boducha o wyjątkach
-----------------------
Beldzio
Delphi Rules:)
gg: 3183960
Jeszcze jedno pytanko. Jak utworzyć nową wartość w rejestrze?
cytat:Pawell napisał:
Jeszcze jedno pytanko. Jak utworzyć nową wartość w rejestrze?
Po prostu wpisujesz coś do danej wartości - jeśli ona już istnieje to zostanie zmodyfikowana a jeśli nie istnieje to zostanie utworzona.
Do zapisu użyj metod WriteXXX (XXX to wybrany typ)
A tak w ogóle to polecam TRegistry + F1 :)
| GG:5365367 | ICQ:245363570 |
Po raz kolejny dzięki i kolejne pytanie :P
Czy da się jakoś wyświetlić (w liście) listę wartości w danym kluczu?
cytat:Pawell napisał:
Po raz kolejny dzięki i kolejne pytanie :P
Czy da się jakoś wyświetlić (w liście) listę wartości w danym kluczu?
Oczywiście.
Jakbyś użył klawisza F1 tak jak podałem w poprzednim poście to sam byś pewnie do tego doszedł :)
Należy użyć metody GetValueNames, która umożliwia pobranie wszystkich wartości w bieżącym kluczu. Wartości te zapisuje do zmiennej typu TStrings. Wystarczy więc jako parametr procedury GetValueNames podać zmienną do której chcesz mieć wczytane wartości.
A właściwość Items ListBox'a jest typu TStrings...
Wrzuć na forme Button'a i ListBox'a oraz podłącz poniższy kod:
procedure TForm1.Button1Click(Sender: TObject); var Registry : TRegistry; begin Registry := TRegistry.Create; try Registry.RootKey := HKEY_LOCAL_MACHINE; Registry.OpenKey('SOFTWAREMicrosoftWindowsCurrentVersionRun', false); Registry.GetValueNames(ListBox1.Items); finally Registry.Free; end; end;
| GG:5365367 | ICQ:245363570 |
Dzięki, już wszydtko OK. Nie mam więcej pytań na ten temat.:cheesy:
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Try
begin
// jakieś instrukcje
end;
except
end;
end;
TRATAT
aha między except a end; musisz umieścić obsługe błendu np. ShowMessage(BŁŚD);
TRATAT
cytat:Pawell napisał:
Mam problem... Jak się stosuje TRY w delphi? Chodzi mi o błąd, który może powstać, gdy dany klucz w rejestrze nie istnieje.
Przykładowy kod:
Registry := TRegistry.Create; try Registry.RootKey := HKEY_LOCAL_MACHINE; if not Registry.KeyExists('SOFTWAREJakis_program') then ShowMessage ('Klucz nie istnieje'); finally Registry.Free; end;
Funkcja KeyExists sprawdza czy dany klucz istnieje - i jeśli tak jest to zwraca wartość True (a w przeciwnym wypadku - wartość False).
Jeśli chodzi o działanie bloku try ... finally to jest tak:
Wykonywany jest kod pomiędzy liniami try a finally i w wypadku jego wykonania lub w przypadku wystąpienia wyjątku - następuje wykonanie instrukcji występujących po słowie finally.
Instrukcje po finally są wykonywane zawsze.
W kodzie który podałem po finally następuje zniszczenie obiektu Registry.
| GG:5365367 | ICQ:245363570 |
cytat:radekw1988 napisał:
Try
begin
// jakieś instrukcje
end;
except
end;
end;
No blisko - ale nie dokładnie tak.
Za dużo beginów i endów ;)
Wg mnie powinno być tak:
try [i]jakieś instrukcje[/i] except on [i]wyjątek[/i] do begin [i]obsługa wyjątku[/i] end; end;
| GG:5365367 | ICQ:245363570 |
I znowu problem :frown: Coś jest nie tak. Jak to powinno być?
Klucz u mnie istnieje, ale kiedy jest "If reg.keyexists(Nero) Then", to program w to nie wchodzi! A kiedy IF not, to wchodzi dalej i odczytuje z tego klucza. Dlaczego skoro klucz istnieje musi być IF NOT?
If not reg.keyexists(Nero) Then begin
If ((reg.ReadInteger(Nero))=1) then begin
....
end;
end;
cytat:Pawell napisał:
I znowu problem :frown: Coś jest nie tak. Jak to powinno być?
Klucz u mnie istnieje, ale kiedy jest "If reg.keyexists(Nero) Then", to program w to nie wchodzi! A kiedy IF not, to wchodzi dalej i odczytuje z tego klucza. Dlaczego skoro klucz istnieje musi być IF NOT?
Użyłeś złej funkcji.
KeyExists - sprawdza czy istnieje dany klucz
ValueExists - sprawdza czy istnieje dana wartość
Dlatego jak sprawdzałeś przy użyciu KeyExists czy istnieje klucz Nero to dostawałeś False - no bo nie ma takiego klucza, jest tylko wartość o tej nazwie.
Czyli w Twoim przypadku kod powinien wyglądać np. tak:
if reg.ValueExists(Nero) then if ((reg.ReadInteger(Nero))=1) then begin ... end;
Gdyby dalej coś nie działało to daj znać.
| GG:5365367 | ICQ:245363570 |
Dzięki Oxi, już wszystko działa jak należy!
:bananas:
Na www.4programmers.net jest artykół bodajrze Adama Boducha o wyjątkach
-----------------------
Beldzio
Delphi Rules:)
gg: 3183960
Jeszcze jedno pytanko. Jak utworzyć nową wartość w rejestrze?
cytat:Pawell napisał:
Jeszcze jedno pytanko. Jak utworzyć nową wartość w rejestrze?
Po prostu wpisujesz coś do danej wartości - jeśli ona już istnieje to zostanie zmodyfikowana a jeśli nie istnieje to zostanie utworzona.
Do zapisu użyj metod WriteXXX (XXX to wybrany typ)
A tak w ogóle to polecam TRegistry + F1 :)
| GG:5365367 | ICQ:245363570 |
Po raz kolejny dzięki i kolejne pytanie :P
Czy da się jakoś wyświetlić (w liście) listę wartości w danym kluczu?
cytat:Pawell napisał:
Po raz kolejny dzięki i kolejne pytanie :P
Czy da się jakoś wyświetlić (w liście) listę wartości w danym kluczu?
Oczywiście.
Jakbyś użył klawisza F1 tak jak podałem w poprzednim poście to sam byś pewnie do tego doszedł :)
Należy użyć metody GetValueNames, która umożliwia pobranie wszystkich wartości w bieżącym kluczu. Wartości te zapisuje do zmiennej typu TStrings. Wystarczy więc jako parametr procedury GetValueNames podać zmienną do której chcesz mieć wczytane wartości.
A właściwość Items ListBox'a jest typu TStrings...
Wrzuć na forme Button'a i ListBox'a oraz podłącz poniższy kod:
procedure TForm1.Button1Click(Sender: TObject); var Registry : TRegistry; begin Registry := TRegistry.Create; try Registry.RootKey := HKEY_LOCAL_MACHINE; Registry.OpenKey('SOFTWAREMicrosoftWindowsCurrentVersionRun', false); Registry.GetValueNames(ListBox1.Items); finally Registry.Free; end; end;
| GG:5365367 | ICQ:245363570 |
Dzięki, już wszydtko OK. Nie mam więcej pytań na ten temat.:cheesy: