Meine Anwendung erfordert eine Konsole embeded innerhalb des Anwendungsfensters, ein Beispiel wäre in einem Programm wie AutoCAD, wo die Konsole am unteren Rand des Fensters auf Befehle wartet.Eine Konsole innerhalb einer Anwendung schreiben
Ich brauche die Konsole in meiner Anwendung, so dass ich Variablen und andere Dinge ändern kann, so dass die Konsole benötigt keine vollständig ausgeblasen Schal zu sein.
Im Moment habe ich eine einfache Konsole in meiner Anwendung, aber es scheint sehr klobig im Vergleich zu einem Terminal (Shell), das ist, was ich will, dass die Konsole wie sein.
Die Art und Weise, dass ich es mit der Konsole getan habe, ich habe, ist, wenn der Benutzer die TAB
Taste der Konsole zeigt drückt, dann können sie ihren Befehl/Zeile eingeben; Sobald der Schlüssel Return
gedrückt wurde, wird die Zeichenfolge, die sie eingegeben haben, geparst und der Befehl wird verarbeitet.
Ich verwende sf::Text
Objekte, um Text in meinem Anwendungsfenster auszudrucken. Es gibt insgesamt 5 sf::Text
Objekte, die verwendet werden, 4 für die vorherigen Befehle/Fehlermeldungen und 1 für die aktuelle Befehlszeile. Wenn die Taste Return
gedrückt wird, ändert die 4. sf::Text
ihren aktuellen String auf den 3., den 3. auf den 2., den 2. auf den 1. und den 1. auf den aktuellen Befehlsstring, dann wird der aktuelle Befehlsstring gelöscht und ist wieder zur Eingabe bereit. Auf diese Weise gibt es Platz für 4 'Geschichte' von Befehlen und/oder Fehlern. Nicht das Beste, aber es war das Beste, was ich mir vorstellen konnte. Natürlich könnte die Menge der Historie durch Hinzufügen von weiteren sf::Text
Objekten geändert werden. Also am Ende das ist, wie ich die Konsole mit der
sf::RectangleShape rectangle;
rectangle.setSize(sf::Vector2f(App->getSize().x, App->getSize().y/3));
rectangle.setPosition(0, 0);
rectangle.setFillColor(sf::Color::black);
App->draw(rectangle); // This renders the console looking background rectangle
App->draw(CLine); // This renders the current command line
for(int i = 4; i >= 0; --i) // This renders the history as described above, their idevidual positions are setup earlier on in the program
{
CHistory[i].setString(CS[i]);
App->draw(CHistory[i]);
}
App
ist nur ein sf::RenderWindow*
Mein Gesamt Frage ist, Gibt es eine Möglichkeit Bildschirm machen, dass ich eine Konsole in meine SFML einbetten Fenster, ohne dass es einfach ein Bild von Textobjekten sein muss, die wie eine Konsole wie oben aussehen. Ich würde lieber eine tatsächliche Konsole/Shell/Terminal in meiner Anwendung haben. Wie die Standard-Bash-Shell, aber natürlich mein eigener Shell-Interpreter.
Ich bin nicht nach sfml, um es für mich zu tun, ich habe sfml als Tag und in den Codebeispielen hinzugefügt, um zu zeigen, dass ich sfml verwendet habe. Ich weiß, dass ich es selbst schreiben muss, was ich will, ist eine Richtung, wie es geht. Wie andere Leute eine Konsole in ihre Anwendung geschrieben haben. : D – Elgoog
Ich würde vorschlagen, Ihre Frage in einige kleinere Teile zu verfeinern, sobald Sie identifiziert haben, was Sie erreichen möchten. Was sind Ihre Anforderungen? Versuchen Sie, das in Quake oder Unreal Tournament oder was auch immer Spiel, das Sie interessiert sind. –
Wolfire entwickelt etwas basierend auf Webkit anscheinend: http://www.youtube.com/watch?v=c-4WdtTGIkg&feature=relmfu –