Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

arcticwolf 26. Jun 2023 13:51

Konsolenanwendung - crt.pas - Console Library
 
Vielleicht kennen noch einige von Euch die Problematik, dass die gute alte crt.pas von Borland irgendwann in den neueren Delphi-Versionen einfach nicht mehr da war. Ich hatte diese Herausforderung vor etlichen Jahren zu meistern. Dazu kam dann noch die Thematik, dass die ERP-Software (Warenwirtschaft) für die ich als Programmierer verantwortlich war/bin, bis Mitte der 2010er-Jahre gleichzeitig unter MS-DOS und Windows laufen sollte. Also habe ich über die Jahre viel Zeit investiert um Code zu schreiben, der mir dies ermöglichte.

Ich habe diesen Code, der über die Jahre zusammengekommen ist, in den letzten Wochen etwas strukturiert und so zusammengefasst, dass er möglichst einfach von jedem eingesetzt werden kann.

Ich möchte den Code der Community als Open Source Projekt zur Verfügung stellen und habe ihn heute auf GitHub hochgeladen.

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

Die Bibliothek umfasst heute natürlich einen deutlich größeren Funktionsumfang, als nur die crt.pas zu ersetzen. Zum Beispiel hat man die Möglichkeit dem Konsolenfenster eine beliebige Größe (nicht nur 80 x 25) zu geben, die Farben beliebig zu manipulieren, Unicode-Zeichen zu verarbeiten und sogar underline und outline von Text ist möglich. Die Schriftart und Schriftgröße des Konsolenfensters kann genauso geändert werden, wie die Position auf dem Desktop. Um nur einige Features zu nennen.

Ich habe zur Bibliothek auch einige Demos hinzugefügt, um die Anwendungsmöglichkeiten einiger Features zu zeigen.

Ich würde mich freuen, wenn ihr Euch das mal anschaut und mir ein Feedback gebt.

himitsu 26. Jun 2023 14:28

AW: Konsolenanwendung - crt.pas - Console Library
 
Vergiss es gleich wieder.

Diese API ist am sterben.
Es wird zukünftig nur noch die neuen Streammingfunktionen geben.

Vielleicht hättest du vorher mal die Dokumentation lesen sollen?
Sie strotzt hier nur noch so vor Warnhinweisen :stupid:,
ala
Zitat:

Important

This document describes console platform functionality that is no longer a part of our ecosystem roadmap. We do not recommend using this content in new products, but we will continue to support existing usages for the indefinite future. Our preferred modern solution focuses on virtual terminal sequences for maximum compatibility in cross-platform scenarios. You can find more information about this design decision in our classic console vs. virtual terminal document.
Zitat:

Tip

This API does not have a virtual terminal equivalent. Its use may still be required for applications that are attempting to draw columns, grids, or fill the display to retrieve the window size. This window state is managed by the TTY/PTY/Pseudoconsole outside of the normal stream flow and is generally considered a user privilege not adjustable by the client application. Updates can be received on ReadConsoleInput.
uvm.



Abgesehn davon, dass in aktuellen Windows 11 nun das neue Terminal standardmäßig genutzt wird, und nicht mehr die "veraltete" CMD.exe.

Der schöne Günther 26. Jun 2023 14:35

AW: Konsolenanwendung - crt.pas - Console Library
 
Also wenn ich sehe wie oft Microsoft schon etwas als "preferred modern solution" angepriesen hat und wie schnell es danach wieder von der Bildfläche verschwand...

Ich finds toll und werde es mir demnächst mal anschauen, auch wenn ich spontan noch keinen Anwendungsfall habe. Daumen hoch für anschauliche Bildchen auf der Github-Startseite, damit bekommt man direkt ein Feeling für das, was es ist. Ich finde das nehmen viele nicht wichtig genug.

arcticwolf 26. Jun 2023 14:54

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

Vielleicht hättest du vorher mal die Dokumentation lesen sollen?
Wie kommst Du zu der Annahme, dass ich das nicht gemacht habe? Denkst Du ich habe den Delphi-Code einfach so geschrieben ohne in die MSDN zu schauen? :pale:

Ich gehe nicht davon aus, dass die API in den nächsten Jahre streben wird, Microsoft im übrigen auch nicht.
Zitat:

but we will continue to support existing usages for the indefinite future.
Es geht/ging mir ja auch nicht darum, mit der Bibliothek dem neusten Trend von Mircrosoft hinterher zu laufen.

@Der schöne Günther:
Vielen Dank! :-D

bernau 27. Jun 2023 09:00

AW: Konsolenanwendung - crt.pas - Console Library
 
So eine CRT-Unit wünsche ich mir für die Linux-Console.

Auf meine Linux-Server im RZ melde ich mich über Putty auf die Console an. Nutze z.B. dort den Midnight-Commander (mc). Würde mir gerne ein paar Tools schreiben, die sich wie der MC bedienen lassen. Kennt sich jemand damit aus?

Bbommel 27. Jun 2023 09:15

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

Zitat von bernau (Beitrag 1523785)
Auf meine Linux-Server im RZ melde ich mich über Putty auf die Console an. Nutze z.B. dort den Midnight-Commander (mc). Würde mir gerne ein paar Tools schreiben, die sich wie der MC bedienen lassen. Kennt sich jemand damit aus?

"Auskennen" wäre etwas übertrieben formuliert, weil es auch schon lange her ist, dass ich das mal gebraucht hatte. Aber das Stichwort, um so etwas unter Linux zu erreichen ohne alles neu zu erfinden, ist "ncurses". Emba liefert für ncurses leider offenbar standardmäßig keine passende Bibliothek mit, aber hier hat sich offenbar schon mal jemand die Mühe gemacht, einen passenden Wrapper zu schreiben. Wäre ja zumindest mal ein erster Ansatz, das zu testen.

Und: Respekt an die Arbeit für die crt.pas! Müsste mal gucken, ob mein Vokabeltrainer aus Schulzeiten noch funktioniert. ;-)

Andreas13 27. Jun 2023 09:26

AW: Konsolenanwendung - crt.pas - Console Library
 
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?

himitsu 27. Jun 2023 10:12

AW: Konsolenanwendung - crt.pas - Console Library
 
"class operator" eigentich schon seit D2006. :gruebel:

dummzeuch 27. Jun 2023 11:40

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

Zitat von bernau (Beitrag 1523785)
So eine CRT-Unit wünsche ich mir für die Linux-Console.

Auf meine Linux-Server im RZ melde ich mich über Putty auf die Console an. Nutze z.B. dort den Midnight-Commander (mc). Würde mir gerne ein paar Tools schreiben, die sich wie der MC bedienen lassen. Kennt sich jemand damit aus?

Es gab sowas mal für Perl (bzw. gibt es vermutlich noch). Aber ich vermute, das ist nicht die Programmiersprache, für die Du das suchst. ;-)

bernau 27. Jun 2023 11:51

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

Zitat von Bbommel (Beitrag 1523786)
Wäre ja zumindest mal ein erster Ansatz, das zu testen.

Ja cool. Danke!

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.

himitsu 28. Jun 2023 13:26

AW: Konsolenanwendung - crt.pas - Console Library
 
GetStdHandle sollte so oder so gehen, denn ob die CMD oder das Terminal, die Daten-Pipe bleibt die Gleiche.
Nur dass sie seit einer Weile über die ConHost-EXEn behandelt werden
und es somit möglich ist hinten einen anderen Viewer anzuhängen oder vorne eine andere Datenquelle (Console, PowerShell, Python, eine Linux-Bash, sowie die Consolen vom MAC, Android, Azure, AWS usw.).


Wie gesagt, die alte API läuft parallel zu den 3 Consolen-Handle vom Windows, über einen eigenen Kanal. (weiß garnicht, ob Linux einen eigenen Error-Stream hat, aber da eh kaum Windows-Programme Diesen nutzen, ist er fast egal)
Im neuen Streaming werden Daten und Control-Befehle im selben Stream übertragen. Ähnlich wie ganz früher, mit den EscapeCodes.




Sobald beim Start die Console nicht verbunden war (z.B. bei einer VCL-Anwendung), oder wenn die Pipe umgeleitet wird, oder der "Viewer" diese ControlPipe nicht explizit abfragt, dann kann das nicht funktionieren.

Über AttachConsole/AllocConsole könnte man prüfen ob eine "Console" dran hängt, oder z.B. die Pipe in ein anderes Programm umgeleitet ist. (siehe mein alter FileSplitter, der prüfte, ob er aus der Console, bzw. einer Batch, oder z.B. aus dem Explorer, einem Link oder via ShellExecute/CreateProcess gestartet wurde)

arcticwolf 28. Jun 2023 14:09

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

Zitat von KodeZwerg (Beitrag 1523871)
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.

Wenn ich das Programm als Terminal starte, dann habe ich in der Prozessliste eine "WindowsTerminal.exe", eine "conhost.exe" und die "Demo01_Minimal_Console_App.exe".
Wenn ich das Programm als Konsolenhost starte, dann habe ich in der Prozessliste eine "conhost.exe" und die "Demo01_Minimal_Console_App.exe".

Andreas13 28. Jun 2023 15:28

AW: Konsolenanwendung - crt.pas - Console Library
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Wolfgang,
vielen Dank für die Anpassung & Verbesserung Deiner Console Library an ältere Delphi-Versionen! :-D Nun lassen sich mit XE5 alle 9 Units der Bibliothek kompilieren. :thumb:
Allerdings läßt sich nur ein einziges der 8 Demo-Programme kompilieren: Demo01_Minimal_Console_App.dpr
Bei den übrigen kommt es zu etlichen Fehlermeldungen:
Delphi-Quellcode:
u. a.
begin
  Result := (FTextAttr and COMMON_LVB_REVERSE_VIDEO) = COMMON_LVB_REVERSE_VIDEO;
end;

[dcc32 Fehler] Ply.Console.pas(951): E2003 Undeklarierter Bezeichner: 'COMMON_LVB_REVERSE_VIDEO'
&#8230;
[dcc32 Fehler] Ply.Console.pas(963): E2003 Undeklarierter Bezeichner: 'COMMON_LVB_GRID_HORIZONTAL'
[dcc32 Fehler] Ply.Console.pas(981): E2003 Undeklarierter Bezeichner: 'COMMON_LVB_GRID_LVERTICAL'
[dcc32 Fehler] Ply.Console.pas(987): E2003 Undeklarierter Bezeichner: 'COMMON_LVB_UNDERSCORE'
[dcc32 Fehler] Ply.Console.pas(999): E2003 Undeklarierter Bezeichner: 'COMMON_LVB_GRID_RVERTICAL'

etc.
Weitere Fehlermeldungen habe ich im Anhang.

Vielleicht findest Du noch eine Lösung für XE5-Benutzer(innen)...

arcticwolf 28. Jun 2023 15:52

AW: Konsolenanwendung - crt.pas - Console Library
 
Hallo Andreas,

bitte schau noch einmal ob sich Demo01 wirklich immer noch kompilieren lässt.

Ich würde vermuten, da hat sich bei Dir irgendwo im Quellcode ein oder mehrere Zeichen eingeschlichen, die da nicht sein sollten. Wenn sich Demo01 kompilieren lässt, warum sollte sich die Ply.Console.Pas (die bei Demo01 auch benötigt wird) dann bei Demo02 nicht mehr kompilieren lassen? :gruebel:

Wenn alles nicht hilft, mach bitte noch einmal einen neuen pull von GitHub.

Andreas13 28. Jun 2023 21:32

AW: Konsolenanwendung - crt.pas - Console Library
 
Hallo Wolfgang,

Du hast recht: Auch Demo01_Minimal_Console_App.dpr läßt sich nicht kompilieren:
Delphi-Quellcode:
[dcc32 Fehler] Demo01_Minimal_Console_App.dpr(13): E2003 Undeklarierter Bezeichner: 'Console'
[dcc32 Fehler] Demo01_Minimal_Console_App.dpr(13): E2035 Nicht genügend wirkliche Parameter
Die erste Zeile
Delphi-Quellcode:
Console.Window(80,25);
verursacht die Probleme.

Versehentlich hatte ich am Nachmittag eine Kopie von Demo01_Minimal_Console_App.dpr von gestern kompiliert...:oops:

arcticwolf 29. Jun 2023 08:09

AW: Konsolenanwendung - crt.pas - Console Library
 
Hallo Andreas,

irgendwie macht das keinen Sinn. Wenn Du sagst
Zitat:

Nun lassen sich mit XE5 alle 9 Units der Bibliothek kompilieren.
der Compiler aber dann die "Var Console" nicht findet, die in der Crt.pas in Zeile 78 deklariert ist, dann würde ich vermuten, dass bei Dir irgendwas mit den Pfaden nicht stimmt. Im Projekt ist der Suchpfad auf das Parent-Directory ".." eingestellt. Also oberhalb von \Demo. Wenn Du an den Pfaden nichts geändert hast, sollte er die (meine) crt.pas finden und damit auch die "Var Console". Räum doch bitte mal auf und lösche alles was nicht mit dem GitHub Repository kommt. Also vor allem die Verzeichnisse .\Demo\Win32\ und .\Demo\Win64\ um zu vermeiden, dass der Compiler da eine alte crt.dcu findet.

Oder der Compiler findet noch irgendeine andere crt.pas oder crt.dcu? Schau mal im globalen Suchpfad, siehe "Tools -> Optionen -> Delphi -> Bibliothek" o.ä. je nach Delphi-Version. Das würde erklären, warum der dann in der Unit Crt keine "Var Console" findet.

Andreas13 29. Jun 2023 08:47

AW: Konsolenanwendung - crt.pas - Console Library
 
Hallo Wolfgang,
ich habe gerade die Lösung für mein Compiler-Problem gefunden: Bei mir gibt es noch eine andere Unit namens Crt.pas und diese Unit steht bei mir im Suchpfad und wird zuerst gefunden.

Weil ich die Directory-Struktur Deiner Console-Master Library nicht geändert habe, klappt es bei mir mit den Demos erst, wenn ich den Pfad für Dein Crt.pas wie folgt ändere:
Delphi-Quellcode:
...
uses
  Crt in '..\Crt.pas',
;
...
oder z.B. in Ply.Crt.pas umbenenne.

Tolle & nützliche Bibliothek! :thumb: :thumb:
Danke! :-D

arcticwolf 30. Jun 2023 16:54

AW: Konsolenanwendung - crt.pas - Console Library
 
Hallo Andreas,

Zitat:

Tolle & nützliche Bibliothek! Danke!
Vielen Dank! :-D

Da war ich ja schon auf der richtigen Spur, dass da eine andere crt.pas im Spiel ist. Ich habe deinen Vorschlag

Zitat:

Delphi-Quellcode:
uses
  Crt in '..\Crt.pas',

in die Demos übernommen, damit andere Nutzer das Problem künftig nicht mehr haben, dass eine andere crt.pas zuerst gefunden wird. Ply.Crt.Pas habe ich mit Absicht nicht genommen, weil das den Aufwand deutlich erhöhen würde, wenn jemand ein altes Programm mit vielen Units hat, welche die crt.pas nutzen. So muss der Nutzer nur sicherstellen, dass meine crt.pas zuerst (oder besser als einzige) gefunden wird und nicht in jeder Unit das "uses crt" anpassen. Das hat/hatte auch historischen Eigennutzen. Ich hatte ganz lange Code im Einsatz, den ich parallel mit Borland Pascal 7.0 und Delphi (5.0 und später auch XE6) compilieren musste.
________________________

Ich habe heute das "Demo09_BuiltIn_Features" dem GitHub-Repository hinzugefügt. Das Demo soll die Funktionsweise einiger eingebauten Funktionen erklären, welche ohne extra Code automatisch zur Verfügung stehen sobald meine crt.pas bzw. Ply.Console.Extended.pas im Uses steht.

Andreas13 30. Jun 2023 21:41

AW: Konsolenanwendung - crt.pas - Console Library
 
Vielen Dank, Wolfgang! :thumb: :-D

[Edit]
PS:
Im Demo09_BuiltIn_Features.dpr ist in Zeile 50 eine Inline-Deklaration
Delphi-Quellcode:
  Var FrameAttr := TTextAttr.Create(White, Red);
welche ältere Delphi-Versionen (auch XE5) noch nicht verstehen. Aber das läßt sich einfach umschreiben.

Andreas13 13. Jul 2023 22:31

AW: Konsolenanwendung - crt.pas - Console Library
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Wolfgang,
mir ist aufgefallen, daß tConsoleInfoEx zwei kleinere Speicherlecks (117 - 124 Bytes) verursacht. Die Fehlermeldung findest Du im Anhang.
Könntest Du bitte bei Gelegenheit nachschauen, woran das liegen kann?

Vielen Dank!

himitsu 13. Jul 2023 22:53

AW: Konsolenanwendung - crt.pas - Console Library
 
PS: Strg+C in dem "Dialog" (geht auch bei den Fehlermeldung des Compilers)
und dann hier mit Strg+V als Text rein.

Andreas13 14. Jul 2023 08:17

AW: Konsolenanwendung - crt.pas - Console Library
 
Danke Himitsu,
das war mir nicht bekannt. :oops:

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:



117 - 124 bytes: tConsoleInfoEx x 2


---------------------------
OK
---------------------------

arcticwolf 14. Jul 2023 12:47

AW: Konsolenanwendung - crt.pas - Console Library
 
Hallo Andreas,

ja, vielen Dank! Du hast Recht, da haben 2 Free's gefehlt. Ich habe das gefixt und auf GitHub aktualisiert.

Andreas13 14. Jul 2023 19:24

AW: Konsolenanwendung - crt.pas - Console Library
 
Hallo Wolfgang,
danke für die Korrekturen!
Allerdings rebelliert mein XE5 und meldet:
Code:
[dcc32 Fehler] Crt.pas(2920): E2003 Undeklarierter Bezeichner: 'AutoOpacityOnFocus'
[dcc32 Fehler] Crt.pas(2923): E2003 Undeklarierter Bezeichner: 'Opacity'
[dcc32 Fehler] Crt.pas(2924): E2003 Undeklarierter Bezeichner: 'Opacity'
[dcc32 Fataler Fehler] F2063 Verwendete Unit 'crt.pas' kann nicht compiliert werden
Hast Du eine Idee?

arcticwolf 16. Jul 2023 16:46

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

Hast Du eine Idee?
Klar habe ich eine Idee. Ich hatte bei einem früheren Update IFDEF's vergessen, oder anders gesagt, ich hatte keine Zeit/Lust meine VM-Ware mit Delphi XE6 zu starten und die Änderungen für die älteren Compiler zu testen. :oops: Das habe ich jetzt nachgeholt und es sollte wieder mit XE5 / XE6 laufen.

Andreas13 16. Jul 2023 22:33

AW: Konsolenanwendung - crt.pas - Console Library
 
Herzlichen Dank für Deine Hilfe & Mühe, Wolfgang! :-D
Jetzt funktioniert's! :thumb:

arcticwolf 16. Jul 2023 23:18

AW: Konsolenanwendung - crt.pas - Console Library
 
Gerne! :)

Andreas13 23. Jul 2023 18:22

AW: Konsolenanwendung - crt.pas - Console Library
 
Hi Wolfgang,
(wie) kann man im Fenster der Konsolenanwendung zurückblättern, wenn der Inhalt überläuft?
Ich verwende Deine Bibliothek für Ausgabe der Ergebnisse umfangreicher Berechnungen, die mehrere 100 Zeilen Kolonnen voller Zahlen liefern.
Leider sehe ich nur die letzten paar Zeilen davon. Kann man einen Scrollbar aktivieren?

Danke!

himitsu 23. Jul 2023 18:40

AW: Konsolenanwendung - crt.pas - Console Library
 
https://learn.microsoft.com/en-us/wi...uffer-s-window
Aber wie bereits gesagt ...
Zitat:

This document describes console platform functionality that is no longer a part of our ecosystem roadmap. We do not recommend using this content in new products, ...

Sinspin 24. Jul 2023 08:17

AW: Konsolenanwendung - crt.pas - Console Library
 
Was spricht dagegen die Ausgaben in eine Textdatei zu schreiben oder über eine Pipe/Socket zu senden?
Ansonsten, die Tasten PageUp/PageDown sollten gehen falls es sich um eine echte Konsolenausgabe handelt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.
Seite 1 von 2  1 2      

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