powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Рисунок для набора вкладок
21 сообщений из 46, страница 2 из 2
Рисунок для набора вкладок
    #37308745
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
БенедиктЕсли хотите задать вопросы, задайте вопросы.Ruskкакой цвет задать в третьем аргументе для прозрачности
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37308776
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БенедиктRusk,

у нас тоже всё хорошо.

Если хотите задать вопросы, задайте вопросы.

Очень рад за Вас.

А сейчас вопрос (с)
Какой цвет задать в третьем аргументе BackColor, вашей функции CombinePicMask, для прозрачного фона?

Спасибо.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309210
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,

У меня нет Офиса 2007, поэтому ответ теоретический: скорее всего, никакой, так как прозрачность ожидается обеспеченная не chromakey-ем (специально выбранным цветом), а картой (полу)прозрачности - 1-битной (прозрачно/непрозрачно) для изображений с цветностью до 8 бит включительно, 8-битной (256 градаций прозрачности) для 24-битных изображений.

Нравится ответ?

Если не нравится, давайте поэкспериментируем, и попробуем подсунуть в Ribbon 32-битную иконку с альфа-каналом (карта полупрозрачности). Берите базу и файлы из 10701376 . Из базы понадобится класс cAlphaDibSection. Понадобится также такой модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
Option Explicit

Private Enum BOOL
   FALSE_BOOL
   TRUE_BOOL
End Enum

Private Type BITMAP '24 bytes
   bmType As Long
   bmWidth As Long
   bmHeight As Long
   bmWidthBytes As Long
   bmPlanes As Integer
   bmBitsPixel As Integer
   bmBits As Long
End Type

Private Declare Function GetObjectA Lib "gdi32" ( _
   ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function DeleteObject Lib "gdi32" ( _
   ByVal hObject As Long) As Long
Private Enum GdiObjectType
   OBJ_BITMAP =  7 
End Enum
Private Declare Function GetObjectType Lib "gdi32" ( _
   ByVal hgdiobj As Long) As GdiObjectType

Private Declare Function CreateBitmap Lib "gdi32" ( _
   ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, _
   ByVal nBitCount As Long, lpBits As Any) As Long

Private Type ICONINFO
   fIcon As BOOL
   xHotspot As Long
   yHotspot As Long
   hbmMask As Long
   hbmColor As Long
End Type
Private Declare Function CreateIconIndirect Lib "user32" ( _
   piconinfo As ICONINFO) As Long

Private Enum PICTYPE
   PICTYPE_UNINITIALIZED = - 1 
   PICTYPE_NONE =  0 
   PICTYPE_BITMAP =  1 
   PICTYPE_METAFILE =  2 
   PICTYPE_ICON =  3 
   PICTYPE_ENHMETAFILE =  4 
End Enum

Private Type GUID
   Data1 As Long
   Data2 As Integer
   Data3 As Integer
   Data4( 0  To  7 ) As Byte
End Type

Private Type picIcon
   Size As Long
   Type As PICTYPE
   hIcon As Long
   Reserved1 As Long
   Reserved2 As Long
End Type

Private Declare Function OleCreatePictureIndirect Lib "olepro32" ( _
   PicDesc As Any, RefIID As GUID, _
   ByVal fPictureOwnsHandle As BOOL, IPic As IPictureDisp) As Long

Public Function CreateIPictureDispFromHICON( _
   ByVal hIcon As Long, _
   Optional ByVal fPictureOwnsHandle As Boolean = True) As IPictureDisp
 Dim IID_IDispatch As GUID
 Dim Pic As picIcon
 With Pic
    .Size = Len(Pic)
    .Type = PICTYPE_ICON
    .hIcon = hIcon
 End With
 With IID_IDispatch
    .Data1 = &H20400
    .Data4( 0 ) = &HC0
    .Data4( 7 ) = &H46
 End With
 OleCreatePictureIndirect Pic, IID_IDispatch, -fPictureOwnsHandle, _
                          CreateIPictureDispFromHICON
End Function

Public Function CreateAlphaIcon(ByVal hbmpARGB As Long) As IPictureDisp
 Dim cbSize As Long
 Dim cbCopied As Long
 Dim bmARGB As BITMAP
 Dim hbmpMono As Long
 Dim ii As ICONINFO
 Dim hiconAlpha As Long
 
 If GetObjectType(hbmpARGB) <> OBJ_BITMAP Then Exit Function
 cbSize = LenB(bmARGB)
 cbCopied = GetObjectA(hbmpARGB, cbSize, bmARGB)
 If cbSize <> cbCopied Then Exit Function
 
 hbmpMono = CreateBitmap(bmARGB.bmWidth, bmARGB.bmHeight,  1 ,  1 , ByVal  0 &)
 ii.fIcon = TRUE_BOOL
 ii.xHotspot =  0 
 ii.yHotspot =  0 
 ii.hbmMask = hbmpMono
 ii.hbmColor = hbmpARGB
 hiconAlpha = CreateIconIndirect(ii)
 DeleteObject hbmpMono
 
 If hiconAlpha =  0  Then Exit Function
 Set CreateAlphaIcon = CreateIPictureDispFromHICON(hiconAlpha)
End Function
Использование:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub Test
 Dim cImg As New cAlphaDibSection
 Dim cMsk As New cAlphaDibSection
 'Берём 24-битный цветной битмап
 cImg.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue.bmp")
 'Берём отдельный битмап с альфа-каналом (оттенки серого)
 cMsk.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue-alpha.bmp")
 'Складываем
 cImg.ApplyAlphaChannel cMsk 'Получили 32-битный битмап с альфа-каналом
 
 'Сохраняем, если нужно
 'cImg.SavePicture CurrentProject.Path & "\point-blue-argb.bmp"
 'На стандартные LoadPicture, SavePicture не надейтесь

 'Создаём из битмапа иконку, завёрнутую в IPictureDisp
 Dim picIcon As IPictureDisp
 Set picIcon = CreateAlphaIcon(cImg.hDib)

 'Далее пытаемся применить в Ribbon или ещё где
 '...
End Sub
Ну, и рассказываете, что получилось.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309525
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Бенедикт! Ну, у Вас и код! Я там ничего не понял ;(пока нет времени разбираться),
Короче, сделал AS IS.

Вот процедура, вызываемая Риббоном - она НЕ СРАБОТАЛА.
Причем ошибок не выдает, а иконка на кнопке - пустая.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Sub GetImage32(Control, ByRef image)
  Dim cImg As New cAlphaDibSection
  Dim cMsk As New cAlphaDibSection
 
  cImg.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue.bmp")
  cMsk.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue-alpha.bmp")
  cImg.ApplyAlphaChannel cMsk
  'cImg.SavePicture CurrentProject.Path & "\point-blue-argb.bmp"
 
  Dim picIcon As IPictureDisp
  Set picIcon = CreateAlphaIcon(cImg.hDib)

  Set image = picIcon 
End Sub

Попробовал записать иконку в файл и загрузить из файла в Рибоон,
и все ПОЛУЧИЛОСЬ, с прозрачностью
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub GetImage32(Control, ByRef image)
  Dim cImg As New cAlphaDibSection
  Dim cMsk As New cAlphaDibSection
 
  cImg.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue.bmp")
  cMsk.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue-alpha.bmp")
 
  cImg.ApplyAlphaChannel cMsk
  cImg.SavePicture CurrentProject.Path & "\point-blue-argb.bmp"
 
  'Dim picIcon As IPictureDisp
  'Set picIcon = CreateAlphaIcon(cImg.hDib)

 Set image = LoadPicture(CurrentProject.Path & "\point-blue-argb.bmp")
End Sub

Значит мы на верном пути. Вот это видать не работает
Код: plaintext
1.
 Dim picIcon As IPictureDisp
 Set picIcon = CreateAlphaIcon(cImg.hDib)

Теперь вопрос, как получить объект IPictureDisp из переменной cImg , чтобы избежать записи в файл?
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309547
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuskТеперь вопрос, как получить объект IPictureDisp из переменной cImg , чтобы избежать записи в файл?Функцией CreateIPictureDispFromHBITMAP выше по теме.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309556
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
третьим параметром ей указывайте False.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309605
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,
Не очень хорошо получается с третьим параметром, отвечающим за владение GDI-объектом (битмапом). Если владельцем оставлять экземпляр cAlphaDibSection (третий параметр равен False), то нужно, чтобы этот экземпляр был "жив", пока используется IPictureDisp, оборачивающий битмап. Если владельцем делать IPictureDisp (True), то нужно, чтобы деструктор cAlphaDibSection.Class_Terminate не уничтожал битмап.
Сделайте так: введите в cAlphaDibSection свойство, отвечающее за (не)выполнение строчки DeleteObject m_hDIb в методе ClearUp, и вызывайте CreateIPictureDispFromHBITMAP с третьим параметром, равным True (значение по умолчанию).
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309623
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БенедиктRusk,
Не очень хорошо получается с третьим параметром, отвечающим за владение GDI-объектом (битмапом). Если владельцем оставлять экземпляр cAlphaDibSection (третий параметр равен False), то нужно, чтобы этот экземпляр был "жив", пока используется IPictureDisp, оборачивающий битмап. Если владельцем делать IPictureDisp (True), то нужно, чтобы деструктор cAlphaDibSection.Class_Terminate не уничтожал битмап.
Сделайте так: введите в cAlphaDibSection свойство, отвечающее за (не)выполнение строчки DeleteObject m_hDIb в методе ClearUp, и вызывайте CreateIPictureDispFromHBITMAP с третьим параметром, равным True (значение по умолчанию).

Извините за может быть глупый вопрос, а что передавать в первом и втором параметре?
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309649
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,

В первом передавать cImg.hDib. Во втором 0 или ничего (опускать параметр).
Попробуйте для начала без изменений в классе сделать просто
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub GetImage32(Control, ByRef image)
 Dim cImg As New cAlphaDibSection
 Dim cMsk As New cAlphaDibSection
 
 cImg.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue.bmp")
 cMsk.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue-alpha.bmp")
 
 cImg.ApplyAlphaChannel cMsk

 Set image = CreateIPictureDispFromHBITMAP(cImg.hDib,  0 , False)
End Sub
и заставить Ribbon затем перерисоваться (поместить сверху какое-то окно, а затем убрать, например). Возможно, Ribbon делает копию битмапа в себе, тогда его можно спокойно убивать в своём коде.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309655
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, хорошо бы было бы оформить получение IPictureDisp ,
как метод (функция) класса cAlphaDibSection .
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309681
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БенедиктRusk,

В первом передавать cImg.hDib. Во втором 0 или ничего (опускать параметр).
Попробуйте для начала без изменений в классе сделать просто
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub GetImage32(Control, ByRef image)
 Dim cImg As New cAlphaDibSection
 Dim cMsk As New cAlphaDibSection
 
 cImg.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue.bmp")
 cMsk.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue-alpha.bmp")
 
 cImg.ApplyAlphaChannel cMsk

 Set image = CreateIPictureDispFromHBITMAP(cImg.hDib,  0 , False)
End Sub


Получается пустое место - вместо иконки.

А насчет,
Бенедикти заставить Ribbon затем перерисоваться (поместить сверху какое-то окно, а затем убрать, например). Возможно, Ribbon делает копию битмапа в себе, тогда его можно спокойно убивать в своём коде.
По-видимому, Ribbon действительно делает копию битмапа себе, потому что функция GetImage32 вызывается только один раз.
Только вызов его метода Invalidate, вызывает перезапрос картинок.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309684
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,

Вы это можете сделать за 10-15 секунд самостоятельно.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309699
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БенедиктRusk,

Вы это можете сделать за 10-15 секунд самостоятельно.

Осталось только заставить работать CreateIPictureDispFromHBITMAP ...
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309720
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,
раз пустое место, значит... ничего не значит. Что за параметры (Control, ByRef image), и как вызывается функция GetImage32? Где и как происходит передача IPictureDisp в Ribbon?
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309761
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, сделаем шаг назад. Вот это отлично работает:
Rusk...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Sub GetImage32(Control, ByRef image)
  Dim cImg As New cAlphaDibSection
  Dim cMsk As New cAlphaDibSection
 
  cImg.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue.bmp")
  cMsk.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue-alpha.bmp")
 
  cImg.ApplyAlphaChannel cMsk
  cImg.SavePicture CurrentProject.Path & "\point-blue-argb.bmp"
 
 Set image = LoadPicture(CurrentProject.Path & "\point-blue-argb.bmp")
End Sub
Теперь вопрос, как получить объект IPictureDisp из переменной cImg , чтобы избежать записи в файл?
БенедиктRusk,
раз пустое место, значит... ничего не значит. Что за параметры (Control, ByRef image), и как вызывается функция GetImage32? Где и как происходит передача IPictureDisp в Ribbon?
Короче, Риббон создается и загружается ввиде xml-строки при открытии базы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Function CreateRibbonButtons()
  Dim xml As String
  xml = _
   "<customUI xmlns=""http://schemas.microsoft.com/" & _
   "office/2006/01/customui"" onLoad=""MyRibbonLoad"">" & vbCrLf & _
   "  <ribbon startFromScratch=""false"">" & vbCrLf & _
   "    <tabs>" & vbCrLf & _
   "      <tab id=""myTab"" label=""Test"">" & _
     vbCrLf & _
   "        <group id=""twoButtons"" label=""Test Buttons"">" & _
     vbCrLf & _
   "            <button id=""btnMain"" label=""Button 1"" size=""large"" imageMso=""HappyFace"" onAction=""=ButtonMainOnActionCallBack()""/>" & _
    vbCrLf & _
    "            <button id=""btnNeighbour"" label=""Button 2"" size=""large"" imageMso=""HappyFace"" getEnabled=""NeighbourGetEnableCallBack""/>" & _
    vbCrLf & _
    "            <separator id=""sepTest""/>" & vbCrLf & _


    "            <button id=""btnTest3"" label=""Button 3"" size=""large"" getImage=""GetImage32"" />" & _ 


    vbCrLf & _
   "        </group>" & vbCrLf & _
   "      </tab>" & vbCrLf & _
   "    </tabs>" & vbCrLf & _
   "  </ribbon>" & vbCrLf & _
   "</customUI>"
  
  Debug.Print xml
  Application.LoadCustomUI "MyRibbon", xml
  
End Function

Обратите внимание на строчку, начинающуюся <button id=""btnTest3""
А дальше по тексту идет вышеуказанная функция GetImage32, которую Риббон вызывает при необходимости нарисовать картинку для кнопки btnTest3. При этом передает в первом параметре - IRibbonControl, собственно, сам объект кнопки, а второй параметр - ByRef image AS IPictureDisp, куда надо передать объект картинки.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309773
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем, осталось вот это разрулить, без файла
Код: plaintext
1.
2.
3.
  cImg.SavePicture CurrentProject.Path & "\point-blue-argb.bmp"
 
  Set image = LoadPicture(CurrentProject.Path & "\point-blue-argb.bmp")
У меня знаний по GDI API BITMAP - нема, к сожалению :(
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309777
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,
Понятно, спасибо.
Давайте тогда по второму варианту.
В класс внесите следующие изменения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 'в области описаний
 Public DeleteDibOnTerminate As Boolean

 'новый метод
Private Sub Class_Initialize()
 DeleteDibOnTerminate = True
End Sub

'В методе ClearUp
Public Sub ClearUp()
'...
    'Вместо DeleteObject m_hDIb:
    If DeleteDibOnTerminate Then DeleteObject m_hDIb
'...
End Sub
Использование
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Sub GetImage32(Control, ByRef image)
 Dim cImg As New cAlphaDibSection
 Dim cMsk As New cAlphaDibSection
 
 cImg.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue.bmp")
 cMsk.CreateFromPicture LoadPicture(CurrentProject.Path & "\point-blue-alpha.bmp")
 
 cImg.ApplyAlphaChannel cMsk
 cImg.DeleteDibOnTerminate = False

 Set image = CreateIPictureDispFromHBITMAP(cImg.hDib)
End Sub
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309822
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
УРА, ПОЛУЧИЛОСЬ!!!!
Большущее СПАСИБО, Бенедикт!

Теперь, можно будет замутить, что-нибудь, типа загрузки картинок в Риббон из таблицы, предварительно, сохранив туда файлы bmp и их "альфа-маски". Тут на форуме, что-то видел с ключевым словом BLOB...

Прикладываю файл, наших экспериментов, для всех интересующихся.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37309858
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,

пожалуйста.

Тогда легче сразу результирующий 32-битный битмап хранить в таблице. Собственно, в той же базе функция LoadPictureUsingStream() служит для получения IPictureDisp из байтового массива. А уж байтовый массив считать из BLOB-а задача тривиальная.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37314609
Rusk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Бенедикт,

Вот нашел я коллекцию .png картинок с альфа-каналом, что-то не получается их загрузить в Access.
LoadPicture - ругается - Invalid Picture. А при сохранении в Paint (Win7), как BMP - теряется прозрачность (о чем и появляется предупреждение).

Как загрузить .png ума не приложу?

Спасибо за ответ.
...
Рейтинг: 0 / 0
Рисунок для набора вкладок
    #37316993
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusk,

загрузить .PNG можно с помощью GDI+. По идее, всё должно быть просто, но проверяйте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
Option Explicit

Private Enum BOOL
   FALSE_BOOL
   TRUE_BOOL
End Enum

Private Enum GpStatus 'GDI+ Status
   OK =  0 
   GenericError =  1 
   InvalidParameter =  2 
   OutOfMemory =  3 
   ObjectBusy =  4 
   InsufficientBuffer =  5 
   NotImplemented =  6 
   Win32Error =  7 
   WrongState =  8 
   Aborted =  9 
   FileNotFound =  10 
   ValueOverflow =  11 
   AccessDenied =  12 
   UnknownImageFormat =  13 
   FontFamilyNotFound =  14 
   FontStyleNotFound =  15 
   NotTrueTypeFont =  16 
   UnsupportedGdiplusVersion =  17 
   GdiplusNotInitialized =  18 
   PropertyNotFound =  19 
   PropertyNotSupported =  20 
   ProfileNotFound =  21 
End Enum

Private Enum GdiplusVersion
   Ver1 =  1 
End Enum

Private Type GdiplusStartupInput
   GdiplusVersion As GdiplusVersion
   DebugEventCallback As Long
   SuppressBackgroundThread As BOOL
   SuppressExternalCodecs As BOOL
End Type

Private Declare Function GdiplusStartup Lib "gdiplus" ( _
   lToken As Long, lpInput As GdiplusStartupInput, _
   Optional ByRef lpOutput As Any) As GpStatus
Private Declare Function GdiplusShutdown Lib "gdiplus" ( _
   ByVal lToken As Long) As GpStatus

Private Declare Function GdipCreateBitmapFromFile Lib "gdiplus" ( _
   ByVal wszFileName As Long, nBitmap As Long) As GpStatus
'Private Declare Function GdipCreateBitmapFromStream Lib "gdiplus" ( _
'   ByVal Stream As IUnknown, nBitmap As Long) As GpStatus
Private Declare Function GdipCreateHBITMAPFromBitmap Lib "gdiplus" ( _
   ByVal nBitmap As Long, hbmReturn As Long, _
   ByVal argbBackground As Long) As GpStatus
Private Declare Function GdipDisposeImage Lib "gdiplus" ( _
   ByVal nImage As Long) As GpStatus

Public Function LoadBitmapPicture(ByVal sFileName As String) As IPictureDisp
 Dim GdipToken As Long
 Dim si As GdiplusStartupInput
 Dim nBitmap As Long
 Dim hBitmap As Long
 si.GdiplusVersion = Ver1
 GdiplusStartup GdipToken, si, ByVal  0 &
 If GdipToken =  0  Then Exit Function
 GdipCreateBitmapFromFile StrPtr(sFileName), nBitmap
 If nBitmap Then
    GdipCreateHBITMAPFromBitmap nBitmap, hBitmap,  0 
    Set LoadBitmapPicture = CreateIPictureDispFromHBITMAP(hBitmap)
    GdipDisposeImage nBitmap
 End If
 GdiplusShutdown GdipToken
End Function
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Рисунок для набора вкладок
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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