Dag, ik wil in een delphi programma dos programma's kunnen aanroepen, hoe kan ik dit doen?? ik wil bijvoorbeeld pkunzip opstarten met bepaalde opties hoe doe ik dit ?
Ik dacht met het commando ShellExecute... Zie ook help oid... Je start een dosprogramma hetzelfde als een windows programma.Op woensdag 12 september 2001 15:57 schreef BOFH het volgende:
Dag, ik wil in een delphi programma dos programma's kunnen aanroepen, hoe kan ik dit doen?? ik wil bijvoorbeeld pkunzip opstarten met bepaalde opties hoe doe ik dit ?
Opmerking: kun je de volgende keer een duidelijker onderwerp (dus niet alleen [delphi]) maken?
code:
1
2
3
4
5
6
| uses ShellApi; procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(Handle, 'open','notepad.exe',nil,nil, SW_Shownormal) end; |
Check de help voor de exacte werking (waar ik nil nil heb staan kun je nog de parameters en working directory kiezen.
"Everything I've ever done or said is the complete opposite of what I've wanted" -- George
dit heb ik zo gedaan alleen dan weil ik metPKzip een geselecteerd bestand inpakken:Op woensdag 12 september 2001 16:12 schreef Marv het volgende:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open','notepad.exe',nil,nil, SW_Shownormal)
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var bron : string;
begin
opendialog1.Execute;
if opendialog1.FileName <> '' then
begin
bron:=opendialog1.FileName;
ShellExecute
(Handle,'open','c:\pkzip.exe','c:\test2.zip',',bron,',
SW_Shownormal )
end;
end;
maar dan pakt ie de tweede parameter niet, hij ziet bron als een string dus hij pakt niet de informatie die erin zit.
pkzip zegt dan ook : File ''bron'' not found !
hoe geef ik deze opdracht:
pkzip test.zip bron
waarin bron een variabele is. ???!!?!
ik denk:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| procedure TForm1.BitBtn2Click(Sender: TObject); var bron : string; begin opendialog1.Execute; if opendialog1.FileName <> '' then begin bron:=opendialog1.FileName; ShellExecute (Handle,'open','c:\pkzip.exe','c:\test2.zip',bron, SW_Shownormal ) end; end; |
ik krijg dan deze meldig:Op zaterdag 15 september 2001 15:28 schreef douweh het volgende:
ik denk:
code:
1 2 3 4 5 6 7 8 9 10 11 12 procedure TForm1.BitBtn2Click(Sender: TObject); var bron : string; begin opendialog1.Execute; if opendialog1.FileName <> '' then begin bron:=opendialog1.FileName; ShellExecute (Handle,'open','c:\pkzip.exe','c:\test2.zip',bron, SW_Shownormal ) end; end;
[Error] Unit1.pas(46): Incompatible types: 'String' and 'PChar'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
en nou ?
code:
1
2
3
4
5
6
7
8
9
10
11
12
| procedure TForm1.BitBtn2Click(Sender: TObject); var bron : string; begin opendialog1.Execute; if opendialog1.FileName <> '' then begin bron:=opendialog1.FileName; ShellExecute (Handle,'open','c:\pkzip.exe','c:\test2.zip',PChar(bron), SW_Shownormal ) end; end; |
en t moet werken;)
Geef aan in de opties van de opendialog dat het bestand moet bestaan. Dan kan je nl if OpenDialog1.Execute then begin gebruiken. OpenDialog1.Execute geeft alleen true terug als er een bestand is geselecteerd en op OK is geklikt.
Deze manier wordt ook aangegeven in de help. Het bovenstaande zal wellicht ook werken (wat gebeurd er als je de tweede keer dat je het ding gebruikt en op annuleren klikt?), maar ik denk dat dit een betere stijl is.
No offence, just a suggestion.
Deze manier wordt ook aangegeven in de help. Het bovenstaande zal wellicht ook werken (wat gebeurd er als je de tweede keer dat je het ding gebruikt en op annuleren klikt?), maar ik denk dat dit een betere stijl is.
No offence, just a suggestion.
Waarom zo uitgebreid ??? Het kan toch ook zo :
code:
1
2
3
4
5
| procedure TForm1.BitBtn2Click(Sender: TObject); begin if opendialog1.Execute then ShellExecute(Handle,'open','c:\pkzip.exe','c:\test2.zip',PChar(opendialog1.FileName), SW_Shownormal ) end; |
...beter bekend als AMFan
Try itOp zaterdag 15 september 2001 21:01 schreef Delpix het volgende:
Waarom zo uitgebreid ??? Het kan toch ook zo :
code:
1 2 3 4 5 procedure TForm1.BitBtn2Click(Sender: TObject); begin if opendialog1.Execute then ShellExecute(Handle,'open','c:\pkzip.exe','c:\test2.zip',PChar(opendialog1.FileName), SW_Shownormal ) end;
Werkt dus niet
nee het werkt dus niet, zoals het hierboven staat dan pakt hij alle bestanden in de root van de C: in.... dit wil ik niet ik wil dat het bestand dat ik selecteer wordt ingepakt.
iemand nog suggesties ?
iemand nog suggesties ?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| unit ZipTest;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellApi, StdCtrls;
type
TForm1 = class(TForm)
bntSelecteer: TButton;
OpenDialog1: TOpenDialog;
procedure bntSelecteerClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
PKZIP = 'F:\Pk250dos\pkzip.exe';
DoelBestand = 'F:\Pk250dos\blaat.zip';
implementation
{$R *.DFM}
procedure TForm1.bntSelecteerClick(Sender: TObject);
begin
// Gebruik de onderstaande regel alleen als je de DOS versie van pkzip gebruikt ( 8.3 bestandsnamen )
// Verwijder hem anders
OpenDialog1.Options := [ofHideReadOnly,ofPathMustExist,ofFileMustExist,ofOldStyleDialog];
// --------------------
if opendialog1.execute then
ShellExecute(Application.Handle,'open',PKZIP, PChar(' ' + DoelBestand + ' ' + OpenDialog1.Filename), Pchar(ExtractFileDrive(PKZIP)),SW_SHOWNOACTIVATE);
end;
end. |
Ik heb'm getest en het werkt hier. Verander wel de constanten PKZIP en DOELBESTAND.
ps: Houd er rekening mee dat als je de Dos versie van pkzip gebruikt alleen 8.3 bestandsnamen gebruikt.
...beter bekend als AMFan
oke PERFECT MAN !, nu zou ik ook graag de bestands naam weten van het geselecteerde bestand, dus niet
c:\documenten\bestand.txt maar alleen 'bestand.txt' hoe haal ik dit uit de opendiaglog ???
c:\documenten\bestand.txt maar alleen 'bestand.txt' hoe haal ik dit uit de opendiaglog ???
jeah rechts DUS NEVER NOOIT dit kan niet hoe stom denk je dat ik ben !??!?Op zaterdag 29 september 2001 14:49 schreef WOrKstation het volgende:
FileName := ExtractFileName(StringWithFileNameOfOpenDialog);
Verwijderd
Euh... SorryOp zaterdag 29 september 2001 14:59 schreef BOFH het volgende:
[..]
jeah rechts DUS NEVER NOOIT dit kan niet hoe stom denk je dat ik ben !??!?
Als [S = 'c:\'test.txt'], dan geeft ExtractFileName(S) -> 'test.txt'...
Filename := ExtractFileName(Opendialog1.Filename);Op zaterdag 29 september 2001 14:49 schreef WOrKstation het volgende:
FileName := ExtractFileName(StringWithFileNameOfOpenDialog);
om precies te zijn.
Waarbij Filename een string variable (var filename:string) kan zijn of gewoon de Filename property van de Opendialog1 (Opendialog1.filename := Extrac..enz enz);
...beter bekend als AMFan
ik had het al wel geprobeerd maar ik dacht dat is zo achterlijk en het ging ook zo fout ik denk je neemt me in de maling.. sorry het is me nu duidelijk dat je wel probeert te helpen ! mijn dank is dan ook groot !Op zaterdag 29 september 2001 15:09 schreef WOrKstation het volgende:
[..]
Als je zo reageert zonder je Delphi compilere te gebruiken om te kijken of het werkt: behoorlijk stom...
heey het werkt nu, alleen nu wil ik niet test.txt hebben maar echt alleen 'test' hoe knip ik het laatste er nog af ?
heb nu ditOp zaterdag 29 september 2001 16:02 schreef BOFH het volgende:
heey het werkt nu, alleen nu wil ik niet test.txt hebben maar echt alleen 'test' hoe knip ik het laatste er nog af ?
doel:=ExtractFileName(bron);
i:=length(doel);
doel[i]:=' ';
doel[i-1]:=' ';
doel[i-2]:=' ';
doel[i-3]:=' ';
trim(doel);
kan het netter ?
Ik had ooit eens een progie gemaakt voor iemand zonder ervaring in Delphi dat de bestandsextentie verwijderde en er een andere extentie voor in de plaats zette.
EXE+ Source:
http://members1.chello.nl/~t.kopp/thomas/delphi/ext/
EXE+ Source:
http://members1.chello.nl/~t.kopp/thomas/delphi/ext/
...beter bekend als AMFan
Verwijderd
er bestaat ook 'ExtractFileExt(FileName: string)' en 'ChangeFileExt(FileName, NewFileExt: string)'.
Je hoeft het wiel niet steeds opnieuw uit te vinden; beetje delphi help-files doorspitten is al genoeg
Je hoeft het wiel niet steeds opnieuw uit te vinden; beetje delphi help-files doorspitten is al genoeg
Jah om 'test.txt' in 'test' om te zetten is toch wel extreem simpel? Lijkt me niet nodig om dat ook nog te vragen... je zoekt toch gewoon de punt op met Pos en dan pak je alles voor de punt met Copy? Dat kon je zelf ook bedenken, wel ff logisch nadenken voor een vraag te stellen graag. Maargoed, omdat het een zonnige nacht is, hier ff een stukje bugvrije code 
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| function TForm1.ZonderExtentie (const Tekst: string): string;
var
PuntPositie, Lengte: integer;
begin
if (Tekst = '') or (Pos ('.', Tekst) = 0) then
result := Tekst
else
begin
PuntPositie := Pos ('.', Tekst);
Lengte := Length (Tekst);
if PuntPositie = Length (Tekst) then
Result := Copy (Tekst, 1, Lengte - 1)
else
Result := Copy (Tekst, 1, PuntPositie - 1);
end;
end; |
Verwijderd
En dit hele blok code is gelijk aan ChangeFileExt(FileName, '')...Op zondag 30 september 2001 00:37 schreef GerbenW het volgende:
Jah om 'test.txt' in 'test' om te zetten is toch wel extreem simpel? Lijkt me niet nodig om dat ook nog te vragen... je zoekt toch gewoon de punt op met Pos en dan pak je alles voor de punt met Copy? Dat kon je zelf ook bedenken, wel ff logisch nadenken voor een vraag te stellen graag. Maargoed, omdat het een zonnige nacht is, hier ff een stukje bugvrije code
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16function TForm1.ZonderExtentie (const Tekst: string): string; var PuntPositie, Lengte: integer; begin if (Tekst = '') or (Pos ('.', Tekst) = 0) then result := Tekst else begin PuntPositie := Pos ('.', Tekst); Lengte := Length (Tekst); if PuntPositie = Length (Tekst) then Result := Copy (Tekst, 1, Lengte - 1) else Result := Copy (Tekst, 1, PuntPositie - 1); end; end;
De hele extensie wordt vervangen door een lege string.
Hmkay, weer wat geleerd :]
Pagina: 1