Главная | Эксперименты | Утилиты | Компоненты | Что почитать | Контакты |
|
Модуль экспорта для DelphiДля Delphi разработан модуль alTex.pas, который упрощает работу с dll. Модуль предоставляет для использования единственный экземпляр объекта класса TMathExpression, методы которого обращаются к dll. Методы класса аналогичны экспортируемым функциям dll. Некоторые из них перекрыты чтобы упростить задание параметров.Экземпляр класса TMathExpression создается вызовом функции MathExpression. При первом вызове подгружается библиотека alTex.dll. Отображение формулыpascal
procedure TForm3.Button1Click(Sender: TObject); var sz:TPoint; S:String; begin S := '$$ e=\lim_{n\to\infty} \left( 1+\frac{1}{n} \right) ^n $$'; MathExpression.Paint(Image1.Canvas, S, clMaroon); sz := MathExpression.Size(S); Image1.Canvas.Pen.Color := clGreen; Image1.Canvas.MoveTo(0, Sz.Y); Image1.Canvas.LineTo(sz.X+5, Sz.Y); Image1.Canvas.MoveTo(sz.X, 0); Image1.Canvas.LineTo(Sz.X, Sz.Y+10); Image1.Refresh; end; ![]() Запись изображения в файлpascal
procedure TForm3.Button2Click(Sender: TObject); var S:String; begin S := '$$ \sum_{k=1}^n \frac1{k^2} $$'; //MathExpression.ToFile(S, '.\__history\test.bmp', $C5D5C5, clMaroon); MathExpression.ToFile(S, '.\__history\test.jpg', clWhite, clBlue); MathExpression.ToFile(S, '.\__history\test.gif', $FFFFFF, clBlack); end; ![]() ![]() Использование сложного фонаУчитывайте, что формулы отображаются при включенном режиме SmoothingModeAntiAlias. Как правило это приводит к некоторому размытию границ текста с учетом цвета фона. Именно поэтому для записи изображения в файл требуется задание цвета фона. Если фон, на котором отображается формула имеет какую-то структуру, то лучше добавить для формулы тень (просто отобразить ее два раза с небольшим смещением). Например:pascal
procedure TForm3.Button3Click(Sender: TObject); var g:TGPGraphics; brush : TGPLinearGradientBrush; sz:TPoint; S : String; X, Y : integer; begin g := TGPGraphics.Create(Image1.Canvas.Handle); brush := TGPLinearGradientBrush.Create( makePoint(0, 0), makePoint(200, 100), aclBlack, aclRed); try g.FillRectangle(brush, 0, 0, 200, 100); S := '$$ \zeta(s)={\frac{1}{\displaystyle\prod_{i=1}^\infty '+ ' \Bigl(1-{\dfrac 1 {p_i^s}}\Bigr)}} $$'; sz := MathExpression.Size(S); X := (200 - sz.x) div 2; Y := (100 - sz.y) div 2; MathExpression.Paint(Image1.Canvas, X+1, Y+1, S, clBlack); MathExpression.Paint(Image1.Canvas, X, Y, S, clYellow); finally g.free; end; Image1.Refresh; end; ![]() Еще несколько примеров, чтобы получить представление о возможностях.
|