Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / cannot open clipboard / 25 сообщений из 52, страница 1 из 3
17.03.2016, 14:29
    #39194437
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
D2007

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
if Clipboard.HasFormat(CF_TEXT) then
....
....

        try
          value := Clipboard.AsText;// ошибка здесь
        except

        end;//try except



здесь есть три темы на форуме, их прочел, не нашёл там ничего полезного

как же всё-таки правильно?
...
Рейтинг: 0 / 0
17.03.2016, 14:41
    #39194449
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
добавиил:

Код: pascal
1.
2.
3.
          value := Clipboard.AsText;
          if GetLastError <> 0 then
            MessageBox(SysErrorMessage(GetLastError) + ', GetLastError: ' + IntToStr(GetLastError), constError, MB_OK+MB_ICONERROR);



вываливается только " cannot open clipboard "
...
Рейтинг: 0 / 0
17.03.2016, 15:02
    #39194471
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
X11,

1. может там данные нетекстовые?
2. другие программы нормально работают?
...
Рейтинг: 0 / 0
17.03.2016, 15:14
    #39194483
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
makhaon. может там данные нетекстовые?

я же написал:
if Clipboard.HasFormat(CF_TEXT) then
...
Рейтинг: 0 / 0
17.03.2016, 15:14
    #39194486
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
makhaon2. другие программы нормально работают?

какие другие?
...
Рейтинг: 0 / 0
17.03.2016, 15:17
    #39194491
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
возможно, я понял причину

У МЕНЯ БЫЛО ТАК
Код: pascal
1.
2.
3.
4.
5.
6.
7.
value := Clipboard.AsText;

...
...
...
а потом сразу
s := Clipboard.AsText;



я переделал
Код: pascal
1.
s := value;


отправил пользователю
у меня пока ошибок не наблюдалось
отправил на тестирование пользователю
...
Рейтинг: 0 / 0
21.03.2016, 09:49
    #39196775
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Проблема решилась не полностью
в течение часа 3-5 раз появляется сообщение
...
Рейтинг: 0 / 0
21.03.2016, 10:08
    #39196786
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
X11,

Может в системе стоят следилки за клипбоардом? Можно посмотреть GetClipboardViewer покажет ли что нить. Плюс, посмотреть что вернет GetOpenClipboardWindow после ошибки.
...
Рейтинг: 0 / 0
21.03.2016, 12:11
    #39196959
Michael Longneck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Совет будет некрасивый, но практичный. В ответ на этот Exception взять маленькую паузу и повторить действие. OleGetClipboard у меня выдавал регулярно такое сообщение, будучи вызываемым очень часто (TAction.OnUpdate). Я проблему свою решил через IsClipboardFormatAvailable. Но так, как у тебя проблема дальше, уже в операции внесения данных то выход - взять паузу и повторить.
...
Рейтинг: 0 / 0
21.03.2016, 12:18
    #39196976
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
а как сделать, чтобы окно с текстом " cannot open clipboard " не появлялось?
...
Рейтинг: 0 / 0
21.03.2016, 12:18
    #39196978
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Дело в том, что появляется как раз не exception, а простое окно
...
Рейтинг: 0 / 0
21.03.2016, 12:22
    #39196983
Michael Longneck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Ну например отказаться от услуг Clipbrd модуля и вызвать все API вручную. Но честно говоря не нашёл я в этом модуле MessageBox. Всё там нормально (XE7)
...
Рейтинг: 0 / 0
21.03.2016, 12:24
    #39196988
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Michael LongneckНо честно говоря не нашёл я в этом модуле MessageBox.
Его TAplication должен выдавать.
...
Рейтинг: 0 / 0
21.03.2016, 12:28
    #39196993
Michael Longneck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Ну так не без посредства же raise exception. Там есть подозрительный момент,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TClipboard.MainWndProc(var Message: TMessage);
begin
  try
    WndProc(Message);
  except
    if Assigned(ApplicationHandleException) then
      ApplicationHandleException(Self)
    else
      raise;
  end;
end;



но тогда просто надо Application.OnException подцепить и там сделать свою обработку.
...
Рейтинг: 0 / 0
21.03.2016, 13:22
    #39197083
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
X11,

авторя же написал:
if Clipboard.HasFormat(CF_TEXT) then


между проверкой и вставкой проходит время. возможно, что формат меняется за эти доли секунды

авторкакие другие?

любые, которые с текстовым клипбордом работают
...
Рейтинг: 0 / 0
21.03.2016, 13:28
    #39197091
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
makhaonмежду проверкой и вставкой проходит время. возможно, что формат меняется за эти доли секунды

нет, это исключено
я копирую в буфер обмена и программа выдаёт ошибку
я сразу же вставляю, например, в блокнот, чтобы проверить, что скопировалось и вижу, что проблем нет - вставилось в блокнот именно то, что копировал
...
Рейтинг: 0 / 0
21.03.2016, 13:36
    #39197102
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Zeliusпосмотреть что вернет GetOpenClipboardWindow после ошибки.

...
Рейтинг: 0 / 0
21.03.2016, 14:08
    #39197142
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
X11,

HWND WINAPI GetOpenClipboardWindow(void); - посмотреть что за хендл она вернет (можно и до и после вызова) и по нему поискать кому принадлежит окно через Spy++
...
Рейтинг: 0 / 0
21.03.2016, 18:43
    #39197429
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Может, с юникодом какие грабли?

Попробуй допилить эту функцию

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
function GetClipboardString: WideString;
var
  LClip: TClipboard;
  LMem: THandle;
  LPtr: Pointer;
begin
  LClip := Clipboard;
  LClip.Open;
  try
    if not LClip.HasFormat(CF_UNICODETEXT) then
      Result := LClip.AsText
    else begin
      LMem := LClip.GetAsHandle(CF_UNICODETEXT);
      LPtr := GlobalLock(LMem);
      try
        SetString(Result, PWideChar(LPtr), GlobalSize(LMem) div SizeOf(Result[1]));
      finally
        GlobalUnlock(LMem);
      end;
    end;
  finally
    LClip.Close;
  end;
end;
...
Рейтинг: 0 / 0
21.03.2016, 23:14
    #39197536
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
кто-то открыл буфер и не закрыл. ты лезешь за данными - получаешь отлуп

Michael LongneckНо честно говоря не нашёл я в этом модуле MessageBoxхех, надо было искать raise EClipboardException.Create. этот же тип ошибок и ловить в Application.OnException, если надо их погасить
...
Рейтинг: 0 / 0
22.03.2016, 09:05
    #39197637
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
X11,

+1 к _Vasilisk_, лочишь клипбоард и никуда он больше от тебя не денется, а если не лочится, то значит и не был твоим...
...
Рейтинг: 0 / 0
22.03.2016, 11:13
    #39197783
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
_Vasilisk_Может, с юникодом какие грабли?

Программа, откуда копируют - моя и следит ща буфером тоже моя.
обе на D2007 написаны
...
Рейтинг: 0 / 0
05.04.2016, 12:39
    #39208276
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
X11,

была недавно такая же ситуация, что-то блокировало клипбоард, сделал свой клипборад
Код: pascal
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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
type
  TClipboardExt = class(TClipboard)
  public
    procedure Open; override;
  end;

  TClipboardHelper = class helper for TClipboard
  public
    class function GetLockInfo: String;
  end;

procedure InstallExtClipboard;
begin
  SetClipboard(TClipboardExt.Create).Free;
end;

procedure TClipboardExt.Open;
var
  LockInfo: String;
begin
  try
    inherited Open;
  except
    on E: Exception do
    begin
      LockInfo := GetLockInfo;
      if LockInfo <> '' then
        E.Message := E.Message + Format( ' (locked by %s)', [LockInfo]);
      raise;
    end;
  end;
end;

class function TClipboardHelper.GetLockInfo: String;
var
  i: Integer;
  Buffer: array[0..1024] of Char;
  Wnd: HWND;
begin
  Result := '';
  Wnd := GetOpenClipboardWindow();
  if Wnd = 0 then Exit;

  Result := Format('HWND=%x', [Wnd]);

  i := GetWindowText( Wnd, Buffer, Length(Buffer));
  if i > 0 then
    Result := Result + '; Caption=' + Buffer;

  i := GetClassName( Wnd, Buffer, Length(Buffer));
  if i > 0 then
    Result := Result + '; Class=' + Buffer;

  if GetCurrentThreadId <> MainThreadID then
    Result := Result + '; ThreadID=' + IntToHex( GetCurrentThreadId, 8);
end;

initialization
  InstallExtClipboard;


в результате поймал HWND (остальная информация не помогла), через Spy++ выяснилось, что это сама дельфи (Seattle), наверное какое-то плагин... дальше копать не стал
...
Рейтинг: 0 / 0
05.04.2016, 12:44
    #39208286
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
Zeliusчерез Spy++ выяснилось, что это сама дельфи (Seattle), наверное какое-то плагин... дальше копать не стал

у пользователя нет дельфи
...
Рейтинг: 0 / 0
05.04.2016, 12:52
    #39208294
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cannot open clipboard
X11,

это все на что ты обратил внимание?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / cannot open clipboard / 25 сообщений из 52, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]