Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как использовать АПИ функцию BitBlt() в PB10 / 16 сообщений из 16, страница 1 из 1
26.07.2011, 18:40
    #37367982
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
Хотел воспользоваться стандартной виндовой функцией BitBlt, а не тут то было. Залез в Global External Function и прописал:
FUNCTION boolean BitBlt(ulong hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, ulong hdcSrc, int nXSrc, int nYSrc, ulong dwRop);
А он мне в ответ мол: Error Must specify either LIBRARY or RPCFUNC.

Таким образом не все АПИ доступны из билдера? У меня 9 и 10 билдер. Есть ли возможность применить такие вот недоступные функции?
...
Рейтинг: 0 / 0
26.07.2011, 18:47
    #37367995
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
jabХотел воспользоваться стандартной виндовой функцией BitBlt, а не тут то было. Залез в Global External Function и прописал:
FUNCTION boolean BitBlt(ulong hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, ulong hdcSrc, int nXSrc, int nYSrc, ulong dwRop);
А он мне в ответ мол: Error Must specify either LIBRARY or RPCFUNC.

Таким образом не все АПИ доступны из билдера? У меня 9 и 10 билдер. Есть ли возможность применить такие вот недоступные функции?
Причем здесь АПИ недоступное?
У вас синтаксическая ошибка: в объявлении не хватает либо LIBRARY или RPCFUNC (в данном случае LIBRARY ).
И это логично. Вы ведь не думали что функцию DLL можно вызвать только по имени ф-и, не указывая имя DLL?
Идите в доку по ф-и и оттуда узнайте имя DLL и укажите в объявлении.
...
Рейтинг: 0 / 0
26.07.2011, 19:14
    #37368034
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
Anatoly Moskovsky, Вы категорически правы! Я увлекся копипастами и не заметил, что не указал библиотеку. Спасибо.
Тогда ещё вопрос. Как передавать в функцию параметр dwRop? В документации этот параметр выглядит так:

#define BLACKNESS 0x42
#define DSTINVERT 0x550009
#define MERGECOPY 0xC000CA
#define MERGEPAINT 0xBB0226
#define NOTSRCCOPY 0x330008
#define NOTSRCERASE 0x1100A6
#define PATCOPY 0xF00021
#define PATINVERT 0x5A0049
#define PATPAINT 0xFB0A09
#define SRCAND 0x8800C6
#define SRCCOPY 0xCC0020
#define SRCERASE 0x440328
#define SRCINVERT 0x660046
#define SRCPAINT 0xEE0086
#define WHITENESS 0xFF0062

Нужное значение перевести в десятичную систему и передать? Или лучше гдето обьявить все значения изначально, а потом передавать уже параметр?
...
Рейтинг: 0 / 0
26.07.2011, 20:20
    #37368078
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
jabAnatoly Moskovsky, Вы категорически правы! Я увлекся копипастами и не заметил, что не указал библиотеку. Спасибо.
Тогда ещё вопрос. Как передавать в функцию параметр dwRop? В документации этот параметр выглядит так:

#define BLACKNESS 0x42
#define DSTINVERT 0x550009
#define MERGECOPY 0xC000CA
#define MERGEPAINT 0xBB0226
#define NOTSRCCOPY 0x330008
#define NOTSRCERASE 0x1100A6
#define PATCOPY 0xF00021
#define PATINVERT 0x5A0049
#define PATPAINT 0xFB0A09
#define SRCAND 0x8800C6
#define SRCCOPY 0xCC0020
#define SRCERASE 0x440328
#define SRCINVERT 0x660046
#define SRCPAINT 0xEE0086
#define WHITENESS 0xFF0062

Нужное значение перевести в десятичную систему и передать? Или лучше гдето обьявить все значения изначально, а потом передавать уже параметр?
Конечно объявить в виде constant ulong.
В десятичную систему придется руками переводить - в ПБ нет поддержки 16-тиричных литералов.
...
Рейтинг: 0 / 0
26.07.2011, 20:51
    #37368100
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
Anatoly Moskovsky, эти константы можно в апликейшене гдето обьявить, чтоб было доступно везде в проекте?
И ещё вопросик. Я так понимаю, что таким макаром вообще любые dll можно задействовать? Я напишу библиотечку на delphi и в билдере заюзаю из неё функции? Это я к чему, просто попробовать это проверить нет возможности аж до выходных, но интересно. Раньше писал библиотечки под FoxPro, но там были особенности с передачей параметра типа string. Тут есть хитрости?
...
Рейтинг: 0 / 0
26.07.2011, 21:37
    #37368133
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
В общем в апликейшене в Global Variables прописал:
ulong BLACKNESS = 66;
ulong DSTINVERT = 5570569;
ulong MERGECOPY = 12583114;
ulong MERGEPAINT = 12255782;
ulong NOTSRCCOPY = 3342344;
ulong NOTSRCERASE = 1114278;
ulong PATCOPY = 15728673;
ulong PATINVERT = 5898313;
ulong PATPAINT = 16452105;
ulong SRCAND = 8913094;
ulong SRCCOPY = 13369376;
ulong SRCERASE = 4457256;
ulong SRCINVERT = 6684742;
ulong SRCPAINT = 15597702;
ulong WHITENESS = 16711778;

так работает.
...
Рейтинг: 0 / 0
27.07.2011, 10:43
    #37368492
Raven A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
jab

IMHO, засорять область global var это несколько моветон.
Создать класс, ну например const_123, обявить в нем константы (CONSTANT ulong BLACKNESS = 66 ...)
и использовать по тексту: ext_func( const_123.BLACKNESS )
...
Рейтинг: 0 / 0
27.07.2011, 12:22
    #37368675
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
26.07.2011 22:37, jab пишет:

> В общем в апликейшене в Global Variables прописал:

Не превращай Globals в помойку. Создай класс и запихай в него константы
вместе с функцией BitBlt.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.07.2011, 17:23
    #37369405
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
А зачем тогда эта область, если в неё ничего не писать?
...
Рейтинг: 0 / 0
27.07.2011, 21:27
    #37369779
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
jabА зачем тогда эта область, если в неё ничего не писать?
Цитата:Dim2000Не превращай Globals в помойку
...
Рейтинг: 0 / 0
28.07.2011, 18:20
    #37371535
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
Ещё раз подскажите, что с классом делать? Создал класс cls01 в котором в конструкторе написал все
constant ulong BLACKNESS = 66;
и так далее.
Потом нужно гдето вызывать метод конструктора этого класса или как пользоваться? Что дальше?
...
Рейтинг: 0 / 0
29.07.2011, 12:40
    #37372573
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
jabЕщё раз подскажите, что с классом делать? Создал класс cls01 в котором в конструкторе написал все
constant ulong BLACKNESS = 66;
и так далее.
Потом нужно гдето вызывать метод конструктора этого класса или как пользоваться? Что дальше?

Step by step:
1. Создать невизуальный объект, например nvo_bitbit. Можно сказать объекту, что он Autoinstantiate, это позволит в дальнейшем сократить код на одну строчку
2. Объявить константы как instance variables
Код: plaintext
constant ulong BLACKNESS =  66 ;
и так далее. BTW, вы слышали что-нибудь насчет области видимости переменных?
3. Объявить функцию как local external function
4. (Опционально) Обернуть вызов внешней функции функцией/функциями объекта

5. В нужном месте создать экземпляр объекта из п.1.
Код: plaintext
1.
2.
nvo_bitbit ln_myObj
//В случае, если не выставлен флаг AutoInstantiate
ln_myObj = CREATE nvo_bitbit
6.Вызвать объявленную в п.3 или 4 функцию, передать ей правильные параметры.
...
???Наслаждаемся результатом.
...
Рейтинг: 0 / 0
29.07.2011, 15:03
    #37372980
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
PL99, в качестве невизуального обьекта подойдет просто класс? Компанент, что цветные треугольнички и кружочки. И с областью видимости не понятно пока, если можно разьяснить?
...
Рейтинг: 0 / 0
01.08.2011, 14:54
    #37375309
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
jabPL99, в качестве невизуального обьекта подойдет просто класс? Компанент, что цветные треугольнички и кружочки.
Во-во, именно он
jabИ с областью видимости не понятно пока, если можно разьяснить?Переменные, объявленные в скрипте события constuctor, не видны за пределами кода, обрабатывающего это событие. Локальные они. В отличие от переменных экземпляра, которые имеют модификаторы доступа (по умолчанию public) и живут на протяжении жизни объекта.
...
Рейтинг: 0 / 0
01.08.2011, 16:47
    #37375572
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
Ога. Спасибо! С переменными разобрался кажется. Просто привык к FoxPro обьявлять в ручную область видимости ключевыми словами типа Public, Local и т.д.
Ещё вопросец. В FoxPro я очень полюблял макроподстановки. Типа в строке собирал код нужны по условиям, а потом выполнял его в нужный момент. Билдер вроде тоже ведь скриптовый и хотелось бы иметь такую же возможность макроподстановой. Есть возможность?
...
Рейтинг: 0 / 0
02.08.2011, 11:46
    #37376572
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать АПИ функцию BitBlt() в PB10
jabЕщё вопросец. В FoxPro я очень полюблял макроподстановки. Типа в строке собирал код нужны по условиям, а потом выполнял его в нужный момент. Билдер вроде тоже ведь скриптовый и хотелось бы иметь такую же возможность макроподстановой. Есть возможность?Зависит от...
STFF
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как использовать АПИ функцию BitBlt() в PB10 / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]