Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.06 c