Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c