Improved Console 4.0



  • @Xalazhar:
    Eine Verwendung in Linux ist ausgeschlossen, so hart das klingt, leider ist es so. Die IC kapselt einfach Funktionen der WinAPI, die die Konsole betreffen und macht diese zugänglicher und überschaubarer. Nun gibt es eben diese WinAPI, wie du sicher schon weißt, nur für Windows. Von daher keine Chance auf Linux, da müsste man eine Linux IC proggen, die die Linux API des Kernels kapselt, aber das ist, meines Erachtens nach, nicht geplant.

    @Martin L
    Welche Fragen hast du denn zum Bekanntmachen? Hast du früher schon mit Dev Packages gearbeitet? Außerdem welche Version von DevC++ benutzt du? Da ich der Maintainer (danke dir SideWinder, dass du mich mit dem Wort bekannt gemacht hast 😃 ), also der Entwickler des Packages bin( nicht aber der IC, das ist SideWinder), richtest du deine Fragen bezüglich dem Umgang mit DevC++ und der IC am Besten an mich, auch sonst stehen ich dir immer gern zu Fragen zur IC zur Verfügung, sollte ich sie denn beantworten können und SideWinder nicht in der Nähe sein.



  • Mahlzeit!

    Erstmal ein riesiges Kompliment an Sidewinder: IC ist echt der Wahnsinn! Erinnert mich sehr an meine seeligen C64-Zeiten zurück. 👍

    Wie auch immer, ich hab da eine Frage bei der sich die Profis vermutlich schreiend an den Kopf fassen werden: Kann ich irgendwie mehrere Konsolen-Fenster öffnen? Mein Ziel ist es, bei Bedarf ein zweites Konsolen-Fenster einzublenden, das quasi als Hilfe-Fenster fungiert.

    Falls das nicht funktionieren sollte (und davon gehe ich aus - zu fragen schadet hoffentlich trotzdem nicht), kann mich jemand zu einer Website weiterleiten, wo erklärt wird, wie man das aktuelle Konsolen-Fenster ausliest und zwischenspeichert und es auch wiederherstellt?

    Danke!



  • Das funktioniert leider nicht: Windows lässt nur eine Konsole pro Prozess zu.

    Den Inhalt auslesen und wiederherstellen ist allerdings kein Problem:
    ReadConsoleOutput: http://msdn2.microsoft.com/en-us/library/ms684965.aspx
    WriteConsoleOutput: http://msdn2.microsoft.com/en-us/library/ms687404.aspx

    bzw. wenn du nur Zeichen und nicht die Formate mitkopieren willst: ReadConsoleOutputCharacter sowie WriteConsoleOutputCharacter.

    MfG SideWinder



  • Mahlzeit!

    Vielen Dank! Hab's schon auspropiert (das angegebene Beispiel modifiziert) und es funktioniert. 🙂



  • Side, muß Dich hier mal loben, ich wußte davon gar nichts, hab's per Zufall gesehen, die IC hat seit meinem ersten Minifundament ja mächtig zugelegt... gute Arbeit.



  • Marc++us schrieb:

    Side, muß Dich hier mal loben, ich wußte davon gar nichts, hab's per Zufall gesehen, die IC hat seit meinem ersten Minifundament ja mächtig zugelegt... gute Arbeit.

    Hört man natürlich gerne 🙂

    MfG SideWinder



  • Ich bilde mir ein, in den Weiten dieser Foren irgendwo gelesen zu haben, dass es mal eine Version der Improved Console gab, bei der man die Textcolor während der Ausgabe eines Strings ändern konnte. Stimmt das, oder habe ich mir das nur erträumt? Und wenn's stimmt, wo finde ich das?

    EDIT: Und bevor mich jemand auf die Suchfunktion des Forums verweist: Habe ich mehrfach probiert aber nichts gefunden. Entweder bin ich zu blöd für die Suchfunktion (glaub' i obah net), oder die Suchfunktion kann Beiträge für "Improved Console" nicht finden, wenn man als Suchbegriff "console" eingibt. Nicht einmal dieser Threat hier wurde gefunden. 😮



  • Wie meinst du das genau? Du kannst doch einfach die Ausgabe des Strings zerteilen und währenddessen eine textcolor-anweisung einfügen?



  • Kevinus schrieb:

    Wie meinst du das genau?

    Wenn ich mich recht erinnere, hat da jemand eine kleine Funktion gebastelt, die man mit std::cout verwenden konnte. So in der Art wie:

    std::cout << Funktion(FG_YELLOW) << "Gelber Text gefolgt von " << Funktion(FG_BLUE) << "blauem Text";
    

    Kevinus schrieb:

    Du kannst doch einfach die Ausgabe des Strings zerteilen und währenddessen eine textcolor-anweisung einfügen?

    Ja, schon. Aber wenn man eine Bildschirm-Maske mit vielen Farbwechseln bauen will, wird der Quellcode sehr schnell unnötig lang und unübersichtlich.

    textcolor(FG_YELLOW);
    std::cout << "Gelber Text gefolgt von ";
    textcolor(FG_BLUE);
    std::cout << "blauem Text";
    


  • Hab's gefunden! Allerdings nicht über die Suchfunktion des Forums (die mag mich anscheinend nicht 😉 ), sondern durch manuelles Suchen. Egal, Hauptsache ich hab's jetzt. 🙂



  • Proximo schrieb:

    Ich hab ebenfalls folgendes bekommen:

    Fehler	1	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ShowWindow@8" in Funktion ""public: void __thiscall ic::Console::hide(void)" (?hide@Console@ic@@QAEXXZ)".	ic.obj
    
    Fehler	2	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetWindowRect@8" in Funktion ""public: int __thiscall ic::Console::getWndPosX(void)const " (?getWndPosX@Console@ic@@QBEHXZ)".	ic.obj
    
    Fehler	3	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SetWindowPos@28" in Funktion ""public: void __thiscall ic::Console::setWndPos(int,int)" (?setWndPos@Console@ic@@QAEXHH@Z)".	ic.obj
    

    Gibt es da schon eine Lösung?

    SDK installiert, beide Quelldateien geladen, main.cpp mit folgendem Inhalt:

    #include <iostream>
    	#include "ic.hpp"
    	using namespace ic;
    	using namespace ic::shorties;
    	using namespace std;
    	
    	int main ()
    	{
    	    textcolor(FG_RED);
    	    cout << "Hello World" << endl;
    	    return 0;
    	}
    

    Ich hoffe auf eine Antwort.

    MFG Proximo

    HI,
    ich hab genau das selbe Problem, hab auch VC++ EE und Plattform SDK nachhttp://www.c-plusplus.net/forum/viewtopic-var-t-is-143003.html installiert.

    Wisst ihr, woran das liegt? Muss ich noch irgendwas einstellen?



  • Dann hast du die Einbindung des Platform SDK noch nicht 100% hinbekommen. Hier fehlen eindeutig die zu linkenden Bibliotheken.

    MfG SideWinder



  • Es funktioniert jetzt, hatte zuvor Win32 Konsolenprojekt begonnen, das funktionierte nicht.
    Wenn ich jedoch einfach ein leeres Projekt starte, klappt alles bestens. Weiß jmd woran das liegt? Hatte eigentlich gedacht Win32 wäre für die Konsole der richtige Anwendungstyp!?



  • Der richtige Projekttyp ist "Win32-Konsolenanwendung"

    MfG SideWinder



  • ja, das hatte ich auch genommen, funktionierte aber nicht. Es funktioniert (zumindest jetzt) nur bei einem leeren Projekt...



  • SideWinder schrieb:

    Am Borland-Support wird gearbeitet, sollte soweit uach schon klappen, doch irgendwas versteht der Borland an HMODULE nicht.

    Welche Version des BCC verwendest du? Mit BCC 5.6.4 (C++Builder 6) und BCB 5.8.2 (C++Builder 2006) läßt sich die IC problem- und warnungslos übersetzen.

    Nur die "Mover"-Demo bedarf einer Änderung:

    #include <conio.h> // Für _getch()
    #include "ic.hpp" // Includieren der Improved Console
    using namespace ic; // Auflösen des Improved Console-Namespace
    using namespace ic::shorties; // Für die Verwendung von Shorties (Siehe unten)
    

    Bei Borland enthält die conio.h bereits eine Funktion namens gotoxy(), so daß eine Mehrdeutigkeit entsteht. Das Problem läßt sich lösen, wenn man entweder ::gotoxy() (conio.h) oder ic::shorties::gotoxy() (IC) verwendet.

    Btw, wie wäre es, wenn die IC eine Alternative zu getch() anbieten würde? 😉



  • Leute berichteten immer wieder, dass der Einsatz nicht möglich sei. Vielleicht haben sie aber auch nur Probleme mit dem Einbinden der IC 🙂

    Alternative zu getch() wäre ein ReadConsole()-InputStream ähnlich cout/cin mit strikter Typüberprüfung und einer RAW-Lesemöglichkeit. Das braucht Zeit und kommt frühestens nach meiner Matura. Wäre aber in der Tat eine Version 5.0 wert.

    In der sollen dann auch endlich mal "Multiple screen buffers" unterstützt werden.

    MfG SideWinder



  • SideWinder schrieb:

    Leute berichteten immer wieder, dass der Einsatz nicht möglich sei.

    Was für Leute waren das? Und von welchen Problemen berichteten sie?

    SideWinder schrieb:

    Alternative zu getch() wäre ein ReadConsole()-InputStream ähnlich cout/cin mit strikter Typüberprüfung und einer RAW-Lesemöglichkeit. Das braucht Zeit und kommt frühestens nach meiner Matura. Wäre aber in der Tat eine Version 5.0 wert.

    Möglicherweise wäre eine Implementation von getch() für dich interessant. Wenn bei Visual C++ der RTL-Quelltext mitgeliefert ist (bei Turbo C++ ist er das), schau doch dort mal rein.

    Aber schulische Abschlüsse gehen natürlich vor 😉



  • Ich habe dasselbe Problem, obwohl ich gar keine externen Verweise auf meine
    Funktionen habe.
    Das Problem hat also sicher nichts mit Falschinstallieren der SDK zu tun.
    Bei mir kommt das Problem wenn ich einen Funktionsaufruf
    so wie hier ---> merltris_highscores.newscore( punktestand);
    mache. Punktestand ist vom Typ int.



  • So, ich nochmal.
    Bei mir ist der Fehler jetzt weg.
    Habe einfach vergessen, die Funktionsdefinition für newscore zu
    implementieren 😃


Anmelden zum Antworten