2015-11-19 3 views
0

В настоящее время у нас есть несколько клиентов, которые сообщают, что наши функции копирования в буфер обмена в нашем приложении Delphi XE2 Win32 не работают, а вставка в Excel впоследствии приводит к вставке старого содержимого буфера обмена.Delphi выдает копирование в буфер обмена Windows

Мы просто копируем CSV-текст, используя Clipboard.AsText, и добавили некоторую отладку, чтобы гарантировать, что мы не получаем тихие сбои в подпрограммах, создающих нашу строку CSV. В нем нет обработки исключений, поэтому любые исключения должны отображаться только пользователю (ничего не сообщается).

Неужели кто-нибудь сталкивался с чем-то подобным раньше, и если да, то какие из них лучшие решения? Я заметил, что в C# -land, согласно How to handle blocked Clipboard and other oddities, поведение по умолчанию заключается в повторении 10x с задержкой в ​​100 мс. Если это поведение не записано в WinAPI, оболочка Delphi, похоже, не делает этого?

Я предполагаю, что это проблема пользовательских машин, а не что-то в нашем приложении, хотя они, по-видимому, не испытывают этого в другом программном обеспечении. В доме у нас есть один пользователь, у которого есть первый сбой Ctrl-C, но второй успешный (довольно надежно), хотя тестирование более 5 других машин ничего не показывало.

Благодаря комментариев на пропущенный код (я не ставил какой-либо изначально, так как нет ничего действительно там) - реализация псевдокод

Data := BuildCSVString(); 
Clipboard.AsText := Data; 
StatusBar.Caption := 'Data copied to clipboard'; 

Так не так много возможностей для отказа.

Пользователи видят обновление StatusBar GUI, поэтому работает процедура буфера обмена. Отчеты заключаются в том, что буфер обмена остается неизменным, а не то, что он очищается, поэтому процедура BuildCSVString не терпит неудачу и не возвращается ».

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

+0

Трудно отлаживать без кода. У вас есть собственный пользователь с сообщениями о сбоях (нужно повторить попытку), похоже, что в вашем коде действительно есть ошибка. Вы уверены, что код действительно выполняется во всех случаях? Может быть, вы не поймаете команду клавиатуры из-за проблемы с фокусом - как мы можем узнать? Только вы можете отлаживать свой код. Я бы начал с вашей воспроизводимой проблемы с домашним пользователем - настроил удаленный сеанс отладки и посмотрел, что произойдет. –

+1

Так что же значит 'BuildCSVString();' выглядеть? Откуда вы знаете, что это не перестройка старой строки? –

+0

Итерирует по столу и создает CSV. Он может также быть строковой константой или возвращать случайный набор символов для этого вопроса. Я могу гарантировать, что это не проблема, поскольку она работает на компьютере каждого пользователя, и это не тот код, который будет работать на одной машине, но не на других. –

ответ

0

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

+2

Кроме того, поскольку Windows Vista, если приложение Delphi работает как администратор, данные размещение на буфере обмена может быть недоступно для приложений, не работающих с правами администратора. –

+0

@StijnSanders Это то, о чем я не знал. AFAIK нет причин запускать наше приложение с правами администратора, но я только унаследовал эту кодовую базу 2 недели назад, поэтому вам нужно проверить. Я спрошу у стойки. –

+0

@StijnSanders Если это была проблема, тогда это никогда не сработало бы - это было бы не прерывистым, я должен подумать. –

Смежные вопросы