Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

RxRichEdit и Unicode   Найти похожие ветки 

 
Zoom ©   (2010-05-04 15:12) [0]

Помогите  пожалуйста!!! зашел почти в тупик...
как отправить Unicode символы в RxRichEdit ?

нашел такое решение:

procedure TJvCustomRichEdit.SetTextW(const Value: WideString);
var
  SetText: TSetText;
const EM_SETTEXTEX = WM_USER + 97;
begin
  SetText.flags := 0;
  SetText.codepage := 1200;
  SendMessage(Handle, EM_SETTEXTEX, Longint(@SetText),
Longint(PWideChar(Value)));
end;


но не могу найти класс TSetText, можно ли его где найти, и приспособить для D7 ???


 
MBo ©   (2010-05-04 15:26) [1]

это не класс, а запись. Если ее объявления нет в JVCL, то этот тип надо объявить самостоятельно по описанию из статьи MDSN по EM_SETTEXTEX
typedef struct _settextex {
   DWORD flags;
   UINT codepage;
} SETTEXTEX


 
Zoom ©   (2010-05-04 16:45) [2]

MBo, спасибо! в JVCL ее небыло ...

заработала!


type
 _settextex = record
   flags: Longword;
   codepage: Cardinal;
 end;
 TSETTEXTEX = _settextex;


 
Zoom ©   (2010-05-04 17:15) [3]

все бы хорошо, но так не бывает :)

EM_SETTEXTEX - полностью стирает предыдущее содержимое RichEdit ...
других сообщений типа EM_APPENDTEXTEX к сожалению нету...

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

похоже надо добавлять при помощи rtf формата....
единственное неудобство почему-то нельзя  добавить rtf код через RxRichEdit1.Lines.Add(str) ; вернее можно но только один раз...
даже если не закрывать "}" все равно следующая строка уже будет отображаться не символами, а rtf тегами напр. "\u-12977?"....

пока только так получилось...

 SS := TStringStream.Create("{\rtf1{\fonttbl{\f0\fnil\fcharset204 Arial Unicode MS;}}{\colortbl ;\red255\green0\blue0;}\cf1\f0\u-12978?\u-12977?\u-12995?\par}");
 RxRichEdit1.PlainText := False;
 RxRichEdit1.StreamMode := [smSelection];
 RxRichEdit1.Lines.LoadFromStream(SS);
 SS.Free;


но в этом случае нельзя комбинировать с Lines.Add... rtf пишет на свое старое место (выше в строке), а Lines.Add начинает с новой строки(ниже)... весьма забавно...


 
Zoom ©   (2010-05-04 19:07) [4]

Сделал такую функцию:


function WideStringToRTF(color: Tcolor; FontName, Extratag: string; ws: WideString): string;
var
 rtf: string;
 i: integer;
 red, green, blue: byte;
begin
 // \b - жирный  \i - курсив  \fs100 - размер шрифта
 red := color and $FF;
 green := (color shr 8) and $FF;
 blue := color shr 16;
 rtf := "{\rtf1{\fonttbl{\f0\fnil\fcharset204 " + FontName + ";}}{\colortbl ;\red"
   + inttostr(red) + "\green" + inttostr(green) + "\blue" + inttostr(blue) + "; }\cf1\f0" + Extratag;
 for i := 1 to length(ws) do begin
   rtf := rtf + "\u" + inttostr(integer(ws[i])) + "?";
 end;
 rtf := rtf + "\u13?}";
 result := rtf;
end;



вызываю так:


 RxRichEdit1.PlainText := False;
 RxRichEdit1.StreamMode := [smSelection];
 RxRichEdit1.Lines.LoadFromStream(TStringStream.Create(WideStringToRTF(clgreen, "Arial Unicode MS", "\fs20\b\i", ws)));
 RxRichEdit1.perform(WM_VSCROLL, SB_BOTTOM, 0);


все работает но! текст вставляется туда где на данный момент расположен курсор, можно ли как-то загнать курсор в конец текста ???


 
Zoom ©   (2010-05-04 21:24) [5]

задача решена :) RxRichEdit1.SelStart := -1;



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.13 c
3-1243590436
gog
2009-05-29 13:47
2010.08.27
Прочитать unicode данные из Oracle


15-1275780985
re83
2010-06-06 03:36
2010.08.27
Подскажите софт для создания таких эффектов


15-1274747389
Юрий
2010-05-25 04:29
2010.08.27
С днем рождения ! 25 мая 2010 вторник


3-1240229501
Wood
2009-04-20 16:11
2010.08.27
Помогите с приложение для работы через ADO с бд.


2-1269343965
F$
2010-03-23 14:32
2010.08.27
установка/сброс бита