![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мистика с RichEdit [WinXP]
Nostradamus © (2007-01-13 18:04:00)Я беру RTF текст из Клипбоарда и по мере надобности загружаю его в RichEdit. Почему-то при этом текст не виден в RichEdit (как будто-бы весь текст белого цвета стал), т.е. он там есть, но его не видно.
Не подскажите в чём может быть проблема?
Релевантные части кода:
Беру текст из Клипбоапда:
H := Clipboard.GetAsHandle(CF_RICHTEXT);
RichText := PCHAR(GlobalLock(H));
GlobalUnlock(H);
Загружаю в RichEdit:
Stream := TStringStream.Create(RichText);
try
Stream.Seek(0, soFromBeginning);
RichMemo.Lines.LoadFromStream(Stream);
finally
Stream.Free;
end;
Nostradamus (2007-01-15 13:34:00) [1]Дело в том, что при ресайзе формы у меня сильно контролы мигали и я проставил тупо всем наследникам TWinControl DoubleBuffered := True. Это помогло, но с RichEdit получился вот такой прикол.
clickmaker (2007-01-15 10:42:00) [2]
> св.-во DoubleBuffered должно быть у RichEdit-а False
нет нужды ему это включать. Это ж обертка над виндозным контролом, он сам себя рисует без участия vcl
Nostradamus (2007-01-15 00:46:00) [3]Всё - заработало. Оказалось, что св.-во DoubleBuffered должно быть у RichEdit-а False, иначе он текст почему-то не выводит...
Говорю же - мистика.
Eraser (2007-01-15 00:40:00) [4]> [9] Nostradamus © (14.01.07 23:28)
может использовать JvRichEdit там работать с фрагментами rtf удобнее.
Nostradamus (2007-01-15 00:13:00) [5]Ещё интересней:
RichEdit1.ReadOnly:=False;
RichEdit1.PasteFromClipboard;
RichEdit1.ReadOnly:=True;
Тот же эффект - текста не видно. Что за прикол?
Nostradamus (2007-01-15 00:08:00) [6]Интересно, что текст загружается в RichEdit, только его не видно
Nostradamus (2007-01-14 23:28:00) [7]Попробую сформулировать задачу поточнее.
Есть древовидная структура данных. В ней сохранены данные в текстовом виде (Plain Text), в виде форматированого текста (Rich Text) и BMP. Всё это я беру в процессе работы программы из буфера обмена и сохраняю в XML файл.
При повторном запуске программы данные загружаются из XML.
Проблема имеется только с RTF.
Как я получаю RichText из буфера и загружаю в RichEdit я написал в
Nostradamus © (13.01.07 18:04).
RichText это переменная типа String.
Глобально мне нужно вставить текст из памяти (из переменной RichText) в RichEdit!
Palladin (2007-01-14 22:02:00) [8]а что [4]? первоначально у тебя не получалось вставить из буфера обмена, я ответил, потом оказывается тебе надо не только из буфера но и из файла - тоже ответил, из потока может не получаться по той причине, что там не rtf или, экспериментировать не буду, возможно нужно скопировать часть потока содержащую rtf в отдельный поток (tmemorystream) и грузить из него. а в общем пост [4] мне абсолютно не понятен, непонятно чего же ты хочешь...
Nostradamus (2007-01-14 21:53:00) [9]Файл создаётся мной и содержит не только RichText, но и другую информацию...
+
Nostradamus © (14.01.07 21:39) [4]
Palladin (2007-01-14 21:44:00) [10]
> но и из файла...
Procedure OnТребование(...);
Begin
RichEdit1.ReadOnly:=False;
RichEdit1.LoadFromFile(filename);
RichEdit1.ReadOnly:=True;
End;
Nostradamus (2007-01-14 21:40:00) [11]П.С. Текст для RichEdit берётся не только из Клипборда, но и из файла...
Nostradamus (2007-01-14 21:39:00) [12]Да нет это всё понятно, но мне не хотелось бы использовать для этого клипборд т.к. у пользователя могут быть там данные которые ему нужны, а если использовать Ваш метод, то нужно заменит актуальное содержимое клипборда тем, что мне нужно загрузить в RichEdit.
Плюс к тому клипборд медленее и как это выглядит как плохой стиль.
Почему может не правильно работать LoadFromStream?
Palladin (2007-01-14 20:36:00) [13]1.
RichEdit1.ReadOnly:=False;
RichEdit1.PasteFromClipboard;
RichEdit1.ReadOnly:=True;
2.
Procedure OnТребование(...);
Begin
RichEdit1.ReadOnly:=False;
RichEdit1.PasteFromClipboard;
RichEdit1.ReadOnly:=True;
End;
Nostradamus (2007-01-14 20:24:00) [14]Мне это не совсем подходит:
1. RichEdit.Readonly = False
2. Текст нужно загрузить по требованию, а не сразу после того как его скопировали
Может быть есть ещё какие-нибудь варианты решения?
Palladin (2007-01-14 20:08:00) [15]RichEdit1.PasteFromClipboard;