Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: DOS und Win32-Konsole ::  Warum kein system("cls") verwenden?  
Gehen Sie zu Seite Zurück  1, 2, 3
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1110
Beitrag Belli Mitglied 12:07:46 04.01.2012   Titel:              Zitieren

Thuruk schrieb:
Zitat:
Die Visual Studio Compiler haben kein clrscr.


Wenn der Code dazu nun bei einem anderen Compiler vorliegt, kann man nicht einfach die Datei kopieren und dann #includen?

Ähh ... wenn Du Visual Studio benutzen willst, programmierst Du wohl für Windows. Dann kannst Du einfach die oben gepostete Funktion verwenden.
Josh.Schr.
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.01.2012
Beiträge: 24
Beitrag Josh.Schr. Mitglied 23:33:01 16.01.2012   Titel:              Zitieren

ich habe für meine win-konsolen-anwendung meine sysmte("CLS") befehle durch die funktion auf der ersten seite ersetzt. funktioniert alles auch wunderbar - genau wie es soll.
aber es gibt immernoch ein problem:
wenn ich recht schnell hintereinander die konsole leere - wieder beschreibe und wieder leere blinkt die erste bzw ersten zeilen. ich dachte das wäre durch deine funktion behoben.
gibt es noch eine andere möglichkeit?
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1110
Beitrag Belli Mitglied 08:58:11 17.01.2012   Titel:              Zitieren

Was meinst Du mit 'recht schnell'?
Wenn ich morgens aus dem Haus gehe, mache ich das Licht aus. Wenn es abends dunkel wird, mache ich es wieder an.
Wenn ich das aber nun im Rhythmus einer halben Sekunde oft hintereinander mache ... dann blinkt es halt ...
Josh.Schr.
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.01.2012
Beiträge: 24
Beitrag Josh.Schr. Mitglied 11:17:59 17.01.2012   Titel:              Zitieren

okay, hier etwas genauer:
ich habe ein menü mit einer pfeil auswahl geschrieben. funktion: ich setze einen ascii pfeil auf auswahl 1, dann drücke ich die pfeiltaste nach unten.
dann lösche ich alle ausgaben auf der konsole mit system("cls") und schreibe nun das selbe menü wieder hin, nur das der pfeil nun bei option 2 davor steht, nicht mehr bei der ersten option.
wenn ich nun schnell die pfeiltasten hoch & runter drücke blinkt die erste zeile in meiner konsole kurz (ms). ich dachte das würde an meinem befehl system("cls") liegen, wegen os-befehl etc. aber mit der funktion auf seite 1 blinkt es immernoch für wenige ms in meiner konsole.

edit: es blinkt nur die erste zeile. die anderen zeilen, die auch immer gelöscht und wieder ausgegebn werden bleiben konstant stehen.


Zuletzt bearbeitet von Josh.Schr. am 11:18:59 17.01.2012, insgesamt 1-mal bearbeitet
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1110
Beitrag Belli Mitglied 12:21:55 17.01.2012   Titel:              Zitieren

Dafür würde ich nicht den ganzen Bildschirm löschen, sondern nur die Stelle, wo Dein zu löschender Text steht (Dein Ascii-Pfeil). Dann brauchst Du dafür auch nicht den ganzen Bildschirm neu zu beschreiben.

Wenn ich das richtig verstehe, würde es doch ausreichen:

Einmal Bildschirm löschen.
Einmal Menü ausgeben.

In einer Schleife:
Ascii-Pfeil an der gewünschten Stelle ausgeben.
Taste abwarten.
Ascii-Pfeil an der alten Stelle mit Blanks überschreiben.
Schleife wieder von vorne.
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1110
Beitrag Belli Mitglied 12:26:59 17.01.2012   Titel:              Zitieren

Beispiel:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>

void DruckSimpleText(int x, int y, char const *text)
{
    COORD target = {x, y};
    DWORD written;

    WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), text,
                                            strlen(text),
                                            target, &written);
}

int main()
{
    for(int i = 0; i < 10; ++i)
    {
        DruckSimpleText(5, i, "===>");
        Sleep(2000);
        DruckSimpleText(5, i, "    ");
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>

void DruckSimpleText(int x, int y, char const *text)
{
COORD target = {x, y};
DWORD written;

WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), text,
strlen(text),
target, &written);
}

int main()
{
for(int i = 0; i < 10; ++i)
{
DruckSimpleText(5, i, "===>");
Sleep(2000);
DruckSimpleText(5, i, " ");
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>

void DruckSimpleText(int x, int y, char const *text)
{
    COORD target = {x, y};
    DWORD written;

    WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), text,
                                            strlen(text),
                                            target, &written);
}

int main()
{
    for(int i = 0; i < 10; ++i)
    {
        DruckSimpleText(5, i, "===>");
        Sleep(2000);
        DruckSimpleText(5, i, "    ");
    }
}
Josh.Schr.
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.01.2012
Beiträge: 24
Beitrag Josh.Schr. Mitglied 14:26:12 17.01.2012   Titel:              Zitieren

wow, vielen dank, das ist natürlich weitaus angenehmer und erspart mir auch ein paar Zeilen Code. Danke für den Hinweis! :live:
C/C++ Forum :: DOS und Win32-Konsole ::  Warum kein system("cls") verwenden?  
Gehen Sie zu Seite Zurück  1, 2, 3
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.