delphiextension-methodstmemo

Delphi - How to Register File extension for auto-open?


How can i auto-open a custom extension in my Delphi app ? I'm trying to make application that loads text files but with a different extension.

Example : Text.DZ | all i want is when i click the file with .DZ Extension it opens my app automatically and loads the text inside into the memo1.lines.text.

I know that i have to register my new custom extension but i have no idea how to do it and load the text into my app.

Also if you can include a source-code example that would be awesome.

Any help will be much appreciated ! and Sorry for my newbiness and bad English explanation but i hope you guys understand me (^-^)/.


Solution

  • There's a way to do it programmatically, although I don't recall how off the cuff.

    That said, if you're just wanting to do it for your own personal use, not for a piece of software you'll be distributing to others, then the easiest way is to use Windows Explorer: click the data file you want, then right-click and select Open With -> ... you'll probably need to select the Other... option at the bottom. That will bring up a dialog box that lets you choose your app. There should also be a checkbox somewhere that says something like "Make Default" or "Always Open With This" or something along those lines. Make sure that box is checked. Then click OK a couple of times and you're off to the races.

    But you'll also need to set up your app to read the filename from the command line. You use ParamStr and ParamCount for this.

    for i := 0 to ParamCount do
      ShowMessage('Parameter '+IntToStr(i)+' = '+ParamStr(i));
    

    When you double-click on the data file, it will open your app and pass this filename as ParamStr(1). So when you get it, simply do something like this:

    memo1.lines.LoadFromFile( ParamStr(1) );
    

    Use this as a STARTING POINT (it won't compile if you just copy-and-paste!):

    procedure TMyForm234:FormCreate( blah blah )
    begin
      if ParamCount > 0 then
        theMemo.Lines.LoadFromFile( ParamStr(1) );
    end;