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
Annonceindlæg fra DE-CIX
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; }
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); }
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); }
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..?
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å.?
09. december 2005 - 13:06
#6
Ja, med GetConsoleScreenBufferInfo.
09. december 2005 - 13:07
#7
hvordan skal jeg bruge den.?
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;
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..)
09. december 2005 - 13:30
#10
Fik det til at virke.. Mega mange tak :)
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!
09. december 2005 - 13:40
#12
det var en fejl.. :)
09. december 2005 - 13:41
#13
Okay, men hvis du er tilfreds, vil jeg lægge et svar...
10. december 2005 - 11:31
#14
Du kan bruge funktionen getch() til at læse en karakter ad gangen.
10. december 2005 - 11:37
#15
Sorry, det var det forkeret vindue...
Kurser inden for grundlæggende programmering