OberonCore
https://forum.oberoncore.ru/

Пример работы с текстом... запускаем строчку по синусоиде!
https://forum.oberoncore.ru/viewtopic.php?f=35&t=731
Страница 1 из 1

Автор:  mikle [ Пятница, 09 Ноябрь, 2007 14:46 ]
Заголовок сообщения:  Пример работы с текстом... запускаем строчку по синусоиде!

На лабе предложили мне сделать модуль, изменяющий атрибуты текста на жирный. А почему бы не разукрасить его, подумал я от нечего делать? Вот и получилось... правда не совсем то, что задавили :) !
Попробуйте сделать меню для вызова функции Color и видоизмените какой-нибудь большой документ (например справку о языке!).

Код:
MODULE MyColorer;
IMPORT TextViews,TextModels,StdLog,Fonts,Math,Ports;

PROCEDURE Ord(x,d:INTEGER):REAL;
BEGIN
   RETURN ((Math.Sin(2*Math.Pi()/d*(x MOD d)))+1)/2;
END Ord;

PROCEDURE Round(x:REAL;n,d:INTEGER):INTEGER;
BEGIN
   RETURN (SHORT(ENTIER(x*Ord(n,d))));
END Round;

PROCEDURE Color*;
   VAR
      view:TextViews.View;
      model,newmodel:TextModels.Model;
      writer:TextModels.Writer;
      reader:TextModels.Reader;
      i:INTEGER;
      attr:TextModels.Attributes;
BEGIN
   view:=TextViews.Focus();
   IF view#NIL THEN
      model:=view.ThisModel();
      NEW(attr);
      attr.InitFromProp(model.Prop(0,0));
      attr:=TextModels.NewWeight(attr, Fonts.bold);
      FOR i:=0 TO view.ThisModel().Length()-1 DO
         attr:=TextModels.NewSize(attr,100000+Round(100000,i,20));   attr:=TextModels.NewColor(attr,Ports.RGBColor(100+Round(155,i,30),Round(150,i,1000),Round(250,i,100)));
         attr:=TextModels.NewOffset(attr,Round(250000,i+30,40));
         model.SetAttr(i,i+1, attr);
      END;
   ELSE
      StdLog.String('No active text!');
   END;
END Color;
END MyColorer.

Автор:  batyrmastyr [ Пятница, 09 Ноябрь, 2007 16:37 ]
Заголовок сообщения:  Re: Пример работы с текстом... запускаем строчку по синусоиде!

Теперь есть чем придавить любителей подсветки и интелисенсов :mrgreen:

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