Avatar billede rekun Nybegynder
26. januar 2007 - 18:17 Der er 6 kommentarer og
1 løsning

Forbind med .TD3

Jeg søger en løsning for ved at trykke på en  knap at forbinde mit program med filer som ender på .TD3 så det er mit program som åbner. Der skal bruges registreringsdatabasen tror jeg. Svaret skal være færdigt ( lige til at kopire ind og så complie ) og må meget gerne indeholde nogle // som forklaring på hvad der sker, jeg er nemlig helt ny til registreringsdatabser.
Avatar billede stone Forsker
26. januar 2007 - 21:18 #1
Avatar billede hrc Mester
27. januar 2007 - 00:05 #2
function TfrmMain.AssociateExtension(const aApplicationName, aApplicationTitle,
                                          aExtension, aFilename  : string) : integer;
begin
  with TRegistry.Create do
    try
      RootKey := HKEY_CLASSES_ROOT;

      if OpenKey('\' + aApplicationName,true) then
      begin
        WriteString('',aApplicationTitle);
        CloseKey;
      end;

      if OpenKey('\' + aExtension,true) then
      begin
        WriteString('',aApplicationName);
        CloseKey;
      end;

      if OpenKey('\'+aApplicationName,true) then
      begin
        WriteString('shell\open\command',aFilename + ' %1');
        CloseKey;
      end;
    finally
      Free;
    end;
end;
Avatar billede hrc Mester
27. januar 2007 - 00:11 #3
Stone kom først - man kan sgu da heller ikke tillade sig at slukke PC'en. Har modificeret lidt ved min rutine så nu er den helt analog med den stone refererer til

I øvrigt underligt at der ikke er et API-kald der registrerer lige netop det. Det er jo ikke for at windows API'en mangler procedurer og funktioner.

function TfrmMain.AssociateExtension(const aApplicationName, aApplicationTitle,
                                          aExtension, aFilename  : string) : integer;
begin
  result := false;
  with TRegistry.Create do
    try
      RootKey := HKEY_CLASSES_ROOT;

      if OpenKey('\' + aApplicationName,true) then
      begin
        WriteString('',aApplicationTitle);
        CloseKey;
      end;

      if OpenKey('\' + aExtension,true) then
      begin
        WriteString('',aApplicationName);
        CloseKey;
      end;

      if OpenKey('\'+aApplicationName,true) then
      begin
        WriteString('shell\open\command',aFilename + ' %1');
        CloseKey;
      end;
      // Notify the world. Shout it out: I have changed!
      SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
      result := true;
    finally
      Free;
    end;
end;
Avatar billede rekun Nybegynder
27. januar 2007 - 12:46 #4
hjælp!!

stone jeg har prøvet dit forslag. har denne kode:
procedure TForm1.RegisterFileType ;
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.ForbindmedTD31Click(Sender: TObject);
var dir : string;
begin
dir := ExtractFilePath(Application.ExeName);
RegisterFileType('TD3', 'c:\project1.exe');
end;


men ved:
RegisterFileType('TD3', 'c:\project1.exe');
giver den fejlen
[Pascal Error] Unit1.pas(258): E2034 Too many actual parameters
kan i hjælpe??, prøver hrc's forslag om lidt.
Avatar billede stone Forsker
27. januar 2007 - 13:23 #5
har du prøvet at trykke F1 ved fejlen så får du en forklaring
Avatar billede rekun Nybegynder
27. januar 2007 - 13:46 #6
hmm næ.. har jeg sgu aldrig hørt om.

men jeg kan derværre ikke lige rette fejlen da jeg ikke fatter en brik af engelsk. så kan i give en kort oversættelse og en rettelse??
Avatar billede rekun Nybegynder
27. januar 2007 - 14:31 #7
så løste problemet sig vist alligevel. her er den endelige kode, hvis der er andre som kigger med:

uses: registry, shlobj;

procedure TForm1.RegisterFileType(prefix: string; exepfad: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey('.' + prefix, True);
    try
      reg.Writestring('', prefix + 'file');
    finally
      reg.CloseKey;
    end;
    reg.CreateKey(prefix + 'file');
    reg.OpenKey(prefix + 'file\DefaultIcon', True);
    try
      reg.Writestring('', exepfad + ',0');
    finally
      reg.CloseKey;
    end;
    reg.OpenKey(prefix + 'file\shell\open\command', True);
    try
      reg.Writestring('', exepfad + ' "%1"');
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

procedure TForm1.ForbindmedTD31Click(Sender: TObject);
var dir : string;
begin
dir := ExtractFilePath(Application.ExeName);
RegisterFileType('TD3', (dir + 'project1.exe'));
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester