Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi. Копирование изображения в буфер обмена.

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Чёт туплю, наверное, не надо писать код утром в воскресенье...
Может подскажет кто, где грабли...
 
Хочу скопировать изображение в буфер обмена.
Embarcadero пишет:

Код:
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FormImage: TBitmap;
begin
  FormImage := GetFormImage;
  try
    Clipboard.Assign(FormImage);
    Image1.Picture.Assign(Clipboard);
  finally
    FormImage.Free;
  end;
end;
 

 
Заглядываю в Assign.
Помимо TBitmap, процедура на вход готова принимать и TPicture, и TGraphic
 
Пишу:

Код:
 
Image : TImage;
...
   Clipboard.Assign(Image.Picture);
 

Ошибок нет. Но скопированное изображение в Word не вставляется.
При попытке вставить в Paint.net:
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
 
Т.е. я какую-то пустую ссылку в буфер отдал ? Что-то ещё нужно сделать при копировании ?
 
попытки:

Код:
 
  ...
  Clipboard.Assign(Image.Picture.Bitmap); // Как показывает Embarcadero
  ...
  Clipboard.Assign(Image.Picture.Graphics); // Ну а вдруг...
  ...
  Clipboard.Open; // Получить эксклюзивный доступ к буферу
  Clipboard.Assign(Image.Picture);
  Clipboard.Close;
 

ничего не дают, результат тот же...
 
Ну ведь рядом же хожу, где-то тут же решение...
 

Код:
 
Image.Picture.SaveToFile('c:\tmp\1.jpg');  
 

работает отлично, всё сохраняется и воспроизводится, так что содержимое Image не разрушено.
 
 
 
Добавлено:

 
Предположение про влияние утра оказалось верным.
Сказки про нерабочий Assign - поклёп на светлое имя Эмбаркадеры...
Причина проблем - попытка извлечь значение  
Image.Picture.Bitmap.Handle  
перед отправкой изображения в буфер. Вот просто из любопытства, а какое оно...
 
Но
Код:
 
...
property Handle: HBITMAP read GetHandle write SetHandle;
...
function TBitmap.GetHandle: HBITMAP;
begin
  FreeContext; //
  HandleNeeded;
  Changing(Self);
  Result := FImage.FHandle;
end;
 

Попытка извлечь Handle приводит к разрушению картинки. Какие-то фанаты Гейзенберга это писали...

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 07:27 11-10-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi. Копирование изображения в буфер обмена.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru