Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2010, 22:07   #1
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
Вопрос Буфер обмена в Delphi

Здравствуйте уважаемые форумчане.
Я начал писать программу, которая регулярно(по таймеру) заносит в буфер обмена некоторый текст.
И столкнулся со следующей проблемой:
если я пытаюсь вставить текст из буфера обмена, к примеру, в блокнот,
и мое действие происходит одновременно с занесением нового текста в буфер, выскакивает ошибка "Cannot open Clipboard"
программа при этом не вылетает, продолжает работать.
Как можно решить/проигнорировать эту ошибку?
Заранее благодарен.
)Игнат( вне форума Ответить с цитированием
Старый 12.07.2010, 22:09   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Если занесение данных не критически важно, то вставляем в try except. Иначе решаем проблему при помощи флагов. Пока буфер "занят" ставьте флаг, освобождаете буфер - снимайте флаг.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.07.2010, 22:12   #3
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Если занесение данных не критически важно, то вставляем в try except. Иначе решаем проблему при помощи флагов. Пока буфер "занят" ставьте флаг, освобождаете буфер - снимайте флаг.
Занесение не важно критически.
а вот в какой форме должно выглядеть
Код:
try except
если код занесения в буфер следующий:
Код:
Clipboard.SetTextBuf(PChar(текстовая_переменная));
)Игнат( вне форума Ответить с цитированием
Старый 12.07.2010, 22:15   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Когда программа вылетает с ошибкой она показывает коовое название ошибки, например EOnZeroDivide.

Делаем так:
Код:
Try
 Clipboard.SetTextBuf(PChar(текстовая_переменная));
Except
 On КОДОВОЕ_НАЗВАНИЕ_ОШИБКИ Do ДЕЙСТВИЯ ПРИ ОШИБКЕ. Например занесем это в лог программы.
Учтите, что при отладке в дебаггере ошибка будет по прежнему выскакивать, но при запуске exe - больше нет.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.07.2010, 22:19   #5
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

А можно последний вопрос?
как узнать кодовое имя ошибки?
она на скрине
Изображения
Тип файла: jpg Безымянный.JPG (14.6 Кб, 50 просмотров)
)Игнат( вне форума Ответить с цитированием
Старый 12.07.2010, 22:24   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Хм... Странно. Обычно тип ошибки показывается...
Попробуйте указать просто Exception
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.07.2010, 22:32   #7
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Код:
Try
 Clipboard.SetTextBuf(PChar(текстовая_переменная));
Except
 On Exception  Do действие;
тогда вот вопрос, можно ли просто пропустить ошибку?
оператор Continue работает только в цикле

***Добавлено***
Решил проблему так:
создал холостую переменную, и менял ее значение то на ноль, то на 1
Спасибо за помощь!

Последний раз редактировалось )Игнат(; 12.07.2010 в 22:41.
)Игнат( вне форума Ответить с цитированием
Старый 12.07.2010, 22:46   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
Try
 Clipboard.SetTextBuf(PChar(текстовая_переменная));
Except
End;
psycho-coder вне форума Ответить с цитированием
Старый 12.07.2010, 23:01   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в except/finally не обязательно писать On
можно и опустить(а можно написать On E:Exception do и затем использовать сообщение исключения)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi vs. Буфер обмена dacorp Помощь студентам 2 04.07.2010 17:46
буфер обмена olimpus Microsoft Office Excel 2 19.09.2009 08:52
Буфер обмена nusik Общие вопросы Delphi 2 21.05.2009 00:53
буфер обмена __@cmd@__ Общие вопросы Delphi 2 04.02.2009 12:24