Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.04;
Скачать: CL | DM;

Вниз

Мистика с RichEdit   Найти похожие ветки 

 
Nostradamus ©   (2007-01-13 18:04) [0]

Я беру 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;


 
Palladin ©   (2007-01-14 20:08) [1]

RichEdit1.PasteFromClipboard;


 
Nostradamus ©   (2007-01-14 20:24) [2]

Мне это не совсем подходит:
1. RichEdit.Readonly = False
2. Текст нужно загрузить по требованию, а не сразу после того как его скопировали

Может быть есть ещё какие-нибудь варианты решения?


 
Palladin ©   (2007-01-14 20:36) [3]

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 21:39) [4]

Да нет это всё понятно, но мне не хотелось бы использовать для этого клипборд т.к. у пользователя могут быть там данные которые ему нужны, а если использовать Ваш метод, то нужно заменит актуальное содержимое клипборда тем, что мне нужно загрузить в RichEdit.
Плюс к тому клипборд медленее и как это выглядит как плохой стиль.

Почему может не правильно работать  LoadFromStream?


 
Nostradamus ©   (2007-01-14 21:40) [5]

П.С. Текст для RichEdit берётся не только из Клипборда, но и из файла...


 
Palladin ©   (2007-01-14 21:44) [6]


> но и из файла...

Procedure OnТребование(...);
Begin
RichEdit1.ReadOnly:=False;
RichEdit1.LoadFromFile(filename);
RichEdit1.ReadOnly:=True;
End;


 
Nostradamus ©   (2007-01-14 21:53) [7]

Файл создаётся мной и содержит не только RichText, но и другую информацию...

+
Nostradamus ©   (14.01.07 21:39) [4]


 
Palladin ©   (2007-01-14 22:02) [8]

а что [4]? первоначально у тебя не получалось вставить из буфера обмена, я ответил, потом оказывается тебе надо не только из буфера но и из файла - тоже ответил, из потока может не получаться по той причине, что там не rtf или, экспериментировать не буду, возможно нужно скопировать часть потока содержащую rtf в отдельный поток (tmemorystream) и грузить из него. а в общем пост [4] мне абсолютно не понятен, непонятно чего же ты хочешь...


 
Nostradamus ©   (2007-01-14 23:28) [9]

Попробую сформулировать задачу поточнее.

Есть древовидная структура данных. В ней сохранены данные в текстовом виде (Plain Text), в виде форматированого текста (Rich Text) и BMP. Всё это я беру в процессе работы программы из буфера обмена и сохраняю в XML файл.
При повторном запуске программы данные загружаются из XML.
Проблема имеется только с RTF.
Как я получаю RichText из буфера и загружаю в RichEdit я написал в
Nostradamus ©   (13.01.07 18:04).

RichText это переменная типа String.

Глобально мне нужно вставить текст из памяти (из переменной RichText) в RichEdit!


 
Nostradamus ©   (2007-01-15 00:08) [10]

Интересно, что текст загружается в RichEdit, только его не видно


 
Nostradamus ©   (2007-01-15 00:13) [11]

Ещё интересней:

RichEdit1.ReadOnly:=False;
RichEdit1.PasteFromClipboard;
RichEdit1.ReadOnly:=True;

Тот же эффект - текста не видно. Что за прикол?


 
Eraser ©   (2007-01-15 00:40) [12]

> [9] Nostradamus ©   (14.01.07 23:28)

может использовать JvRichEdit там работать с фрагментами rtf удобнее.


 
Nostradamus ©   (2007-01-15 00:46) [13]

Всё - заработало. Оказалось, что св.-во DoubleBuffered должно быть у RichEdit-а False, иначе он текст почему-то не выводит...
Говорю же - мистика.


 
clickmaker ©   (2007-01-15 10:42) [14]


> св.-во DoubleBuffered должно быть у RichEdit-а False

нет нужды ему это включать. Это ж обертка над виндозным контролом, он сам себя рисует без участия vcl


 
Nostradamus ©   (2007-01-15 13:34) [15]

Дело в том, что при ресайзе формы у меня сильно контролы мигали и я проставил тупо всем наследникам TWinControl  DoubleBuffered := True. Это помогло, но с RichEdit получился вот такой прикол.



Страницы: 1 вся ветка

Текущий архив: 2007.03.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.086 c
15-1170638722
Lex_!
2007-02-05 04:25
2007.03.04
.Net Framework 2 и выше в Delphi


2-1171270457
Riply
2007-02-12 11:54
2007.03.04
Импорт функций из Kernel32.


15-1170832623
camoroh13
2007-02-07 10:17
2007.03.04
Закачка файлов по ftp


15-1171255287
Slider007
2007-02-12 07:41
2007.03.04
С днем рождения ! 10 февраля


15-1171261515
zdm
2007-02-12 09:25
2007.03.04
Vista(Aero) and BDS2006