Guten Tag allerseits, Ich experimentiere zur Zeit ein wenig mit C rum und stehe momentan vor dem Problem, dass ich kein brauchbares tutorial finde, das zeigt, wie man eine consolen-ausgabe zum blinken/farbwechseln bringt. es gibt tutorials, in denen verschiedene leute immer wieder funktionen aus der <conio.h> dafür verwenden und mit geringstem Aufwand Erfolg haben. allerdings benutze ich CodeLite mit dem minGW compiler und der kennt anscheinend den Großteil der conio.h datei nicht. so hab ichs jedenfalls jetzt einige male gelesen. kennt ihr einen einfachen weg, printf - Ausgaben zum blinken zu bringen? ich wäre sehr dankbar. Und wegen farbiger Darstellung von Text habe ich eine Funktion aus der <windows.h> gefunden, die ganz gut funktioniert. Allerdings finde ich da nichts, womit ich die Hintergrundfarbe der Console ändern kann. Außerdem scheint es so, als würde sich nicht nur die Farbe der chars ändern, sondern auch die Hintergrundfarbe im Bereich der Chars. gibts da evtl noch bessere Lösungen? beste Grüße Bene
Mit printf kann man nur Zeichenketten ausgeben, das 'Blinken' sind Sondercodes (Sequenzen) die das Anzeigegerät interpretieren und ausführen muss. D.h. du brauchst ein Terminalprogramm das so etwas wie VT100/VT220 emuliert oder ANSI Sequenzen kennt. https://de.wikipedia.org/wiki/VT100 http://ascii-table.com/ansi-escape-sequences-vt-100.php So ist jedenfalls für eine Ausgaben über eine serielle Schnittstelle. Für ein Konsolenprogramm weiss ich grad nicht, ist zulange her...
Benedikt S. schrieb: > kennt ihr einen einfachen weg, printf - Ausgaben zum blinken zu bringen? Unter unixoiden Betriebssystemen sendet man passende ESC-Sequenzen aus dem VT100/ANSI-Befehlssatz. Unter Windows geht das nicht, da benötigt man Funktionen aus der Win32-API zur direkten Ansteuerung der Console. https://docs.microsoft.com/en-us/windows/console/console-functions Mit SetConsoleTextAttribute kannst Du Vorder- und Hintergrundfarbe einstellen: https://docs.microsoft.com/en-us/windows/console/setconsoletextattribute Von sich aus blinkender Text ist nicht vorgesehen, Du kannst das aber nachbilden, indem Du das Textattribut des Textes, der blinken soll, in einer Timerfunktion o.ä. zyklisch änderst.
Z.B. mit SetConsoleTextAttribute https://docs.microsoft.com/en-us/windows/console/setconsoletextattribute
Für Windows sollte das hier weiterhelfen: https://stackoverflow.com/questions/16755142/how-to-make-win32-console-recognize-ansi-vt100-escape-sequences und daraus dann dieser Artikel: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example
Benedikt S. schrieb: > dem minGW compiler Also bei mir ist im Mingw/MSYS2 ein "ncurses" mit dabei, das nutzt man unter Unix für "schöne" Textausgaben (mit Fensterrahmen etc). Damit erstellte Konsolenprogramme sollten ohne große Änderungen auch unter Unix/Linux tun.
1 | void main(int argc, char **argv) |
2 | {
|
3 | printf("\e[5mBlinken\e[mNormal\n"); |
4 | }
|
2⁵ schrieb: > Gilt für Linux! Das ist nicht ganz korrekt. Die genannte Escape-Sequenz funktioniert für alle Terminals und Konsolen, die VT100-kompatibel oder ECMA-48- bzw. ISO-6429-konform sind. Die meisten Linux-Konsolen entsprechen diesen Normen. Aber auch die MSDOS-/Windows-Konsole unterstützt die meisten dieser Escape-Sequenzen, allerdings sind sie dort per Default deaktiviert. Bei älteren Versionen werden sie durch Laden des Moduls ANSI.SYS aktiviert, bei Windows 10 muss dazu irgendetwas in der Registry gefrickelt werden.
Unter DOS ging das auch noch. Da gab es die ANSI.SYS, die man laden konnte, damit die Escape-Sequenzen auch dort gehen. Unter Windows wurde das aber ersatzlos gestrichen, wobei anscheinend in irgendeinem Aufguss von Windows 10 der Support dafür wieder nachgereicht wurde. Siehe dazu: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences Man braucht also bei Microsoft entweder ein uraltes DOS oder das allerneueste Windows, um Escape-Sequenzen nutzen zu können. Da ist dann übrigens auch blinken dabei.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.