Clipboard

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

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

Ответить
dvpt
новенький
Сообщения: 38
Зарегистрирован: 18.03.2009 10:46:04

Clipboard

Сообщение dvpt »

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

Команда работает:

Код: Выделить всё

   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 10:46:04

Сообщение dvpt »

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

Код: Выделить всё

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


С форматом например CF_BITMAP не работает.
Из буфера обмена в поток копирует, а из потока в буфер обмена не копирует.
Очищает буфер!?
Подскажите кто работал с буфером обмена, в чем причина?
Ответить