![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Текст в RxRichEdit [D6]
sharik_212 © (2004-08-10 21:38:00)Господа, подскажите, как получить правильный русский текст из определенной строки в RxRichEdit. Проблемма в том, что в тексте "просто текст text", а если написать Form1.Caption:=RxRichEdit1.Lines[7], то заголовок формы станет ?????? ????? text, т.е. вместо кириллицы знаки вопросов. RxRichEdit1.Lines.Strings[7] дают тот-же результат. Помогите, пожалуйста.
Заранее огромное спасибо.
wnew (2004-08-11 03:30:00) [1]Всё! Установил я себе TntUnicodeControl. Класс! Безупречно. Теперь всё равно на каком языке создавать приложение. Проверил TTntRichEdit - здорово, разумеется нужно использовать Unicode. Если, к примеру файл сохранён в Ansi, то нужно функцией StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar; преобразовать в Unicode.
TUser (2004-08-11 02:37:00) [2]Не знаю, как там с Rx, но TJvRichEdit в W2K работает нормально.
wnew (2004-08-11 01:22:00) [3]
> wnew © (11.08.04 00:23) [5]
> Недавно прочитал, что можно использовать один трюк: выводить
> текст в поток, а от туда копировать функциями буфера обмена.
Нет не так. Сейчас нашёл снова беседу об этой проблеме. Там показывается трюк: текст, который в RichEdit, отображён кракозябрами, копируется из RichEdit в Stream, потом из него загружается в Memo, далее из Memo снова в Stream и на конец из Stream снова в RichEdit и прикол - RichEdit отображает кириллицу, как положено. Вот приведёный там код:
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.Clear;
RichEdit1.Font.Charset := RUSSIAN_CHARSET;
RichEdit1.Lines.Add('Çäðàâñòâóëòå!'); // Здравствуйте!
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Stream: TStringStream;
begin
Stream := TStringStream.Create(EmptyStr);
try
RichEdit1.Lines.SaveToStream(Stream);
Memo1.Text := Stream.DataString;
finally
Stream.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Stream: TStringStream;
begin
Stream := TStringStream.Create(Memo1.Text);
try
RichEdit1.Lines.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
http://www.delphipraxis.net/topic30840_verschiedene+zeichensaetze+in+einer+anwendung.html&sid=39b9a2d200b8efcd1dd6660f2d4adcf8
wnew (2004-08-11 00:25:00) [4]
> wnew © (11.08.04 00:23) [5]
Эта проблема актуальна для виндов с не русскими региональными настройками.
wnew (2004-08-11 00:23:00) [5]С TRichEdit в этом отношении великая проблема. Под Windows 9x и ME установка свойства CharSet в RUSSIAN_CHARSET действует безупречно, но под виндами с Win2K и выше изменение CharSet ни к чему не приводит. Есть выход - использовать специальные шрифты, к примеру: PROMT Helv Cyr Spec, но это, к сожалению, в некоторой степени будет ограничивать пользователя и кроме того, не знаю, как в этом случае с лицензией на шрифт.
Недавно прочитал, что можно использовать один трюк: выводить текст в поток, а от туда копировать функциями буфера обмена.
Я пытался разобраться в исходниках TRichEdit: прикольно то, что TMemo и TRichEdit оба наследуются от TCustomMemo, но TMemo корректно реагирует на установку свойства SetChar в RUSSIAN_CHARSET. Есть ещё модуль RichEdit - вот тут для меня всё запутанно, не могу уловить где собака зарыта, но кажется, что всё, всё-таки, уходит в Windows.
Есть ещё система обучающая дельфийские контролы понимать Unicode - посмотрите здесь: http://tnt.ccci.org/delphi_unicode_controls/я тоже ещё не испытывал этого, но собираюсь. Пока нет времени, завтра улетаю в отпуск:-)
Кириешки (2004-08-10 22:26:00) [6]А что это за компонент такой RxRichEdit?
Вот с обычным RichEdit все работает нормально. :)
А может помочь обычное присвоение значения переменной например :
var
s : pchar;
begin
s := pchar( RxRichEdit1.Lines.Strings[7]);
Form1.caption := s;
end;
поробуй, может получится.
begin...end (2004-08-10 22:22:00) [7]Может, со шрифтами что-то? Charset?
sharik_212 (2004-08-10 22:19:00) [8]увы...
Dec (2004-08-10 22:04:00) [9]Попробуй поставить PlainText в false