Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TDoscommand Probleme (https://www.delphipraxis.net/135054-tdoscommand-probleme.html)

aramintaros 3. Jun 2009 23:28


TDoscommand Probleme
 
Hallo und einen wünderschönen (vielleicht auch gehabt zu haben :lol: )

ich habe vor ein par Tagen den TDosCommand kennegelernt und bin auch begeistert, bis heute jedenfalls. Wenn ich dem sage, daß er mehr als 1 mal etwas erledigen soll dann kommen da sehr unterschliedliche Ergebnisse. Hier mal der Quellcode.
Delphi-Quellcode:
procedure TForm1.getvideoinf_ffmpegClick(Sender: TObject);
var counter: integer;
begin
  for counter:= 0 to ListView1.Items.Count- 1 do // Hier wird gezählt wieviele Filme in der ListView sind
  begin
    SingleVideoName:= (ListView1.Items.Item[counter].SubItems.Strings[0]); // Dem "SingleVideoName" der Name zugewiesen
    Order:= 'E:\FFmpeg\ffmpeg.exe -i '+ SingleVideoName; // "Order" ist eine StringVariable die dem FFMpeg mitteilt was er tun soll
    DosCommand1.Lines:= Memo1.Lines; // Die Dos-Ausgabe kommt hier ins Memo1
    DosCommand1.CommandLine:= Order; // TDosCommand bekommt hier seinen Befehl, den er laut ListViewCount abarbeiten soll (In diesem Fall 4 mal)
    DosCommand1.Execute; // und hier führt er Ihn aus
  end;
end;
So habe ich mir das jedenfalls vorgestellt.
Aber was ich dabei rausbekomme ist meistens nur die Info über den letzten Film, wie gesagt meisten, manchmal auch nur der Ansatz von FFMpeg, der Rest schwebt dann im Daten Nirwana.
Wie kann ich den TDoscommand dazu bringen, ALLES der Reihe nach ins Memo1 zu schreiben, ohne das etwas verloren geht?
Habe schon Stunden gebrütet und weis nun nicht mehr weiter, hoffentlich könnt Ihr mir helfen, erstmal Danke und weiterhin einen Wunderschönen :lol:

//Edit Ich habe den sleep nicht mehr im Quelltext stehen.

jaenicke 3. Jun 2009 23:55

Re: TDoscommand Probleme
 
Was sucht eine Frage in der Sparte für Vorschläge für die Code-Library... :roll:

Zur Frage: Kann es sein, dass in Execute oder beim Zuweisen der Eigenschaft Lines der aktuelle Inhalt gelöscht wird? Dann wäre der nämlich jedesmal weg. ;-)

aramintaros 4. Jun 2009 00:04

Re: TDoscommand Probleme
 
Uups, da habe ich mich wohl vertan, das gehört hier ganz sicher nicht hierher. :oops:

Zur Frage, so ist es, jedesmal ist der Text den ich in der CMD-Box sehen kann bei mir weg oder nur teilweise in meinem Memo, manchmal auch nur irgend etwas von dem was FFMeg ausgibt. Wie kriege ich das gelöst??

omata 4. Jun 2009 00:13

Re: TDoscommand Probleme
 
Verwende doch mal das Ereignis OnNewLine + Memo.Lines.Append(...)

aramintaros 4. Jun 2009 00:17

Re: TDoscommand Probleme
 
Werde das morgen probieren, nun ist es Zeit fürs Bett. Ich bedanke mich und wünsch dir eine gute Nacht.

aramintaros 4. Jun 2009 12:05

Re: TDoscommand Probleme
 
Ich habe den ganzen Morgen daran gearbeitet und bin zu keiner Lösung gekommen. Warum verschluckt der TDosCommand fast alles?? :?:
Funktioneirt der vielleicht in einer "for do" Anweisung nicht?? Kann mir jemand behilflich sein??

jaenicke 4. Jun 2009 12:23

Re: TDoscommand Probleme
 
Ich kann es schlicht nicht reproduzieren, bei mir klappt das wunderbar. Auch wenn ich das mehrfach hintereinander ausführe.

Bei mir fehlt nichts, es wird alles normal angezeigt.

// EDIT:
Aber jetzt sehe ich den Fehler: Das liegt an deinem Sleep...
Schau dir mal das Ereignis OnTerminated an...

aramintaros 4. Jun 2009 14:50

Re: TDoscommand Probleme
 
Den sleep habe ich nur zur visuellen Kontrolle genommen, der ist sonst abgeschaltet, in einem TEdit sind die Filme der Reihe nach zu sehen, aber im Memo kommt nicht wirklich etwas an.

jaenicke 4. Jun 2009 14:52

Re: TDoscommand Probleme
 
Nein, ich meine, du wartest einfach ein paar Millisekunden, währendessen dein Programm aber nicht reagieren kann, da es ja eingeschläfert ist. Da kommt also in der Zeit nichts an. Danach startest du direkt den nächsten Befehl ohne zu warten bis der vorherige fertig ist...

aramintaros 4. Jun 2009 15:20

Re: TDoscommand Probleme
 
Der sleep ist nicht mehr vorhanden, ich habe den nur benötigt um zu schauen ob alles, was in der ListView steht abgearbeitet wird. Habe mir zum Test die Namen der Filme in einem Edit anzeigen lassen, dafür brauchte ich den, obwohl im Edit alles sauber ablief kam im Memo nichts an, also nichts was zuverlässig wäre.

jaenicke 4. Jun 2009 15:33

Re: TDoscommand Probleme
 
Ja, aber du wartest nicht, dass der Befehl beendet ist...
Da ist wie wenn du jemanden was fragst und dich dann direkt zum nächsten umdrehst und den fragst ohne auf Antwort zu warten...

Klaus01 4. Jun 2009 15:40

Re: TDoscommand Probleme
 
. wie omata schon oben geschrieben hat,
nutze doch onNewLine zur Ausgabe.

Zitat:

Zitat von http://maxxdelphisite.free.fr/doscmd.htm
Execute a DOS program or batch file et get outputs (text in the console)
via an event OnNewLine(Sender: TObject; NewLine: string; OutputType: TOutputType).

You do not need to wait the end of the execution to get outputs, you get it line by line.
You can also send text to console input via the procedure SendLine(Value: string; Eol: Boolean).

Grüße
Klaus

jaenicke 4. Jun 2009 15:45

Re: TDoscommand Probleme
 
Ja, oder halt wie ebenfalls schon gesagt das Event OnTerminated, was ausgelöst wird, wenn der Befehl abgearbeitet ist.

cervicor 26. Feb 2011 18:02

AW: TDoscommand Probleme
 
Hallo,

ich versuche auch gerade diese Komponente zu nutzen. Leider habe ich nicht so den richtigen Erfolg.

Ich verwende die Komponente in Delphi2010 unter Win7 (64bit). Ich kann das Programm ausführen, bekomme aber nur einen unsinnigen Output. Ich nutze zum Auslesen der Commandline das Ereignis onNewLine und führe ein Append in ein TMemo.Lines durch. Ich bekomme nur Chinesische Zeichen. Setze ich die Eigenschaft OEMConvert im Memo auf True erhalte ich nur Unterstriche und wenige Ziffern als Ausgabe. Ich vermute ein Problem mit den 16bit-Chars. Ich denke die Komponente ist für 8Bit-Chars entwickelt worden. Ich habe mich noch nicht getraut alles auf AnsiChar und AnsiString umzustellen. Ich weiß nicht, ob das was bringt. Auf alle Fälle musste ich die Zeile
Code:
type TCharBuffer = array[0..MaxInt - 1] of Char;
in
Code:
type TCharBuffer = array[0..MaxInt div 2 - 1] of Char; //MaxInt --> MaxInt div2 (new Char - 16bit)
umwandeln, da sonst das Array die 2GB - Grenze überschreitet.

Kann mir hier jemand helfen?

vielen Dank
cervicor


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz