Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Вниз

перевод каретки   Найти похожие ветки 

 
syte_ser78   (2004-02-09 14:55) [0]

Вопрос по Паскалю 7.0
Как вывести символ без перевода каретки? Тоесть код
for i:=1 to 80*25 do
write ("1");

заполняет экран еденмчками,но происходит переход на новую строку и соответсвенно она оказывается пустой.


 
MBo   (2004-02-09 14:59) [1]

При этом нет перевода каретки.


 
Dimman1   (2004-02-09 15:04) [2]

почитай хелп по модулю crt. Надо вывести и вернуть курсор назад например (функция gotoxy вроде), и еще вроде была функция которая вообще курсор прячет. Давно это было, все забыл.


 
syte_ser78   (2004-02-09 15:04) [3]

Извиняюсь,
Пеервода нет, сдвиг есть.


 
app   (2004-02-09 15:06) [4]

Так ты не ставь указатель на 80*25+1


 
syte_ser78   (2004-02-09 15:07) [5]

спрятать курсор не сложно, но даже при спрятаном курсоре происходит переход на новую строку. ГотоХУ тоже не помогает


 
syte_ser78   (2004-02-09 15:08) [6]

Если сделать
i:=1 to 80*25-1
то просто получается не полностью заполненный экран. Нижний правый угол-пустой


 
LordOfSilence   (2004-02-09 15:19) [7]

Если не ошибаюсь, нужно сначала выдать что-то типа
Window(1,1,80,25), а потом уже в цикле заполнять.


 
Anatoly Podgoretsky   (2004-02-09 15:23) [8]

write не надо использовать или делать на -1


 
syte_ser78   (2004-02-09 15:27) [9]


> Если не ошибаюсь, нужно сначала выдать что-то типа
> Window(1,1,80,25), а потом уже в цикле заполнять.

Даже если сделать Window(1,1,80,25) всеравно нижняя строка получится пустой.

> [8] Anatoly Podgoretsky ©


> write не надо использовать или делать на -1


да так и делаю. Но хотелось бы весь экран заполнить :(


 
Mystic   (2004-02-09 15:29) [10]

for i:=0 to 80*25-1 do
Mem[$B800:2*i] := Byte("1");


 
Mystic   (2004-02-09 15:30) [11]

Или

for i:=0 to 80*25-1 do
Mem[$B800:2*i+1] := Byte("1");


 
syte_ser78   (2004-02-09 15:41) [12]


> for i:=0 to 80*25-1 do
> Mem[$B800:2*i+1] := Byte("1");

Работает!
Только заполняет весь экран не еденицами, а просто просто "однородными прямоугольниками"


 
Anatoly Podgoretsky   (2004-02-09 15:44) [13]

Так заполнять надо четные байты, а нечетные аттрибутом


 
syte_ser78   (2004-02-09 15:47) [14]


> Так заполнять надо четные байты, а нечетные аттрибутом


> [11] Mystic © (09.02.04 15:30)
> Или
>
> for i:=0 to 80*25-1 do
> Mem[$B800:2*i+1] := Byte("1");

Огромное СПАСИБО!!!!!


 
Mystic   (2004-02-09 15:48) [15]

Значит это:

for i:=0 to 80*25-1 do
Mem[$B800:2*i] := Byte("1");

первый элемент это символ, а второй атрибут (цвет, фон, мерцание)
Может наоборот --- всю жизнь их путал.

Есть еще такой вариант

type
TVideoCh = packed record
Ch: Char;
Attr: Byte;
end;

var
Video: array[0..24,0..79] of TVideoCh absolute $B800:0000;

for X := 0 to 79 do
for Y := 0 to 24 do
Video[Y,X].Ch := "1"


 
NailMan   (2004-02-09 15:50) [16]

Надо использовать не crt, а tpcrt и пакета Terbo Profesional. Там есть такие функции как Fastwrite и fasttext ими все это и реализуется. А воотже это простой вывод прямо в видеопамять по соответсвующему смещению.


 
Mystic   (2004-02-09 15:51) [17]

Ностальгия, блин... %)


 
syte_ser78   (2004-02-09 16:03) [18]


> Ностальгия, блин... %)

:))) Может процедурку переписать поможеш?


 
syte_ser78   (2004-02-09 16:04) [19]


> :))) Может процедурку переписать поможеш?

Извиняюсь, не заметил :(
Может процедурку переписать поможте?


 
Mystic   (2004-02-09 16:24) [20]

Pascal не стоит --- пишу по памяти...

type
TVideoCh = packed record
Ch: Char;
Attr: Byte;
end;

var
Video: array[0..24,0..79] of TVideoCh absolute $B800:0000;

procedure FillScreen;
var
X, Y: Integer;
begin
for X := 0 to 79 do
for Y := 0 to 24 do
Video[Y,X].Ch := "1"
end;


Думаю, что это должно работать...


 
syte_ser78   (2004-02-09 16:33) [21]

вопрос на правильность понятия написаного - адрес ячейки с координатами x,y будет 2*(x*80+y) ?


 
Mystic   (2004-02-09 16:38) [22]

Да, правильно. Первый байт это символ. Второй --- атрибуты (старший бит --- мерцание, далее три --- фон (RGB), потом интенсивность символа, потом RGB символа. Так что $9F означает мерцающий белый символ на синем фоне

1 001 1 111
M RGB I RGB


 
Anatoly Podgoretsky   (2004-02-09 16:39) [23]

Неправильно, Y*80 + X*2


 
syte_ser78   (2004-02-09 16:41) [24]


> [22] Mystic ©

Спасибо еще раз.
А как насчет производительности?
Что предпочтительнее Video[Y,X].Ch := "1" или запись с явным указанием адреса?
Video[Y,X].Ch - явно удобнее для понимания и написания


 
syte_ser78   (2004-02-09 16:43) [25]


> [23] Anatoly Podgoretsky © (09.02.04 16:39)
> Неправильно, Y*80 + X*2

Да, немного ошибся :) Но только наверное всетаки (Y*80 + X)*2 ?


 
Nikky   (2004-02-09 16:45) [26]


> syte_ser78 © (09.02.04 16:41) [24]


неважно, все равно в экзешнике будет одинаково


 
syte_ser78   (2004-02-09 16:45) [27]


> > [22] Mystic ©
>
> Спасибо еще раз.
> А как насчет производительности?
> Что предпочтительнее Video[Y,X].Ch := "1" или запись с явным
> указанием адреса?
> Video[Y,X].Ch - явно удобнее для понимания и написания

:) Прочитал еще раз код, это тоже саоме :)


 
Mystic   (2004-02-09 16:48) [28]

Video[Y,X].Ch - явно удобнее для понимания и написания

Так и пиши, за быстродействием надо гнаться только если это критично


 
syte_ser78   (2004-02-09 16:55) [29]


> Mystic ©

Спасибо за ответы. Ухожу в написание кода, если возникнут вопросы, обращусб еще.


 
Anatoly Podgoretsky   (2004-02-09 17:02) [30]

Anatoly Podgoretsky © (09.02.04 16:39) [23]
Тоже ошибся Y*160+X*2 -> (Y*80+X)*2


 
syte_ser78   (2004-02-09 17:04) [31]


> atoly Podgoretsky ©

Спасибо.


 
syte_ser78   (2004-02-09 17:31) [32]

Блин, голова кипит, соответствует ли код
Mem[$B800:2*((y+dy)*80+x+i)+1] := Byte("1");
Mem[$B800:2*((y+dy)*80+x+i)] := Byte(178);
коду
gotoxy(x+1+i,y+dy);
write(Chr(178));
?


 
Mystic   (2004-02-09 20:59) [33]

Нет.

Mem[$B800:2*((y+dy)*80+x+i)+1] := Byte("1"); // Устанавливаем чвет символа
Mem[$B800:2*((y+dy)*80+x+i)] := Byte(178); // Устанавливаем символ
gotoxy(x+1+i,y+dy); // Перемещаем курсор
write(Chr(178)); // Выводим символ (возможет скроллинг, если это правый нижний символ


 
syte_ser78   (2004-02-10 11:55) [34]

я имею ввиду верна ли адресация gotoxy(x+1+i,y+dy и [$B800:2*((y+dy)*80+x+i)]


 
Anatoly Podgoretsky   (2004-02-10 12:04) [35]

А проверить, вывести символ тем и другим методом религия не позволяет?


 
syte_ser78   (2004-02-10 12:08) [36]

В том то и дело что получается, но не всегда. Не пойму в чем ошибка.


 
Anatoly Podgoretsky   (2004-02-10 12:37) [37]

Эти формулы не зависят от не всегда, единственным объяснением является то, что у тебя разные аргументы при испытании.


 
Radionov Alexey   (2004-02-10 12:52) [38]

А на адаптере Hercules (монохром) с другого адреса видеобуфер начинается :)


 
ПИТОН   (2004-02-10 14:41) [39]

А если не в 0-ю видеостраничку писать?


 
syte_ser78   (2004-02-10 15:18) [40]


> [39] ПИТОН (10.02.04 14:41)
> А если не в 0-ю видеостраничку писать?

А в текстовом режиме есть видеостраници?



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.01 c
8-94037
INext
2003-10-24 14:20
2004.02.29
Где достать Delphix 7


1-93990
snake7
2004-02-17 11:09
2004.02.29
Компонент TIdEncoderMIME


1-93865
revo
2004-02-16 14:36
2004.02.29
Как отследить двойной щелчок по TShape?


1-93881
Nikulin
2004-02-16 09:54
2004.02.29
Как реализовать сортировку в ListView по клику на заголовке?


1-93961
Гиричев Руслан
2004-02-16 20:59
2004.02.29
Как выделить всю строку на которой находится курсор (в memo и ric





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский