![]() |
Re: Kommandozeilen Programm innerhalb von Delphi
habs ausprobiert
Delphi-Quellcode:
Ergebnis:
procedure TForm1.BtnWriteCmdClick(Sender: TObject);
begin FWriteToStdIn('ping google.de' + #13#10); FWriteToStdIn('ping google.de' + #13#10); end; google wird gepingt .. 4 antworten und anschließend wird google nochmal gepingt .. edit: Es ist gleich noch eine Frage aufgekommen :) Die Sonderzeichen die übergeleitet werden, werden in der Memobox nicht so wie im cmd dargestellt. Wie könnte man es erreichen, das das Memo den selben Zeichensatz verwendet, wie das cmd? :) |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
|
Re: Kommandozeilen Programm innerhalb von Delphi
Huhu zusammen,
ich konkretisiere meine Fragen nochmal: 1) Wie ist der Zeichensatz von der DOS-Eingabeaufforderung? 2) Wie bringe ich den Zeichensatz am besten einem Memo bei? :) Grüße, Lorus |
Re: Kommandozeilen Programm innerhalb von Delphi
Dazu gibt es die Win32 Funktionen OemToChar, OemToChar, CharToOem und CharToOemBuff. Sie konvertieren C Strings zwischen den beiden Zeichensaetzen.
|
Re: Kommandozeilen Programm innerhalb von Delphi
Huhu,
erstmal danke für die Antwort :) Hab jetzt folgendes probiert:
Delphi-Quellcode:
bekomme nun aber Fehler das PAnsiChar und TString inkompatible Typen sind :-/
procedure TForm1.DosCommand1NewLine(Sender: TObject; NewLine: String;
OutputType: TOutputType); begin DosCommand1.OutputLines := OemToChar(Memo1.Lines); end; muss also jeder buchstabe einzeln umgewandelt werden? wie stelle ich das am besten an? :-) P.S. ich verwende jetzt die TDosCommand-Komponente |
Re: Kommandozeilen Programm innerhalb von Delphi
Huhu zusammen,
hab mir noch mal den Code von SirThornberry hergenommen, der gefällt mir im Prinzip auch besser als die TDosCommand-Kompo. Hab im Forum jetzt noch folgende Funktionen für Ascii --> Ansi Konvertierung gefunden und umgedreht.
Delphi-Quellcode:
function Ascii2Ansi(const s:AnsiString):AnsiString;
begin Result := s; if Result <> '' then begin UniqueString(Result); OemToChar(Pchar(Result), Pchar(Result)); end; end; function Ansi2Ascii(const s:AnsiString):AnsiString; begin Result := s; if Result <> '' then begin UniqueString(Result); CharToOem(Pchar(Result), Pchar(Result)); end; end; und hab das dann so in den Code eingebaut:
Delphi-Quellcode:
procedure TForm1.FClbProc(Sender: TObject; const ABuffer: String; ABufSize: Cardinal);
var LNew: String; LPos: Integer; begin LNew := copy(ABuffer, 1, ABufSize); LPos := pos(#$C, LNew); if (LPos > 0) then begin MemoOutput.Text := ''; LNew := copy(LNew, LPos + 1, Length(LNew)); end; MemoOutput.Text := Ansi2Ascii(MemoOutput.Text + LNew); PostMessage(MemoOutput.Handle, WM_VSCROLL, SB_BOTTOM, 0); end; Die Veränderung in der Zeile:
Delphi-Quellcode:
bringt aber leider nicht den gewünschten Erfolg :-/
MemoOutput.Text := Ansi2Ascii(MemoOutput.Text + LNew);
Habt ihr eine Idee, wie ich es richtig hinbekommen könnte? :) Grüße, Lorus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15: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