![]() |
|
|
|
|
#1
|
||||
|
||||
|
При повторном использовании процедуры
Сlipboard.SetTextBuf(PChar(Text)); Вылетает ошибка "Сannot open clipboard. Отказано в доступе.". Потом нормально, потом опять ошибка. И так через раз. Пробовал также Сlipboard.AsText := Text; Та же ошибка через раз.... Пол интернета перерыл... Как исправить? |
|
#2
|
||||
|
||||
|
Код правильный, просто буфер обмена в это время использует другое приложение (возможно, твое, в другом потоке).
|
|
#3
|
||||
|
||||
|
Значит когда я первый раз использовал процедуру, то нужно как-то закрыть буфер?
Clipboard.Close; не помогает. Скрыть ошибку не получается (try except, {I-}) |
|
#4
|
|||
|
|||
|
я когда то делал так (и ошибок никаких не было):
Код:
uses Clipbrd;
.....................
begin
try
Clipboard.AsText := Edit1.Text; // запись в буфер обмена
except
ShowMessage('Error write to buffer');
end;
Edit1.Text := Clipboard.AsText; // чтение из буфера обмена
end;P.S.: если запускать из под Delphi, то try..except не работают, отладчик всё равно ошибку покажет Последний раз редактировалось Assistant, 10.03.2011 в 23:59. |
|
#5
|
||||
|
||||
|
Пробовал я так. Всё равно ошибку показывает.
|
|
#6
|
||||
|
||||
|
а если попробовать вместо Clipboard использовать MyClipboard:
http://data.cod.ru/92920 ShowMessage можно удалить, нужны только для вывода last-error ошибки, чтобы понять. |
|
#7
|
|||
|
|||
|
Попробуйте так:
edit1.SelectAll; edit1.CopyToClipboard; |
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
|||
|
|||
|
Цитата:
Выложи больше кода, конечно вряд ли, но вдруг что-то где-то не так. |
|
#10
|
||||
|
||||
|
Используется глобальная горячая клавиша [Ctrl] + [C] и прога перехватывает данную комбинацию не давая выполниться её виндовой процедуре. Пробовал вместо имитации посылать всякие сообщения чужому окну, но безрезультатно.
В общем делаю следующее: Код:
<...>
procedure TForm1.WM_Hotkey(var Msg: TWMHotkey);
<...>
begin
<...>
if Msg.HotKey = KeyID[7] then
begin
// Убираем зарегистрированную клавишу
UnRegisterHotkey(Handle, KeyID[7]);
// Имитируем нажатие [Ctrl] + [C] (в чужом окне)
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
// Регистрируем клавишу заново
RegisterHotkey(Handle, KeyID[7], MOD_CONTROL, 67);
<...>
// Считываем из буфера
buff := Clipboard.AsText;
for I1 := 0 to LBQuestions.Items.Count - 1 do
if Pos(buff, LBQuestions.Items.Strings[I1]) <> 0 then
begin
LBQuestions.Selected[I1] := True;
ListQuestion;
Break;
end;
end;
<...>
end;
<...>
procedure TForm1.ListQuestion;
<...>
begin
<...>
// Пишем в буфер
Clipboard.SetTextBuf(PChar(Copy(S, 1, p1 - 1)));
// При повторном проходе - "Сannot open clipboard. Отказано в доступе."
<...>
end;
<...>Окно программы практически всё время неактивно (работаю в чужом окне). Последний раз редактировалось Sky.NET, 16.03.2011 в 11:27. |
|
#11
|
||||
|
||||
|
Так вы нигде его не открываете, вот и не работат. Последовательность работы с буфером та-же что и с файлом:
Код:
Clipboard.Open; //Что-то делаете с ним Clipboard.Close; |