Функция PicOleDataW возвращает тоже самое, что и PicOleDataA но в кодировке Юникод.
-----------------------------------------Declare Function ColorsFromRGB Lib "ACC++.dll" (ByVal clr As Long, _
red As Byte, green As Byte, blue As Byte) As Long
Значение RGB цвета находится в пределах от 0 до 16777215(&H00FFFFFF). Старший байт при этом равняется 0, а три младших, определяют, соответственно, синюю, зеленую и красную составляющие цвета. Значения составляющих лежат в пределах от 0 до 255(&HFF).
Функция ColorsFromRGB производит операцию обратную встроенной VB-функции RGB, разбивая значение RGB на три составляющие.
Функция возвращает значение Long, которое содержит значение старшего 4го байта переданного функции аргумента clr, например, если передать аргумент clr как &H00AABBCC& функция возвратит &H00000000&, т.е. 0
если передать &H80BBCCDD&
Функция возвратит &HAA000000&
Таким образом, если функция возвращает 0, значит 4й байт аргумента clr содержит &H00, т.е. 0. Если функция возвращает &H80000000, значит, вероятно, ей был передан цвет системной палитры и тогда аргумент red получит значение системной константы (см. в MSDN WinAPI функцию GetSysColor).
Но, в любом случае:
- 2й аргумент red получает значение 1го байта переданного clr
- 3й аргумент green получает значение 2го байта
- 4й аргумент blue получает значение 3го байта.
Подобную функцию несложно реализовать и средствами VBA, причем несколькими способами, но их эффективность далека до операции сдвиг языка C++:
green=(BYTE)(clr >> 8); //ЗЕЛЕНЫЙ
Declare Function GetVarPtr Lib "ACC++.dll" (v As Any) As Long
Функция GetVarPtr - это Эквивалент недокументированной VBA функции VarPtr. Сама VarPtr это Компонент VBA из скрытого _HiddenModule. Чтобы увидеть описание VarPtr запустите Просмотрщик Объектов(Object Browser), в контекстном меню выберите опцию Отобразить скрытые компоненты(Show Hidden Members), и найдите VarPtr с помощью поиска, указав искать в <VBA> или во <Всех Библиотеках>.
А ниже, полная и исчерпывающая ДОКУМЕНТАЦИЯ на GetVarPtr из ACC++.dll …
GetVarPtr возвращает лишь то, что ей передано по ссылке(ByRef), а это адрес переменной, и все.
/// Весь исходный код функции GetVarPtr на С++:
int WINAPI GetVarPtr(void* v)
{
return (int)v; // тело функции
}
///// ... и вся документация :-) ///////////////////////////
а я ругал MicroSoft, в самом-то деле, ну что здесь документировать?
все и так понятно(тем, кто знал C/C++ еще до рождения :-( :-| :-)))
Имеется одно ограничение, ограничение самого Access97 для запросов на объединение. Цитирую документацию:
’’’’’’’’’’’’’’’
Ошибка 3364.
В предложении SELECT запроса на объединение не допускается использование поля Memo или поля объекта ActiveX. Эти типы данных являются недопустимыми для данной операции.
’’’’’’’’’’’’’’’’’’’’’’’’’
Итак, применение любых функций в Access97, которые возвращают в поле запроса на объединение строку длиннее чем 255 символов, закончится ошибкой защиты памяти (это также (а как же иначе?) касается функций PicOleDataA и PicOleDataW из библиотеки ACC++.dll).
Это ограничение легко обойти, создав новый запрос, уже на основании запроса на объединение, и в нем уже можно творить что угодно.
Мораль: Да, быстродействие VBA в MSAccess невелико. Он, будучи языком высокого уровня, предназначен для управления объектами, и в этом его сила. Из VBA доступна вся мощь функций API и COM объектов, и он, как посредник, легко позволяет использовать компоненты, написанные на других языках, для расширения возможностей и эффективности Ваших приложений.
Если есть вопросы или замечания, пишите jackbo@tut.by
Яков г.Минск
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.