Форум программистов, компьютерный форум, киберфорум
Delphi: FireMonkey
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
15 / 15 / 14
Регистрация: 10.06.2015
Сообщений: 165
1

Скопировать картинку в Clipboard

29.09.2015, 19:28. Показов 4232. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Хочу в буфер скопировать картинку следующим кодом:

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm2.Button72Click(Sender: TObject);
Var
  Clipboard: IFMXClipboardService;
  value: TValue;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(Clipboard)) then
  begin
     value := form2.Image1.Bitmap;
     Clipboard.SetClipboard(Value);
 end;
end;

Если присвоить value := текст, то проблем нет, а с картинкой пока не получается. Есть идеи?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2015, 19:28
Ответы с готовыми решениями:

Аналоги Clipbrd \ Clipboard
Есть такой модуль как clipboard. При его подключении к программе она прибавляет веса сутьли не...

Как копировать часть Image в clipboard?
Как скопировать прямоугольную часть Image в clipboard? Если что не пинайте, я чайник :)

Как из TstringGrid скопировать содержимое в clipboard?
Начинаю осваивать TstringGrid. Програмно занёс туда значения. Хотел выделить и скопировать...

Класс Clipboard - ошибка «Requested Clipboard operation did not succeed»
Пытаюсь скопировать текст программно таким образом: Clipboard.SetText("something") Вместо...

9
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
29.09.2015, 19:39 2
Delphi
1
Value := TValue.From(Image1.Bitmap);
0
15 / 15 / 14
Регистрация: 10.06.2015
Сообщений: 165
29.09.2015, 19:58  [ТС] 3
Попробовал
Delphi
1
Value := TValue.From(Image1.Bitmap);
Правильно ли понимаю, что после выполнения процедуры, открываю paint или ms word, нажимаю ctrl+v и там должна появиться картинка?
Просто с текстом в ворде, все появляется, а с картинкой нихт.
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
29.09.2015, 20:15 4
У меня появляется.

Добавлено через 12 минут
Проверял так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
var
  Clipboard: IFMXClipboardService; //FMX.Platform
  Value: TValue; //System.Rtti
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, Clipboard) then
  begin
    Value := TValue.From(Image1.Bitmap);
    Clipboard.SetClipboard(Value);
 
    Value := Clipboard.GetClipboard;
    Image2.Bitmap.Assign(TBitmap(Value.AsObject));
  end;
end;
В Паинт тоже вставляется.
1
15 / 15 / 14
Регистрация: 10.06.2015
Сообщений: 165
30.09.2015, 03:20  [ТС] 5
Пока получается так:
Скопировать картинку в Clipboard
(это из-за ассайна).
Из буфера с ctrl+v картинка не вставляется, может, из-за прозрачности фона, завтра буду ковыряться. (Delphi XE7). Все равно спасибо.
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
30.09.2015, 11:33 6
У тебя какой формат рисунка?
Я с jpg пробовал.

Добавлено через 53 минуты
Еще можно посмотреть какой тип данных в буфере:
Delphi
1
ShowMessage(System.TypInfo.GetTypeName(Value.TypeInfo)); //System.TypInfo
0
15 / 15 / 14
Регистрация: 10.06.2015
Сообщений: 165
30.09.2015, 14:17  [ТС] 7
Пробовал: png, jpeg, tiff результат такой же.
Delphi
1
ShowMessage(System.TypInfo.GetTypeName(Value.TypeInfo)); //System.TypInfo
Показывает:Tbitmapofitem
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
30.09.2015, 18:34 8
Цитата Сообщение от Tot999 Посмотреть сообщение
Показывает:Tbitmapofitem
Странно, у меня на Win7 такого нет.
Похожая фигня возникает при компиляции под андроид.
Там вместо объекта в буфере оказывается некая строка вида: (Tbitmapofitem @ B434B634).
Как через нее получить сам объект я не знаю.

Добавлено через 19 минут
Вообще TBitmapOfItem - это наследник от битмапа, поэтому можно попробовать:
Delphi
1
Image2.Bitmap.Assign(TBitmapOfItem(Value.AsObject));
Добавлено через 23 секунды
У меня и такой вариант работает.

Добавлено через 55 секунд
(Кстати, использую Delphi XE10)
0
15 / 15 / 14
Регистрация: 10.06.2015
Сообщений: 165
01.10.2015, 10:07  [ТС] 9
При нижеописанном коде, получаю сообщение Tbitmap, что уже радует, но картинка упорно не вставляется на ctrl+v, вернее вставляется текст, который был в буфере до этого (в мс ворд), пэйнт молчит.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm2.Button72Click(Sender: TObject);
var
  Clipboard: IFMXClipboardService; //FMX.Platform
  Value: TValue; //System.Rtti
  BMP: TBitmap;
begin
  BMP := TBitmap.Create(round(ImageRecepta.Width), round(ImageRecepta.Height));
  try
    BMP.Canvas.BeginScene();
    FramedScrollBoxRec.PaintTo(BMP.Canvas, ImageRecepta.ClipRect);
    BMP.Canvas.EndScene;
    if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, Clipboard) then
       begin
        Value := TValue.From(BMP);
        Clipboard.SetClipboard(BMP);
       end;
     finally
   //BMP.Free;
  end;
ShowMessage(System.TypInfo.GetTypeName(Value.TypeInfo));
end;
Delphi
1
Image2.Bitmap.Assign(TBitmapOfItem(Value.AsObject));
ругается на TBitmapOfItem, хотя FMX.Objects в uses присутствует.
На выходных попробую десятку, хотя "чета славик я очкую"
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
01.10.2015, 11:11 10
Для TBitmapOfItem надо подключить FMX.MultiResBitmap.

Цитата Сообщение от Tot999 Посмотреть сообщение
"чета славик я очкую"
Хуже точно не будет)
0
01.10.2015, 11:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2015, 11:11
Помогаю со студенческими работами здесь

Ошибка при работе с Clipboard: "Сannot open clipboard. Отказано в доступе."
Хотел написать программу для автоматической замены текста в буфере обмена, но при обращении к...

Программно скопировать картинку
Не могу понять, как скопировать на clipboard (чтобы потом вставить, допустим, в фотошоп) картинку...

Скопировать картинку с сайта
здравствуйте, подскажите как скопировать картинку с сайта. При нажатии правой кнопки мыши ничего не...

Скопировать картинку с PaintBox в Image
Помогите, пожалуйста. Нужно скопировать картинку с PaintBox в Image. C помощью CopyRect не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru