Toon posts:

[delphi]

Pagina: 1
Acties:
  • 244 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
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 ?

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
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 ?
Ik dacht met het commando ShellExecute... Zie ook help oid... Je start een dosprogramma hetzelfde als een windows programma.

Opmerking: kun je de volgende keer een duidelijker onderwerp (dus niet alleen [delphi]) maken?

Verwijderd

Topicstarter
ja sorry voor de rotte topic maar ik was er niet helemaal bij....

ik ga het iig proberen dankje...

  • Marv
  • Registratie: Oktober 2000
  • Laatst online: 11-06 06:52
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


Verwijderd

Topicstarter
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;
dit heb ik zo gedaan alleen dan weil ik metPKzip een geselecteerd bestand inpakken:

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. ???!!?!

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 20-08 18:34
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;

Verwijderd

Topicstarter
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;
ik krijg dan deze meldig:
[Error] Unit1.pas(46): Incompatible types: 'String' and 'PChar'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

en nou ?

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 20-08 18:34
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;)

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
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.

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

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


  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 04-05 00:03

Engineer

Software

Op 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;
Try it :)

Werkt dus niet

Verwijderd

Topicstarter
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 ?

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

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


Verwijderd

Topicstarter
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 ???

Verwijderd

FileName := ExtractFileName(StringWithFileNameOfOpenDialog);

;)

Verwijderd

Topicstarter
Op zaterdag 29 september 2001 14:49 schreef WOrKstation het volgende:
FileName := ExtractFileName(StringWithFileNameOfOpenDialog);
;)
jeah rechts DUS NEVER NOOIT dit kan niet hoe stom denk je dat ik ben !??!?

Verwijderd

Op 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 !??!?
Euh... Sorry :?

Als [S = 'c:\'test.txt'], dan geeft ExtractFileName(S) -> 'test.txt'... :(

Verwijderd

Op 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 je zo reageert zonder je Delphi compilere te gebruiken om te kijken of het werkt: behoorlijk stom... |:(

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Op zaterdag 29 september 2001 14:49 schreef WOrKstation het volgende:
FileName := ExtractFileName(StringWithFileNameOfOpenDialog);
Filename := ExtractFileName(Opendialog1.Filename);
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


Verwijderd

Topicstarter
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... |:(
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 !

Verwijderd

Topicstarter
heey het werkt nu, alleen nu wil ik niet test.txt hebben maar echt alleen 'test' hoe knip ik het laatste er nog af ?

Verwijderd

Topicstarter
Op 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 ?
heb nu dit

doel:=ExtractFileName(bron);
i:=length(doel);
doel[i]:=' ';
doel[i-1]:=' ';
doel[i-2]:=' ';
doel[i-3]:=' ';
trim(doel);

kan het netter ?

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

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/

...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 :)

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 20-09 14:26

Bergen

Spellingscontroleur

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

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
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;
En dit hele blok code is gelijk aan ChangeFileExt(FileName, '')... :)
De hele extensie wordt vervangen door een lege string.

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 20-09 14:26

Bergen

Spellingscontroleur

Hmkay, weer wat geleerd :]
Pagina: 1