OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 03:39

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 05 Декабрь, 2010 20:48 
Аватара пользователя

Зарегистрирован: Суббота, 13 Ноябрь, 2010 14:09
Сообщения: 26
Пожалуйста, подскажите на примере, как можно писать текст в документ, сменяя программно шрифты.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Код:
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 
Аватара пользователя

Зарегистрирован: Суббота, 13 Ноябрь, 2010 14:09
Сообщения: 26
Во-первых не хватает красной строки

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 (нарушено предусловие)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Декабрь, 2010 22:01 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Красная строка не нужна тут в принципе.

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


Вложения:
x.png
x.png [ 118.77 КБ | Просмотров: 6808 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Декабрь, 2010 00:14 
Аватара пользователя

Зарегистрирован: Суббота, 13 Ноябрь, 2010 14:09
Сообщения: 26
Я тоже не дурака валяю: Если копирую текст из форума один к одному, получаю ошибки (см. screenshot). Очень хотелось бы разобраться, в чем дело.
Что вы думаете по этому поводу?


Вложения:
Комментарий к файлу: Ваш модуль с тем, что пишет на него КП
_screenshot.jpg
_screenshot.jpg [ 75.57 КБ | Просмотров: 6790 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Декабрь, 2010 16:07 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Хохулин Олег писал(а):
Что вы думаете по этому поводу?
Какой Вы используете Блэкбокс?


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

Зарегистрирован: Суббота, 13 Ноябрь, 2010 14:09
Сообщения: 26
Евгений Темиргалеев писал(а):
Хохулин Олег писал(а):
Что вы думаете по этому поводу?
Какой Вы используете Блэкбокс?

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Декабрь, 2010 16:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Хохулин Олег писал(а):
Я тоже не
Всяко бывает.
Начинающие такие вещи иногда делают, что и вообразить невозможно.

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

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

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

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

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


Последний раз редактировалось Info21 Вторник, 07 Декабрь, 2010 17:46, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Декабрь, 2010 17:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
P.S.
И возникает ощущение, что в некоторых ситуациях модуль не выгружается из памяти пока не перезапущу КП. Даже если может и должен. Какие-то мистические ощущения.


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


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Info21 писал(а):
То есть парсер не узнает буковки как допустимые в идентификаторе буковки.
...
И впрямь -- определение языка разрешает в идентификаторах только буквы из диапазона Latin-1 (где-то до 255; в сборках от И-21 с учетом русификации). А юникодовская кириллица сидит на бес знает каких кодах выше 255.
В качестве уточнения: все литеры с кодами выше 255 компилятор вчистую игнорирует. И те идентификаторы он не видит, в прямом смысле.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Декабрь, 2010 20:37 
Аватара пользователя

Зарегистрирован: Суббота, 13 Ноябрь, 2010 14:09
Сообщения: 26
Info21 писал(а):
Но по умолчанию (Ctrl+V) у меня вставляется не юникод, и сразу компилируется без ошибок.

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Хохулин Олег писал(а):
Info21 писал(а):
Но по умолчанию (Ctrl+V) у меня вставляется не юникод, и сразу компилируется без ошибок.
Спасибо, все заработало, как Вы и сказали.
Ну, слава богу.

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

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

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


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

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


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

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


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

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