Creating an Associator
(Page 1 of 4 )
Have you ever wondered how installation programs are able to associate a file extension with a program? Or how when you double click on a MS Word file, Microsoft Word automatically starts up and loads that particular file? Well, in this article I will explain how it is done.
What you need
You need a copy of Borland Delphi, any version. Although not really necessary, it might be beneficial to you to have a look at the http://delphi.about.com web site for a introductory tutorial on how to interact with the registry.
Code
Let's build the UI. Start a new application and add two TEdits, two buttons and two labels. Add "Associate" and "Exit" as the button captions, and rename them "btnAssoc" and "btnClose" respectively. Add another button and call it "btnbrowse." Rename the edits to "edappname" and "edext." Then add a TOpendialog from the Dialog Tab and rename it to "op." Arrange them on the form to your liking.
You should now have something like this:

Double click on the "Exit" button and add the following code:
procedure TForm1.btnCloseClick(Sender: TObject);
begin
close;
end;
The code above is self explanatory; it closes the application.
Double click on the browse button and add the following code:
procedure TForm1.btnbrowseClick(Sender: TObject);
begin
if op.Execute then begin
edappname.Text:=op.FileName;
end
end;
The code above enables you to browse for the application name on your local disk.
Double click on the "Associate" button and add the following code:
procedure TForm1.btnAssocClick(Sender: TObject);
var
reg:tregistry; //registry object
error:boolean;
begin
if (edappname.text = '') OR (edext.text = '') then begin
MessageDlg('Please ensure that you''ve filled in ALL the fields.', mtError, [mbOk], 0);
exit;
end;
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
reg.LazyWrite := false;
try
if
{Add Program Support}
reg.OpenKey('.'+edExt.Text+'shellopencommand', true) then begin
{Invoke the program passing the file name as the first parameter}
reg.WriteString('', edappname.Text+' %1 ');
reg.CloseKey;
error:=false;
end
else begin
error:=true;
end;
if not error then begin
reg.OpenKey('.'+edExt.Text+'DefaultIcon', true);
{Use the first icon in the executable to display}
reg.WriteString('', edappname.Text+',0');
reg.CloseKey;
end;
if error then begin
MessageDlg('There''s been an error creating this association, please check that you''ve entered the information correctly.', mtInformation ,[mbOk], 0);
exit;
end
else begin
if MessageDlg(extractfilename(edappname.Text)+ ' have now been associated ' +#13#10+ 'with ' +'extention - '+ '.'+edExt.Text+'!'#13#10+ ' Would you like to make another Association?', mtInformation , [mbYes, mbNo], 0) = mrYes then
begin
edext.Clear;
edappname.Clear;
end
else begin
close;
end;
end;
//************
finally
reg.Free;
end;
close;
end;
The first thing that happens is a check to see whether the edappname and edext TEdit fields are empty or not. This is very important since you are going to use these parameters to make registry entries.
Next: Continuing with the code >>
More Delphi-Kylix Articles
More By Jacques Noah