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

Вниз

PasteToClipboard, RichEdit   Найти похожие ветки 

 
faiwer ©   (2009-10-01 22:00) [0]

На форме висит RichEdit. Юзер жмёт в нём Ctrl+C или тыкает на кнопку (Action) и вызываетс r.CopyToClipboard. далее юзер выбирает другой итем в списке (ListBox) и в RichEdit грузится другой текст из файла. При етом выполняются разныем махинации вроде ReadOnly:=false, readonly:=true и другие (так надо). в конечном итоге, RichEdit редактируется, но вставить этот текст нельзя, в лучшем случае вставляется первая строчка буфера. в тоже время этот текст прекрасно вставляется и в ворде, и в едитки, мемо этого же приложения... не вставляется он только в сам RichEdit (и любые другие ричэдиты (любого приложения (создавал пустую форму с ричэдитом, он не вставил).

теперь фокус-мокус. если юзер копирует текст, и вставляет его до того как ткнёт в листбокс и загрузит другой текст, то потом етот текст вставляется уже нормально куда не тыкай...

ещё фокус, создаю пустую форму, ставлю необходимые для теста компоненты, примерно повторяю то что в моём понимании происходит с буфером и етим ричэедитом в моёй проге, и всё работает как часы.

покопался в коде так и не нашёл в чём глюк. особенно убивает что текст при етом нормально вставляется в другие контролы и приложения, даже не теряя форматирование (если вставить в ворд)

Порыскал по нету, похоже у меня одного такая проблема. куда копать чтобы её разрешить?

P.S. r.perform(wm_paste,0,0) пробовал, тоже не вставляет
P.S.S. любой_TEdit_на_форме.PasteToClipboard тоже не вставляет, а вот если вручную Ctrl+V то вставляет... шиза какая то
P.S.S.S. D09


 
faiwer ©   (2009-10-01 23:07) [1]

Временно решил проблему тем что когда юзер копирует текст он автоматически вставляется в невидимый ричэдит. в этом случае такой глюк не наблюдается. но мягко говоря это идиотское решение :D

я понимаю этот глюк как - ричэдит копирует текст в буфер, входе дальнейшего кода никак не связанного с буфером обмена (там базы данных, потоки, и просто отображение разных панелей) оно как то модифицирует этот буфер в непригодное только для ричэдита состояние (только если в буфере текст от ричэдита). если до "дальнейшего кода" вставить етот текст куда-нибудь, то буфер нормализуется и далее мой дальнейший код его никак не меняет и буфер остаётся пригодным для ричэдита.

я сейчас провёл более десятка разных махинаций с вордом, блокнотом и эдитками, глюк выявляется только при схеме "copy в richedit-е" "выделение другой записи и её загрузка в richedit". могу привести весь этот "сомнительный код", правда он немного большеват и не понятно каким боком он вообще относится к буферу обмена... всё это попахивает какой то шизой.
временно решил проблему насадив на любое копирование в richedit-е такой код:

ТекТекст.CopyToClipboard;
tempRE.Clear;
tempRE.PasteFromClipboard;


 
Жорж   (2009-10-03 17:19) [2]


> куда копать чтобы её разрешить?
>


Корни проблемы явно лежат в

> При етом выполняются разныем махинации вроде ReadOnly:=false,
>  readonly:=true и другие (так надо)


 
faiwer ©   (2009-10-03 18:37) [3]

Жорж, там очень много кода. Но с RichEdit происходят след.вещи
меняется свойство ReadOnly
загружается новый текст из потока
у предка ричэдита меняется себе visible

С буфером обмена вообще никаких манипуляций не происходит. Но каким то образом в итоге "портится" текст в буфере, причём так ювелирно что перестаёт его кушать только RichEdit (любой другой компонент и любое другое приложение с текстом в буфере при етом работают нормально). Я думаю что тут виновато PasteFormClipboard, в справке написано что оно юзает WM_PASTE... но тут незадача.

если я пытаюсь вставить етот текст в любую эдитку просто нажав Ctrl+V он вставляется без проблем, а просто ради эксепремента попробовал: Edit1.PasteFromClipboard - не вставляет.

Пока забил на етот глюк, но как будет свободное время, планирую изучить как хранится форматированный текст в буфере и проследить что же с ним такого происходит )


 
Жорж   (2009-10-04 11:52) [4]

Ну что тут можно посоветовать.
Если без выполнения серии "манипуляций" все работает, а с выполнением - нет, то можно убрать половину манипуляций, и проверить - будет ли работать
ну и дальше, методом деления остатка кода пополам найти проблемное место
а там уже станет понятно, в чем дело
может и правда в VCL глюк какой нибудь, такое бывает



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

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

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1252873813
Юрий
2009-09-14 00:30
2009.11.15
С днем рождения ! 14 сентября 2009 понедельник


15-1253305803
Юрий
2009-09-19 00:30
2009.11.15
С днем рождения ! 19 сентября 2009 суббота


2-1254144458
Drowsy
2009-09-28 17:27
2009.11.15
Просмотры в InterBase.


2-1254217839
dplz
2009-09-29 13:50
2009.11.15
Вывод чисел через пробел...


15-1252644331
MBo
2009-09-11 08:45
2009.11.15
Пятничная задачка