Страница 1 из 2
Вопросы по теме книги
Добавлено: 09.09.2012 17:13:34
mpeg
Текст книги:
Глава 5.
"...В первых строчках видим служебное сообщение о запуске IDE Free Pascal, – не смотрите туда.
Нам важна последняя строка, где мы видим долгожданный «Привет!».
Полюбовавшись на него, вернитесь в IDE, для чего нажмите любую клавишу.
Хотите повторить удовольствие? Так запустите программу
еще пару раз («Ctrl+F9») и полюбуйтесь на результат
(«Alt+F5»)."
Вопрос знатокам!В QuikBasic есть очень удобная команда
"cls", которая очищает мне экран просмотра выполнения моей программы в Интегри́рованной среде разрабо́тки.
Я ставлю её в вверху каждой учебной программы и... смотрю результаты на экране только самого свежего запуска программы на выполнение.
Как того же добиться в
Free Pascal?
Я форматирую текст своих учебных программ в процессе экспериментов методом:
const Line = ’---------------------------’;
Writeln(Line);
, но это помогает слабо.
Хотелось бы оператор узнать который автоматом чистит чёрный экран просмотра от оставшихся строк старых запусков программы на выполнение в среде
Free Pascal.
P.S: Надеюсь понятно объяснил суть проблемы...

Re: Вопросы по теме книги
Добавлено: 09.09.2012 18:40:57
Vadim
Нужно подключить модуль Crt и там есть процедура очистки экрана под названием ClrScr.
Re: Вопросы по теме книги
Добавлено: 09.09.2012 21:41:15
Oleg_D
Vadim писал(а):Нужно подключить модуль Crt и там есть процедура очистки экрана под названием ClrScr.
К этому добавлю что я
сознательно не подключал модуль Crt, как и другие модули, чтобы сохранить переносимость примеров (ведь есть ещё Delphi и PascalABC). Альтернативный способ очистки экрана может быть таким:
Re: Вопросы по теме книги
Добавлено: 09.09.2012 22:59:38
tema
Вот из исходников фрипаскаля:
Код: Выделить всё
procedure ClrScr;
var
DestCoor: TCoord;
numChars, x : DWord;
begin
DestCoor.X := WindMinX - 1;
DestCoor.Y := WindMinY - 1;
numChars := (WindMaxX - WindMinX + 1);
repeat
FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TextAttr,
numChars, DestCoor, x);
FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), #32,
numChars, DestCoor, x);
inc(DestCoor.Y);
until DWord(DestCoor.Y)=WindMaxY;
GotoXY(1, 1);
end; { proc. ClrScr }
А для юникса чуть по другому:
Код: Выделить всё
Procedure ClrScr;
{
Clear the current window, and set the cursor on 1,1
}
Var
CY,i : Longint;
oldflush : boolean;
blank_with_attribute : TCharAttr;
Begin
{ See if color has changed }
if OldTextAttr<>TextAttr then
begin
i:=TextAttr;
TextAttr:=OldTextAttr;
ttyColor(i);
end;
oldflush:=ttySetFlush(Flushing);
if FullWin then
begin
if not OutputRedir then
ttySendStr(#27'[H'#27'[2J');
CurrX:=1;
CurrY:=1;
blank_with_attribute.ch := ' ';
blank_with_attribute.attr := TextAttr;
FillWord(ConsoleBuf^,ScreenWidth*ScreenHeight,word(blank_with_attribute));
end
else
begin
For Cy:=WindMinY To WindMaxY Do
DoEmptyLine(Cy,WindMinX,WindMaxX);
GoToXY(1,1);
end;
ttySetFlush(oldflush);
End;
Re: Вопросы по теме книги
Добавлено: 10.09.2012 00:15:23
Vapaamies
Если уж на то пошло, то (по аналогии с Delphi):
Если FreePascal полностью совместим с Delphi по System, должно сработать.
Re: Вопросы по теме книги
Добавлено: 10.09.2012 02:50:59
Vadim
Oleg_D писал(а):К этому добавлю что я сознательно не подключал модуль Crt, как и другие модули, чтобы сохранить переносимость примеров (ведь есть ещё Delphi и PascalABC).
А я принципиально не изобретаю велосипед, если есть уже готовое решение, притом кроссплатформенное.

Если кто не занл, для Delphi тоже есть модуль CRT. Можно взять на ихнем сайте. Ссылку не привожу, потому, что там нужно регистрироваться, иначе скачать ничего не дадут.
Re: Вопросы по теме книги
Добавлено: 10.09.2012 08:48:05
Oleg_D
Oleg_D писал(а):Vadim писал(а):Нужно подключить модуль Crt и там есть процедура очистки экрана под названием ClrScr.
К этому добавлю что я
сознательно не подключал модуль Crt, как и другие модули, чтобы сохранить переносимость примеров (ведь есть ещё Delphi и PascalABC). Альтернативный способ очистки экрана может быть таким:
А вот ещё один альтернативный способ:
Код: Выделить всё
const Clr = #10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10;
begin
Writeln(Clr);
Readln
end.
Я не применял uses Crt как для совместимости, так и по дидактическим соображениям, поскольку модульное программирование рассматривается в конце книги. Не хотелось вынуждать новичка вставлять в программу то, чего он не понимает.
Добавлено спустя 17 минут 48 секунд:И ещё: при подключении модуля Crt необходимо также указать путь к папке со стандартными модулями. Для неопытного пацана эта миссия иногда может оказаться невыполнимой.
Re: Вопросы по теме книги
Добавлено: 10.09.2012 20:09:43
mpeg
Спасибо большое за ответы.
Меня устроил такой вариант:
Код: Выделить всё
const Clr = #10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10#10;
begin
Writeln(Clr);
Бла - Бла - Бла - здесь моя тестовая учебная программа... :)
end.
Vadim писал(а):Нужно подключить модуль Crt и там есть процедура очистки экрана под названием ClrScr.
Этот вариант что-то не получился у меня.
Вроде подключил всё как положено в гл.59... экран чистится - это без проблем. Но!
Русские буквы в программе заменились на крякозябры.
Пробовал во Free Pascal 2.6.0
----------------------------------------------------
Ещё раз всем спасибо за советы.

Re: Вопросы по теме книги
Добавлено: 11.09.2012 06:55:19
Paster Fob
Раздел описания модулей объявляется до раздела описания констант.В главной программе сразу после служебного слова begin нужно указать процедуру очистки экрана clrscr.
Код: Выделить всё
uses
crt;
const
....;
type
.....;
var
...;
begin
clrscr;
.......
end.
Re: Вопросы по теме книги
Добавлено: 11.09.2012 13:34:57
Vadim
mpeg писал(а):Этот вариант что-то не получился у меня.
Вроде подключил всё как положено в гл.59... экран чистится - это без проблем. Но!
Русские буквы в программе заменились на крякозябры.
Пробовал во Free Pascal 2.6.0
Это потому, что винду давно надо на помойку выбросить. У неё для одного языка 47,5 кодировок.
Я себя от этого подстраховал, поставив кодировку консоли кв реестре.

Re: Вопросы по теме книги
Добавлено: 11.09.2012 17:41:31
mpeg
Я в
Turbo Pascal модуль
Crt подключил ради эксперимента...
дык... подключения этого модуля сделало невозможным вообще уже в самом тексте программы русскими буквами писать.
Хотя без этого модуля в Turbo Pascal пишу тексты русскими буквами спокойно.
Без проблем компилирую и получаю выполнение с русскими же буквами.
Вывод: не дружит данный модуль с русскими буквами кажется...

Re: Вопросы по теме книги
Добавлено: 13.09.2012 15:35:25
Paster Fob
Я пытаюсь разобраться с функцией Fillchar описанной в главе 46.С массивами всё ясно,а вот со строками непонятка.
пример:
Код: Выделить всё
var s:string;
ch:char;
begin
writeln(sizeof(s));
readln(ch);
fillchar(s,sizeof(s),ch);
writeln(s);
readln
end.
функция sizeof показывает что в строке 256 байтов(1 нулевой).Но при заполнении этих самых байтов символами строка заполняется только до позиции символа в кодировке почему так?И что происходит с нулевым байтом?
Re: Вопросы по теме книги
Добавлено: 13.09.2012 15:58:51
Oleg_D
Paster Fob писал(а):Но при заполнении этих самых байтов символами строка заполняется только до позиции символа в кодировке почему так?И что происходит с нулевым байтом?
Вы сами и ответили, - в нулевой байт тоже попадает заполняющий код. А поскольку он играет особую роль, так и получается. Вообще, процедуру FillChar для строк обычно не применяют, - не имеет особого смысла, особенно для современных динамических строк. В данном случае над воспользоваться циклом.
Re: Вопросы по теме книги
Добавлено: 13.09.2012 16:03:54
tema
Код: Выделить всё
fillchar(s,sizeof(s),ch);
setlength(s,255);
Добавлено спустя 1 минуту 42 секунды:Можно и
Re: Вопросы по теме книги
Добавлено: 14.09.2012 03:55:38
Vapaamies
Сомнительно. Я бы попробовал функцию High вместо SizeOf.