Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.03.2011, 23:19
Аватар для Sky.NET
Sky.NET Sky.NET вне форума
Прохожий
 
Регистрация: 22.09.2010
Сообщения: 49
Версия Delphi: XE
Репутация: 12
По умолчанию Запись в буфер

При повторном использовании процедуры
Сlipboard.SetTextBuf(PChar(Text));
Вылетает ошибка
"Сannot open clipboard. Отказано в доступе.".
Потом нормально, потом опять ошибка. И так через раз.
Пробовал также
Сlipboard.AsText := Text;
Та же ошибка через раз....
Пол интернета перерыл...
Как исправить?
__________________
IDE := Embarcadero.RADStudio.XE.Architect
// Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук ©
Ответить с цитированием
  #2  
Старый 10.03.2011, 23:23
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Код правильный, просто буфер обмена в это время использует другое приложение (возможно, твое, в другом потоке).
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 10.03.2011, 23:50
Аватар для Sky.NET
Sky.NET Sky.NET вне форума
Прохожий
 
Регистрация: 22.09.2010
Сообщения: 49
Версия Delphi: XE
Репутация: 12
По умолчанию

Значит когда я первый раз использовал процедуру, то нужно как-то закрыть буфер?
Clipboard.Close; не помогает.
Скрыть ошибку не получается (try except, {I-})
__________________
IDE := Embarcadero.RADStudio.XE.Architect
// Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук ©
Ответить с цитированием
  #4  
Старый 10.03.2011, 23:56
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

я когда то делал так (и ошибок никаких не было):
Код:
1
2
3
4
5
6
7
8
9
10
11
<b>uses</b> Clipbrd;
 
.....................
<b>begin</b>
  <b>try</b>
    Clipboard.AsText := Edit1.Text; <font color="Navy">// запись в буфер обмена</font>
  <b>except</b>
    ShowMessage(<font color="Navy">'Error write to buffer'</font>);
  <b>end</b>;
  Edit1.Text := Clipboard.AsText; <font color="Navy">// чтение из буфера обмена</font>
<b>end</b>;

P.S.: если запускать из под Delphi, то try..except не работают, отладчик всё равно ошибку покажет

Последний раз редактировалось Assistant, 10.03.2011 в 23:59.
Ответить с цитированием
  #5  
Старый 11.03.2011, 00:11
Аватар для Sky.NET
Sky.NET Sky.NET вне форума
Прохожий
 
Регистрация: 22.09.2010
Сообщения: 49
Версия Delphi: XE
Репутация: 12
По умолчанию

Пробовал я так. Всё равно ошибку показывает.
__________________
IDE := Embarcadero.RADStudio.XE.Architect
// Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук ©
Ответить с цитированием
  #6  
Старый 11.03.2011, 09:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а если попробовать вместо Clipboard использовать MyClipboard:
http://data.cod.ru/92920
ShowMessage можно удалить, нужны только для вывода last-error ошибки, чтобы понять.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 11.03.2011, 10:10
Duss Duss вне форума
Прохожий
 
Регистрация: 09.03.2011
Адрес: СПб
Сообщения: 12
Версия Delphi: 7
Репутация: 10
По умолчанию

Попробуйте так:

edit1.SelectAll;
edit1.CopyToClipboard;
Ответить с цитированием
  #8  
Старый 11.03.2011, 12:48
Аватар для Sky.NET
Sky.NET Sky.NET вне форума
Прохожий
 
Регистрация: 22.09.2010
Сообщения: 49
Версия Delphi: XE
Репутация: 12
По умолчанию

Цитата:
Сообщение от Duss
Попробуйте так:

edit1.SelectAll;
edit1.CopyToClipboard;
Также через раз.
__________________
IDE := Embarcadero.RADStudio.XE.Architect
// Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук ©
Ответить с цитированием
  #9  
Старый 14.03.2011, 20:58
Duss Duss вне форума
Прохожий
 
Регистрация: 09.03.2011
Адрес: СПб
Сообщения: 12
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Sky.NET
Также через раз.

Выложи больше кода, конечно вряд ли, но вдруг что-то где-то не так.
Ответить с цитированием
  #10  
Старый 16.03.2011, 11:15
Аватар для Sky.NET
Sky.NET Sky.NET вне форума
Прохожий
 
Регистрация: 22.09.2010
Сообщения: 49
Версия Delphi: XE
Репутация: 12
По умолчанию

Используется глобальная горячая клавиша [Ctrl] + [C] и прога перехватывает данную комбинацию не давая выполниться её виндовой процедуре. Пробовал вместо имитации посылать всякие сообщения чужому окну, но безрезультатно.
В общем делаю следующее:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<...>
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  
Старый 16.03.2011, 12:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Так вы нигде его не открываете, вот и не работат. Последовательность работы с буфером та-же что и с файлом:
Код:
1
2
3
Clipboard.Open;
//Что-то делаете с ним
Clipboard.Close;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025