![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
kr3v3tkus |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Подскажите как реализовать функции редактирования текста в консоли?
Код AssignFile (F, s); Reset(F); while not EOF(F) do begin Readln (F, s); MyWriteln(s); end; можно вообще их реализовать при таком вводе? зы пробовал делать пару процедур по мануалам - не работают ![]() ![]() Код procedure GotoXY(X, Y: Word); begin Coord.X := X; Coord.Y := Y; SetConsoleCursorPosition(ConHandle, Coord); end; procedure ClrScr; begin Coord.X := 0; Coord.Y := 0; FillConsoleOutputCharacter(ConHandle, ' ', MaxX * MaxY, Coord, NOAW); GotoXY(0, 0); end; ззы или плз киньте линки на литературу >__> Сообщение отредактировано: kr3v3tkus - 29.10.2007 11:44 -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
![]() ![]() |
kr3v3tkus |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
пардон конечено, но я опять с тупыми вопросами -_- сел тут решил накидать основу по примеру, ничерта не получаецца(
Код program Consolepr; {$APPTYPE CONSOLE} {$R *.res} uses Windows, SysUtils; Type PBuffer= ^TBuffer; TBUffer= packed array [0..16384] of TCharInfo; var Buffer: PBuffer; InpHnd: Cardinal; {----------PROCEDUREs----------} procedure Input; var a: Char; IR: INPUT_RECORD; C: _Coord; InpHnd, OutHnd, Wr: Cardinal; begin repeat WaitForSingleObjectEx(InpHnd,INFINITE,false); // ждем события ReadConsoleInput(InpHnd,IR,1,Wr); // берем запись в переменную IR case IR.EventType of // анализируем тип события KEY_EVENT: // от клавиатуры: begin if IR.Event.KeyEvent.bKeyDown then // если клавиша нажата begin a:=IR.Event.KeyEvent.AsciiChar; // взять символ в переменную "а" if a>#0 then // если буквенная клавиша: begin WriteConsoleOutputCharacter(OutHnd,@a,1,C,Wr); // вывести букву на экран Inc(C.X); // сместиться вправо end else // если служебная: case IR.Event.KeyEvent.wVirtualKeyCode of // проверяем код виртуальной клавиши VK_UP: if (IR.Event.KeyEvent.dwControlKeyState and SHIFT_PRESSED <> 0) then {!!!} // если Shift+Вверх, то делаем что-то end; end; end; end; until IR.Event.KeyEvent.wVirtualKeyCode = VK_F10; // выход по нажатию F10 end; procedure Output; var co: _COORD; Hnd, Wr: Cardinal; begin Hnd:=GetStdHandle(STD_INPUT_HANDLE); co.X:=0; co.Y:=0; SetConsoleCursorPosition(Hnd,co); WriteConsoleOutputAttribute(Hnd,Buffer,10,co,Wr); end; {----------/PROCEDUREs----------} {body} begin inpHnd:=GetStdHandle(STD_INPUT_HANDLE); SetConsoleMode(inpHnd,ENABLE_PROCESSED_INPUT); Input; Output; readln; end. 1 Никак не могу разобраться с переменными - какую в какую процедуру передавать и надо ли вообще... 2 Каким типом лучше описать буфер? Сообщение отредактировано: kr3v3tkus - 3.11.2007 3:23 -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
![]() ![]() |
![]() |
Текстовая версия | 9.08.2025 20:15 |