Clipboard

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Clipboard

Сообщение dvpt » 08.11.2009 17:39:35

Заморочка с буфером обмена.

Команда работает:
Код: Выделить всё
   Clipboard.Assign(Image2.Picture);


Команда не работает?
Код: Выделить всё
   Image1.Picture.Assign(Clipboard);


Пробовал в компиляторе 2.2.4 и в 2.5.1

выдает ошибку в graphics.inc
Код: Выделить всё
procedure TGraphic.LoadFromMimeStream(AStream: TStream; const AMimeType: string);
var
  DefMimeType: String;
begin
  DefMimeType := MimeType;
  if (DefMimeType <> '') and (AMimeType = DefMimeType) then
    LoadFromStream(AStream)
  else
    raise EInvalidGraphic.Create(ClassName+': Unsupported MimeType: ' + AMimeType);
end;


Добавлено спустя 13 часов 54 минуты 42 секунды:
В общем пришлось пойти сложным путем:

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TMemoryStream;
  fmt : Word;
//  b : Byte;
begin
  Stream := TMemoryStream.Create;
  try
    fmt := Clipboard.Formats[0];
    case fmt of
    8 : fmt := 2;
    49161 : fmt := 2;
    end;
    Clipboard.GetFormat(fmt,Stream);
//    Stream.Position := 0;
//    Stream.Read(b,1);
//    Memo1.Text := IntToStr(fmt)+'|'+IntToStr(Stream.GetSize)+'|'+IntToStr(b);
    Stream.Position := 0;
    if Clipboard.HasFormat(CF_Text) then
      Memo1.Lines.LoadFromStream(Stream)
    else
    if Clipboard.HasFormat(CF_Bitmap) then
      Image1.Picture.Bitmap.LoadFromStream(Stream)
    else
    if Clipboard.HasFormat(CF_Picture) then
      Image1.Picture.Bitmap.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;


По крайне мере этот код работает.
dvpt
новенький
 
Сообщения: 38
Зарегистрирован: 18.03.2009 11:46:04

Re: Clipboard

Сообщение dvpt » 25.11.2009 07:00:16

Код хорошо работает только с форматом буфера обмена CF_TEXT

Код: Выделить всё
  Stream := TMemoryStream.Create;
  try
    fmt := Clipboard.Formats[0];
    Clipboard.GetFormat(fmt,Stream);//копируем из буфера обмена в поток
//
//
    Clipboard.SetFormat(fmt,Stream);//копируем из потока в буфер обмена
  finally
    Stream.Free;
  end;


С форматом например CF_BITMAP не работает.
Из буфера обмена в поток копирует, а из потока в буфер обмена не копирует.
Очищает буфер!?
Подскажите кто работал с буфером обмена, в чем причина?
dvpt
новенький
 
Сообщения: 38
Зарегистрирован: 18.03.2009 11:46:04


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

Рейтинг@Mail.ru