![]() |
|
#1
|
||||
|
||||
![]() При повторном использовании процедуры
Сlipboard.SetTextBuf(PChar(Text)); Вылетает ошибка "Сannot open clipboard. Отказано в доступе.". Потом нормально, потом опять ошибка. И так через раз. Пробовал также Сlipboard.AsText := Text; Та же ошибка через раз.... Пол интернета перерыл... Как исправить? IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © |
#2
|
||||
|
||||
![]() Код правильный, просто буфер обмена в это время использует другое приложение (возможно, твое, в другом потоке).
Помогаю за Спасибо ![]() |
#3
|
||||
|
||||
![]() Значит когда я первый раз использовал процедуру, то нужно как-то закрыть буфер?
Clipboard.Close; не помогает. Скрыть ошибку не получается (try except, {I-}) IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © |
#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
|
||||
|
||||
![]() Пробовал я так. Всё равно ошибку показывает.
IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © |
#6
|
||||
|
||||
![]() а если попробовать вместо Clipboard использовать MyClipboard:
http://data.cod.ru/92920 ShowMessage можно удалить, нужны только для вывода last-error ошибки, чтобы понять. Пишу программы за еду. __________________ |
#7
|
|||
|
|||
![]() Попробуйте так:
edit1.SelectAll; edit1.CopyToClipboard; |
#8
|
||||
|
||||
![]() Цитата:
IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © |
#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; <...> Окно программы практически всё время неактивно (работаю в чужом окне). IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © Последний раз редактировалось Sky.NET, 16.03.2011 в 11:27. |
#11
|
||||
|
||||
![]() Так вы нигде его не открываете, вот и не работат. Последовательность работы с буфером та-же что и с файлом:
Код:
Clipboard.Open; //Что-то делаете с ним Clipboard.Close; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |