Avatar billede zkill Nybegynder
08. december 2005 - 15:58 Der er 14 kommentarer og
1 løsning

Clear line

Dav..
(c++)
Jeg udskriver noget i en promt.. men vil ikke bruge
system("cls");
til at clear med, da den jo sletter det hele... Jeg skal enten have slettet den linje jeg skriver på... eller have rykket "curseren" tilbage til starten af linjen... Nogen der meget hurtigt kan hjælpe mig.? :)

/Zkill
Avatar billede jpk Nybegynder
08. december 2005 - 16:04 #1
Du kan bruge SetConsoleCursorPosition, som i denne funktion.

void WriteC(string Tekst, int X, int Y, WORD farve)
{
  HANDLE UdHandle;
  COORD position = {X, Y};
  UdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(UdHandle, farve);
  SetConsoleCursorPosition(UdHandle, position);
  cout << Tekst;
}
Avatar billede zkill Nybegynder
08. december 2005 - 16:33 #2
Har fået lavet det her.. og det ser ud til at virke..
Dog når jeg trukker enter og kommer ud af while-løkken, så melder min handle fejl..
:( og man skal trykke enter 2 gange for at den slutter..

Nogen hjælp.? :)

void maxTegn(char* buffer, int maxCount){

    int tast = 0;
    int count = 0;
    memset(buffer,0,51);

    HANDLE sletLine;
    sletLine = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = {0, 1};
 
    cout << "MENU" << endl;
    while(tast != 13){
        if(count <= maxCount)
        {
            tast = getch();
            if(tast == 8 && count > 0)
            {
                buffer[--count] = ' ';
                buffer[count+1] = ' ';
            }
            else if(tast != 8) {
                if(count != maxCount)
                    buffer[count++] = (char)tast;
            }

            SetConsoleCursorPosition(sletLine, position);
            cout << buffer << endl;
            cout << count << " ";
           
        }
    }
    CloseHandle(sletLine);
}
Avatar billede jpk Nybegynder
09. december 2005 - 08:30 #3
Jeg har lavet et par ændringer.
Hvad mener du med at din handle melder fejl?

void maxTegn(char* buffer, int maxCount){

    int tast = 0;
    int count = 0;
    memset(buffer, 0, 51);

    HANDLE sletLine = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = {0, 1};
 
    cout << "MENU" << endl;
    while(tast != '\r') { // \r = return
        // getch skal stå her, ellers kan du ikke afslutte hvis count > maxCount
        tast = getch();
        if(count <= maxCount)
        {
            if(tast == 8 && count > 0)
            {
                buffer[--count] = ' ';
                buffer[count+1] = ' ';
            }
            else if(tast != 8) {
                if(count != maxCount)
                    buffer[count++] = (char)tast;
            }

            SetConsoleCursorPosition(sletLine, position);
            cout << buffer << endl;
            cout << count << " ";
           
        }
    }
    CloseHandle(sletLine);
}
Avatar billede jpk Nybegynder
09. december 2005 - 08:35 #4
Skulle
memset(buffer, 0, 51);
være
memset(buffer, 0, maxCount);
eller hvordan?

Husk også at bufferen skal være 1 karakter større, hvis du vil bruge den som nultermineret char array (hvilket mange std funktioner antager)

Altså:
char buffer[11];
maxTegn(buffer, 10);


Det kan også være det der giver di en fejl..?
Avatar billede zkill Nybegynder
09. december 2005 - 13:03 #5
havde ik lige set ud havde skrevet.. men fik det til at virke selv..
Dog har jeg et spørgsmål.. Kan man på nogen måde finde den linje man står på.?
Avatar billede jpk Nybegynder
09. december 2005 - 13:06 #6
Ja, med GetConsoleScreenBufferInfo.
Avatar billede zkill Nybegynder
09. december 2005 - 13:07 #7
hvordan skal jeg bruge den.?
Avatar billede jpk Nybegynder
09. december 2005 - 13:16 #8
Jeg vil tro det er noget med:

PCONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
GetConsoleScreenBufferInfo(sletLine, &ConsoleScreenBufferInfo);
COORD position = ConsoleScreenBufferInfo.dwCursorPosition;
Avatar billede zkill Nybegynder
09. december 2005 - 13:21 #9
Hmm den melder fejl..
Siger at ConsoleScreenBufferInfo ikke bliver defineret...
(og det skal ikke være en referance.. det er en pointer..)
Avatar billede zkill Nybegynder
09. december 2005 - 13:30 #10
Fik det til at virke.. Mega mange tak :)
Avatar billede jpk Nybegynder
09. december 2005 - 13:33 #11
Hvad mener du med "det skal ikke være en referance.. det er en pointer", referencen (adressen) til et objekt er da en pointer til det!
Avatar billede zkill Nybegynder
09. december 2005 - 13:40 #12
det var en fejl.. :)
Avatar billede jpk Nybegynder
09. december 2005 - 13:41 #13
Okay, men hvis du er tilfreds, vil jeg lægge et svar...
Avatar billede jpk Nybegynder
10. december 2005 - 11:31 #14
Du kan bruge funktionen getch() til at læse en karakter ad gangen.
Avatar billede jpk Nybegynder
10. december 2005 - 11:37 #15
Sorry, det var det forkeret vindue...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester