Avatar billede smith1 Nybegynder
14. marts 2005 - 16:23 Der er 17 kommentarer

Spg ang ParamStr

Hvordan kan jeg få mit program til at load flere filer som er mærkeret?? hvis jeg højre klikker på en fil i windowsxp og vælger "åben med" -> mit program. Så loader den filen uden promblemer. Hvis jeg mærker 3 filer og klikker "åben med" så loader den kun den ene fil !? Hvordan kan jeg få den til at loop igennem alle ParamStr(1)

procedure TForm1.FormCreate(Sender: TObject);
begin
if ParamCount = 1 then
begin
  if ExtractFileExt(ParamStr(1)) = '.txt' then
  begin
    //load filen
  end;
end;
end;
Avatar billede martinlind Nybegynder
14. marts 2005 - 18:32 #1
hvis ParamCount > 1 kan du bare lave en forløkke

for Cnt := 1 to ParamCount do
begin
  ParamStr(Cnt)
end;
Avatar billede smith1 Nybegynder
14. marts 2005 - 20:23 #2
Jeg kan ikke få det til at virke. ParamCount er altid 1! også når jeg mærkere 4,5 filer og siger åben med.

Param 0 = Program fil navn
Param 1 = File man siger åben med til
Param 2 = c:\test.exe -huh
?? eller er jeg totalt lost ?

procedure TForm1.FormCreate(Sender: TObject);
var
  cnt: integer;
begin
    if ParamCount > 1 then
    begin
      for Cnt := 1 to ParamCount do
      begin
        showmessage(ParamStr(Cnt));
      end;
    end;
end;
Avatar billede hrc Mester
14. marts 2005 - 23:48 #3
Måske kan du analysere/fortolke parametrene bedre vha CmdLine?
Avatar billede martinlind Nybegynder
15. marts 2005 - 09:13 #4
Eller også skal man gøre det på en anden måde, måske lidt alla når man bruger drag'n'drop
Avatar billede roz Nybegynder
15. marts 2005 - 11:05 #5
Kan ske du i Object Inspectoren under options skal sætte AllowMultipleFiles til true?
Avatar billede smith1 Nybegynder
15. marts 2005 - 11:28 #6
Det her er hvad jeg får med cmdline. program sti + 1 af de filer jeg vælger.
"D:\Delphi\test.exe"  "C:\Documents and Settings\Smith\Dokumenter\test.txt"

Hvis den bare gad at return sådan her:
"D:\Delphi\test.exe"  "C:\test.txt"  "C:\test2.txt"  "C:\test3.txt"

roz hvor ser du AllowMultipleFiles til true hende? kan ikke se den på min form1? opendialog har en er det den du mener ?
Avatar billede hrc Mester
15. marts 2005 - 12:32 #7
Det må være ofAllowMultiSelect i TOpenFile-dialogen. Bemærk, at filerne der vælges, ikke gemmes i dens Filename-property, men findes i Files-listen.
Avatar billede smith1 Nybegynder
16. marts 2005 - 10:00 #8
hrc <- snakker du også om opendialog nu ? eller er det om cmdline?
Avatar billede smith1 Nybegynder
17. marts 2005 - 11:34 #9
hrc du kunne vel ikke fortælle mig hvordan jeg kan få cmdline til at virke som jeg gerne vil have den til?
Avatar billede hrc Mester
17. marts 2005 - 12:07 #10
Jeg snakker om OpenDialogen, ja.

Lavede lige en lille test to programmer. En hvor man valgte filer og programmet som blev kaldt med filerne som parameter


I Project1.exe på knappens OnClick skrev jeg følgende:

procedure TForm1.ButtonClick(Sender: TObject);
var
  i : integer;
  st : string;
begin
  if OpenDialog.Execute then
  begin
    // Vis valgte filer i en listboks
    ListBox.Items.Assign(OpenDialog.Files);

    // Byg parameterstreng
    st := '';
    for i := 0 to OpenDialog.Files.Count - 1 do
    begin
      st := st + '"' + OpenDialog.Files[i] + '"';
      if i < OpenDialog.Files.Count - 1 then
        st := st + ', ';
    end;

    // Kald mit testprogram
    ShellExecute(Handle,
                'open',
                PAnsiChar(ExtractFilePath(Application.ExeName)+'project2.exe'),
                PAnsiChar(st),
                nil,
                SW_SHOWNORMAL);
  end;
end;


I projekt2.exe har jeg en Edit og en Listbox og har OnCreate til at se sådan ud:

procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  Edit.Text := CmdLine;

  ListBox.Items.Clear;
  for i := 0 to ParamCount do
    ListBox.Items.Add(ParamStr(i));
end;

Hvis du sender en email, så kan jeg pakke det ned til dig.
Avatar billede hrc Mester
17. marts 2005 - 12:08 #11
En lille rettelse til Project1

    // Byg parameterstreng
    st := '';
    for i := 1 to OpenDialog.Files.Count - 1 do // Tog også exe-filen med
    begin
      st := st + '"' + OpenDialog.Files[i] + '"';
      if i < OpenDialog.Files.Count - 1 then
        st := st + ', ';
    end;
Avatar billede hrc Mester
17. marts 2005 - 12:09 #12
Et pædagogisk alternativ til MSDN om beskrivelse af ShellExecute findes her:

  http://delphi.about.com/od/windowsshellapi/l/aa082499.htm
Avatar billede smith1 Nybegynder
17. marts 2005 - 17:28 #13
det virker, men det var ikke helt hvad jeg ville.

Din kode sender filerne fra opendialog til program 2 via ShellExecute som params.

Jeg ville gerne sende de mærkeret filer fra windows til mit program uden at starte programmet først. jeg har kun et program/en exe fil.
Avatar billede hrc Mester
18. marts 2005 - 10:10 #14
OK, men det er da ikke dit skrevne spørgsmål, er det? Umiddelbart vil jeg sige at du har fået op til flere gangbare svar på dit spørgmål.

Jeg tror at løsningen på den sidste nød er, at du henter en af de mange "kun-én-instans-af-programmet"-units. Der er ganske velfungerende versioner, bl.a. i "Developers guide to Delphi".

Sådan en unit søger efter kørende instanser af dit program og hvis den finder en så har du et "handle" som du kan sende filerne. Alternativt, hvis den ikke findes blandt de kørende, så starter den en instans (og sender filerne).
Avatar billede smith1 Nybegynder
18. marts 2005 - 11:42 #15
Det er der præcis hvad mit skrevene spg er .

Du har vel ikke et link til denne unit ? kan ikke rigtig google kun-én-instans-af-programmet"-units :)
Avatar billede hrc Mester
18. marts 2005 - 12:32 #16
Du skulle bare søge +delphi +"one instance". Jeg fik 9750 hits og sender her nogle af de første:

http://www.undu.com/Articles/980422a.htm
http://www.silicmdr.com/Freeware.htm
http://www.swissdelphicenter.ch/torry/showcode.php?id=42

Torry er nok stedet hvor du finder flest gratis moduler.
Avatar billede smith1 Nybegynder
18. marts 2005 - 13:59 #17
Det du linker til er jo så man kun kan have programmet kørende en gang, og hvis man åbner prgrammet mere end en gang så for man en showmessage.

Det er ikke det jeg ville.. ved ikke om det er mig der ikke har forklaret mig selv godt nok?

I windows(explorer) kan man højre klikke på filer og vælge "åben med" og så vælge det program man vil åbne filen med. Den fil man vælger bliver jo gemt i param1, og der bruger jeg den kode jeg har skrevet i starten af tråden. Men hvis jeg nu vælger 5 filer og højre klikker og igennen vælger "åben med" så bliver kun EN af de 5 filer tilføjet fordi det er den der bliver gemt i param1 og de andre 4 bliver vist sprugtet over. Jeg vil gerne have den til at tilføje alle filerne!
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

IT-JOB