| Autor |
Beitrag |
whitef
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Di 08.01.08 19:09
hallo, habe leider im forum nichts passendes gefunden.
ich habe einen befehl der bei mir schon in der rechten maustaste (kontextmenü in win) enthalten ist. Diesen möchte ich gerne in mein projekt integrieren.
Dies ist der Befehl in der maustaste
Quelltext 1:
| C:\\Programme\\WinRAR\\rar.exe a -ep1 -r -s -m1 -md64 -hpblabla -v99m -rr0 \"%1\".rar \"%1\" |
ich habe eine listbox. diese listbox hab ich schon gefüllt (mit diversen dateien).
nun möchte ich gerne bei Klick auf Button den obigen befehl mit jedem eintrag in der listbox abarbeiten lassen.
Nur weiss ich leider nicht wie...
kann mir da jemand behilflich sein?
Falls noch fragen bestehn, fragt einfach...
Vielen Dank... Moderiert von Narses: Topic aus VCL (Visual Component Library) verschoben am Di 08.01.2008 um 19:22
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 08.01.08 19:28
Stichwort "ShellExecute"
Reicht das? 
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 08.01.08 19:44
Xentar hat folgendes geschrieben: | | Reicht das? |
Falls nicht, das ist der komplette Source:
Delphi-Quelltext 1:
| ShellExecute(0, 'open', 'C:\Programme\WinRAR\rar.exe', 'a -ep1 -r -s -m1 -md64 -hpblabla -v99m -rr0 "'+ListBox1.Items[ListBox1.ItemIndex]+'".rar "'+ListBox1.Items[ListBox1.ItemIndex]+'"', nil, SW_SHOW |
Code ist ohne Gewähr. Musste mal ausprobieren, aber ich denke, er klappt.
Du musst vorher noch die Unit ShellAPI einbinden. Dann rufst du die ShellExecute auf, und übergibtst die Parameter. Ich weiß gerade nicht genau, was die genullten Parameter sin, aber der rest bedeutet: - open: Muss beim Aufrufen von EXE-Dateien immer open sein, weil Executabels nun mal nur ausgeführt werden können.
- C:\Program...AR\rar.exe: Name der aufzurufenden Datei
- a -ep1 -r ...".rar "%1": Parameter. Ich bin mir nicht sicher, ob die Darstellung 1:1 von Windows übernommen werden darf, aber ich denke, das klappt.
Zuletzt bearbeitet von Yogu am Di 08.01.08 22:02, insgesamt 1-mal bearbeitet
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 08.01.08 21:45
Yogu hat folgendes geschrieben: | | a -ep1 -r ...".rar "%1": Parameter. Ich bin mir nicht sicher, ob die Darstellung 1:1 von Windows übernommen werden darf, aber ich denke, das klappt. |
Ich denk mal, dass man den Parameter %1 durch den Dateinamen aus der ListBox ersetzen muss? Normalerweise (also im Kontextmenü vom Explorer) wird hier der Dateiname der angeklickten Datei übergeben. Wir klicken nun aber keine Datei an, sondern wählen eine aus der Liste.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 08.01.08 22:00
Äh, ja, klar. Da hab ich wohl nicht aufgepassts
Ich hab nur die Backslashes von PHP (o. ä.) rausgemacht, sonst nicht so sehr auf den Rest geachtet. Ich hab's mal verbessert.
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Mi 09.01.08 21:36
vielen dank für die antworten...
mein problem besteht allerdings weiterhin.
ich bin jetzt soweit, dass der erste eintrag aus meiner listbox per ShellExecute mit den richtigen parametern ausgeführt wird.
Problem ist nur, ich habe mehr als einen eintrag in der listbox.
Hier ein kleiner Auszug meines projektes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Form1.syntax.Text := '-RAR a -ep1 -r -s -md64 '; Form1.all.Text := Form1.syntax.Text + '-m' + Form1.cm.Text + ' ' + Form1.Edit11.Text + Form1.Edit22.Text + Form1.output.Text + ' ' + Form1.ListBox.Items[Form1.ListBox.ItemIndex]; ShellExecute(Handle, nil, PChar(Form1.Edit3.Text), PChar(Form1.all.Text), nil, SW_SHOW); |
Wie bekomme ich das hin, das ein eintrag nach dem anderen aus der listbox mit dem gleichen ShellExecute-befehl (wie oben im code) ausgeführt wird?
Ich denke es liegt hier dran: "Form1.ListBox.Items[Form1.ListBox.ItemIndex]"
Finde allerdings keinen ausweg...
Zudem stellt sich noch die frage wie ich nur die dateinamen aus der Listbox rausfiltere, damit diese auch an shellexecute mitübergeben werden können? Sonst würde ja immerwieder die datei mit dem namen des ersten eintrages überschrieben werden
Bsp: Listbox:
C:\1\1.txt > 1.rar
C:\1\2.txt > 2.rar
C:\1\3.txt > 3.rar
C:\1\4.txt > 4.rar
C:\1\5.txt > 5.rar
C:\1\6.txt > 6.rar
ich hoffe ihr habt meine grottenschlechte erklärung verstanden...
Könnt ihr mir weiterhelfen.....???
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mi 09.01.08 21:47
Delphi-Quelltext 1:
| ListBox1.Items.Strings[i] |
ExtractFilePath, ExtractFileName ...
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Mi 09.01.08 23:20
naja ich müsste ja irgendwie eine schleife einbauen, weiss aber nicht genau wie...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| "nimm den ersten eintrag aus listbox, filter den dateinamen und kopiere ihn in shellexecute(parameter) und mache shellexecute mit ihm,
nimm den zweiten eintrag aus listbox, filter den dateinamen und kopiere ihn in shellexecute(parameter) und mache shellexecute mit ihm,
nimm den dritten eintrag aus listbox, filter den dateinamen und kopiere ihn in shellexecute(parameter) und mache shellexecute mit ihm,
usw. |
ich habe wirklich keine ahnung wie dass zu stande bekommen soll... wäre super nett wenn ich hilfe bekomme.
mein fachabi in informatik nehm ich erst in einem halben jahr
mfg
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mi 09.01.08 23:59
Musst Du noch etwas umbauen aber im Prinzip müsste es das sein was Du brauchst.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click(Sender: TObject); var i:Integer; begin i:=ListBox1.ItemIndex; if i > -1 then for i:=0 to ListBox1.Count-1 do if ListBox1.Selected[i] then ListBox2.Items.Add(ExtractFileName(ListBox1.Items.Strings[i])); end; |
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Do 10.01.08 10:53
schonmal danke.
aber damit bekomm ich nur den dateinamen in eine neue listbox, bzw . andere komponenten.
weiterhin bräuchte ich noch hilfe bei abarbeiten der listbox.
Der befehl shellexecute soll für jeden nicht markierten eintrag in der listbox ausgeführt werden.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Do 10.01.08 10:59
Delphi-Quelltext 1:
| if ListBox1.Selected[i] = False then |
Wo Ich dann als Anwender doch sehr irritiert wäre wenn das was Ich nicht ausgewählt habe abgearbeitet wird aber naja...
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Do 10.01.08 22:07
der anwender hat vorab die möglichkeit mittels opendialog die dateien auszuwählen und hinzuzufügen. mit einem anderen button kann er markierte einträge löschen, denke das müsste reichen.
damit wirklich alle einträge angesprochen werden habe ich nun noch ein: Form1.ListBox.SelectAll; hinzugefügt.
so sieht mein ergebnis zur Zeit aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| Form1.ListBox.SelectAll; i:=Form1.ListBox.ItemIndex; if i > -1 then for i:=0 to Form1.ListBox.Count-1 do if Form1.ListBox.Selected[i] then begin Form1.ListBox2.Items.Add(ExtractFileName(Form1.ListBox.Items.Strings[i])); a:=Form1.ListBox2.ItemIndex; Form1.syntax.Text := '-RAR a -ep1 -r -s -md64 '; Form1.all.Text := Form1.syntax.Text + '-m' + Form1.cm.Text + ' ' + Form1.Edit11.Text + Form1.Edit22.Text + Form1.output.Text + Form1.ListBox2.Items.Strings[a] + ' ' + Form1.ListBox.Items.Strings[i]; ShellExecute(Handle, nil, PChar(Form1.Edit3.Text), PChar(Form1.all.Text), nil, SW_SHOW); end; |
Ich möchte das er ein eintrag aus der liste nach dem anderen abarbeitet, aber das funktioniert nicht.... WIESO NUR?!?!?!
ich könnte ausflippen... kann mir niemand noch n tip geben?
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Do 10.01.08 22:30
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Do 10.01.08 23:16
das "Form1.ListBox2.Items.Add(ExtractFileName(Form1.ListBox.Items.Strings[i]))"
ist gar nicht so schlecht, das kann ich denk ich mal gut verwenden.
also so sieht das momentan bei mir aus...
Moderiert von Narses: Bild als Anhang hochgeladen.
rein optisch beschissen, ok.
die beiden edit-felder oben werden zum abschluss versteckt, ich will nur beim testen wissen ob der pfad korrekt ist.
im moment wird nur der erste eintrag (=mp3 / 9mb) verarbeitet (über shellexecute gesplittet).
dies funktioniert!
Allerdings werden nicht die nächsten einträge angesprochen... Kopie_(2).mp3, Kopie_(3).mp3 usw...
Einloggen, um Attachments anzusehen!
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Do 10.01.08 23:29
Hast Du es mal mit Showmessage ausprobiert Dir den Pfad anzeigen zu lassen.
Kann es sein das deine Output datei überschrieben wird, weil Du den Namen nicht änderst ?
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Do 10.01.08 23:55
könnte gut sein... hehe
wenn nur eine datei hinzufüge und abarbeiten lasse, geht ein dos-fenster auf und zeigt den stand an.
wenn ich mehrere dateien hinzufüge und abarbeite lasse, gehen ganz schnell dos-fenster auf und wieder zu, aber beim letzten bleibt er dann stehen und verarbeitet.
also überschreiben tut er sie eigentlich nicht, das dos fenster (Rar.exe) würde mich fragen.
ich dachte mit den "/!!!!!!!!!!!!!!" markierten stellen würde er jedem eintrag seinen eigenen namen anfügen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Form1.ListBox2.Items.Add(ExtractFileName(Form1.ListBox.Items.Strings[i])); /!!!!!!!!!!!!!! a:=Form1.ListBox2.ItemIndex; Form1.syntax.Text := '-RAR a -ep1 -r -s -md64 '; Form1.all.Text := Form1.syntax.Text + '-m' + Form1.cm.Text + ' ' + Form1.Edit11.Text + Form1.Edit22.Text + Form1.output.Text + Form1.ListBox2.Items.Strings[a] + ' ' + /!!!!!!!!!!!!!! Form1.ListBox.Items.Strings[i]; ShellExecute(Handle, nil, PChar(Form1.Edit3.Text), PChar(Form1.all.Text), nil, SW_SHOW); end; |
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 11.01.08 00:28
Du musst doch deinen Beitrag noch Editiert haben vorher stand da nichts mit (a) a wird in der Schleife ja nicht erhöht das kann nicht klappen.
Wie gesagt setze vor ShellExecute eine Showmessage und überprüfe die Pfade mal auf Richtigkeit.
Könntest vieleicht mal hier ein Beispielpfad angeben wie er aussehen sollte (Ausgeschrieben). Was steht denn in den ganzen Edits.
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Fr 11.01.08 00:59
bei dem anhängendem bild, habe ich mir sehr viel mühe mit paint gegeben, bitte nicht lachen
ich sage an dieser stelle schonmal danke, dass du dir die mühe machst und hilfst...
Einloggen, um Attachments anzusehen!
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 11.01.08 01:26
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| i:=Form1.ListBox.ItemIndex; if i > -1 then for i:=0 to Form1.ListBox.Count-1 do begin Form1.syntax.Text := '-RAR a -ep1 -r -s -md64 '; Form1.all.Text := Form1.syntax.Text + '-m' + Form1.cm.Text + ' ' + Form1.Edit11.Text + Form1.Edit22.Text + Form1.output.Text + ' ' + Form1.ListBox1.Items.Strings[i]; Showmessage(Form1.all.Text); ShellExecute(Handle, nil, PChar(Form1.Edit3.Text), PChar (Form1.all.Text), nil, SW_SHOW); end; |
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
whitef 
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Fr 11.01.08 01:50
mh... scheint fast zu funktionieren!!!
jetzt happert es nur noch am output-dateinamen.
da keiner vergeben ist, nennen die sich jetzt ".part1.rar"
und beim abarbeiten des folgenden eintrages in der listbox, versucht die Rar.exe natürlich die vorhandenen soeben erstellten dateien zu überschreiben...
|
|