![]() |
Konolenanwendung / DOS-Funktionen
Hallo Forum,
das ist mein erster Post; viele Grüße aus Neuburg a. d. Donau. Ich steige gerade wieder hobbymäßig in Delphi ein und möchte ein kleines Programm entwicklen, dass MOPAC2007 steuert (semiempirisches Rechenprogramm zum Berechnen von Molekülgeometrien etc., s. ![]() Ich habe zu meinem Problem reichlich gelesen (ich weiß also, dass es diverse DOS-Befehle-Threads gibt), keine Lösung trifft meine kleinen Fragen richtig.
Delphi-Quellcode:
Hierzu meine Fragen (ich hoffe, Sie sind nicht allzu dämlich oder irgendwoanders exakt so zu finden):
program MopRun;
{$APPTYPE CONSOLE} uses SysUtils, ShellAPI, Windows; var i: integer; begin { TODO -oUser -cConsole Main : Hier Code einfügen } writeln('Das Programm startet MOPAC2007 unter Windows XP'); writeln(''); writeln('Anzahl der übergebenen Parameter: '+inttostr(paramcount)); for i:=1 to paramcount do begin writeln(paramstr(i)); end; readln; ShellExecute(0,'open','cmd.exe', '/k dir',nil,SW_NORMAL); sleep(2000); readln; end.
Viele Grüße, herzlichen Dank, Thomas aka Desty |
Re: Konolenanwendung / DOS-Funktionen
Herzlich willkommen in der Delphi-PRAXiS, Thomas.
(1) Application.Handle steht dir nur in einer fensterorientierten Anwendung zur Verfügung. (2) Deine Zeichenketten-Konstanten hast du unter Windows mit der CodePage 1252 erfasst. Die Konsole interpretiert die Zeichen aber anhand der CodePage 850. Du kannst die Ausgabe an die Konsole anpassen:
Delphi-Quellcode:
(3) "Einfache Lösung" ist gewiss relativ. Durch ein Verbiegen der STDIO Handles sollte möglich sein, was du dir vorstellst.
function AnsiToOem (const s: string): string;
begin SetLength(Result, Length(s)); if Length(s) > 0 then CharToOemBuff(@s[1], @Result[1], Length(s)); end; Freundliche Grüße vom marabu |
Re: Konolenanwendung / DOS-Funktionen
Zitat:
Code wurde integriert und funktioniert natürlich! Damit sind zwei von drei Fragen erledigt, das geht ja extrem schnell, herzlichen Dank! Zur dritten Frage: Das würde jetzt (ich beschreibe es mal, wie ich es mir denke, programmieren könnte ich es noch nicht) wahrscheinlich so laufen: Versteckte Kommandokonsole o. ä., liest über Stream oder so Daten in z. B. ein Stringarray und anschließend muss ich diesen dann mit writeln auf der angezeigten (gewollten) Konsole) ausgeben, oder? Das wollte ich umgehen, dachte ich könnte Delphi hier als eine Art Super-Batch-Sprache ausnutzen... Ist nicht so wichtig, ich will das Ding sowieso später mit Formularanwendung laufen lassen, dachte nur, auch mal in die Konsolenprogrammierung reinzuschauen schadet nichts :D Viele Grüße, Thomas |
Re: Konolenanwendung / DOS-Funktionen
Hi und Herzlich willkommen in der DP.
Zu deiner dritten Frage gibt es hier in Forum schon einige Lösungen die dir weiterhelfen können. zB. ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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