Einzelnen Beitrag anzeigen

Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Registry DWORD wert erstellen

  Alt 16. Okt 2006, 16:57
Also Dein Code oben, gefällt mir ganz und gar nicht.

1.
Das Objekt wird erst im try-Block erzeugt -> schlägt dies fehl, wird es trotzdem freigegeben.
-> Es wird ein Objekt freigegeben, das möglicherweise nicht erstellt wurde.

Besser:
Delphi-Quellcode:
reg := TRegistry.Create;
try
  // do something
finally
  reg.Free;
end;
2.
Was geöffnet wird, sollte zum Schluss auch wieder geschlossen werden - am Besten das ganze in noch einem try-finally-Block.
Außerdem kann das Öffnen auch fehlschlagen, z.B. wenn es den Schlüssel in der Registry nicht gibt - dafür gibt es eine if-Abfrage:
Delphi-Quellcode:
if reg.OpenKey(...) then
try
  // do something
finally
  reg.CloseKey;
end;
Das ganze sähe dann so aus:
Delphi-Quellcode:
uses Windows, Registry;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  reg : TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if reg.OpenKey('SOFTWARE\Policies\Microsoft\Windows\System\Shutdown',true) then
    try
      reg.WriteInteger('HibernateAsDefault',1);
      reg.WriteInteger('ShowHibernateButton',1);
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
end;

//Edit:
zur MessageBox (hat zwar nix mehr mit dem Thema zu tun, aber was soll's...):
verwende mal Application.MessageBox, wie Du da die Buttons und Symbole als Parameter übergibst, steht in der Delphi-Hilfe.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat