Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мистика с 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо