| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > TPaintBox в TImage |
| Автор: okamor71 14.11.2006, 18:15 |
| Помогите, а то горю надо содержимое с TPaintBox скопировать в TImage |
| Автор: Alexeis 14.11.2006, 18:42 |
| image1.Canvas.CopyRect(PaintBox1.ClientRect, PaintBox1.Canvas, PaintBox1.ClientRect); |
| Автор: okamor71 14.11.2006, 18:49 | ||
| Ругается: Can only modify an image if it contains a bitmap. Добавлено @ 18:55 правда потом я этот TImage передаю в функцию
|
| Автор: Alexeis 14.11.2006, 19:03 |
Странно... я только что этот код скомпилил и проверил. Все работает как часы. okamor71, попробуй на чистом проекте, я думаю проблема на другом участке кода. |
| Автор: okamor71 14.11.2006, 19:09 | ||||
alexeis1, функция у меня в dll-ке, конекчусь к ней
после чего вызываю
|
| Автор: Alexeis 14.11.2006, 20:34 |
А ну тогда ясно. С дллкой уже были подобные проблемы. Возможно теряется графический дескриптор. Советую после передачи имаги вызвать. Image1.Invalidate(); а затем application.processmessages(); Первая функция укажет, что текущее изображение не действительно и требует перерисовки, а вторая заставит принудительно обработать все сообщения, в том числе и сообщение о перерисовке, и соответственно должен будет получен новый графический дескриптор. |
| Автор: okamor71 14.11.2006, 20:35 |
| alexeis1, весь прикол состоит в том что если использовать ее через библиотеку то кроем матом, а если в модуле то все нормально, и где копать немогу понять, в библиотеке только одна эта функция Добавлено @ 20:46 alexeis1, не рабатает |
| Автор: Alexeis 14.11.2006, 23:16 | ||||
| Из-за каких-то проблем с RTI, неправильно функционируют объекты VCL, но есть возможность передавать хендл виндового объекта например так. Вот так выглядит проект
Видно что параметр bmp : hBitmap А вот так выглядит дллка
Т.е. делфячий объект пересоздаем, но виндовый только устанавливаем. tmp.Handle := bmp; |
| Автор: Alexeis 15.11.2006, 11:29 |
| После внимательного изучения вопроса, а пришел к выводу, о том, что данная проблема относится скорее к области системного программирования, а потому, для решения данного вопроса создана тема в разделе Delphi: WinAPI и системное программирование http://forum.vingrad.ru/index.php?act=ST&f=85&t=121685&unread=1 |
| Автор: Snowy 15.11.2006, 12:48 |
| Нужно в dll передавать не TImage, а HDC. И уже на него делать BitBlt. Добавлено @ 12:49 HDC брать в Image1.Picture.Bitmap.Canvas.Handle |