Спец. клавиши, код в 2 байта |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Спец. клавиши, код в 2 байта |
Alexn |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 0 |
Я не так давно программирую на Паскале. В некоторых программах встречается некая фишка. Смена экранов по нажатию клавиши. Но если нажимаешь Enter, стрелки и т.п., проскакивает сразу два экрана. Когда давно я читал про Бейсик, там говорилось что управляющие клавиши генерируют код в 2 байта. Предпологаю это и есть причина. Если нет, то подскажите ее (причину) и если не трудно как сделать обработку нажатия простых и упр. кнопочек.
|
volvo |
Сообщение
#2
|
Гость |
|
Alexn |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 0 |
Спасибо volvo за ссылку. Пытаюсь тут написать нечто подобное Volcov Com. Рамки нарисовал, командную строку просто по write('C:\>') написал. Если кто знает, дайте ссылку где взять описание DOS.TPU (желать-но по RUS). Ну а если нет будем дальше мучать BPW.HLP .
|
volvo |
Сообщение
#4
|
Гость |
|
GoodWind |
Сообщение
#5
|
Автооответчик Группа: Пользователи Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: 16 |
а еще можешь задавать вопросы на форуме
-------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
Alexn |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 0 |
Хотелось бы чего-нибуть по подробнее и с примерами. Я не придираюсь (всем спасибо) просто я не могу разобраться при простом перечислении процедур и функций в книгах. В turbo.tph нет описания DOS только WinDos. По первой ссылке прочитал, что строка там заканччивается 0. На http://zerodivide.narod.ru есть Паскаль (Light 5??.0 Kb) модули и встроеный асм.
Улобная штука, влазит на дискету (я ее на работе по всем компам распихал ), с этим русским файлом помощи. (Если кому надо). Ну если никто не знает подробных описаний Дос, может подскажете как вывести список файлов и каталогов (и почему это работает). В ВР есть файл dirdemo, но новые переменные (да все новое). Вот, че то расписался. Вобщем буду благодарен. |
Alexn |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 0 |
И еще вопросик (надо-бы конечно самому доходить ).
Делаю два окна window(1,1,40,20); window(41,1,80,20);. Можно ли переключиться на первое (сделаать его активным). Если да то как? |
volvo |
Сообщение
#8
|
Гость |
Цитата как вывести список файлов и каталогов Код uses dos; { Процедура показывает содержимое диска по шаблону Where } Procedure ShowDisk(Where: string); Type attrType = (RO, Hid, Sys, Vol, Dir, Arc); Const attrText: Array[attrType] Of Char = ('R', 'H', 'S', 'V', 'D', 'A'); attrVal: Array[attrType] Of Byte = (1, 2, 4, 8, 16, 32); Var sRec: SearchRec; i: attrType; Begin If Where = '' Then Where := '*.*'; { Найти первый подходящий файл среди файлов заданного типа (AnyFile) Результаты сохраняются в записи sRec } FindFirst(Where, AnyFile, sRec); { Пока файлы находятся (если больше подходящих файлов не найдено, DosError примет ненулевое значение) } While DosError = 0 Do Begin Write(sRec.name:15, sRec.size:10); { Распечатывается атрибут файла... } For i := RO To Arc Do If (sRec.Attr and attrVal[i]) = attrVal[i] Then Write(attrText[i]) Else Write('.'); WriteLn; { Ищется следующий файл по тому же шаблону, который задан в FindFirst } FindNext(sRec); End; End; Begin ShowDisk('F:\*.*'); End. Цитата почему это работает Потому что это должно работать. Сообщение отредактировано: volvo - |
volvo |
Сообщение
#9
|
Гость |
Кстати, об этом:
Цитата Можно ли переключиться на первое (сделаать его активным) Не помню, есть ли он в ТР 70, но в пятой версии языка точно был модуль WIN.TPU, который значительно облегчал работу с окнами... Там для переключения между окнами уже были готовые процедуры. (Если нужно, могу скинуть...) |
Alexn |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 0 |
Цитата (Если нужно, могу скинуть...) Скинь на 123_456_2004@mail.ru, вот только как я смогу пользоваться модулем если я не знаю какие в нем процедуры, функции, константы и переменные. А в CRT.TPU нельзя работать с окнами кроме как создавать, да? |
volvo |
Сообщение
#11
|
Гость |
Цитата не знаю какие в нем процедуры, функции, константы и переменные. Я тебе скинул модуль вместе с исходниками и демо-программой... Сообщение отредактировано: volvo - |
P@sh@ |
Сообщение
#12
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: 2 |
я когда-то писал нечто подобное, лет 7 назад... а потом то же самое с Vesa-графикой... сделано там правда только перемещение по файлам и каталогам... если надо, могу выложить сюда.
что значит сделать окно активным? ты же сам эти окна рисуешь, вот и сделай какую-нибудь переменную active, в которой будет номер активного окна, ну и меняй ее сколько влезет, а процедура отрисовки будет по ней ориентироваться Сообщение отредактировано: P@sh@ - |
Alexn |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 0 |
P@sh@
Если не трудно, напиши небольшой пример использования переменной active. Цитата если надо, могу выложить сюда. Буду благодарен. Ну а вот то, ради чего все начиналось: Код uses crt; var i:integer; procedure polosa(x1,x2:integer); var c:integer; begin for c:=x1+1 to x2-1 do write('═') end; procedure Ramka1(x1,x2,y1,y2:integer); var z:integer; begin GotoXY(x1,y1); write('╔'); polosa(x1,x2); write('╗'); GotoXY(x1,y1+1); for z:=y1+1 to y2-2 do begin gotoxy(x1,z); write('║'); write('║':x2-x1); end; gotoxy(x1,z+1); write('╚'); polosa(x1,x2); write('╝'); end; begin textbackground(blue); clrscr; ramka1(1,40,1,24); ramka1(41,80,1,24); gotoxy(20,1); write('╤'); for i:=2 to 22 do begin gotoxy(20,i); write('│') end; gotoxy(20,23); write('╧'); gotoxy(1,25); textbackground(11); clreol; write('1 HELP 2 MENU 3 VIEW 4 EDIT 5 COPY 6 RENMOV 7 MKDIR 8 DELET 9 CONF 10 EXIT'); gotoxy(1,24); textbackground(0); clreol; write('C:\>'); readln; end. Можете критиковать (хотя там критиковать-то еще нечего). |
Текстовая версия | 16.05.2024 16:27 |