Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.057 c
15-1267104405
GDI+
2010-02-25 16:26
2010.08.27
Вопрос знатокам ассеблера и современных процессоров


2-1267595287
allrussia
2010-03-03 08:48
2010.08.27
Перекодировка русского текста DOS+ANSI в ANSI


2-1268640436
Darvin
2010-03-15 11:07
2010.08.27
Возвращение строки PChar, Delphi 2009


3-1237989734
Евгений Р.
2009-03-25 17:02
2010.08.27
Закрытие БД


15-1269466202
Юрий
2010-03-25 00:30
2010.08.27
С днем рождения ! 25 марта 2010 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский