Помощь - Поиск - Пользователи - Календарь
Полная версия: оболочка к write()
Форум «Всё о Паскале» > Pascal, Object Pascal > 32 битные компиляторы
compiler
Добрый день!
Меня интересует следующий вопрос, можна ли создать оболочку к write? Допустим я хочу писать в определенное место на терменале, но все это спрятатьв отдельную процедуру... Честно говоря, учитывая то что я знаю о write, я сомневаюсь что это реализуемо, но, может...

заранее благодарен.
klem4
Цитата
в определенное место на терменале


что ты имеешь в виду ? Определенное место на экране ? Для это есть gotoXY.
compiler
Цитата(klem4 @ 5.01.2008 21:15) *
что ты имеешь в виду ? Определенное место на экране ? Для это есть gotoXY.
да, но допустим я хочу написать как то так
        x:=wherex(); y:=wherey();
gotoxy(20,20);
write(s); //выводим s
gotoxy(x, y);
и каждый раз такое творить не очень та и хочеться....
klem4
ну и в чем трабл ?)

uses crt;

procedure write_and_return(const msg: String; const x, y: Word);
var
return_x, return_y: Word;
begin
return_x := WhereX;
return_y := WhereY;

GoToXY(x, y);
writeln(msg);
GoTOXY(return_x, return_y);
end;

begin
clrscr;

write_and_return('a', 10, 10);
writeln('b');
write_and_return('c', 10, 11);

readln;
end.
volvo
Цитата
ну и в чем трабл ?)
Вот в этом, вестимо:

var test: integer;
...
write_and_return(test, 10, 10); // <--- Error
...

Что, только переменные одного типа печатаются обычно?

compiler, смотри в сторону Format + array of const
compiler
klem4, прости что ввел в заблуждение названием переменной..
Цитата(volvo @ 5.01.2008 22:07) *
compiler, смотри в сторону Format + array of const
тоесть? как их тут использовать?
может стоит передавать указатель на то что печатаем и переменную перечасляемого типа в которой будет тип, вот...
например, wr(my_point, integer, x, y);, а затем как то это обрабатывать...
volvo
uses sysutils, crt;

procedure write(px, py: integer;
s: string; arrX: array of const);
var x, y: integer;
begin
x := wherex(); y := wherey();
gotoxy(px, py);
system.write(format(s, arrX));
gotoxy(x, y);
end;

var
i: integer;
s: string;
f: double;

begin
clrscr;
s := 'test'; f := 11.45; i := 20;

write(10, 10, '%s', [s]);
write(15, 15, '%d %5.2f', [i, f]);

end.

Можешь не переопределять Write, а дать другое имя процедуре...
compiler
Спасибо, то что надо!

system.write(format(s, arrX));
o_O, а можна комментарий?

1)обращение к system. надо для того что бы обратиться к нужной write?
2)что делает format?

volvo
Цитата
обращение к system. надо для того что бы обратиться к нужной write?
Если не будет system. - то компилятор посчитает вызов Write рекурсивным, и просто скажет, что не хватает параметров...

Цитата
что делает format?
Форматирует строку по шаблону, переданному первым параметром (printf-ом в Сях пользовался? Что-то очень похожее):
SysUtils: Format
compiler
volvo, спасибо! буду разбираться...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.