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 приводит к разрушению картинки. Какие-то фанаты Гейзенберга это писали... |