Скриншот контрола?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Бывалый
- Сообщения: 56
- Зарегистрирован: 14 Январь 2006, 13:44
- Откуда: Ярославль
- Контактная информация:
Скриншот контрола?
Здравствуйте, у меня есть OLE Control и мне нушно поместить его изображение в буфер или сохранить на диск. Как это сделать?
- StillZero
- Ветеран
- Сообщения: 458
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Поблагодарили: 1 раз
- Контактная информация:
до конца не знаю ... начать можно так (это все API):
- узнать контекст окна, на котором находится контрол - GetDC(), GetWindowDC()
- создать compatible DC - CreateCompatibleDC
- создать битмап CreateCompatibleBitmap
- выбрать битмап SelectObject(CompatibleDC,CopmatibleBitmap)
- скопировать текущий DC в память BitBlt(текущий DC, ..., compatible DC,...,SRC_COPY)
в этот момент у тебя будет скриншот в памяти, скриншот будет "расположен" на битмапе, хэндл которого тебе известен, осталось сохранить на диск
вроде так, надо только потом все освободить ReleaseDC, DeleteDC, DeleteObject и вернуть на место предыдущий bitmap SelectObject(старый битмап), ну и с координатами может возня получиться небольшая
вроде был пример на clarionlife.net как делать скриншоты
- узнать контекст окна, на котором находится контрол - GetDC(), GetWindowDC()
- создать compatible DC - CreateCompatibleDC
- создать битмап CreateCompatibleBitmap
- выбрать битмап SelectObject(CompatibleDC,CopmatibleBitmap)
- скопировать текущий DC в память BitBlt(текущий DC, ..., compatible DC,...,SRC_COPY)
в этот момент у тебя будет скриншот в памяти, скриншот будет "расположен" на битмапе, хэндл которого тебе известен, осталось сохранить на диск
вроде так, надо только потом все освободить ReleaseDC, DeleteDC, DeleteObject и вернуть на место предыдущий bitmap SelectObject(старый битмап), ну и с координатами может возня получиться небольшая
вроде был пример на clarionlife.net как делать скриншоты
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
ImageEx от http://www.solidsoftware.de все это умеет делать на ура!
Если у Вас нет такого - запрос в приват ...
Если у Вас нет такого - запрос в приват ...
-
- Бывалый
- Сообщения: 56
- Зарегистрирован: 14 Январь 2006, 13:44
- Откуда: Ярославль
- Контактная информация:
Я сделал так...начать можно так (это все API):
- узнать контекст окна, на котором находится контрол - GetDC(), GetWindowDC()
- создать compatible DC - CreateCompatibleDC
- создать битмап CreateCompatibleBitmap
- выбрать битмап SelectObject(CompatibleDC,CopmatibleBitmap)
- скопировать текущий DC в память BitBlt(текущий DC, ..., compatible DC,...,SRC_COPY)
Код: Выделить всё
OLE_hdc=CreateDC(disp)
OLEComp_hdc=CreateCompatibleDC(OLE_hdc)
GetWindowRect(?OLE1{Prop:Handle},address(Rect)) ! координаты control'а
BitMAP_h=CreateCompatibleBitmap(OLE_hdc, Rect._Right - Rect._Left, Rect._Bottom - Rect._Top)
SelectObject(OLEComp_hdc,BitMAP_h)
BitBlt(OLEComp_hdc,0,0,Rect._Right - Rect._Left,Rect._Bottom - Rect._Top,OLE_hdc,Rect._Left,Rect._Top,SRCCOPY)
OpenClipBoard(Window{prop:handle})
SetClipboardData('CF_BITMAP',BitMAP_h)
CloseClipboard()[

может я прототипы не правильно описал:
Код: Выделить всё
!эти взял из примера Андрея Мялина
CreateDC(*CSTRING, ULONG=0 , ULONG=0 ,ULONG=0 ),UNSIGNED,PASCAL,RAW,NAME('CreateDCA')
CreateCompatibleDC(UNSIGNED),UNSIGNED,PASCAL
CreateCompatibleBitmap(UNSIGNED, SIGNED, SIGNED),UNSIGNED,PASCAL
SelectObject(UNSIGNED, UNSIGNED),UNSIGNED,PASCAL
BitBlt(UNSIGNED, SIGNED, SIGNED, SIGNED, SIGNED, UNSIGNED, SIGNED, SIGNED, ULONG),BOOL,PASCAL
!эти сам писал, видимо здесь и напортачил....
GetWindowRect(ULONG hWnd,LONG lpRect),BOOL,PASCAL
OpenClipboard(ULONG hWnd),BOOL,PASCAL
SetClipboardData(SIGNED, UNSIGNED),UNSIGNED,PASCAL
CloseClipboard(),BOOL,PASCAL
Очень симпотичный компонент... объясните пожалуйста как его заполучить... я здесь новичокImageEx от http://www.solidsoftware.de все это умеет делать на ура!
Если у Вас нет такого - запрос в приват ...
Я уже видел этот пример, но не сразу разобрался...Вот пример от Андрея Мялина ...
Все просто как двери
-
- Бывалый
- Сообщения: 56
- Зарегистрирован: 14 Январь 2006, 13:44
- Откуда: Ярославль
- Контактная информация:
Я бы с удовольствием... только, при входе в приват мне пишут: "Извините, только пользователи со специальными правами доступа могут читать сообщения в этом форуме".Admin писал(а): Зайти в приват и создать тему с запросом данной бибилотеки. Может быть у кого есть и народ зальет ...
Если так попробовать:
http://forum.clarionlife.net/posting.ph ... topic&f=15 - то же самое... то есть сообщения я так понимаю мне статус не позволяет создавать.