![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
biba |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Есть ведомость ( текстовой файл). Причем все записи не вмещаются на экране. Движение должно быть по стрелкам. Т.е. как я поняла ведомость должна "прокручиваться". Вот как двигаться по стрелкам я не знаю
![]() Я знаю, что должны использоваться какие-то коды клавиш или еще что-то там, но как это в программу втиснуть я даже и представить не могу. ![]() З.Ы. А append может только одну запись добавлять в файл или несколько? |
APAL |
![]()
Сообщение
#2
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Коды любых клавиш можешь получить с помощью небольшой проги:
Код Uses Crt; var ch : Char; Begin Repeat Ch:=ReadKey; If Ch=#0 then {двух-байтный код?} Begin Write('*'); Ch:=ReadKey; End; Writeln(Ch,Ord(Ch)); Until Ch=#27; {выход по ESC} End. Append - только открывает файл на запись, перемещая указатель записи в конец файла. -------------------- |
Romtek |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Немного добавлю...
Код Uses Crt; const Enter = #13; Tab = #9; BS = #8; Esc = #27; Space = #32; SH_Tab = #15; Rt = #77; Lf = #75; Up = #72; Dn = #80; PgUp = #73; PgDn = #81; Ins = #82; Del = #83; Home = #71; EndK = #79; F1 = #59; F2 = #60; F3 = #61; F4 = #62; F5 = #63; F6 = #64; F7 = #65; F8 = #66; F9 = #67; F10 = #68; F11 = #133; F12= #134; ALT_Q = #16; ALT_W = #17; ALT_E = #18; ALT_R = #19; ALT_T = #20; ALT_Y = #21; ALT_U = #22; ALT_I = #23; ALT_O = #24; ALT_P = #25; ALT_A = #30; ALT_S = #31; ALT_D = #32; ALT_F = #33; ALT_G = #34; ALT_H = #35; ALT_J = #36; ALT_K = #37; ALT_L = #38; ALT_Z = #44; ALT_X = #45; ALT_C = #46; ALT_V = #47; ALT_B = #48; ALT_N = #49; ALT_M = #50; ALT_SP = #2; var ch : Char; Begin Repeat Ch:=ReadKey; If Ch=#0 then {двух-байтный код? Нужно считать ещё раз} Ch:=ReadKey; Case Ch of Up {верх} : inc (line); Dn {вниз} : dec (line); End; Until Ch=Esc; {выход по Esc} End. Сообщение отредактировано: romtek - 21.08.2004 13:38 -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
BlackShadow |
![]()
Сообщение
#4
|
Гость ![]() |
Принцип примерно такой:
1). Создаёшь массив, в который построчно записываешь ведомость. Т. е. то, что должно быть в ведомости на 5-ой строке хранится в пятой строке массива. 2). Заводишь переменную типа TopLine. 3). Выводишь 25 или там 50 строк начиная с TopLine'овой. 4). Ждёшь реакции юзьверя. Если это стрелка вверх или вниз, то соответственно уменьшаешь или увеличиваешь значение TopLine. Вот и всё вроде... Только не забудь проверку вставить, чтобы этот самый TopLine не улетел в минус или в плюс-бесконечность ![]() |
biba |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Я написала прогу, но она не работает
![]() Код procedure SCREENVED1 (var VED1:text); var I:integer; stroka:string; ch:char; begin clrscr; assign (VED1,'vedomost'); reset (VED1); for I:=1 to 20 do begin gotoxy(1,3+i); readln (VED1,stroka); write (stroka:45); writeln; end; repeat ch:=readkey; if ch=#0 then ch:=readkey; if ch=#72 then i:=i-1 {вверх};if ch=#80 then i:=i+1; {вниз} until ch=#27; end; Может в программе ошибка, тока где? ![]() |
APAL |
![]()
Сообщение
#6
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
А где массив????
И как это Код if ch=#72 then i:=i-1 {вверх};if ch=#80 then i:=i+1; {вниз} сказывается на отображение информации?-------------------- |
APAL |
![]()
Сообщение
#7
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Здесь я выкладывал свою програмку. Там в проседуре "F1" используется прокрутка текста в окне (прога как раз и прокручивает данные в окне) - можешь посмотреть для примера.
Скачать можно тут: http://pascalnet.ru/forum/index.php?act=A...e=post&id=20640 -------------------- |
biba |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата(APAL @ 24.08.04 10:44) А где массив???? И как это Код if ch=#72 then i:=i-1 {вверх};if ch=#80 then i:=i+1; {вниз} сказывается на отображение информации? Как это "сказывается на отображение информации" я не знаю. У меня была программа "прокрутки" я половину оттуда переписала, половину из другой программы ![]() APAL из вашей программы я не поняла вообще ничего ![]() ![]() А зачем нужен массив??? Ведь первые 20 записей выводятся без массива. Сообщение отредактировано: biba - 24.08.2004 11:27 |
APAL |
![]()
Сообщение
#9
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Ладно оставим мою програмку...
Цитата А зачем нужен массив??? Ведь первые 20 записей выводятся без массива. Да, первые записи выводятся.... и последующие можно вывести, но если ты попытаешься прокрутить текст на начало или в конец, то будут существенные тормоза, связанные с постоянным обращением к файлу данных. Массив нужен в качестве буффера (можно использовать и динамическую память) обмена информацией между файлом и экраном. Т.е. алгоритм такой: Имеется буффер, скажем на 300-500 строк. В начале работы, считываем из файла строки и заполняем буффер. Во время прокрутки текста обращаемся за данными к буфферу (обращение к памяти намного быстрее чем к файлу). В случае, когда данные выходят за пределы буффера - производим его перезаполнение. (Можно в качестве начальной точки заполнения использовать "ТЕКУЩИЙ УКАЗАТЕЛЬ СТРОКИ В ФАЙЛЕ" - ("ОБЪЕМ БУФФЕРА"/2). Тогда у нас в буффере будет запас на просмотр и "вниз" и "вверх") Главное в этом механизме не запутаться с текущмим указателями: в файле, в буффере, на экране. Эскизы прикрепленных изображений ![]() -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 23:29 |