Картинку в Буфер обмена
Модератор: Модераторы
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
Картинку в Буфер обмена
В Delphi программе без проблем можно было поместить картинку в буфер Clipboard.Assign(Image1.Picture);
Если сделать это с помощью Lazarus, то например при вставке в любой графический редактор - ошибка!
Как с этим бороться?. Нужно все-таки поместить картинку в буфер.
Если сделать это с помощью Lazarus, то например при вставке в любой графический редактор - ошибка!
Как с этим бороться?. Нужно все-таки поместить картинку в буфер.
EmeraldMan писал(а):В Delphi программе без проблем можно было поместить картинку в буфер Clipboard.Assign(Image1.Picture);
Все верно, эта же функция используется и в Lazarus! Единственное, что нужно добавить в uses - модуль ClipBrd.... И все будет работать!
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
Andreich писал(а):EmeraldMan писал(а):В Delphi программе без проблем можно было поместить картинку в буфер Clipboard.Assign(Image1.Picture);
Все верно, эта же функция используется и в Lazarus! Единственное, что нужно добавить в uses - модуль ClipBrd.... И все будет работать!
Без ClipBrd программа впринципе не скомпилируется. Этот модуль я подключал. Попробуй с помощью Clipboard.Assign(Image1.Picture); поместить картинку в буфер, а потом вставить например в пэинте, картинка не вставится (пэинт не сможет её распознать).
Ну или так Clipboard.Assign(Image1.Picture);
Image2.Picture.Assign(ClipBoard); - тоже ниче не получится когда запустишь прогу.
В то время если сделать тоже самое в делфи всё будет отлично!
Т.е. получается картинка как бы копируется в буфер, но потом ничто не может её распознать.
Как обойти эту проблему?
Расположем на форме один Image1 и одну Button1. По нажатии на кнопку вставляем содержимое буфера в Image1.
В любом редакторе (например: "KolourPaint") выделяем область рисунка, нажимаем в нашем приложении кнопку и... Все отличненько вставляется!
Код: Выделить всё
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") выделяем область рисунка, нажимаем в нашем приложении кнопку и... Все отличненько вставляется!
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
Мне наоборот надо!
Я создал в своей программе картинку и её нужно скопировать в буфер, а потом вставить в графический редактор.
Clipboard.Assign(Image1.Picture); - вот это работает не корректно (редакторы не могут распознать картинку скопированную таким образом)
Я создал в своей программе картинку и её нужно скопировать в буфер, а потом вставить в графический редактор.
Clipboard.Assign(Image1.Picture); - вот это работает не корректно (редакторы не могут распознать картинку скопированную таким образом)
Тогда Clipboard.Assign(Image1.Picture.Bitmap);EmeraldMan писал(а):Мне наоборот надо!
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
VirtUX писал(а):Тогда Clipboard.Assign(Image1.Picture.Bitmap);EmeraldMan писал(а):Мне наоборот надо!
ты меня не понимаешь...
ещё раз повторю:
Нужно скопировать картинку из Image1 и вставить её например в Paint.
Подключаю ClipBrd, прописываю в обработчике Clipboard.Assign(Image1.Picture); или Clipboard.Assign(Image1.Picture.Bitmap);
Компилирую (пока все отлично).
Запускаю программу, нажимаю на кнопку (все отлично).
А вот когда нажимаю "Вставить" в графическом редакторе он или ругается что распознать не может или вообще ничего не происходит (GIMP).
При том что все проделанное в Delphi дает хороший результат (картинка вставляется).
Как можно скопировать картинку в буфер Lazarus'ом, чтобы потом без проблем её вставить в редактор?
Попробуйте пожалуйста у себя. Это только у меня так или у всех?
Нормально работает вызов
Вставлял в gimp.
Linux MOPS 6.0
Lazarus svn rev: 15607
Fpc 2.2.0
Gimp 2.2.17
Код: Выделить всё
Clipboard.Assign(Image1.Picture);Вставлял в gimp.
Linux MOPS 6.0
Lazarus svn rev: 15607
Fpc 2.2.0
Gimp 2.2.17
У меня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, при вставить пишет, что в буфере ничего нет
Перепроверил на Lazarus 0.9.27, FPC 2.2.2, kolourpaint 1.4.7 - работает.
У меня срабатывает только
Вставляет один пиксель.
У меня срабатывает только
Код: Выделить всё
Clipboard.Assign(Image1.Picture);Код: Выделить всё
Clipboard.Assign(Image1.Picture.Bitmap);Вставляет один пиксель.
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
А у меня вот ни то, ни то не работает... Проверял на GIMP, Paint.NET, WORD.
Это не в редакторах косяк, глюк где-то в коде...
Это не в редакторах косяк, глюк где-то в коде...
Я тут подумал - возможно не вставляется, так как формат картинки не тот. Я проверял на png.
Возможно стоит выложить картинку, дабы её проверить?
Возможно стоит выложить картинку, дабы её проверить?
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
Подскажите, а как скопировать ссылку на файл в буфер?
т.е. вот CopyFile - копирует файл в конкретное место, а мне нужно действие которое аналогично (ctrl+c на файле), чтобы потом в любом месте можно было взять и вставить его.
т.е. вот CopyFile - копирует файл в конкретное место, а мне нужно действие которое аналогично (ctrl+c на файле), чтобы потом в любом месте можно было взять и вставить его.
Ммм, на винде это какой-то заголовок+полный путь к файлу. На лине не в курсе.
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
B4rr4cuda писал(а):Ммм, на винде это какой-то заголовок+полный путь к файлу. На лине не в курсе.
Что-то вроде этого...
Например: когда нажимаем копировать на файлике BMP затем нажимаем вставить в ворд, то вставляется картинка.
Но если я помещу путь к файлу в буфер (Clipboard.AsText), а затем вставлю в ворд, то вставится просто текст.
Дело в том, что помимо данных в буфере хранится тип данных. Так вот, как буферу указать что там хранится ссылка на файл, а не текст?
