Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Konsolenanwendung - crt.pas - Console Library (https://www.delphipraxis.net/213259-konsolenanwendung-crt-pas-console-library.html)

bernau 27. Jun 2023 11:52

AW: Konsolenanwendung - crt.pas - Console Library
 
Zitat:

Zitat von dummzeuch (Beitrag 1523801)
Aber ich vermute, das ist nicht die Programmiersprache, für die Du das suchst. ;-)

Jep :wink:

himitsu 27. Jun 2023 13:06

AW: Konsolenanwendung - crt.pas - Console Library
 
Jetzt läuft ja hinter der cmd.exe bzw. der neuen Terminal-App ein Console-Host, je nach Ziel (Windows-Console, PowerShell, Linux-Bash usw)

Ich hatte mal versucht rauszufinden, wie das intern abläuft, aber in der Hilfe noch nicht wirklich was gefunden, bzw. im QuellCode des Terminals, da sieht doch niemand durch.

Sonst hätte man sich da auch "einfach" was mit Delphi bauen können. :stupid:

https://github.com/microsoft/terminal
https://learn.microsoft.com/de-de/windows/terminal/
https://apps.microsoft.com/store/det...l/9N0DX20HK701

https://www.golem.de/news/windows-11...08-167912.html
https://www.computerbild.de/artikel/...-30464147.html

arcticwolf 27. Jun 2023 13:20

AW: Konsolenanwendung - crt.pas - Console Library
 
Zitat:

Zitat von Andreas13 (Beitrag 1523789)
Hallo Wolfgang,
zunächst vielen Dank für Deine Mühe & die Console Library! :thumb:
Bei mir beschwert sich allerdings mein etwas betagter XE5-Compiler:
Zeile 254:
class operator Equal(Lhs, Rhs: TCoord) : Boolean;
[dcc32 Fehler] Ply.Types.pas(254): E2123 PROCEDURE, FUNCTION, PROPERTY oder VAR erwartet

Ab welcher Delphi-Version ist die Console Library verwendbar?

Kann ich Dir leider nicht sagen / habe ich noch nicht getestet.
Mit der aktuellen Delphi 11 CE sollte es auf jeden Fall funktionieren.

Könnte das vielleicht daran liegen, dass es ein "Helper record" ist? Ich bin mir nicht sicher ob es "Helper Records" in XE5 schon gab oder wenn ja ob es bei XE5 dann in Verbindung mit Klassenoperatoren zu dieser Fehlermeldung kommt?

Du kannst mal versuchen, die beiden "class operator" auszukommentieren, die werden in der Library selbst gar nicht verwendet. Ich habe die nur drinnen, weil ich sie dann im ERP-System genutzt habe. Allerdings wird der Compiler dann sofort bei Zeile 287 wieder meckern. Wenn Du diese beiden auch noch auskommentierst, dann kommt eine Fehlermeldung in Zeile 3286 der Ply.Console.pas. Die Zeile kannst Du (zum testen) auch einfach auskommentieren, da wird zwar dann unnötiger Code ausgeführt, sollte aber nichts machen. Wenn sich der Code dann kompilieren lässt, liegt es an den Helper Record in Verbindung mit class operator. -> Ich könnte dann {$ifdef} einbauen und den Code mit XE5 kompatibel machen.

Andreas13 27. Jun 2023 14:28

AW: Konsolenanwendung - crt.pas - Console Library
 
XE5 kennt leider noch keinen RecordHelper.
Habe versucht Deinen Hinweis umzusetzen, aber das Auskommentieren verursachte weitere Compiler-Fehler in Folge. Auch ein Ersetzen von class operator durch Function führte zu keinem Erfolg, da es dann später bei TCoordHelper.notEqual(..) zu Problemen führte, noch in der ersten Datei Ply.Types.pas.

Möglicherweise habe ich mich ungeschickt angestellt.. :oops:

Vielleicht wäre Dein fachkundig verwendeter {$ifdef} die bessere Lösung. :gruebel:

arcticwolf 27. Jun 2023 14:33

AW: Konsolenanwendung - crt.pas - Console Library
 
Zitat:

Zitat von himitsu (Beitrag 1523811)
Jetzt läuft ja hinter der cmd.exe bzw. der neuen Terminal-App ein Console-Host, je nach Ziel (Windows-Console, PowerShell, Linux-Bash usw)

Ich hatte mal versucht rauszufinden, wie das intern abläuft, aber in der Hilfe noch nicht wirklich was gefunden, bzw. im QuellCode des Terminals, da sieht doch niemand durch.

Sonst hätte man sich da auch "einfach" was mit Delphi bauen können. :stupid:

https://github.com/microsoft/terminal
https://learn.microsoft.com/de-de/windows/terminal/
https://apps.microsoft.com/store/det...l/9N0DX20HK701

https://www.golem.de/news/windows-11...08-167912.html
https://www.computerbild.de/artikel/...-30464147.html

Bis eben hatte ich das Windows-Terminal noch gar nicht installiert, also wurde bei mir automatisch der Windows-Konsolenhost verwendet. Unter dem Windows-Terminal läuft mein Code nicht sauber. Sobald das Windows-Terminal installiert ist, kann man unter "Datenschutz und Sicherheit > Für Entwickler > Terminal" einstellen, ob "Windows-Konsolenhost" oder "Windows-Terminal" verwendet werden soll. Wählt man hier den Windows-Konsolenhost läuft mein Code wieder sauber. Jetzt wäre es natürlich interessant zu wissen, ob man Windows irgendwie aus der App heraus vorgeben kann ob der Konsolenhost oder das Terminal verwendet werden soll, unabhängig von der oben genannten Windows-Einstellung. Da muss ich erst einmal recherchieren, oder hat von Euch jemand eine Idee.

Ferner wäre es natürlich interessant zu wissen, ob der Code auch kompatibel zum Windows-Terminal gemacht werden kann. Ein kurzer Test war da eigentlich sehr vielversprechend. Einige der Grundfunktionen die ich nutze scheinen direkt vom Terminal unterstüzt zu werden. Aber für eine ordentliche Bewertung muss ich mich wohl erst mal wieder in der MSDN und/oder der Dokumentation vom Terminal eingraben...:roll:

arcticwolf 27. Jun 2023 14:38

AW: Konsolenanwendung - crt.pas - Console Library
 
Zitat:

Zitat von Andreas13 (Beitrag 1523823)
XE5 kennt leider noch keinen RecordHelper.
...
Vielleicht wäre Dein fachkundig verwendeter {$ifdef} die bessere Lösung. :gruebel:

Das habe ich mir schon gedacht, dass es an dem RecordHelper liegt. Kann mir jemand sagen, ab welcher Delphi-Version diese eingeführt wurden, oder wo ich diese Information finde? Dann würde ich mal versuchen ein paar $ifdef's für ältere Delphi-Versionen einzubauen.

arcticwolf 28. Jun 2023 09:24

AW: Konsolenanwendung - crt.pas - Console Library
 
Ich habe gestern mein altes Delphi XE6 ausgegraben (installiert) und den Code überarbeitet. An den RecordHelpern liegt es bei XE6 nicht, die gab es da auch schon. Da muss es irgendeine Änderung mit den "class operator" gegeben habe. Ich habe jetzt eine Compilerweiche ($IFDEF) zwischen Delphi XE8 und Delphi 10 eingebaut, sodass der Code mit XE6 (und hoffentlich auch XE5) kompiliert werden kann. Das Update ist auf GitHub zu finden.

https://github.com/playcom-de/Console

KodeZwerg 28. Jun 2023 11:53

AW: Konsolenanwendung - crt.pas - Console Library
 
Zitat:

Zitat von arcticwolf (Beitrag 1523825)
Zitat:

Zitat von himitsu (Beitrag 1523811)
Jetzt läuft ja hinter der cmd.exe bzw. der neuen Terminal-App ein Console-Host, je nach Ziel (Windows-Console, PowerShell, Linux-Bash usw)

Ich hatte mal versucht rauszufinden, wie das intern abläuft, aber in der Hilfe noch nicht wirklich was gefunden, bzw. im QuellCode des Terminals, da sieht doch niemand durch.

Sonst hätte man sich da auch "einfach" was mit Delphi bauen können. :stupid:

https://github.com/microsoft/terminal
https://learn.microsoft.com/de-de/windows/terminal/
https://apps.microsoft.com/store/det...l/9N0DX20HK701

https://www.golem.de/news/windows-11...08-167912.html
https://www.computerbild.de/artikel/...-30464147.html

Bis eben hatte ich das Windows-Terminal noch gar nicht installiert, also wurde bei mir automatisch der Windows-Konsolenhost verwendet. Unter dem Windows-Terminal läuft mein Code nicht sauber. Sobald das Windows-Terminal installiert ist, kann man unter "Datenschutz und Sicherheit > Für Entwickler > Terminal" einstellen, ob "Windows-Konsolenhost" oder "Windows-Terminal" verwendet werden soll. Wählt man hier den Windows-Konsolenhost läuft mein Code wieder sauber. Jetzt wäre es natürlich interessant zu wissen, ob man Windows irgendwie aus der App heraus vorgeben kann ob der Konsolenhost oder das Terminal verwendet werden soll, unabhängig von der oben genannten Windows-Einstellung. Da muss ich erst einmal recherchieren, oder hat von Euch jemand eine Idee.

Ferner wäre es natürlich interessant zu wissen, ob der Code auch kompatibel zum Windows-Terminal gemacht werden kann. Ein kurzer Test war da eigentlich sehr vielversprechend. Einige der Grundfunktionen die ich nutze scheinen direkt vom Terminal unterstüzt zu werden. Aber für eine ordentliche Bewertung muss ich mich wohl erst mal wieder in der MSDN und/oder der Dokumentation vom Terminal eingraben...:roll:

Kannst Du mal mit diesem Schnippsel prüfen was unter einem Terminal rauskommt?
Delphi-Quellcode:
function IsConsole: Boolean;
var
  Stdout: THandle;
begin
  Stdout := GetStdHandle(Std_Output_Handle);
  Win32Check(Stdout <> Invalid_Handle_Value);
  Result := Stdout <> 0;
end;
Laut hier -> https://learn.microsoft.com/en-us/wi...e/getstdhandle sollte es nur für eine Konsole funktionieren.

arcticwolf 28. Jun 2023 12:09

AW: Konsolenanwendung - crt.pas - Console Library
 
Zitat:

Delphi-Quellcode:
Stdout := GetStdHandle(Std_Output_Handle);

Liefert bei Terminal schon ein gültiges Handle, sogar das gleiche wie bei Konsolenhost. Siehe Ply.Console.Pas Zeile 3839

Delphi-Quellcode:
ConHandleStdOut := GetStdHandle(STD_OUTPUT_HANDLE);


Zum Beispiel die Demo01 (Minimal_Console_App) läuft auch auf einem Terminal. Aber wenn es dann an die erweiterten Funktionen, wie z.B. manipulieren des Font, Änderung der Größe des Konsolenfensters, u.s.w. geht, dann funktioniert das nicht mehr wie gehabt.

KodeZwerg 28. Jun 2023 12:40

AW: Konsolenanwendung - crt.pas - Console Library
 
Ich verstehe.
Was für einen Prozess startet denn eine Konsolen Anwendung mit installierten Terminal?
Mit der klassischen Konsolen Anwendung hab ich "conhost.exe" unter meiner ProcessID.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.
Seite 2 von 5     12 34     Letzte »    

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