Проблема с русским языком при работе с ExprDraw и ExprMake

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема с русским языком при работе с ExprDraw и ExprMake

Сообщение Iv_ » 14.01.2011 14:01:13

Добрый день.
С вашей помощью (точнее при активном участии Vadim) мне удалось заставить работать на Lazarus модули ExprDraw и ExprMake, написанные Григорьевым А. под Delphi. Напомню, что модули предназначены для отрисовки разного рода математических выражений, как в буквенном, так и в числовом виде.
Всё работает и всё рисуется, но есть одно НО. Не отрисовываются формулы, если они написаны на кириллице.
Вот пример:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, Buttons, ExprDraw, ExprMake;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Image1: TImage;
    procedure BitBtn1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

// процедура для вывода ед. изм. типа "кг/см2" курсивом
procedure formula(Cnv:TCanvas; x,y:integer; s1:string);
  var Expr: TExprClass;
  begin
    Expr:=BuildExpr(s1);
    Expr:=TExprChain.Create(Expr);
    Expr.Font.Name:='Tahoma';
    Expr.Font.Style:=[fsItalic];
    Expr.Font.Size:=10;
    Expr.Canvas:=Cnv;
    Expr.Draw(x,y,ehLeft,evTop);
    Expr.Free;
  end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var Expr, Expr2: TExprClass;
begin

   Form1.Image1.Canvas.Brush.Color:=clBtnFace;
   Form1.Image1.Canvas.FillRect(Rect(0,0,Width,Height));

   formula(Form1.Image1.Canvas, 5,20, 'S^22');
   formula(Form1.Image1.Canvas, 5,50, 'kg//sm^2');
   formula(Form1.Image1.Canvas, 5,80, 'кг//см^2');

end;

initialization
  {$I Unit1.lrs}

end. 


Единицы измерения кг/см2 по-русски не отрисовываются, все остальное - рисуется.
Подскажите, пожалуйста, где покопать, чтобы решить проблему.
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44

Re: Проблема с русским языком при работе с ExprDraw и ExprMake

Сообщение Brainenjii » 14.01.2011 14:32:15

Попробуйте сделать что-то вроде
Код: Выделить всё
   formula(Form1.Image1.Canvas, 5,80, Utf8Decode('кг//см^2'));
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Проблема с русским языком при работе с ExprDraw и ExprMake

Сообщение Mr.Smart » 14.01.2011 14:38:12

Я бы посоветовал, что-то вроде:
Код: Выделить всё
formula(Form1.Image1.Canvas, 5,80, Utf8ToAnsi('кг//см^2'));
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с русским языком при работе с ExprDraw и ExprMake

Сообщение Iv_ » 14.01.2011 15:05:00

Спасибо. Оба варианта работают, но частично.
Происходит следующее - начинает отображаться знак деления (косая черта) и показатель степени. Русские буквы так и не отрисовываются.
т.е. треться строчка на картинке выглялит так:
/ 2 (двойка маленькая, вверху).

Добавлено спустя 5 минут 24 секунды:
Вру, двойка мальенькая, но низ у нее на том же уровне, где должен быть низ у "см".
Т.е. русские буквы просто заменены пробелами или еще чем-то...
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44

Re: Проблема с русским языком при работе с ExprDraw и ExprMake

Сообщение Iv_ » 19.01.2011 21:49:06

Еще раз здравствуйте.
Может есть еще какие-то средства поправить? Просто сейчас пишу другую программку. Там считывание из файла идет. И тоже не понимает русскую кодировку. Utf8Decode и Utf8ToAnsi результата не дали, знаки вопросов вместо русских букв остались. Может я не так чего-то делаю?
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44

Re: Проблема с русским языком при работе с ExprDraw и ExprMake

Сообщение Mr.Smart » 19.01.2011 22:15:14

Почитайте про кодировку UTF8 и LCL. На форуме данный вопрос изъеден.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с русским языком при работе с ExprDraw и ExprMake

Сообщение Iv_ » 19.01.2011 22:24:46

Спасибо. Я уже текстовый файл сохранил в кодировке UTF8 и во второй программе все заработало. В первой этот номер не прошел. Видимо там надо в модулях что-то править.
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44



Вернуться в Lazarus

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

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

Рейтинг@Mail.ru