Скриншот контрола?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
iBAH
Бывалый
Сообщения: 56
Зарегистрирован: 14 Январь 2006, 13:44
Откуда: Ярославль
Контактная информация:

Скриншот контрола?

Сообщение iBAH »

Здравствуйте, у меня есть OLE Control и мне нушно поместить его изображение в буфер или сохранить на диск. Как это сделать?
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Сообщение StillZero »

до конца не знаю ... начать можно так (это все API):
- узнать контекст окна, на котором находится контрол - GetDC(), GetWindowDC()
- создать compatible DC - CreateCompatibleDC
- создать битмап CreateCompatibleBitmap
- выбрать битмап SelectObject(CompatibleDC,CopmatibleBitmap)
- скопировать текущий DC в память BitBlt(текущий DC, ..., compatible DC,...,SRC_COPY)

в этот момент у тебя будет скриншот в памяти, скриншот будет "расположен" на битмапе, хэндл которого тебе известен, осталось сохранить на диск

вроде так, надо только потом все освободить ReleaseDC, DeleteDC, DeleteObject и вернуть на место предыдущий bitmap SelectObject(старый битмап), ну и с координатами может возня получиться небольшая

вроде был пример на clarionlife.net как делать скриншоты
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Сообщение StillZero »

почитал я как сохранить bmp-файл ... гемора дай бог :)
удачи :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

ImageEx от http://www.solidsoftware.de все это умеет делать на ура!
Если у Вас нет такого - запрос в приват ...
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Вот пример от Андрея Мялина ...
Все просто как двери :)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Admin писал(а):Вот пример от Андрея Мялина ...
Все просто как двери :)
попал в десятку, пример показывает как по PROP:Handle контрола/окна залить его как картинку в файл ;)
iBAH
Бывалый
Сообщения: 56
Зарегистрирован: 14 Январь 2006, 13:44
Откуда: Ярославль
Контактная информация:

Сообщение iBAH »

начать можно так (это все 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 все это умеет делать на ура!
Если у Вас нет такого - запрос в приват ...
Очень симпотичный компонент... объясните пожалуйста как его заполучить... я здесь новичок
Вот пример от Андрея Мялина ...
Все просто как двери
Я уже видел этот пример, но не сразу разобрался...
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Очень симпотичный компонент... объясните пожалуйста как его заполучить... я здесь новичок
Зайти в приват и создать тему с запросом данной бибилотеки. Может быть у кого есть и народ зальет ...
iBAH
Бывалый
Сообщения: 56
Зарегистрирован: 14 Январь 2006, 13:44
Откуда: Ярославль
Контактная информация:

Сообщение iBAH »

Admin писал(а): Зайти в приват и создать тему с запросом данной бибилотеки. Может быть у кого есть и народ зальет ...
Я бы с удовольствием... только, при входе в приват мне пишут: "Извините, только пользователи со специальными правами доступа могут читать сообщения в этом форуме".
Если так попробовать:
http://forum.clarionlife.net/posting.ph ... topic&f=15 - то же самое... то есть сообщения я так понимаю мне статус не позволяет создавать.
Ответить