Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как проверить?


Автор: Olegan 24.6.2010, 11:04
Привет!

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

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

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

if Clipboard.Clear then


но увы...  smile 

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

Автор: Rennigth 24.6.2010, 11:20
Olegan, посмотри в сторону http://msdn.microsoft.com/en-us/library/ms649039%28v=VS.85%29.aspx.

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

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

Автор: Keeper89 24.6.2010, 23:06
Можно так:
Код

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

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

Автор: Rennigth 25.6.2010, 09:43
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 

Автор: Rennigth 25.6.2010, 10:04
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;


Автор: Olegan 25.6.2010, 10:31
Вот, теперь все на своих местах!  smile 

Rennigth, Keeper89, спасибо!  smile 

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

Так ведь CountClipboardFormats выдает список форматов, которые сейчас в буфере. Или я не понял http://msdn.microsoft.com/en-us/library/ms649036%28VS.85%29.aspx?
Странно, что у меня оно тогда работало, пробовал очищать буфер и копировать в него информацию...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)