Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Icon ändern (https://www.delphipraxis.net/23508-icon-aendern.html)

sui 4. Jun 2004 01:08


Icon ändern
 
Hi,

ich möchte, nachdem ich eine Datei verschlüsselt habe, das sich
das Icon der verschlüsselten Datei ändert. Quasi als Markierung.
Nachdem die Verschlüsslung feddich ist, müsste dann doch eine then-
Anweisung kommen.

Hab dafür dies hier gefunden: WM_SETICON

Dax 4. Jun 2004 06:16

Re: Icon ändern
 
WM_SETICON funktioniert nur für Fenster. Wenn da Icon der Datei im Explorer ändern willst, musst die eine Dateiendung registrieren und für diese Endung ein Icon setzen. Wenn jemand interessiert ist (ausser dir) mach ich Tuturial.

Ultimator 4. Jun 2004 09:33

Re: Icon ändern
 
Ja, ich! Hier! *sichmeld* :mrgreen:

Meflin 4. Jun 2004 09:37

Re: Icon ändern
 
Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
                    OpenWith, ParamString: String; IconIndex: Integer): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
     begin
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(Extension, True);
      WriteString('', ExtDescription);
      OpenKey('\' + ExtDescription, True);
      WriteString('', FileDescription);
      OpenKey('DefaultIcon', True);
      WriteString('', OpenWith + ','+IntToStr(IconIndex));
      OpenKey('\' + ExtDescription + '\Shell\Open\Command', True);
      WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
     end;
   Result := True;
  except
   Result := False;
  end;
  Reg.Free;
end;

function UnInstallExt(Extension, ExtDescription: String): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
     begin
      RootKey := HKEY_CLASSES_ROOT;
      DeleteKey(Extension);
      DeleteKey('\' + ExtDescription);
     end;
   Result := True;
  except
   Result := False;
  end;
  Reg.Free;
end;

MathiasSimmack 4. Jun 2004 09:38

Re: Icon ändern
 
Ach, Meflin, und da hatte sich Dax schon so gefreut. :)
Aber btw: das hatten wir alles [dp="Dateityp registrieren"]schon[/dp].

Meflin 4. Jun 2004 09:40

Re: Icon ändern
 
mir fällt auf das steht noch garnicht in der code lib. da sollts aber schleunigst rein...

MathiasSimmack 4. Jun 2004 09:44

Re: Icon ändern
 
Nur als Tipp (im DF müsste sich irgendwo noch eine entsprechende Routine von mir rumtreiben): Wenn du wirklich eine clevere, universelle Funktion für die Code-Lib schreiben willst, dann sorge dafür, dass man auch das Verb selbst wählen kann und nicht bloß auf "open"
Zitat:

Delphi-Quellcode:
OpenKey('\' + ExtDescription + '\Shell\Open\Command', True);

festgelegt ist.

Ach Ja: Und eine Prüfung ("OpenKey" ist eine Funktion, und "WriteString" erzeugt im Fehlerfall eine Exception) wäre auch nicht schlecht.

Kriegst du das hin?
Okay, dann hast du einen sehr guten Beitrag für die Code-Lib. ;)

Meflin 4. Jun 2004 09:49

Re: Icon ändern
 
wär natürlich auch net weiter schwer. nur welche ausser open gibts denn da noch so?

MathiasSimmack 4. Jun 2004 10:12

Re: Icon ändern
 
Wirf doch einen Blick in das Kontextmenü diverser Dateitypen.
Öffnen, Ausführen, Drucken, ... usw. usw.

Wie du die Verbs nennst, ist letztlich egal (wobei "open", "edit" und "print" natürlich üblicher Standard sind). Wichtig wäre vielleicht auch, dass so eine Registrierungsfunktion nicht einfach blind einen neuen Eintrag erstellt, sondern dass sie vielleicht nachschaut ob der Typ schon registriert ist und dann nur noch den schon vorhandenen Schlüssel ergänzt.

Zu beachten gäbe es also einiges.

Hier übrigens mein Vorschlag aus dem DF. Sicher auch noch nicht perfekt, aber man könnte mal über das System diskutieren. Evtl. entsteht als Ergebnis ja der ultimative Code-Lib-Code. ;)
In Bezug auf das eben genannte Problem müsste man meine "RegisterFileType"-Routine bspw. so erweitern, dass sie (wie oben erwähnt) prüft ob es den Dateityp evtl. schon gibt. Im Augenblick ignoriert sie das nämlich auch, wenn ich ehrlich sein soll. :oops:

Meflin 5. Jun 2004 13:28

Re: Icon ändern
 
so, hier einminiupdate ;-)
Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
                    OpenWith, ParamString: string; IconIndex: Integer;
                    ExtVerb: string = 'Open'): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
     begin
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(Extension, True);
      WriteString('', ExtDescription);
      OpenKey('\' + ExtDescription, True);
      WriteString('', FileDescription);
      OpenKey('DefaultIcon', True);
      WriteString('', OpenWith + ','+IntToStr(IconIndex));
      OpenKey('\' + ExtDescription + '\Shell\'+ExtVerb+'\Command', True);
      WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
     end;
   Result := True;
  except
   Result := False;
  end;
  Reg.Free;
end;
alles andere wäre für meine zwecke overkill, aber ich werde keinen daran hindern, es hinzuzufügen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 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