Wolność teoretycznie istnieje. Wybór też. Lecz jedyne co prawdziwe to Ty.

Alternatywa dla ANSI escape.


Dodano dnia 01.04.2009


Ostatnie posty znajomego, Gynvaela Coldwinda (http://gynvael.coldwind.pl) dotyczące klasowości, OpenGL i ANSI w plikach wsadowych niewątpliwie warte są przeczytania i wykorzystania w praktyce chociaż w celach edukacyjnych. ANSI w Batchu to coś, o czym od bardzo dawna myślałem ale moje myśli nie chciały się zamienić się w działający program obsługujący zmienne kolorowanie w plikach wsadowych. Teraz jest inaczej.

Natchniony wymysłami Gyna, które (nie ukrywając) są bardzo oryginalne przelałem swoje myśli na "kartkę" (a dokładnie do kodu źródłowego c++) i to właśnie o tym chcę dzisiaj napisać.

Idea zmiennego kolorowania zrodziła się jakiś czas temu, gdy do pewnego projektu potrzebowałem zmieniać kolory po poszczególnych wywołaniach echo. Stosowanie color z różnymi wartościami przed i po wyechowaniu czegokolwiek nie wchodziło w grę. Color po prostu zmienia kolorystykę całej konsoli a nie tylko fragmentu liczonego od jego zastosowania. Trzeba było wymyślić coś innego. Oczywiście z pomocą przybiegło C++ i jego SetConsoleTextAttribute (konkretnie to funkcja wchodząca w skład nagłówka windows.h a więc jego prawdziwym "tatusiem" jest Microsoft). Nie pozostało nic innego, jak zastosować!

Ale moment. Przecież ostatnio programowanie nowego projektu przysparza mi dosyć dużo kłopotów (czyt. wpis dot. gry Pascalowej). Nie było inaczej. Znowu kodzenie i znowu problem z kompilatorem. Przez pół dnia zastanawiałem się, dlaczego wxDev C++ nie chce działać (Żeby nie było niedomówień. WxDev C++ po prostu mi się podoba. Kwestia gustu). Dopiero wieczorem skusiłem się, aby zainstalować go do folderu, który nie będzie zawierał spacji. Zgadnijcie? Zadziałało. Chyba programiści wxDev nie pomyśleli, że jakiś użytkownik będzie chciał go zainstalować do "Program Files"...

Teraz było już z górki. Szybko napisałem szkielet, odebrałem argumenty i znalazłem dokumentację funkcji SetConsoleTextAttribute, która pomogła mi w mieszaniu kolorów składowych. Jako bazę na kolorystykę obrałem oryginalne kolory ze schematu funkcji color (CMD) lecz z bliżej niewiadomych przyczyn, nie skorzystałem z systemu Hex w przypadku identyfikacji kolorów. Tak więc aby użyć koloru jasnozielonego (A) musisz zastosować ID 10. Po prostu.

Mieszanie kolorów było dosyć proste. Model RGB nie jest wymagający więc stworzenie koloru jasnoniebieskiego było niemal tak samo proste, jak jasnobłękitnego (logicznie z nazwy wnioskując, to dwa te same kolory ale nie będę upierał się w tym momencie).

Obrazek



Może i nie wygląda zbyt imponująco ale spełnia swoją pierwotną rolę. Co prawda, nie jest to tak zaawansowany pomysł co ten, który możemy podziwiać na blogu Gynvaela, jednak myślę, że warto chwilę się zastanowić nad pięknem tej prostoty (;)).

Kod źródłowy dostępny tutaj: patrykuss.python.org.pl.

Paczka, w której znajdziesz plik wykonywalny, źródło i demo pliku wsadowego: patrykuss.python.org.pl.

UWAGA! Korzystając z funkcji color, między identyfikatorami kolorów nie stawia się spacji. W funkcji echoo jest inaczej (oszczędność pracy nad argumentami). Składnia:
Code:
echoo N Y String

N- kolor tła

Y- kolor pierwszego planu

Sring- naturalnie string wejściowy.

UWAGA2! Przepraszam za jakość kodu ale wyobraź sobie, że był pisany na kolanie i miał działać a nie wyglądać ;).
Kategoria: Programowanie

Autor: Patryk Szlagowski
Faktycznie :D. Jest błąd ale nie widzę potrzeby poprawiania go.

W każdym bądź razie, punkt za spostrzegawczość ;).
Data dodania: 26.11.2009
Autor: Gormack
Przeczytaj uwaznie napisy ze screena i porównaj z kolorami. Pomyłkę strzeliłeś :)
Data dodania: 26.11.2009
Autor: Patryk Szlagowski
Do wykodzenia konsoli też raczej wybrałbym hacka Gyna, gdyby na patchowanie nie potrzebowałbym całego życia ;). Joke ofc.

Swoją drogą, miło, że zaglądnąłeś. Zauważyłem, że zaczynam witać coraz to dostojniejszych gości :].
Data dodania: 20.04.2009
Autor: Gormack
Nice, ja swoją konsolke napisałem w oparciu o `Gynovego moda` :D
Data dodania: 20.04.2009
Autor: Gynvael Coldwind
Hah, czasami najprostsze rozwiązania są najlepsze ;>
Nice job ;>
Data dodania: 18.01.2009

Nick:

Komentarz:

token



statystyka