Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zu TRegistry (https://www.delphipraxis.net/105637-frage-zu-tregistry.html)

MrKnogge 26. Dez 2007 17:30


Frage zu TRegistry
 
Moin,

in diesem Thread:
http://www.delphipraxis.net/internal...=824052#824052

wurde ich darauf hingewiesen, dass nicht alle Registry-Einträge die ich geöffnet habe wieder geschlossen werden. Nun habe ich die entsprechende Funktion überarbeitet und sie sieht nun wie folgt aus:

Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): boolean;
var
  reg: TRegistry;
begin
  result := false;
  if Extension <> '' then
  begin
    if Extension[1] <> '.' then
      Extension := '.' + Extension;

    reg := TRegistry.Create;
    try
      reg.RootKey := HKEY_CLASSES_ROOT;
      if reg.OpenKey(Extension, true) then
      begin
        reg.WriteString('', ExtDescription);
        reg.CloseKey;
        if reg.OpenKey('\' + ExtDescription, true) then
        begin
          reg.WriteString('', FileDescription);
          reg.CloseKey;
          if reg.OpenKey('DefaultIcon', true) then
          begin
            reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex]));
            reg.CloseKey;
            if reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', true) then
            begin
              reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString]));
              result := true;
              reg.CloseKey;
            end;
          end;
        end;
      end;
    finally
      reg.Free;
    end;
  end;
end;

Die Verknüpfung und die Beschreibung werden auch brav gesetzt, nur mit dem Iconindex scheint es zu hapern, statt das Icon aus meiner Anwendung erstellt Windows nun selbst eins (sieht aus wie ein weises Blatt auf dem das Haupticon meiner Anwenung zu sehen ist).

Was mach ich oben falsch ?

Gruß
Christian

MrKnogge 28. Dez 2007 11:59

Re: Frage zu TRegistry
 
ganz lieb *push*

mkinzler 28. Dez 2007 12:02

Re: Frage zu TRegistry
 
Schließe die Keys an der richtigen Stelle, also nach dem Öffnen/Schließen der Subkeys

DeddyH 28. Dez 2007 12:14

Re: Frage zu TRegistry
 
Ungetestet:
Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): boolean;
var
  reg: TRegistry;
begin
  result := false;
  if Extension <> '' then
  begin
    if Extension[1] <> '.' then
      Extension := '.' + Extension;

    reg := TRegistry.Create;
    try
      reg.RootKey := HKEY_CLASSES_ROOT;
      if reg.OpenKey(Extension, true) then
      begin
        reg.WriteString('', ExtDescription);
        if reg.OpenKey('\' + ExtDescription, true) then
        begin
          reg.WriteString('', FileDescription);
          if reg.OpenKey('DefaultIcon', true) then
          begin
            reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex]));
            if reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', true) then
            begin
              reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString]));
              result := true;
              reg.CloseKey;
            end;
            reg.CloseKey;
          end;
          reg.CloseKey;
        end;
        reg.CloseKey;
      end;
    finally
      reg.Free;
    end;
  end;
end;
Wobei sich meine Hilfe dazu ausschweigt, ob jedes OpenKey ein neues Handle anfordert und behält. Falls nicht, würde auch das letzte CloseKey genügen.

Diamondback2007 28. Dez 2007 12:43

Re: Frage zu TRegistry
 
kleiner tipp:

setze doch deine Registry anweisungen in einen try finally block

also so:

Delphi-Quellcode:
try
  OpenKey(...);
   Blub;
   Foo;
finally
   Closekey;
dann werden sie schlüssel auf jeden fall wieder gschlossen
und es ist recht übersichtlich! :)

gruß

MrKnogge 28. Dez 2007 21:52

Re: Frage zu TRegistry
 
@DeddyH
Wenn ich mit OpenKey ein Schlüssel öffne, dann verschwinden doch aber die Infos über den bisherigen key oder merkt sich reg alle geöffneten Schlüssel ?

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz