Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2015, 14:57   #1
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию Шаблон writeln

Здравствуйте, подскажите как выглядит шаблон функции write(ln)
Хочу выводить цветной текст в консоль но перед каждым выводом делать такие махинации бред помоему).

Код:
Write('Buffer size SEND: ');

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN or FOREGROUND_INTENSITY);
  write(sndbuf);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE);
  write(' bytes RECV: ');
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN or FOREGROUND_INTENSITY);
  write(rcvbuf);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE);
  writeln(' bytes');
Хочу сделать что то типа
writeln(c:color, ...остальные параметры которые передаются в функцию)
как в нее передаются данные?

Например writeln(1,'2',3);
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 14.10.2015, 15:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

делайте свою процедуру (например, с именем WriteLnColor())
в ней и делайте все эти манипуляции с выставлением нужных цветов.


p.s. а зачем цвета в консоли?! Вам не кажется, что это блажь?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.10.2015, 15:17   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как выглядит шаблон функции write(ln)
У стандартной write нет шаблонирования цвета.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2015, 16:22   #4
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Я и хочу сделать свою функцию но я не пойму как передать в нее всё так же как и в writeln

Код:
procedure cWriteLn(c:tcolor; // <- что дальше?
begin
// тут будет выбор цвета
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),{тут будет цвет or} FOREGROUND_INTENSITY);

writeln( // < - как передать параметры сюда? и как должен выглядеть прототип функции?

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE);
end;
Writeln поддерживает даже такие вызовы, как мне сделать так же?)
WriteLn(1,'1',Boolean(1),$1);
Здравствуйте

Последний раз редактировалось NEoMASTERR; 14.10.2015 в 16:38.
NEoMASTERR вне форума Ответить с цитированием
Старый 14.10.2015, 17:01   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,887
По умолчанию

Цитата:
Сообщение от NEoMASTERR Посмотреть сообщение
Writeln поддерживает даже такие вызовы, как мне сделать так же?)
WriteLn(1,'1',Boolean(1),$1);
Никак, если ты не компилятор.
Просто компилятор заменяет такую конструкцию на вызов нескольких процедур _WriteXXX друг за другом.
northener вне форума Ответить с цитированием
Старый 14.10.2015, 17:16   #6
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Спасибо

Значит только такой конструкцией
Код:
procedure cWriteLn(c:byte; s:string);
var
  col: Byte;
begin
  case c of
    0: col := 0;
    1: col := FOREGROUND_RED;   //red
    2: col := FOREGROUND_GREEN; //green
    3: col := FOREGROUND_BLUE;  //blue
    4: col := FOREGROUND_GREEN or FOREGROUND_BLUE or FOREGROUND_RED; //white
  end;
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),col or FOREGROUND_INTENSITY);
  Writeln(s);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN or FOREGROUND_BLUE or FOREGROUND_RED or FOREGROUND_INTENSITY);
end;
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 14.10.2015, 17:50   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А зачем второй вызов SetConsoleTextAttribute?
И кстати попробуй вместо string передавать переменку типа variant - удобнее должно быть, не понадобится конвертировать в строку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2015, 18:22   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Значит только такой конструкцией
вполне себе решение. я бы тоже примерно такое использовал.

Цитата:
А зачем второй вызов SetConsoleTextAttribute?
может быть, чтобы потом любой простой WriteLn не выводил цветной текст.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.10.2015, 18:37   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
может быть, чтобы потом любой простой WriteLn не выводил цветной текст.
Неудачное решение ИМХО...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2015, 18:46   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
p.s. а зачем цвета в консоли?! Вам не кажется, что это блажь?
мне тож интересно
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка с writeln shalgan Помощь студентам 1 08.06.2015 17:31
Цвет для writeln - паскаль Silverstone Помощь студентам 4 03.06.2012 10:07
Когда нужно присваивать.. Writeln(Sum:8:4) ? Erlotaza Общие вопросы Delphi 1 09.03.2012 11:25
Writeln в TPascal VadEr Помощь студентам 8 13.05.2009 15:12
задачи через writeln и readln MELKOVSKY Паскаль, Turbo Pascal, PascalABC.NET 3 24.01.2008 14:04