Форум: "Потрепаться";
Текущий архив: 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