X
ďťż

Ł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
  •