OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 15 Декабрь, 2018 08:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 01 Октябрь, 2017 17:22 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 46
Как в рабочий журнал вывести жирную или подчёркнутую надпись? Как вывести другим шрифтом?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Октябрь, 2017 18:52 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2235
Александр К писал(а):
Как в рабочий журнал вывести жирную или подчёркнутую надпись? Как вывести другим шрифтом?

Это не очень просто, так как базовая реализация журнала не имеет специальных команд для изменения цвета или шрифта. Однако это возможно сделать, и пример есть в модуле LibFmtrs подсистемы Lib (http://www.zinnamturm.eu/downloadsIN.htm#Lib).

Накидал небольшое демо, чтобы было понятно как это делать:
Код:
MODULE Demo;

IMPORT StdLog, Log, TextMappers, TextModels, Ports;

PROCEDURE ColorLog*;
   VAR f:  TextMappers.Formatter;
BEGIN
   Log.FlushBuf; (* выводим буфер журнала *)
   f.ConnectTo(StdLog.text); (* подключаемся к тексту журнала *)
   f.rider.SetAttr(TextModels.NewColor(f.rider.attr, Ports.red)); (* ставим красный цвет в свойства форматтера *)
   f.WriteString("красная строка"); (* выводим текст *)
   f.WriteLn;
   Log.FlushBuf; (* на всякий случай опять выводим буфер журнала *)
   StdLog.String("черная строка"); StdLog.Ln;
END ColorLog;

END Demo.


Предлагаю в качестве тренировочного задания Вам написать свою версию StdLog. Назвать ее ExtLog (Extended Log) с поддержкой разных шрифтов, разных цветов и т.п. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Октябрь, 2017 15:20 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 46
Иван Денисов писал(а):
Код:
Log.FlushBuf; (* выводим буфер журнала *)

Зачем это делать? И без этой строчки всё работает...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Октябрь, 2017 15:25 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2235
Александр К писал(а):
Иван Денисов писал(а):
Код:
Log.FlushBuf; (* выводим буфер журнала *)

Зачем это делать? И без этой строчки всё работает...

Это нужно, чтобы гарантировать, что после вашей красной строки журнал потом еще чего-нибудь не напишет. Обычный журнал пишет сначала в буфер, а потом выводит в основной текст. Это сделано для оптимизации. В подсистеме Lib у Роберта есть такая проблема, что выводятся числа, а потом какое-нибудь сообщение служебное. Хотя порядок должен быть обратный. Второй вызов в конце процедуры возможно лишний, но не было времени тестировать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 06 Октябрь, 2017 21:06 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1094
Откуда: СССР v2.0 rc 1
Flush -- это всегда выполняется для синхронизации. Постоянно используется при работе с различного рода буферами -- файловые, кеши,базы данных, порты ввода/вывода.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Октябрь, 2017 13:51 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 46
Вот как вывести жирную надпись:
Код:
MODULE BoldFont;(*Выводит жирную надпись*)
IMPORT StdLog, Log, TextMappers, TextModels, Ports, Fonts;

PROCEDURE ColorLog*;
VAR
   f:  TextMappers.Formatter;
   defaultFont: Fonts.Font;

BEGIN
   defaultFont := Fonts.dir.Default();
   Log.FlushBuf; (* выводим буфер журнала *)
   f.ConnectTo(StdLog.text); (* подключаемся к тексту журнала *)
   f.rider.SetAttr(TextModels.NewFont(f.rider.attr, Fonts.dir.This(defaultFont.typeface, defaultFont.size, {}, Fonts.bold)));
   f.WriteString("жирная строка"); (* выводим текст *)
   f.WriteLn;
   Log.FlushBuf; (* на всякий случай опять выводим буфер журнала *)
   StdLog.String("обычная строка"); StdLog.Ln;
END ColorLog;

END BoldFont.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB