Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1253260563
usver
2009-09-18 11:56
2009.11.15
АСУС


2-1254463160
mfender
2009-10-02 09:59
2009.11.15
Какая-то чуднАя ошибка в Application.CreateForm


4-1222095827
denissoft
2008-09-22 19:03
2009.11.15
Как перехватить функцию CreateFile


15-1253012690
boriskb
2009-09-15 15:04
2009.11.15
С кем поделиться?


15-1252968869
dmk
2009-09-15 02:54
2009.11.15
Твердотельные HDD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский