OberonCore
https://forum.oberoncore.ru/

Как проще менять шрифты при выводе в документ?
https://forum.oberoncore.ru/viewtopic.php?f=35&t=3046
Страница 1 из 1

Автор:  Хохулин Олег [ Воскресенье, 05 Декабрь, 2010 20:48 ]
Заголовок сообщения:  Как проще менять шрифты при выводе в документ?

Пожалуйста, подскажите на примере, как можно писать текст в документ, сменяя программно шрифты.

Автор:  Info21 [ Воскресенье, 05 Декабрь, 2010 21:40 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Код:
MODULE x;
   IMPORT  T := TextModels, F := Fonts,  Views,  TextViews;
   
   PROCEDURE МеняемШрифт;
      VAR 
         t: T.Model; (* текст *)
         f, f1: F.Font;
         a, a1: T.Attributes; (* это будут новые атрибуты текста *)
   BEGIN
      t := T.dir.NewFromString('Волгоград Сталинград Царицын'); (* новый текстовый объект (модель), шрифт по умолчанию *)
      
      f := F.dir.Default(); (* можно взять шрифт по умолчанию, а можно указать в лоб: *)
      f1 := F.dir.This( 'Verdana', 20*F.point, {F.italic, F.underline}, F.bold );

      a := T.dir.attr; (* берем атрибуты по умолчанию *)
      a := T.NewFont( a, f1 ); (* правим атрибуты, меняя там шрифт на новый *)
      t.SetAttr( 10, 20, a); (* меняем шрифт в позициях с 10 по 20-1 *)
      
      (* смотрим, что получилось: *)
      Views.OpenView( TextViews.dir.New( t ) );
   END МеняемШрифт;
   
   
BEGIN МеняемШрифт
END x.

Автор:  Хохулин Олег [ Понедельник, 06 Декабрь, 2010 21:00 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Во-первых не хватает красной строки

MODULE x;
IMPORT T := TextModels, F := Fonts, Views, TextViews;

PROCEDURE МеняемШрифт;
VAR
t: T.Model; (* текст *)
f, f1: F.Font;
a, a1: T.Attributes; (* это будут новые атрибуты текста *)
BEGIN
t := T.dir.NewFromString('Волгоград Сталинград Царицын'); (* новый текстовый объект (модель), шрифт по умолчанию *)

f := F.dir.Default(); (* можно взять шрифт по умолчанию, а можно указать в лоб: *)
f1 := F.dir.This( 'Verdana', 20*F.point, {F.italic, F.underline}, F.bold );

NEW(a);
a := T.dir.attr; (* берем атрибуты по умолчанию *)
a := T.NewFont( a, f1 ); (* правим атрибуты, меняя там шрифт на новый *)

t.SetAttr( 10, 20, a); (* меняем шрифт в позициях с 10 по 20-1 *)

(* смотрим, что получилось: *)
Views.OpenView( TextViews.dir.New( t ) );
END МеняемШрифт;


BEGIN МеняемШрифт
END x.



А кроме того еще чего-то не хватает, потому что в синей строке вылазит ТРАП 22 (нарушено предусловие)

Автор:  Info21 [ Понедельник, 06 Декабрь, 2010 22:01 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Красная строка не нужна тут в принципе.

Перед выкладыванием нажимал Ctrl+F9 -- всё работало.
Проверил еще раз копию из браузера, см. картинку.

Вложения:
x.png
x.png [ 118.77 КБ | Просмотров: 6824 ]

Автор:  Хохулин Олег [ Вторник, 07 Декабрь, 2010 00:14 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Я тоже не дурака валяю: Если копирую текст из форума один к одному, получаю ошибки (см. screenshot). Очень хотелось бы разобраться, в чем дело.
Что вы думаете по этому поводу?

Вложения:
Комментарий к файлу: Ваш модуль с тем, что пишет на него КП
_screenshot.jpg
_screenshot.jpg [ 75.57 КБ | Просмотров: 6806 ]

Автор:  Евгений Темиргалеев [ Вторник, 07 Декабрь, 2010 16:07 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Хохулин Олег писал(а):
Что вы думаете по этому поводу?
Какой Вы используете Блэкбокс?

Автор:  Хохулин Олег [ Вторник, 07 Декабрь, 2010 16:21 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Евгений Темиргалеев писал(а):
Хохулин Олег писал(а):
Что вы думаете по этому поводу?
Какой Вы используете Блэкбокс?

использовал школьный, сказал сейчас заново скачал
теперь пример работает без НОВЫЙ (a);, но все равно вылетает трапом на строке
t.SetAttr( 10, 20, a);
ТРАП 22 (нарушено предусловие)

P.S.
И возникает ощущение, что в некоторых ситуациях модуль не выгружается из памяти пока не перезапущу КП. Даже если может и должен. Какие-то мистические ощущения.

Автор:  Info21 [ Вторник, 07 Декабрь, 2010 16:53 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Хохулин Олег писал(а):
Я тоже не
Всяко бывает.
Начинающие такие вещи иногда делают, что и вообразить невозможно.

Хохулин Олег писал(а):
получаю ошибки (см. screenshot). Очень хотелось бы разобраться, в чем дело.
Что вы думаете по этому поводу?

Думать особо пока не нужно: не узнается идентификатор МеняемШрифт.
То есть парсер не узнает буковки как допустимые в идентификаторе буковки.

Попытался вставить Правка, Вставка специальная... , Текст юникод -- воспроизвелись в точности две ошибки с картинки.
И впрямь -- определение языка разрешает в идентификаторах только буквы из диапазона Latin-1 (где-то до 255; в сборках от И-21 с учетом русификации). А юникодовская кириллица сидит на бес знает каких кодах выше 255.

Там еще есть опция Простой текст. Должна работать.

Но по умолчанию (Ctrl+V) у меня вставляется не юникод, и сразу компилируется без ошибок.

Автор:  Илья Ермаков [ Вторник, 07 Декабрь, 2010 17:30 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Цитата:
P.S.
И возникает ощущение, что в некоторых ситуациях модуль не выгружается из памяти пока не перезапущу КП. Даже если может и должен. Какие-то мистические ощущения.


Такое бывает, когда к модулю привязана форма и открыта на экране. Тогда модуль, выгрузившись, сразу же загружается в память (правда, последняя версия из кодового файла).

Автор:  Евгений Темиргалеев [ Вторник, 07 Декабрь, 2010 18:01 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Info21 писал(а):
То есть парсер не узнает буковки как допустимые в идентификаторе буковки.
...
И впрямь -- определение языка разрешает в идентификаторах только буквы из диапазона Latin-1 (где-то до 255; в сборках от И-21 с учетом русификации). А юникодовская кириллица сидит на бес знает каких кодах выше 255.
В качестве уточнения: все литеры с кодами выше 255 компилятор вчистую игнорирует. И те идентификаторы он не видит, в прямом смысле.

Автор:  Хохулин Олег [ Вторник, 07 Декабрь, 2010 20:37 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Info21 писал(а):
Но по умолчанию (Ctrl+V) у меня вставляется не юникод, и сразу компилируется без ошибок.

Спасибо, все заработало, как Вы и сказали.
А можно наводку? Где надо исправить настройки по умолчанию, чтобы и у меня по (Ctrl+V) вставлялся не юникод?
(Распаковал из скачаного дистрибутива школьную версию сегодня в обед в отдельную папку и ничего нигде не менял, но ведь вставляло-то юникод?)

Автор:  Info21 [ Вторник, 07 Декабрь, 2010 21:07 ]
Заголовок сообщения:  Re: Как проще менять шрифты при выводе в документ?

Хохулин Олег писал(а):
Info21 писал(а):
Но по умолчанию (Ctrl+V) у меня вставляется не юникод, и сразу компилируется без ошибок.
Спасибо, все заработало, как Вы и сказали.
Ну, слава богу.

Хохулин Олег писал(а):
Info21 писал(а):
А можно наводку? Где надо исправить настройки по умолчанию, чтобы и у меня по (Ctrl+V) вставлялся не юникод?
(Распаковал из скачаного дистрибутива школьную версию сегодня в обед в отдельную папку и ничего нигде не менял, но ведь вставляло-то юникод?)
Установка, на том компе, где я проверял, -- скачанная школьная версия, такая же, как Ваша.

Ctrl+V задаются в меню: Инфо, Меню, откроется окошечко, там кликнуть по гиперссылке System, откроется еще окошко (документ System/Rsrc/Menus.odc).
В нём описана структура всех меню -- или команды включения (INCLUDE) дополнительных описаний из файлов ***/Rsrc/Menus.odc указываемых после INCLUDE подсистем).
Найти (в нижней половине экрана) описание меню Правка, там строку, где в первой колонке "Вставить".
После белого символа табуляции стоит "V" -- оно и задаёт для этой команды Ctrl+V.
Подробней см. Справка для учителя, первая гиперссылка (Меню...), и там найти гиперссылку Настройка меню мелким шрифтом; открыть и читать.

Почему у Вас вставляется юникодов -- не знаю.
Возможно, зависит от конфигурации ОС-браузер: в буфере обмена копируемые данные могут храниться в нескольких форматах. Возможно, система их просто не сортирует, а ББ берет первый боле-мене подходящий. Гипотеза такая.

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