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/)
-   -   Bunter text in console (https://www.delphipraxis.net/178712-bunter-text-console.html)

bernhard_LA 22. Jan 2014 16:04

Bunter text in console
 
unter http://www.delphipraxis.net/56245-ko...rbe-haben.html gibt es leider kein Beispiel wie ich mit Hilfe des ANSI ESC Sequenzen farbigen Text in einer Konsolenanwendung schreibe ... wer hat ein Demo für mich ?

H I L F E

himitsu 22. Jan 2014 16:10

AW: Bunter text in console
 
Du willst von einem Programm aus farbigen Text haben?
Was hast du da denn gegen SetConsoleTextAttribute?


Und Google hatte dir auch nichts gezeigt?
Bei Google suchenconsole color escape squenzen [edit] auch wenn das Denglisch nicht so gut war, wie mir grad auffällt

http://en.wikipedia.org/wiki/ANSI_escape_code
http://linuxgazette.net/issue65/padala.html
http://www.linupedia.org/opensuse/Farbe_in_der_Konsole
...

p80286 22. Jan 2014 16:19

AW: Bunter text in console
 
versuch es mal so:
Delphi-Quellcode:
writeln('Hallo '+#27+'[43m World';
evtl must Du die Sequenz noch mit ";" beenden also #27+'[45m;'
Gruß
K-H

Bummi 22. Jan 2014 16:41

AW: Bunter text in console
 
Liste der Anhänge anzeigen (Anzahl: 2)
Delphi-Quellcode:

{$APPTYPE CONSOLE}
{$R *.res}

uses
  SysUtils, Windows;
begin
  try
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED or BACKGROUND_INTENSITY);
    Write('Roter Hintergrund');
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
    Write('Grüner Text');
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE or BACKGROUND_INTENSITY);
    Writeln('Blauer Hintergrund');
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Namenloser 22. Jan 2014 16:43

AW: Bunter text in console
 
Funktionieren Escape-Sequenzen unter Windows überhaupt?

turboPASCAL 22. Jan 2014 16:52

AW: Bunter text in console
 
Zitat:

Zitat von p80286 (Beitrag 1244925)
versuch es mal so:
Delphi-Quellcode:
writeln('Hallo '+#27+'[43m World';
evtl must Du die Sequenz noch mit ";" beenden also #27+'[45m;'
Gruß
K-H

Ich glaube damit das Funktioniert musste man in MS-DOS Zeiten noch die ansi.sys in der config.sys laden.
Bei den "neuen" Windows versionen gibt es das IMHO nicht mehr.

bernhard_LA 22. Jan 2014 16:59

AW: Bunter text in console
 
wie lade ich die ansi.sys in meiner Konsolen-Anwendung ?
Delphi-Quellcode:
include "ansi.sys" ???

p80286 22. Jan 2014 17:19

AW: Bunter text in console
 
Zitat:

Zitat von turboPASCAL (Beitrag 1244933)
Bei den "neuen" Windows versionen gibt es das IMHO nicht mehr.

Da liegst Du wohl richtig:
Zitat:

The Win32 console does not natively support ANSI escape sequences at all. Software such as ANSICON[7] can act as a wrapper around the standard Win32 console and add support for ANSI escape sequences. Otherwise software must manipulate the console with the ioctl-like Console API[8] interlaced with the text output. Some software internally interprets ANSI escape sequences in text being printed and translates them to these calls.[9]
(http://en.wikipedia.org/wiki/ANSI_escape_code)

ggf. hilft http://delphicrt.sourceforge.net/crt_functions.html ja weiter

Gruß
K-H

himitsu 22. Jan 2014 17:19

AW: Bunter text in console
 
Zitat:

Zitat von bernhard_LA (Beitrag 1244934)
wie lade ich die ansi.sys in meiner Konsolen-Anwendung ?
Delphi-Quellcode:
include "ansi.sys" ???

Garnicht?

Wieso sollte man auch einen Treiber in ein Programm reinladen?

Abgesehn davon, daß in Windows 7 x64 der alte "unsichere" 16-Bit-Schrott nur entgültig entsorgt wurde.


Antwort:
Entweder unterstützt die Console (z.B. cmd.exe) die Escape-Codes und man kann die noch verwenden, oder sie macht es nicht.
Denn die Console müsste ja den Eingang (StdOut und ErrOut) analysieren und die Zeichen in entsprechende Befehle für ihre Anzeige umwandeln.

bernhard_LA 22. Jan 2014 17:23

AW: Bunter text in console
 
ohne ANSI ESCAPE in Kurzform kann man hier nicht gewinnen ...

http://codegolf.stackexchange.com/qu...mpic-games-log


Delphi-Quellcode:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED or BACKGROUND_INTENSITY);
ist hier nicht anwendbar .....

himitsu 22. Jan 2014 17:50

AW: Bunter text in console
 
Da Delphi standardmäßig keine "kürzere" Kapselung dieser API kennt, kannst du es mit Delphi also vergessen.
Die Konstanten kannst'e aber noch locker direkt als Zahl verwenden.


Kann die CMD.exe das?
test.bat / test.cmd
Zitat:

echo ←[0;31;40mIn Color
echo ^[[0;31;40mIn Color
pause
Als BatchFile oder Brainfuck wäre das bestimmt ein netter Code.

Wenn ich mich so an Knoppix erinnere ... die Linuxkonsole ist auch extrem kunterbund.

Dalai 22. Jan 2014 18:07

AW: Bunter text in console
 
AFAIK kennt die CMD keine Escape-Sequenzen. Es gibt "nur" das Kommando "color", mit dem man die Farben der kompletten Konsole selbst setzen kann. Es gibt auch eine Möglichkeit für Delphi, die ich 2005 mit Delphi 5 zusammengeschrieben habe, um einzelne Zeichen/Wörter farbig auszugeben. Ich muss aber erst raussuchen, wie ich das angestellt habe, denn momentan steige ich nicht durch meinen Code :stupid:.

MfG Dalai

Namenloser 22. Jan 2014 18:22

AW: Bunter text in console
 
Natürlich gibt es auch immer noch die CRT-Unit. Vielleicht kann man da auch noch mal gucken, wie die das macht.

Fürs Codegolf ist die Unit natürlich nicht zu gebrauchen, aber das gilt auch für Pascal allgemein ;)

Dalai 22. Jan 2014 18:25

AW: Bunter text in console
 
OK, jetzt weiß ich's wieder. Der Code sieht beispielhaft so aus:
Delphi-Quellcode:
uses
  SysUtils, Borland_Crt;

var last_text_attr, text_color : byte;

{Text-Farbe sichern}
last_text_attr:= TextAttr;

{Text-Farbe setzen}
textcolor(text_color);
writeln('Text');

{Text-Farbe wiederherstellen}
TextAttr:= last_text_attr;
Dafür braucht es die Unit Crt von Borland. Ich hab sie damals Borland_crt.pas genannt, in dieser steht aber "unit crt;". Keine Ahnung, woher ich die hatte. Könnte die von Namenloser genannte Unit sein. Die Unit selbst sagt im Header "Copyright (c) 1988-2003 Borland Software Corporation". In der Unit gibt es unter anderem eine procedure TextColor, die die Farbe für folgende Textausgaben setzt. Dieses damals kompilierte 32 Bit Programm funktioniert sogar auf einer 64 Bit CMD eines Win7 x64.

EDIT: Ist die von Namenloser genannte Unit.

MfG Dalai

Panthrax 23. Jan 2014 02:46

AW: Bunter text in console
 
Unit "Console" von Rudy Velthuis, lizenzfrei.
  • Keine Ersatz-Sequenzen.
  • Stellt umfänglich das Vokabular der Unit "CRT" zusammen, wie es mit TurboPascal ausgeliefert wurde.

Luckie 23. Jan 2014 05:36

AW: Bunter text in console
 
@Bummi: Wo soll die Exception herkommen? API Funktionen werfen in der Regel keine Execptions.

Bummi 23. Jan 2014 06:31

AW: Bunter text in console
 
@Luckie, ich habe einfach den Standardrumpf genommen ohne ihn auszuputzen.
Ich hätte den Beitrag auch gerne wieder gelöscht, da redundant. (Ich habe vorher nicht den ganzen Thread gelesen :oops:)

Union 23. Jan 2014 07:06

AW: Bunter text in console
 
Es gibt das ANSICON Projekt https://github.com/adoxa/ansicon


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.

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