Главная страница
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.057 c
15-1170792235
MSTeam
2007-02-06 23:03
2007.03.04
Инсталлятор


1-1168359479
*Ray*
2007-01-09 19:17
2007.03.04
Прокрутка в DBGride


15-1170829866
torch_of_justice
2007-02-07 09:31
2007.03.04
Орнамент, плитка


2-1171025042
Tifon
2007-02-09 15:44
2007.03.04
Сравнение строк


2-1171439440
Kolan
2007-02-14 10:50
2007.03.04
Непойму как обработать Exception.