Avatar billede sirius Nybegynder
22. maj 2000 - 15:32 Der er 13 kommentarer og
3 løsninger

åbn filer med program

Hvordan får man sit delphi program til at åbne en fil ?

det er lidt svært at forklare.. altså ligesom hvis man dobbeltklikker på en txt fil så bliver den åbner med notepad..

jeg kan godt få windows til at åben programet.. men ikke til at åbne filen ind i programmet :(
Avatar billede lrj Nybegynder
22. maj 2000 - 15:43 #1
Er der svaret på for nyeligt..

http://www.eksperten.dk/spm.asp?id=13789

Kan det bruges?
Avatar billede blackthorne Nybegynder
22. maj 2000 - 15:51 #2
ShellExecute(0, PChar('Open'), PChar(FILNAVN), NIL, PChar(STARTMAPPE), SW_SHOWNORMAL) > 32 // Return value > 32 = Success

FILNAVN skal erstattes med din fil og STARTMAPPE angiver hvilken mappe current directory skal være for programmet.
Avatar billede snowball Novice
22. maj 2000 - 15:57 #3
Hvorfor ikke bare bruge ShellExecute ???

ShellExecute(Handle,'open',PChar('c:\Bootlog.txt'),pchar(''),pchar(''),SW_SHOWNORMAL);

Husk af tilføje ShellAPI under Uses !!!

Snowball
Avatar billede snowball Novice
22. maj 2000 - 16:00 #4
hhmmm...for langsom ;)

Og så er der lige en af kendte Eksperten bugs: Der skal være 2 ' i pchar !!!

Snowball
Avatar billede sirius Nybegynder
22. maj 2000 - 22:43 #5
sjensen er inde på det rigtige men er der ikke en der kan forklare det lidt nærmere...
Avatar billede blackthorne Nybegynder
23. maj 2000 - 00:24 #6
hvad er det præcis du vil.

1. vil du starte et program, afhængig af filtypen fra delphi.
2. vil du registere en ny filtype + hvilken icon der skal vises

eller begge dele.

Hvis det er punkt 1 så er både mit og snowballs foreslag korrekt.
Avatar billede blackthorne Nybegynder
23. maj 2000 - 00:32 #7
er min antagelse korrekt.
du har en ny filtype (*.ny) (lads os sige en ny bitmaptype)
du vil gerne have at dit program starter når brugeren dobbelklikker på filer af (*.ny), derefter starter dit program + at *.ny filen vises i programmet.

Hvis min antagelse er korrekt, så skal du bare lave dit program om så den kan modtage parameter ala dette visny.exe "Test.ny"

Indefra visny programmet skal du bare extracte "test.Ny"

I din fil type skal du sætte "action" til "open" og sætte "application use to perform action" til at være følgende VisNy.exe %1
Avatar billede sirius Nybegynder
23. maj 2000 - 22:07 #8
du har fat i det rigte blackthorne..

men forklar lige lidt mere hvad jeg skal gøre
Avatar billede blackthorne Nybegynder
24. maj 2000 - 09:41 #9
du laver et program der modtager parameter f.eks.

visny.exe c:\billede.ny
parameterne kan fanges i delphi med paramstr og paramcount se hjælp.

I folder option i exploreren, skal du oprette din fil type. hvor du angiver hvilken extension du vil registere. samt hvilken program du vil associaler med extensionen. I "actions" kan du vælge "open" i action editboksen. og vælg bagefter edit, her skrives der ala dette C:\WINNT\System32\NOTEPAD.EXE "%1" under application used to perform edit.

Jeg må tilstå at jeg ikke har lavet det før. Men hvis min teori holder stik burde det virke.
Avatar billede sirius Nybegynder
24. maj 2000 - 14:55 #10
det vidste jeg godt...

men hvordan laver man det i delphi ?

Det med parametere ??
Avatar billede blackthorne Nybegynder
24. maj 2000 - 16:10 #11
lånt lidt fra delphi

The following example beeps once for each “beep” passed in on the command line. The example terminates the application if  “exit” is passed in on the command line.

procedure TForm1.FormCreate(Sender: TObject);

var
  i: Integer;
  for i := 0 to ParamCount – 1 do
  begin
    if LowerCase(ParamStr(i)) = 'beep' then
      Beep(10000,1000)
    else if (LowerCase(ParamStr(i)) = 'exit' then
      Application.Terminate;
  end;
end;
Avatar billede michaelras Nybegynder
24. maj 2000 - 04:39 #12
snowball: i stedet for PChar('') altså 2 stk ' kan du da bare bruge nil

Michael
Avatar billede borrisholt Novice
24. maj 2000 - 08:45 #13
Hej Sirius

Aaah ! Nu dæmmere den for mig! Det du vil er at registere en bestemt filtype til dit program .... Nå men du skal bruge det her ... Det er testet i D3 D4 og D5 så det skulle virke ....

procedure SetAssociation(Ext, Key, Name : String; IconIndex : Integer);
var
  Regist : TRegistry;
begin
  Regist := TRegistry.Create;
  try
    with Regist do
      begin
        RootKey := HKEY_LOCAL_MACHINE;
        if OpenKey('\Software\Classes\.'+Ext,true) then
          begin
            WriteString('',Key);
              if OpenKey('\Software\Classes\'+Key,true) then
                begin
                  WriteString('', Name);
                  if OpenKey('\Software\Classes\'+Key+'\DefaultIcon',true) then
                    WriteString('',Application.ExeName+','+IntToStr(IconIndex));
                  if OpenKey('\Software\Classes\'+Key+'\shell\open\command',true) then
                    WriteString('',Application.ExeName+' %1');
              end;
        end;
      end;
  finally
    Regist.Free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  SetAssociation('Mps', 'The_Mp3_System', 'The Mp3 System',0 );
end;

Jens B
Avatar billede sirius Nybegynder
25. maj 2000 - 17:32 #14
*grrr*

altså hvis man kører
xx.exe /open c:\fil.xx

så åbner xx.exe filen...
Avatar billede borrisholt Novice
26. maj 2000 - 17:55 #15
Jammen Sirius det kunne du jo bare havde sagt ... :-)

Så prøv den her :

procedure TForm1.FormCreate(Sender: TObject);
var
  s : String;
begin
  s := AnsiUpperCase(ParamStr(1));
  if s = '/OPEN' then
  begin
    ShowMessage('Open file ' + ParamStr(2));
  end;
end;

Alternativt kan du sætte koden overe i din dpr fil ....

Jens B
Avatar billede sirius Nybegynder
20. april 2001 - 11:41 #16
slut!
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