В настоящее время у нас есть несколько клиентов, которые сообщают, что наши функции копирования в буфер обмена в нашем приложении 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 не терпит неудачу и не возвращается ».
Здесь не так много возможностей для создания воспроизводимого фрагмента кода (иначе я бы, вероятно, его исправил), мне просто интересно, сталкивался ли кто-нибудь с этим и как наилучшим образом его решить.
Трудно отлаживать без кода. У вас есть собственный пользователь с сообщениями о сбоях (нужно повторить попытку), похоже, что в вашем коде действительно есть ошибка. Вы уверены, что код действительно выполняется во всех случаях? Может быть, вы не поймаете команду клавиатуры из-за проблемы с фокусом - как мы можем узнать? Только вы можете отлаживать свой код. Я бы начал с вашей воспроизводимой проблемы с домашним пользователем - настроил удаленный сеанс отладки и посмотрел, что произойдет. –
Так что же значит 'BuildCSVString();' выглядеть? Откуда вы знаете, что это не перестройка старой строки? –
Итерирует по столу и создает CSV. Он может также быть строковой константой или возвращать случайный набор символов для этого вопроса. Я могу гарантировать, что это не проблема, поскольку она работает на компьютере каждого пользователя, и это не тот код, который будет работать на одной машине, но не на других. –