Картинку в Буфер обмена

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

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

Картинку в Буфер обмена

Сообщение EmeraldMan » 20.10.2008 19:04:49

В Delphi программе без проблем можно было поместить картинку в буфер Clipboard.Assign(Image1.Picture);
Если сделать это с помощью Lazarus, то например при вставке в любой графический редактор - ошибка!
Как с этим бороться?. Нужно все-таки поместить картинку в буфер.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Картинку в Буфер обмена

Сообщение Andreich » 21.10.2008 10:50:21

EmeraldMan писал(а):В Delphi программе без проблем можно было поместить картинку в буфер Clipboard.Assign(Image1.Picture);

Все верно, эта же функция используется и в Lazarus! Единственное, что нужно добавить в uses - модуль ClipBrd.... И все будет работать!
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Картинку в Буфер обмена

Сообщение EmeraldMan » 21.10.2008 13:04:29

Andreich писал(а):
EmeraldMan писал(а):В Delphi программе без проблем можно было поместить картинку в буфер Clipboard.Assign(Image1.Picture);

Все верно, эта же функция используется и в Lazarus! Единственное, что нужно добавить в uses - модуль ClipBrd.... И все будет работать!


Без ClipBrd программа впринципе не скомпилируется. Этот модуль я подключал. Попробуй с помощью Clipboard.Assign(Image1.Picture); поместить картинку в буфер, а потом вставить например в пэинте, картинка не вставится (пэинт не сможет её распознать).
Ну или так Clipboard.Assign(Image1.Picture);
Image2.Picture.Assign(ClipBoard); - тоже ниче не получится когда запустишь прогу.

В то время если сделать тоже самое в делфи всё будет отлично!

Т.е. получается картинка как бы копируется в буфер, но потом ничто не может её распознать.
Как обойти эту проблему?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Картинку в Буфер обмена

Сообщение VirtUX » 21.10.2008 13:23:07

Расположем на форме один Image1 и одну Button1. По нажатии на кнопку вставляем содержимое буфера в Image1.
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, StdCtrls, Clipbrd;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.Assign(Clipboard);
end;

initialization
  {$I unit1.lrs}

end.

В любом редакторе (например: "KolourPaint") выделяем область рисунка, нажимаем в нашем приложении кнопку и... Все отличненько вставляется!
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Картинку в Буфер обмена

Сообщение EmeraldMan » 21.10.2008 14:23:58

Мне наоборот надо!
Я создал в своей программе картинку и её нужно скопировать в буфер, а потом вставить в графический редактор.
Clipboard.Assign(Image1.Picture); - вот это работает не корректно (редакторы не могут распознать картинку скопированную таким образом)
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Картинку в Буфер обмена

Сообщение VirtUX » 21.10.2008 15:03:23

EmeraldMan писал(а):Мне наоборот надо!
Тогда Clipboard.Assign(Image1.Picture.Bitmap);
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Картинку в Буфер обмена

Сообщение EmeraldMan » 21.10.2008 20:13:49

VirtUX писал(а):
EmeraldMan писал(а):Мне наоборот надо!
Тогда Clipboard.Assign(Image1.Picture.Bitmap);


ты меня не понимаешь...
ещё раз повторю:
Нужно скопировать картинку из Image1 и вставить её например в Paint.
Подключаю ClipBrd, прописываю в обработчике Clipboard.Assign(Image1.Picture); или Clipboard.Assign(Image1.Picture.Bitmap);
Компилирую (пока все отлично).
Запускаю программу, нажимаю на кнопку (все отлично).
А вот когда нажимаю "Вставить" в графическом редакторе он или ругается что распознать не может или вообще ничего не происходит (GIMP).
При том что все проделанное в Delphi дает хороший результат (картинка вставляется).
Как можно скопировать картинку в буфер Lazarus'ом, чтобы потом без проблем её вставить в редактор?

Попробуйте пожалуйста у себя. Это только у меня так или у всех?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Картинку в Буфер обмена

Сообщение B4rr4cuda » 22.10.2008 00:38:06

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

Вставлял в gimp.
Linux MOPS 6.0
Lazarus svn rev: 15607
Fpc 2.2.0
Gimp 2.2.17
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Картинку в Буфер обмена

Сообщение VirtUX » 22.10.2008 09:34:38

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

Вставлял в gimp.
Linux MOPS 6.0
Lazarus svn rev: 15607
Fpc 2.2.0
Gimp 2.2.17
У меня
Код: Выделить всё
Clipboard.Assign(Image1.Picture);
не сработало (выдал ошибку), а вот
Код: Выделить всё
Clipboard.Assign(Image1.Picture.Bitmap);
вставляет отлично без ошибок.
Mandriva Linux 2009.0
Lazarus 0.9.26
fpc 2.2.2
KolourPaint 4.1.2
--------------------
GIMP 2.4.7, при вставить пишет, что в буфере ничего нет :( Из других приложений тоже GIMP ничего не вставляет! Может это глюк самого GIMP?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Картинку в Буфер обмена

Сообщение B4rr4cuda » 22.10.2008 18:02:14

Перепроверил на Lazarus 0.9.27, FPC 2.2.2, kolourpaint 1.4.7 - работает.
У меня срабатывает только
Код: Выделить всё
Clipboard.Assign(Image1.Picture);


Код: Выделить всё
Clipboard.Assign(Image1.Picture.Bitmap);

Вставляет один пиксель.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Картинку в Буфер обмена

Сообщение EmeraldMan » 22.10.2008 21:30:37

А у меня вот ни то, ни то не работает... Проверял на GIMP, Paint.NET, WORD.
Это не в редакторах косяк, глюк где-то в коде...
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Картинку в Буфер обмена

Сообщение B4rr4cuda » 22.10.2008 22:15:34

Я тут подумал - возможно не вставляется, так как формат картинки не тот. Я проверял на png.
Возможно стоит выложить картинку, дабы её проверить?
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Картинку в Буфер обмена

Сообщение EmeraldMan » 25.10.2008 22:01:35

Подскажите, а как скопировать ссылку на файл в буфер?
т.е. вот CopyFile - копирует файл в конкретное место, а мне нужно действие которое аналогично (ctrl+c на файле), чтобы потом в любом месте можно было взять и вставить его.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Картинку в Буфер обмена

Сообщение B4rr4cuda » 26.10.2008 04:49:05

Ммм, на винде это какой-то заголовок+полный путь к файлу. На лине не в курсе.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Картинку в Буфер обмена

Сообщение EmeraldMan » 26.10.2008 13:33:33

B4rr4cuda писал(а):Ммм, на винде это какой-то заголовок+полный путь к файлу. На лине не в курсе.


Что-то вроде этого...
Например: когда нажимаем копировать на файлике BMP затем нажимаем вставить в ворд, то вставляется картинка.
Но если я помещу путь к файлу в буфер (Clipboard.AsText), а затем вставлю в ворд, то вставится просто текст.
Дело в том, что помимо данных в буфере хранится тип данных. Так вот, как буферу указать что там хранится ссылка на файл, а не текст?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1

Рейтинг@Mail.ru