Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eigene Dateitypen verarbeiten? (https://www.delphipraxis.net/25906-eigene-dateitypen-verarbeiten.html)

DeadyEye 14. Jul 2004 17:50


Eigene Dateitypen verarbeiten?
 
Ich habe mit Hilfe des folgenden Codes einen eigenen Dateityp regestriert. Nun öffnet bei klick auf eine Datei zwar das richtige Programm, aber wie kann ich das einbinden dass mein Programm mitbekommt dass es von der Datei geöffnet wurde und mit dieser Datei dann etwas machen kann.



Folgenden Code habe ich zur Dateityp regestrierung verwendet, es ist ein Beispielcode aus einer Code Libary

Delphi-Quellcode:
uses
  registry, shlobj;

procedure TForm1.RegisterFileType(prefix: string; exepfad: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    //create a new key --> .pci
    reg.OpenKey('.' + prefix, True);
    try
      //create a new value for this key --> pcifile
      reg.Writestring('', prefix + 'file');
    finally
      reg.CloseKey;
    end;
    //create a new key --> pcifile
    reg.CreateKey(prefix + 'file');
    //create a new key pcifile\DefaultIcon
    reg.OpenKey(prefix + 'file\DefaultIcon', True);
    //and create a value where the icon is stored --> c:\project1.exe,0 
    try
      reg.Writestring('', exepfad + ',0');
    finally
      reg.CloseKey;
    end;
    reg.OpenKey(prefix + 'file\shell\open\command', True);
    //create value where exefile is stored --> c:\project1.exe "%1"
    try
      reg.Writestring('', exepfad + ' "%1"');
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  RegisterFileType('pci', 'c:\project1.exe');
end;

Ultimator 14. Jul 2004 17:53

Re: Eigene Dateitypen verarbeiten?
 
Ich denke, du meinst, dass z.B. der Text in der Datei in ein Memo geladen wird, richtig?
Wenn ja, dann nimm doch Memo1.Lines.Loadfromfile(Paramstr(0)); oder wie das heißt. :fruebel: :-)

DeadyEye 14. Jul 2004 17:57

Re: Eigene Dateitypen verarbeiten?
 
Ja, so weit war ich auch schon, aber mein Hauptproblem ist, dass ich nciht weiß wie ich es überprüfen kann ob das programm normal gestartet worden ist oder eben durch einen Datei. Muss ich das mit ParamCount machen?

neolithos 14. Jul 2004 18:00

Re: Eigene Dateitypen verarbeiten?
 
Ja, ParamStr(?) und ParamCount sind die Mittel, die dich zum Ziel führen.

ParamStr(0) -> Anwendungsname
ParamStr(1) -> 1. Parameter
ParamStr(2) -> 2. Parameter
.
.
.
ParamStr(n) -> n. Parameter

ParamCount gibt die Anzahl der Parameter an.

Ultimator 14. Jul 2004 18:00

Re: Eigene Dateitypen verarbeiten?
 
Naja, du kannst doch überprüfen, ob das ParamStr(0) der Name deiner Exe ist oder der Name einer x-beliebigen Datei.
Delphi-Quellcode:
if ParamStr(0)='C:\Project1.exe' then ShowMessage('Programm alleine gestartet!')
else ShowMessage('Das Programm wurde mit einer datei geöffnet!');
Ich denke, das ist, was du meinst :-)

DeadyEye 14. Jul 2004 18:04

Re: Eigene Dateitypen verarbeiten?
 
Also muss ich nur überprüfen ob Paramcount größer als 0 ist?

neolithos 14. Jul 2004 18:07

Re: Eigene Dateitypen verarbeiten?
 
Ja, das zeigt an, dass ein oder mehrere Parameter übergeben wurden.

@Ultimator:
In ParamStr(0) steht immer der Anwendungsname, mit oder ohne Pfad!
Das ist in Windows so standard.

Ich kann es aber auch ändern, da man bei CreateProcess die Parameter angeben kann.

DeadyEye 14. Jul 2004 18:13

Re: Eigene Dateitypen verarbeiten?
 
O.k. ich habs hinbekommen. Vielen Dank. Ich war die ganze zeit immer kurz davor, bin immer nur an Kleinigkeiten hängengeblieben, aber ihr habt mir ja da rausgeholfen. :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr.

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