A1exSun
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Abs62 Нет, полноценный редактор это слишком. Действительно необходима только функция вывода - выравнивание и перенос по словам, чтоб было красиво. Я ее уже давно сделал, но выводит она текст по одному символу, что заметно на экране. Хочу чтоб формировала строки и выводила их, так же быстрее... А ввод хочу потому что уже начал его делать Только не помню зачем и чем меня не устроил стандартный. И я уже далеко зашел. Собственно вот: Код: void input(char *str, int show, int l, int r) { char key; int i = 0, j, x, y; gotoxy(l+1,wherey()); // пропускаем отступ слева while (1) { // бесконечный цикл ввода key = getch(); if (key == '\0') { key = getch(); if (key == 75 && i > 0) { /* Left */ if (wherex() == 1+l && wherey() > 1) gotoxy(80-r-1,wherey()-1); else gotoxy(wherex()-1,wherey()); i--; } else if (key == 77 && str[i]) { /* Right */ if (wherex() == 80-r-1) gotoxy(1+l,wherey()+1); else gotoxy(wherex()+1,wherey()); i++; } else if (key == 72 && (int)strlen(str) > 80-l-r) { /* Up */ gotoxy(wherex(),wherey()-1); i -= 80-l-r-1; } else if (key == 80 && (int)strlen(str) > i + 80-l-r-2) { /* Down */ gotoxy(wherex(),wherey()+1); i += 80-l-r-1; } continue; } else if (key == 13) { /* Enter */ str[strlen(str)] = '\0'; gotoxy(1,wherey()+1); break; } else if (key == 8) { /* Backspace */ if (i > 0) { x = wherex(); y = wherey(); if (wherex() == 1+l && wherey() > 1) gotoxy(80-r-1,wherey()-1); else gotoxy(wherex()-1,wherey()); i--; for (j = i-1; j < (int)strlen(str); j++) str[j] = str[j+1]; clreos(); for (j = i; j < (int)strlen(str); j++) { cprintf("%c",str[j]); if (wherex() == 80-r) gotoxy(1+l,wherey()+1); } gotoxy(x-1, y); continue; } } else { /* остальные символы */ switch (show) { case 1: cprintf("%c",key); break; case 2: cprintf("*"); break; } str[i++] = key; } if (wherex() == 80-r) gotoxy(1+l,wherey()+1); } // здесь будет перекодировка } void clreos(void) { int i, x = wherex(), y = wherey(); clreol(); for (i = 0; i < 25 - y; i++) { gotoxy(1,wherey()+1); clreol(); } gotoxy(x, y); } | Баг - по backspace каретка не переходит на предыдущую строку, а уходит дальше влево, куда нельзя (хотя работало, не знаю что я там изменил). Ну и нужно доделать вставку символов в середину текста, как? Добавлено: Цитата: Это не столько сложно, сколько муторно. | Та да, обработал одну ситуацию, проверил - работает, обработал вторую - перестала работать первая... Кстати факт, несколько вечеров пытался сделать то меню, ничего не получалось, проект был назван fuckedmenu, вчера создал новый, обозвал nicemenu и за 10 минут все четко работало. Теперь все называю только хорошими словами Добавлено: И еще, возможно ли узнать о переменной которая передана в функцию, ей выделена память или нет? | Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 00:14 23-05-2011 | Исправлено: A1exSun, 00:24 23-05-2011 |
|