Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проверить? Пустой буфер обмена или нет? 
V
    Опции темы
Olegan
  Дата 24.6.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крутой сисадмин
**


Профиль
Группа: Завсегдатай
Сообщений: 752
Регистрация: 15.5.2007

Репутация: нет
Всего: 105



Привет!

Если буфер обмена пуст то, ShowMessage('Буфер пуст') если нет то,  тогда я проверяю что там (CF_TEXT, CF_BITMAP, CF_HDROP и т.д.) и выдаю соответствующие сообщения.

Вот как проверить пустой буфер или нет?

Руки так и чешутся написать smile :
Код

if Clipboard.Clear then


но увы...  smile 

Спасибо за помощь!  smile 


--------------------
Цитата(Mayk @  18.6.2008,  14:29 Найти цитируемый пост)
/me объявляет Olegan врагом народа

Цитата(gta4kv @  20.6.2008,  22:01 Найти цитируемый пост)
/me объявляет Olegan врагом народа во второй раз

Цитата(localhost @  15.6.2009,  08:45 Найти цитируемый пост)
/me объявляет Olegan врагом народа в третий раз
PM MAIL   Вверх
Rennigth
Дата 24.6.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Olegan, посмотри в сторону GetClipBoardData.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Olegan
Дата 24.6.2010, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крутой сисадмин
**


Профиль
Группа: Завсегдатай
Сообщений: 752
Регистрация: 15.5.2007

Репутация: нет
Всего: 105



Цитата(Rennigth @  24.6.2010,  12:20 Найти цитируемый пост)
GetClipBoardData

Уммм...., чем-то напоминает HasFormat.
Как правильно ее применить в моем случае?  smile 


--------------------
Цитата(Mayk @  18.6.2008,  14:29 Найти цитируемый пост)
/me объявляет Olegan врагом народа

Цитата(gta4kv @  20.6.2008,  22:01 Найти цитируемый пост)
/me объявляет Olegan врагом народа во второй раз

Цитата(localhost @  15.6.2009,  08:45 Найти цитируемый пост)
/me объявляет Olegan врагом народа в третий раз
PM MAIL   Вверх
Keeper89
Дата 24.6.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Можно так:
Код

function ClipboardIsEmpty(): Boolean;
begin
  OpenClipboard(0);
  try
    Result := CountClipboardFormats() = 0;
  finally
    CloseClipboard();
  end;
end;



--------------------
PM MAIL WWW   Вверх
Olegan
  Дата 25.6.2010, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крутой сисадмин
**


Профиль
Группа: Завсегдатай
Сообщений: 752
Регистрация: 15.5.2007

Репутация: нет
Всего: 105



Keeper89, что буфер пуст, что нет, Result всегда возвращает False.
Или я туплю?  smile 


--------------------
Цитата(Mayk @  18.6.2008,  14:29 Найти цитируемый пост)
/me объявляет Olegan врагом народа

Цитата(gta4kv @  20.6.2008,  22:01 Найти цитируемый пост)
/me объявляет Olegan врагом народа во второй раз

Цитата(localhost @  15.6.2009,  08:45 Найти цитируемый пост)
/me объявляет Olegan врагом народа в третий раз
PM MAIL   Вверх
Rennigth
Дата 25.6.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Olegan
Код

function ClipboardIsEmpty: Boolean;
var
  lResEnum: Integer;
begin
  Result := True;
  if OpenClipboard(0) then
  try
    SetLastError(NO_ERROR);
    lResEnum := 0;
    repeat
      lResEnum := EnumClipboardFormats(lResEnum);
      if lResEnum <> 0 then
      begin
        Result := GetClipboardData(lResEnum) = 0;
        if not Result then
          Break;
      end;
    until (lResEnum = 0) and (GetLastError = ERROR_SUCCESS);
  finally
    CloseClipboard;
  end;
end;



Добавлено через 1 минуту и 9 секунд
Keeper89, зарегестрированно форматов может быть много, но незвестно же ечть там что-то или нет  smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rennigth
Дата 25.6.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



upd:
Код

function ClipboardIsEmpty: Boolean;
var
  lResEnum, lErrSave: Cardinal;
begin
  Result := False;
  lErrSave := GetLastError;
  try
    if OpenClipboard(0) then
    try
      SetLastError(NO_ERROR);
      lResEnum := 0;
      repeat
        lResEnum := EnumClipboardFormats(lResEnum);
        if lResEnum <> 0 then
        begin
          Result := GetClipboardData(lResEnum) = 0;
          if not Result then
            Break;
        end;
      until (lResEnum = 0) and (GetLastError = ERROR_SUCCESS);
    finally
      CloseClipboard;
    end;
  finally
    SetLastError(lErrSave);
  end;
end;




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Olegan
  Дата 25.6.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крутой сисадмин
**


Профиль
Группа: Завсегдатай
Сообщений: 752
Регистрация: 15.5.2007

Репутация: нет
Всего: 105



Вот, теперь все на своих местах!  smile 

RennigthKeeper89, спасибо!  smile 


--------------------
Цитата(Mayk @  18.6.2008,  14:29 Найти цитируемый пост)
/me объявляет Olegan врагом народа

Цитата(gta4kv @  20.6.2008,  22:01 Найти цитируемый пост)
/me объявляет Olegan врагом народа во второй раз

Цитата(localhost @  15.6.2009,  08:45 Найти цитируемый пост)
/me объявляет Olegan врагом народа в третий раз
PM MAIL   Вверх
Keeper89
Дата 25.6.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Цитата(Rennigth @  25.6.2010,  09:43 Найти цитируемый пост)
зарегестрированно форматов может быть много, но незвестно же ечть там что-то или нет

Так ведь CountClipboardFormats выдает список форматов, которые сейчас в буфере. Или я не понял описание?
Странно, что у меня оно тогда работало, пробовал очищать буфер и копировать в него информацию...


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0787 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.