Помощь - Поиск - Пользователи - Календарь
Полная версия: Спец. клавиши
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Alexn
Я не так давно программирую на Паскале. В некоторых программах встречается некая фишка. Смена экранов по нажатию клавиши. Но если нажимаешь Enter, стрелки и т.п., проскакивает сразу два экрана. Когда давно я читал про Бейсик, там говорилось что управляющие клавиши генерируют код в 2 байта. Предпологаю это и есть причина. Если нет, то подскажите ее (причину) и если не трудно как сделать обработку нажатия простых и упр. кнопочек.
volvo
Alexn

Эта тема уже рассматривалась
здесь ...
Alexn
Спасибо volvo за ссылку. Пытаюсь тут написать нечто подобное Volcov Com. Рамки нарисовал, командную строку просто по write('C:\>') написал. Если кто знает, дайте ссылку где взять описание DOS.TPU (желать-но по RUS). Ну а если нет будем дальше мучать BPW.HLP smile.gif.
volvo
Здесь есть переведенный на русский язык файл помощи TURBO.TPH для ТР 70

Можешь также посмотреть здесь ...
GoodWind
а еще можешь задавать вопросы на форуме rolleyes.gif
Alexn
Хотелось бы чего-нибуть по подробнее и с примерами. Я не придираюсь (всем спасибо) просто я не могу разобраться при простом перечислении процедур и функций в книгах. В turbo.tph нет описания DOS только WinDos. По первой ссылке прочитал, что строка там заканччивается 0. На http://zerodivide.narod.ru есть Паскаль (Light 5??.0 Kb) модули и встроеный асм.
Улобная штука, влазит на дискету (я ее на работе по всем компам распихал smile.gif ), с этим русским файлом помощи. (Если кому надо). Ну если никто не знает подробных описаний Дос, может подскажете как вывести список файлов и каталогов (и почему это работает). В ВР есть файл dirdemo, но новые переменные (да все новое). Вот, че то расписался. Вобщем буду благодарен.
Alexn
И еще вопросик (надо-бы конечно самому доходить blink.gif ).
Делаю два окна window(1,1,40,20); window(41,1,80,20);.
Можно ли переключиться на первое (сделаать его активным). Если да то как?
volvo
Цитата
как вывести список файлов и каталогов



Код

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.


Цитата
почему это работает
blink.gif

Потому что это должно работать.
volvo
Кстати, об этом:

Цитата
Можно ли переключиться на первое (сделаать его активным)


Не помню, есть ли он в ТР 70, но в пятой версии языка точно был модуль WIN.TPU, который значительно облегчал работу с окнами... Там для переключения между окнами уже были готовые процедуры. (Если нужно, могу скинуть...)
Alexn
Цитата
(Если нужно, могу скинуть...)


Скинь на 123_456_2004@mail.ru, вот только как я смогу пользоваться модулем если я не знаю какие в нем процедуры, функции, константы и переменные.

А в CRT.TPU нельзя работать с окнами кроме как создавать, да?
volvo
Цитата
не знаю какие в нем процедуры, функции, константы и переменные.


Я тебе скинул модуль вместе с исходниками и демо-программой...
P@sh@
я когда-то писал нечто подобное, лет 7 назад... а потом то же самое с Vesa-графикой... сделано там правда только перемещение по файлам и каталогам... если надо, могу выложить сюда.

что значит сделать окно активным? ты же сам эти окна рисуешь, вот и сделай какую-нибудь переменную active, в которой будет номер активного окна, ну и меняй ее сколько влезет, а процедура отрисовки будет по ней ориентироваться
Alexn
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.


Можете критиковать (хотя там критиковать-то еще нечего).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.