OberonCore
https://forum.oberoncore.ru/

Как в рабочий журнал вывести жирную или подчёркнутую надпись
https://forum.oberoncore.ru/viewtopic.php?f=35&t=6118
Страница 1 из 1

Автор:  Александр К [ Воскресенье, 01 Октябрь, 2017 17:22 ]
Заголовок сообщения:  Как в рабочий журнал вывести жирную или подчёркнутую надпись

Как в рабочий журнал вывести жирную или подчёркнутую надпись? Как вывести другим шрифтом?

Автор:  Иван Денисов [ Воскресенье, 01 Октябрь, 2017 18:52 ]
Заголовок сообщения:  Re: Как в рабочий журнал вывести жирную или подчёркнутую над

Александр К писал(а):
Как в рабочий журнал вывести жирную или подчёркнутую надпись? Как вывести другим шрифтом?

Это не очень просто, так как базовая реализация журнала не имеет специальных команд для изменения цвета или шрифта. Однако это возможно сделать, и пример есть в модуле 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 ]
Заголовок сообщения:  Re: Как в рабочий журнал вывести жирную или подчёркнутую над

Иван Денисов писал(а):
Код:
Log.FlushBuf; (* выводим буфер журнала *)

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

Автор:  Иван Денисов [ Понедельник, 02 Октябрь, 2017 15:25 ]
Заголовок сообщения:  Re: Как в рабочий журнал вывести жирную или подчёркнутую над

Александр К писал(а):
Иван Денисов писал(а):
Код:
Log.FlushBuf; (* выводим буфер журнала *)

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

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

Автор:  prospero78 [ Пятница, 06 Октябрь, 2017 21:06 ]
Заголовок сообщения:  Re: Как в рабочий журнал вывести жирную или подчёркнутую над

Flush -- это всегда выполняется для синхронизации. Постоянно используется при работе с различного рода буферами -- файловые, кеши,базы данных, порты ввода/вывода.

Автор:  Александр К [ Понедельник, 16 Октябрь, 2017 13:51 ]
Заголовок сообщения:  Re: Как в рабочий журнал вывести жирную или подчёркнутую над

Вот как вывести жирную надпись:
Код:
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.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/