elja_1989
Гость
|
|
« : 19-02-2008 17:36 » |
|
Народ, помогите с поиском инфы или с моим просвещением... Задали курсач(1 курс), суть написать текстовый редактор, с реализацией системной части запаров особо нет, а вот с графикой и созданием меню я просто == 0 Скажите как сделать меню и панель со свитками.. Например File | Edit | BlaBla | BlaBla1 | В инете на русском не нашёл ничего, может и плохо искал, но старался
|
|
« Последнее редактирование: 19-02-2008 17:47 от elja_1989 »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 19-02-2008 19:02 » |
|
elja_1989, На чем хоть пишем? Тема была перенесена с Unix C++. Если действительно в среде Linux. То можно ли использывать стороние библиотеки? Если да, то легче всего взять Qt и его использовать. Описание работы на английском можно найти на сайте разработчиков http://doc.trolltech.com/.
|
|
« Последнее редактирование: 19-02-2008 19:10 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #2 : 19-02-2008 20:06 » |
|
А если под ДОС,тогда прямой вывод в видеопамять очень даже рулит. Мы в свое время полностью скопировали вид редактора Turbo C со всеми его менюхами ))
|
|
|
Записан
|
|
|
|
elja_1989
Гость
|
|
« Ответ #3 : 20-02-2008 13:50 » |
|
Пишу на Borland C++ & Application Frameworks 3.1 под DOS.. Кста именно что-то похожее на Си с менюшками мне бы и хотелось, т.е. сверху панель с file edit ..., а снизу рабочая область... Писать надо именно в этой среде и под DOS.
|
|
« Последнее редактирование: 20-02-2008 13:53 от elja_1989 »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #4 : 20-02-2008 13:56 » |
|
Насколько мне не изменяет память, у Борланда всегда в хелпе куча примеров была - практических. В тч и меню для текстового режима.
зы Кстати, оболочка графическая или текстовая?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #5 : 20-02-2008 14:08 » |
|
elja_1989 Ну тогда все очень просто. Для етого нужны: 1) Желание поковыряться 2) Знание про работу напрямую с видеобуфером в тестовом режиме(по идее если поискать по форуму, то тема такая уже была) 3) Вспомогательная программа которая выведет по коду ASCII его символьное представление(пригодится когда будеш рамочки рисовать и все такое) 4) Хорошо продуманное взаиможействие с клавиатурой и мышью(если таковая предусматривается) 5) Много считать для того чтобы "подделка" не отличалась от "оригинала" в плане интерфейса ))
Основное тут первые 2 пункта. Как только возникнут вопросы по поводу 2 - пиши, бум разбираться ))
Джон, думаю если аналог Turbo С++ то все-таки текстовая
|
|
|
Записан
|
|
|
|
elja_1989
Гость
|
|
« Ответ #6 : 20-02-2008 16:26 » |
|
А кстати насчет графического и текстового режимов, что лучше выбирать для текстового редактора, просто я хочу под конец работы попытаться подключить мышь.. Её можно реализовать и там и там? Ещё просьба, если можете скиньте сюда хоть какой пример кода выезжающего меню, типа жму че нить(например alt+f) и выезжает менюшка-свиток (без анимации конечно ), а в ней разные строки типа File Save As.. ну и т.д.
|
|
|
Записан
|
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #8 : 20-02-2008 17:24 » |
|
вообще там есть в библиотеках TurboVision =) копируете оттуда функции один в один - и вуаля =)
В подавляющем большинстве вузов на 1-м курсе у студентов проблемы с ООП и, соответственно, использованием таких объектных библиотек, "дружелюбность" которых ниже, чем у Delphi. Это в моё время студенты младших курсов TV изучали просто ради интереса, вне программы. Теперь мне такие любознательные студенты попадаются исключительно редко . elja_1989, в рамках какого курса выдано задание? Нужно использовать структурное или объектно-ориентированное программирование? Каково знание языка C (или C++)?
|
|
« Последнее редактирование: 20-02-2008 17:26 от dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
elja_1989
Гость
|
|
« Ответ #9 : 20-02-2008 17:57 » |
|
Я писал какой курс вначале(1 курс) В рамках структурного Borland C++ 3.1 можно юзать.. Учу язык 1 семестр, но успехи неплохие... Учусь быстро, трудолюбив и мне нравится ! Я с графикой некогда не работал, ну не счетая моего хобби - 3dsmax, zbrush, vegas, photoshop и т.д., но к программухе это уж никак в данный момент прицепить нельзя! В объектном я бы наверное бы не парился над меню(моё предположение), а вот в досовской сишке... Просто понятия не имею, как к этому подойти... Ну вот за сегодня за вчера дорубил как с графикой работать хоть немного, с тексовым режимом хоть чуток разобрался, но не рублю как в разбираться в вещах аля 0xb800. И нехочется просто тупо сдирать откуда-то код, ахочется разобраться, дорубить и уже делать с пониманием. возникает вся таже просьба про меню...
|
|
« Последнее редактирование: 20-02-2008 18:10 от elja_1989 »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #10 : 20-02-2008 18:07 » |
|
elja_1989, Ты чуть чуть не правильно понял . dimka, имел ввиду, какой именно предмет изучения, заставляет тебя писать такую программу.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
elja_1989
Гость
|
|
« Ответ #11 : 20-02-2008 18:12 » |
|
elja_1989, Ты чуть чуть не правильно понял . dimka, имел ввиду, какой именно предмет изучения, заставляет тебя писать такую программу. В рамках курса ОАиЯП.. Основы алгоритмизации и языки программирования, простыми сломами - программирование
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #12 : 20-02-2008 19:58 » |
|
elja_1989, понятно. (Специальность, случаем, не 230105?) В объектном я бы наверное бы не парился над меню(моё предположение), а вот в досовской сишке... По секрету скажу, что эта "досовская сишка..." тоже объектно-ориентированная Это значит, что под "объектным" ты понимаешь что-то не то. Задача с меню простая, и читать там особо нечего. Нужно лишь думать "в правильную сторону". 1) В начале важно понимать такую тебе неведомую штуку, как поток управления. Сколько я понимаю, ты планируешь 2 режима работы: основные действия программы; работа с меню. Переключение в режим меню происходит по нажатию кнопки (например, F10), выход из меню по нажатию другой кнопки (например, Esc). При обычном подходе к структурному программированию эти режимы не могут работать одновременно, поскольку меню является вызываемой функцией - пока эта функция не завершит работу, нельзя будет вернуться к исходной функции. Добавление мыши потребует обязательного использования специфической "событийной" архитектуры, которая позволит создать видимость одновременной работы как меню, так и других функций программы. Если интересно, можем её разобрать. Если нет - тогда забудь про мышь. В конце ты её не приделаешь, если не заложишь правильный фундамент с самого начала. 2) Отделить функцию отрисовки текущего состояния меню (какой пункт меню выделен) от функции управления меню (как передвигать выделение между пунктами меню в случае нажатия соответствующих кнопок). Функция управления вызывает функцию отрисовки после изменения состояния меню. 3) Поскольку обе функции требуют информации о пунктах меню, то потребуется разработать структуру данных, которая описывают пункты меню, и может быть передана в каждую из функций.. 4) Чтобы модуль обеспечения работы меню был удобно настраиваемым, полезно познакомиться с такой штукой, как указатели на функции, и научиться ими пользоваться. P.S. Тему в "Начинающим".
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #13 : 20-02-2008 20:07 » |
|
Если мне не изменяет память, то у С++ должны быть функции типа writebyte/readbyte в которых указывается, адрес в/из которого надо звписать/прочитать данные. Подробнее посмотри в справке Borland C++ 3.1 0хb000 ето адрес начала видеопамяти в текстовом режиме. На каждый символ екрана отводится 2 байта данных: байт самго символа и байт атрибутов(таких как цвет символа, цвет фона и мерцание). Для того чтобы семулировать интерфейс Turbo C++ достаточно выставить первой строке атрибут фона в "белый", а строкам 2-80 поставить атрибут фона "синий". Изменять ети данные придется крайне редко, кроме тех случаев, когда некоторый участок будет перекрываться меню, и подсветки выделения текста (если она будет реализована)
|
|
|
Записан
|
|
|
|
elja_1989
Гость
|
|
« Ответ #14 : 20-02-2008 21:05 » |
|
Мммм... Ну в общем я более менее начал дорубать, указатели на функции я знаю неплохо... Вроде всё потдается логике.. Теперь возникают новые вопросы: 1) Если переключение в меню организовать через ALT+*! То напримериспользуя switch, что писать в case? али 'ALT+F' он поймет, что-то подсказывает что нет) 2) Доступ к меню(к активной области скажем File) Осужествляется тупо по координатам? И "выделение на самом деле делается циклом, просто меняя цвет? 3) Как сделать скролирование текста(по нажатию стрелок) и переместить отображение, как бы под панель с File Edit Search
File Edit Search (1;80) с координаты(2;161 до 2;238 идёт текст) Как его в рамки загнать?
4) Ещё, как я понял экран имеет всего 1 индекс из значений 25*80? 5) Как передвигать с помщью индекса курсос мигающий, показывающий, где вводить текст...
|
|
« Последнее редактирование: 20-02-2008 21:08 от elja_1989 »
|
Записан
|
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #15 : 20-02-2008 21:28 » |
|
1) Нет такое ему будет сделать трудновато, можно отслеживать нажатие на "F" И в етот момент проверять нажата ли клавиша "Alt" - делается ето с помощью считывания статусного байта по адресу 0:0419 2) В случае с использованием мышки правильно, однако не стоит забывать про перемещене по меню с помощью стрелок "вправо" "влево", для етого удобней хранить индекс активного пункта меню(имхо). Опять же если реализовывать возможность перехода между меню когда один из пунктов, то стоит так же знать открыт етот пункт или нет. 3) А каким образом ты собираешся хранить весь набраный текст? И что обозначают индексы 2;161 2;238? 4) В видеопямяти - да, он линейный, но на более высшем уровне он имеет 25 строк по 80 символов, а потому для удобства работы лучше все же использовать координаты X(позиция в строчке 0..79) Y(номер строки 0..24) 5) По моему есть такая функция gotoxy(x,y) которая перемещает курсор в нужную позицию на екране (или за егопределами:-) ). Подробнее смотри Help.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #16 : 21-02-2008 12:36 » |
|
Ну вы, блин, даёте. Во-первых, адрес B000 для монохромного режима, для цветного B800. Во-вторых, зачем эти адреса и вручную писать прямой вывод в видеопамять, когда можно использовать имеющиеся в данной среде функции conio.h, где есть позиционирование курсора (gotoxy), управление цветами (textcolor, backgroundcolor), работа с окнами (включая их скроллирование)? Все эти функции как раз обеспечивают прямой вывод в видеопамять (по умолчанию), либо используют BIOS - переключение осуществляется значением специальной глобальной переменной (если память не изменяет, она называется directVideo или как-то так). В-третьих, зачем статусный байт по адресу 0419 (и чтение 60-го порта)? Скорее, нужно уметь обрабатывать ASCII-коды нажатых клавиш (включая расширенные коды)? Не все сочетания клавишь можно будет охватить, но это и не главное в данной задаче. В-четвёртых, структура видеопамяти текстового режима представляет собой 2-хбайтовое слово на позицию. 1-й байт описвает ASCII-код отображаемого символа, 2-й байт содержит цветовые атрибуты. Хотя, может и в другом порядке - точно не помню. Цветовые атрибуты описываются как: BGGGHCCC. C - биты цвета символа (8 цветов), H - бит яркости цвета символов (расширение до 16 цветов), G - биты цвета фона (8 цветов), B - (в зависимости от настроек) бит мерцания символов (8 цветов сохраняется) /яркости цвета фона (расширение до 16 цветов). Если переключение в меню организовать через ALT+*! То напримериспользуя switch, что писать в case? али 'ALT+F' он поймет, что-то подсказывает что нет) Нет, не поймёт. Нужно обрабатывать расширенный код данного сочетания клавиш. Коды можешь определить методом тыка - написать простую программку, которая читает все введённые символы и выводит на экран их коды (номера в таблице ASCII). Главное даже не это, главное: где писать этот switch. В каком месте программы. Как его в рамки загнать? Рамки рисуются символами псевдографики. Смотри кодовую таблицу 866 расширения ASCII.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #17 : 22-02-2008 14:00 » |
|
Я тут буду выкладывать различные решения, но на другом языке, чтобы показать идею, а не написать готовый для курсовика код. Получение ASCII-кодов нажимаемых клавиш: KeyCode% = 0 ' Пока не нажата <Esc> WHILE KeyCode% <> 27 KeyCodes$ = INKEY$ IF LEN(KeyCodes$) > 0 THEN KeyCode% = ASC(LEFT$(KeyCodes$, 1)) IF KeyCode% = 0 THEN ' Расширенный ASCII-код клавиши KeyCode% = ASC(MID$(KeyCodes$, 2, 1)) PRINT 0, KeyCode% ELSE ' Обычный ASCII-код клавиши PRINT KeyCode% END IF END IF WEND END В частности, столь желаемый <Alt>+<I> таким способом поймать можно.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #18 : 22-02-2008 16:09 » |
|
Ну и собственно меню (только вертикальное, но с рамкой) для приложения с полноэкранными (не оконными) функциями может выглядеть примерно так: DECLARE FUNCTION GetKeyCode% () DECLARE SUB Menu () DECLARE SUB Main () DECLARE SUB DrawMain () DECLARE SUB NewOperation () DECLARE SUB OpenOperation () DECLARE SUB SaveOperation () DECLARE SUB PrintOperation () DECLARE SUB ExitOperation () DECLARE SUB Stub (Name$) DECLARE FUNCTION VerticalMenu% (X%, Y%, ItemNames$()) DECLARE SUB DrawVerticalMenu (StartX%, StartY%, ItemNames$(), CurrentItem%)
OPTION BASE 1 CALL Main END
FUNCTION GetKeyCode% DO Keys$ = INKEY$ LOOP UNTIL LEN(Keys$) <> 0 KeyCode% = ASC(LEFT$(Keys$, 1)) IF KeyCode% = 0 THEN GetKeyCode% = 255 * ASC(MID$(Keys$, 2, 1)) ELSE GetKeyCode% = KeyCode% END IF END FUNCTION
SUB Main DO CALL DrawMain SELECT CASE GetKeyCode% CASE 27 EXIT SUB CASE 17340 CALL Menu END SELECT LOOP END SUB
SUB DrawMain CLS COLOR 7, 0 LOCATE 12, 38 PRINT "MAIN" LOCATE 25, 1 PRINT "ESC=Exit F10=Menu"; END SUB
SUB Menu DIM ItemNames$(5) ItemNames$(1) = "New" ItemNames$(2) = "Open" ItemNames$(3) = "Save" ItemNames$(4) = "Print" ItemNames$(5) = "Exit" SELECT CASE VerticalMenu%(10, 5, ItemNames$()) CASE 1 CALL NewOperation CASE 2 CALL OpenOperation CASE 3 CALL SaveOperation CASE 4 CALL PrintOperation CASE 5 CALL ExitOperation END SELECT END SUB
FUNCTION VerticalMenu% (X%, Y%, ItemNames$()) CurrentItem% = LBOUND(ItemNames$) DO CALL DrawVerticalMenu(X%, Y%, ItemNames$(), CurrentItem%) SELECT CASE GetKeyCode% CASE 13 VerticalMenu% = CurrentItem% EXIT FUNCTION CASE 27 VerticalMenu% = -1 EXIT FUNCTION CASE 18360 IF CurrentItem% > LBOUND(ItemNames$) THEN CurrentItem% = CurrentItem% - 1 END IF CASE 20400 IF CurrentItem% < UBOUND(ItemNames$) THEN CurrentItem% = CurrentItem% + 1 END IF END SELECT LOOP END FUNCTION
SUB DrawVerticalMenu (StartX%, StartY%, ItemNames$(), CurrentItem%) MaxLengthOfName% = 0 FOR I% = LBOUND(ItemNames$) TO UBOUND(ItemNames$) LengthOfName% = LEN(ItemNames$(I%)) IF MaxLengthOfName% < LengthOfName% THEN MaxLengthOfName% = LengthOfName% END IF NEXT I% Y% = StartY% COLOR 15, 0 LOCATE Y%, StartX% PRINT CHR$(218); FOR X% = StartX% + 1 TO StartX% + MaxLengthOfName% + 2 LOCATE Y%, X% PRINT CHR$(196); NEXT X% LOCATE Y%, StartX% + MaxLengthOfName% + 3 PRINT CHR$(191); FOR I% = LBOUND(ItemNames$) TO UBOUND(ItemNames$) Y% = Y% + 1 LOCATE Y%, StartX% PRINT CHR$(179); IF I% = CurrentItem% THEN COLOR 0, 3 ELSE COLOR 0, 7 END IF LOCATE Y%, StartX% + 1 PRINT " "; LOCATE Y%, StartX% + 2 PRINT ItemNames$(I%); LengthOfName% = LEN(ItemNames$(I%)) FOR J% = LengthOfName% TO MaxLengthOfName% + 1 X% = StartX% + J% + 2 LOCATE Y%, X% PRINT " "; NEXT J% COLOR 15, 0 LOCATE Y%, StartX% + MaxLengthOfName% + 3 PRINT CHR$(179); NEXT I% Y% = Y% + 1 LOCATE Y%, StartX% PRINT CHR$(192); FOR X% = StartX% + 1 TO StartX% + MaxLengthOfName% + 2 LOCATE Y%, X% PRINT CHR$(196); NEXT X% LOCATE Y%, StartX% + MaxLengthOfName% + 3 PRINT CHR$(217); COLOR 7, 0 LOCATE 25, 1 PRINT "ESC=Cancel ENTER=Execute ARROW UP,ARROW DOWN=Select"; END SUB
SUB ExitOperation CALL Stub("EXIT") END SUB
SUB NewOperation CALL Stub("NEW") END SUB
SUB OpenOperation CALL Stub("OPEN") END SUB
SUB PrintOperation CALL Stub("PRINT") END SUB
SUB SaveOperation CALL Stub("SAVE") END SUB
SUB Stub (Name$) COLOR 7, 0 CLS LOCATE 12, 40 - LEN(Name$) / 2 PRINT Name$; LOCATE 25, 1 PRINT "Press any key"; DO LOOP UNTIL INKEY$ <> "" END SUB Тут ещё надо много чего доводить до кондиции, например, обрабатывать нештатные ситуации, когда меню не помещается на экране и т.д.
|
|
« Последнее редактирование: 22-02-2008 20:36 от dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #19 : 22-02-2008 18:15 » |
|
dimka, Нащет памяти - каюсь не то написал, относительно Альта - согласен, что предложил не самое оптимальное решение( я просто не пробовал через ASCII делать, а когда появилась надобность обрабатывать Альт, то как раз еще свежими были зхнания про нужные адреса в памяти, да и код готовый был, потому его и использовал)
А меню и все остальное рисовал напрямую... К счастью или к сожалению - трудно сказать...
|
|
|
Записан
|
|
|
|
elja_1989
Гость
|
|
« Ответ #20 : 22-02-2008 21:30 » |
|
Мммм.. С меню вроде уже разберусь, а вот как организовать редактирование и выделение текста.. Каждую строку на которой каретка в данных момент, да или каждую хранить в отдельном буфере для строки?
|
|
|
Записан
|
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #21 : 22-02-2008 22:09 » |
|
elja_1989, хм... Вот представь себе что ты работал(а) С Word-ом. Какие там возможности для редактирования текста существуют? Ты сначала опиши чего тебе хочется, и как ты ето видиш, а потом жди помощи и конструктивной критики...
|
|
|
Записан
|
|
|
|
elja_1989
Гость
|
|
« Ответ #22 : 23-02-2008 22:39 » |
|
//#include <graphics.h> #include <dos.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <alloc.h>
void del(char**,int,int,int);
void main() {clrscr(); int i,j,k,x=1,y=1; char **ms; int n=25; ms=(char**)calloc(n,sizeof(char*)); for(i=0;i<n;i++) { *(ms+i)=(char*)calloc(80,sizeof(char)); *(ms+i)="kd adasdddddddddddddddddddd adada a dadadasd kldskl sklslk sdklsdlk ssdfsklsdf"; puts(*(ms+i)); }
gotoxy(1,1);
while(1) { switch(getch()) { case 72: y--; if(y<1) y=1; gotoxy(x,y); break;
case 80: y++; if(y>25) y=1; gotoxy(x,y); break;
case 77: x++; if(x>80) {x=1;y++;} gotoxy(x,y); break;
case 75: x--; if(x<1) {x=80; if(!(y<=1)) y--;} gotoxy(x,y); break;
case 8: del(ms,x,y,n); break;
} } }
void del(char **ms,int x,int y,int n) { for(i=x-1;i<80;i++) *(*(ms+y-1)+i-1)=*(*(ms+y-1)+i);
clrscr();
for(i=0;i<n;i++) cputs(*(ms+i));
gotoxy(--x,y);
} Ну вот что-то тока что набросал тестовое, впадлу уже сегодня править что-то! Что-то тут работает, 1 строка кое как, но не суть.. мне то про подход спросить хотелось, учтите тока что всякие мелочевые ошибки я не отрабатывал(аля сдвиги куда не надо, перенос с другой строки..) Да и не в состояние провить, праздник всё таки был)) Жду критики короче.. правильный подход беру или нет.. Кстати упорно дрочился над выводом новым.. Какова-то не хотел работать принтф, работал тока цпринтф..
|
|
« Последнее редактирование: 06-08-2008 16:34 от Алексей1153++ »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #23 : 24-02-2008 07:24 » |
|
Обработка расширенных кодов неправильная. В таком виде кнопки движения курсора совпадают с буквами латинского алфавита. Какова-то не хотел работать принтф, работал тока цпринтф.. При подключении conio.h нужно использовать cprintf. Стандартные потоки ввода/вывода заменяются на прямую работу с видеопамятью.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
elja_1989
Гость
|
|
« Ответ #24 : 24-02-2008 07:33 » |
|
Ммм.. Так я и подозревал.. А как сделать, через порты(0х417) получается? Или есть ещё АЦКИЙ КОД этих..
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #25 : 24-02-2008 09:23 » |
|
elja_1989, зачем тебе порты? Пример более правильной обработки расширенных кодов см. выше.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #26 : 24-02-2008 11:07 » |
|
elja_1989, Если тебе на вход будет приходить расширенный код, то он будет состоять как бы из 2 "символов", первый из которых 0, а второй - какое-то значение.(именно ето написано в том примере кода от dimka) Соответственно для корректрой обработки расширенных кодов надо проверять значение считанного символа на 0.
|
|
|
Записан
|
|
|
|
elja_1989
Гость
|
|
« Ответ #27 : 24-02-2008 12:50 » |
|
То что у него там мне неочем не говорит, я никогда раньше не программил, я занимался 3д графикой.. Не могли бы вы показать как это сделать..
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #28 : 24-02-2008 13:45 » |
|
То что у него там мне неочем не говорит, я никогда раньше не программил, я занимался 3д графикой.. Ну и что? Программист понимает почти любой (за исключением всяких извращений типа BrainFuck) алгоритмический язык программирования - даже незнакомый, так как все они основаны на едином принципе. Посмотри внимательно на код Quick Basic и подумай. Не могли бы вы показать как это сделать.. Там это и показано - там приведён рабочий код. Кроме того, уже на словах даны пояснения основного принципа.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
RXL
|
|
« Ответ #29 : 24-02-2008 14:11 » |
|
elja_1989, придется учить - готовую программу писать за тебя никто не будет.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|