Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateiendung mit Programm verknüpfen...?! (https://www.delphipraxis.net/100269-dateiendung-mit-programm-verknuepfen.html)

T.E. 25. Sep 2007 13:51


Dateiendung mit Programm verknüpfen...?!
 
Hallo!

Ich hoffe ich bin hiermit im Richtigen THema...

Ich habe mir eine neue Dateiendung geschaffen (*.icctmp) und mit folgender Funktion mit meinem Programm verknüpft:
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;
           end;
         end;
       end;
     end;
  finally
    Reg.Free;
  end;
  end;
end;
Installiert wird diese Endung beim Aufrufen des Programms im oncreate- ereignis mit folgendem Aufruf:
Delphi-Quellcode:
InstallExt('.icctmp', 'ICC Verlauf', 'Gespeicherter ICC Verlauf', ParamStr(0), '"%1"',0);
So nun wird die Dateiendung mit meinem Programm verküpft und wenn ich eine Datei des Typs öffne wird mein Programm auch ganz normal gestartet...nur leider wird mir der Inhalt der Datei nicht angezeigt...

Woran liegt das?

leddl 25. Sep 2007 14:01

Re: Dateiendung mit Programm verknüpfen...?!
 
Zitat:

Zitat von T.E.
So nun wird die Dateiendung mit meinem Programm verküpft und wenn ich eine Datei des Typs öffne wird mein Programm auch ganz normal gestartet...nur leider wird mir der Inhalt der Datei nicht angezeigt...

Woran liegt das?

:lol: Na du bist gut :zwinker: Nur weil du eine Dateiendung mit einem Programm verknüpfst, muss das Programm noch lange nicht wissen, was es damit zu tun hat :zwinker:
Der Dateiname der zu öffnenden Datei wird deinem Programm als Startparameter übergeben, daher musst du dann beim Start mit Delphi-Referenz durchsuchenParamCount und Delphi-Referenz durchsuchenParamStr ob, wieviele und welche Parameter du hast und dann entsprechend drauf reagieren ;)

s-off 25. Sep 2007 14:02

Re: Dateiendung mit Programm verknüpfen...?!
 
Weil Du vielleicht vergessen hast, die im ParamStr(1) als Argument übergebene Datei - wie auch immer und in was auch immer Du das tun willst - zu laden?

Bspw. so:
Delphi-Quellcode:
Stringlist.LoadFromFile(ParamStr(1));

T.E. 25. Sep 2007 14:22

Re: Dateiendung mit Programm verknüpfen...?!
 
gut und schön aber mein Programm hat öffnet die Dateien normalerweise mit Öffnen und einem OpenDialog wie muss ich das denn da machen?
Delphi-Quellcode:
procedure TTMPV.ffnen1Click(Sender: TObject);
begin
if Open.Execute then
  TempViewer.Lines.LoadFromFile(Open.FileName)
else
  TempViewer.Lines.Clear;
end;
ich kann ja irgendwie nicht ohne "Probleme" (exception) da einfach noch die Loadfromfile(Paramstr(1)) noch mit rein bringe...oder wo soll das hin??

(Sry. für die dumme frage... aber ich stell mich halt manchmal ein bisschen blöd an :gruebel: )

Apollonius 25. Sep 2007 14:32

Re: Dateiendung mit Programm verknüpfen...?!
 
Du musst genau das tun, was passiert, wenn der Nutzer die Datei manuell auswählt:
Delphi-Quellcode:
TempViewer.Lines.LoadFromFile(Paramstr(1));

s-off 25. Sep 2007 14:36

Re: Dateiendung mit Programm verknüpfen...?!
 
Ich glaube, es geht ihm eher darum, dass er nicht weiss, wo er das machen soll.

Wenn Du per OpenDialog öffnest, dann löst Du diesen doch z.B. durch einen ButtonClick aus:
Delphi-Quellcode:
Procedure TForm1.ToolButton1Click(Sender: TObject);
Begin
   If OpenDialog1.Execute Then
      Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
End;
Wenn Du eine als Argument übergebene Datei beim Start des Programms laden möchtest, dann machst Du das beispielsweise im OnCreate-Ereignis:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   If ParamStr(1) <> '' Then
      Memo1.Lines.LoadFromFile(ParamStr(1));
end;
Da müssen natürlich noch einige Fehlerbehandlungsmechanismen dazu.

Apollonius 25. Sep 2007 14:50

Re: Dateiendung mit Programm verknüpfen...?!
 
Zitat:

Zitat von Apollonius
Du musst genau das tun, was passiert, wenn der Nutzer die Datei manuell auswählt:
Delphi-Quellcode:
TempViewer.Lines.LoadFromFile(Paramstr(1));

[edit] @s-off: Wie und wo war gefragt... von mir etwas zu schnell gepostet.[/edit]

[edit]Ei verbibbsch, da hab' ich doch grad auf Zitat statt auf Edit geklickt... Sowas aber auch.[/edit]

s-off 25. Sep 2007 14:54

Re: Dateiendung mit Programm verknüpfen...?!
 
Zitat:

Zitat von Apollonius
Zitat:

Zitat von Apollonius
Du musst genau das tun, was passiert, wenn der Nutzer die Datei manuell auswählt:
Delphi-Quellcode:
TempViewer.Lines.LoadFromFile(Paramstr(1));

[edit] @s-off: Wie und wo war gefragt... von mir etwas zu schnell gepostet.[/edit]

Nein, das 'wie' hat er sich selber beantwortet:
Zitat:

Zitat von T.E.
[...]Loadfromfile(Paramstr(1)) noch mit rein bringe

Das 'wo' hingegen war noch offen.
Zitat:

Zitat von T.E.
...oder wo soll das hin??

:tongue:

Aber mal ehrlich - wollen wir uns wegen solcher Kleinigkeiten streiten? :wink:

Christian Seehase 25. Sep 2007 15:34

Re: Dateiendung mit Programm verknüpfen...?!
 
Moin T.E.,

hat zwar nichts mit Deinem eigentlichen Problem zu tun, aber:

Zu jedem OpenKey gehört auch ein CloseKey, und da fehlen bei Dir doch einige. ;-)

Schwedenbitter 18. Sep 2017 14:54

AW: Dateiendung mit Programm verknüpfen...?!
 
Hallo Torben,

nimm bitte mal im allerersten Post bei
Zitat:

Zitat von T.E. (Beitrag 680216)
...
Delphi-Quellcode:
InstallExt('.icctmp', 'ICC Verlauf', 'Gespeicherter ICC Verlauf', ParamStr(0), '"%1"',0);
...

im vorletzten Parameter die " weg!

Damit funktioniert die Übergabe von Leerzeichen nicht (mehr) - jedenfalls bei mir. Ich habe ewig gebraucht und bin auch erst durch die netten Helfer der DP drauf gekommen. Der Post wird bei google sehr weit oben gelistet. Es wäre also toll, wenn er dann auch vollständig richtig wäre :lol:


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