GRY-Online.pl --> Archiwum Forum

c++ - jak "cofnac" kursor?

19.12.2004
17:03
[1]

fifalk [ fifalkowiec ]

c++ - jak "cofnac" kursor?

mam taki glupie problem :-)
chcialbym w c++, w trybie textowym "cofnac" kursor. wczytuje znaki poprzez getch() i chcialbym uzyskac wizualny efekt uzycia klawisza backspace - przesunac kursor o 1 pozycje do tylu.
nie mam za bardzo pomyslu jak to zrobic - moze da sie jakos cofnac to, co zostalo wyslane co cout'a? albo po prostu przesunac kursor "pod" wyswietlony juz znak?

mam nadzieje, ze wiecie o co mi chodzi :-)

odpada gotoxy() - po m$ visual studio .net to nie dziala :-( nie moge zmienic kompilatora.

19.12.2004
17:57
smile
[2]

aka [ Chor��y ]

Może przydadzą Ci się takie 2 funkcje:

void clrscr()

const int defaultAttrib = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO info;
GetConsoleScreenBufferInfo(output, &info);
DWORD written;
COORD coord = ‹0, 0›;
FillConsoleOutputAttribute(output, defaultAttrib, info.dwSize.X * info.dwSize.Y, coord, &written);
FillConsoleOutputCharacter(output, ' ', info.dwSize.X * info.dwSize.Y, coord, &written);
SetConsoleCursorPosition(output, coord);


void gotoxy(int x, int y)

COORD coord = ‹x, y›;
HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(output, coord);


Lub innym sposobem może być przechowywanie zawartości całego ekranu w tablicy i operowanie na niej a nastepnie wyrzucanie jej całej na ekran.
Chociaż tu może być problem z miganiem. Nie pamietam, kiedyś tak zrobiłem.

Powodzenia.

19.12.2004
18:18
smile
[3]

fifalk [ fifalkowiec ]

tak, znalazlem te funkcje. problem w tym, ze cos niebardzo chca mi dzialac jak je wkleje.

a z ta tablica... hmm.. niby myslalem o tym, ale takie to troche malo optymalne mi sie wydaje :-)

moze ktos jeszczema jakies pomysly?

19.12.2004
18:44
[4]

Tomuslaw [ Konsul ]

wczytuje znaki poprzez getch() i chcialbym uzyskac wizualny efekt uzycia klawisza backspace - przesunac kursor o 1 pozycje do tylu.

Raczy się, ten migający dzyndzelek, który jest na klawiaturze "nad" myślnikiem?

Możesz użyć funkcji gotoxy. Ale musiałby zapamiętywać obecny stan 'kursora'. i wtedy zwyczajnie gotoxy(X-1, Y);

Ale jest coś takiego chyba, jak "getkursor", ale głowy nie dam (może po prostu z Pascala biorę).

19.12.2004
19:46
[5]

fifalk [ fifalkowiec ]

Tomuslaw --> tak, chodzi mi o ten migajacy "_" lub ewentualne skasowanie (lub "cofniecie z cout'a) ostatnio wprowadzonego znaku. ale jak juz pisalem - "odpada gotoxy()" :-)

tzn problem jest taki - nie koniecznie musze to wczytywac przez getch(). generalnie chodzi mi o to, zebym uzyskiwal info, ze znak zostal wcisniety, ale zeby byla mozliowosc poprawy wpisanego znaku.

innym rozwiazaniem jakie przychodzi mi do glowy, to cin - tam "normalnie mozna uzywac backspace" i konczyc wczytywanie enterem. to by mi ewentualnie odpowiadalo. ale jak wyciagnac z bufora moment, w ktorym naciskamy jakis klawisz na klawiaturze?

mam nadzieje, ze nie zamotalem :-)

19.12.2004
19:53
smile
[6]

fifalk [ fifalkowiec ]

aaaale jestem glupi :-) juz wymyslilem :-] najprostsze rozwiazania zawsze najpozniej przychodza do glowy :-]

dzieki wszystkim za zaangazowanie :-)

© 2000-2024 GRY-OnLine S.A.