|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.10.2007, 11:57 | #1 |
Пользователь
Регистрация: 05.10.2007
Сообщений: 34
|
Как передать объект по наследству?
Моя программка почему-то не работает....
При вызове SetHandleInformation происходит ошибка, bmp:=TBitmap.Create; bmp.LoadFromFile('pic.bmp'); if not SetHandleInformation(bmp.handle, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) then MessageBox(0,PChar(SysErrorMessage( GetLastError)),'error',0); Этот код выдает ошибку "Неверный дескриптор" ... Если можно рабочий пример наследования объекта (желательно Bitmap-a) Последний раз редактировалось rpy3uH; 01.11.2007 в 13:20. |
30.10.2007, 12:10 | #2 |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
SetHandleInformation работает только с объектами ядра. Это совсем другие объекты и у них совсем другие дескрипторы, не нужно путать. Читайте Рихтера:
http://wm-help.net/books-online/book...-22.html#head3 |
30.10.2007, 14:05 | #3 |
Пользователь
Регистрация: 05.10.2007
Сообщений: 34
|
Прекрасно, а как тогда передать Bitmap ?
Не уж-то это никак не сделать? Сам по наследству не передается... |
30.10.2007, 14:11 | #4 |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
Объясните лучше что у вас за задача, чего вы хотите и зачем вообще понадобилось наследовать дескриптор битмапа? Нужно передать картинку из одного процесса в другой? Для этого есть свои способы. Варианты:
1. Дочерний процесс грузит картинку из того же файла, что и родительский 2. Процесс-источник сохраняет картинку в TMemoryStream, затем отправляет сообщение WM_COPYDATA, параметры которого содержат указатель на память, где лежит картинка. Процесс-приемник получает сообщение, и загружает картинку из памяти, указатель на которую содержится в параметрах сообщения. 3. Процесс источник и приемник явно используют общий раздел памяти (File Mapping) 4. Другие механизмы межпроцессного взаимодействия (их огромное количество, правда далеко не всех их рационально использовать в данной задаче). Последний раз редактировалось Slovinsky; 30.10.2007 в 14:34. |
01.11.2007, 16:35 | #5 |
Пользователь
Регистрация: 05.10.2007
Сообщений: 34
|
Задача немного другая. Хотя, и за эти способы спасибо.
Требуется использовать один битмап одновременно несколькими процессами. Это нужно в целях экономии памяти. Если я его буду передавать описанными способами, то никакой экономии не будет. Кстати, можно пример по 3. ? (общий раздел памяти File Mapping) Последний раз редактировалось rpy3uH; 02.11.2007 в 18:35. |
02.11.2007, 18:37 | #6 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
это самый лучший и самый быстрый способ!
|
03.11.2007, 11:19 | #7 | |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
Цитата:
ЗЫ: Есть один недокументированный способ разделения GDI-объектов, на самом деле. По крайней мере StockObjects (GetStockObject) именно так и разделяются. Но он достаточно сложный в реализации, к тому же, от одной версии системы к другой он может измениться. Возможно он уже изменился и у меня недостоверная информация. Так что воистину дон'т ворри ЗЗЫ: Если интересует, что за способ я имею в виду, достаньте где-нибудь книгу Феня Юаня про графику в Windows, там описано что представляют собой дескрипторы GDI-объектов, и как сами объекты хранятся в памяти. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как передать параметр? | Иллидан | Общие вопросы Delphi | 8 | 12.07.2008 12:57 |
Передать файл клиенту | BlackOmen | JavaScript, Ajax | 7 | 26.06.2008 11:36 |
Как передать данные из SQL в файл | _ozzy_ | БД в Delphi | 0 | 12.06.2008 16:50 |
Передать Канву | Pedro | Работа с сетью в Delphi | 7 | 28.04.2008 17:38 |
передать переменную | ar4i | Общие вопросы Delphi | 10 | 04.12.2006 14:30 |