![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RxRichEdit и Unicode [D7, WinXP]
Zoom © (2010-05-04 15:12:00)Помогите пожалуйста!!! зашел почти в тупик...
как отправить 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 ???
Zoom (2010-05-04 21:24:00) [1]задача решена :) RxRichEdit1.SelStart := -1;
Zoom (2010-05-04 19:07:00) [2]Сделал такую функцию:
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 17:15:00) [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 16:45:00) [4]MBo, спасибо! в JVCL ее небыло ...
заработала!
type
_settextex = record
flags: Longword;
codepage: Cardinal;
end;
TSETTEXTEX = _settextex;
MBo (2010-05-04 15:26:00) [5]это не класс, а запись. Если ее объявления нет в JVCL, то этот тип надо объявить самостоятельно по описанию из статьи MDSN по EM_SETTEXTEX
typedef struct _settextex {
DWORD flags;
UINT codepage;
} SETTEXTEX