Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Как рисовать API-функциями из VBA? Добавлено: 26.09.09 16:52  

Автор вопроса:  litvin44
Стоит задача: средствами VBA создать растровое изображение (на основе заданных данных) и вставить его в документ.

В VB можно нарисовать с помощью GDI API-функций, указывая дискриптор (hDC) Form или PictureBox. А потом просто скопировать в Clipboard Form.Image или PictureBox.Image.
Но VBA не поддерживает PictureBox, а у UserForm нет свойств hDC и Image

Что можно придумать? На чем рисовать?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #1 Добавлено: 26.09.09 19:56
гм!!!!вообщето GDI используется в VB.NET, а в нём нет свойства hDS у контролов.

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 26.09.09 22:19
Если речь идет о hdc, то он в VB .NET он легко получается
В VB .NET используется управляемая обертка над GDI+ (хотя возможно использования и GDI, необходимости в этом как правило не возникает)

Ответить

Номер ответа: 3
Автор ответа:
 litvin44



Вопросов: 3
Ответов: 4
 Профиль | | #3 Добавлено: 27.09.09 11:42
Ну, причем здесь VB.NET?!
Есть приложение, в него встроен VBA, на нем и надо реализовать

Нашел 2 пути
1.Если нужна визуализация процесса: создание UserForm, поиск окна с User-Form.Caption, получение его hDС, рисование, копирование
2.Без визуализации: создание DС, создание на нем растра, рисование, копирование, удаление растра, удаление DС

Ответить

Номер ответа: 4
Автор ответа:
 litvin44



Вопросов: 3
Ответов: 4
 Профиль | | #4 Добавлено: 30.09.09 15:51
Для тех, кому интересно

  1. 'Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
  2. Private Declare Function GetDesktopWindow Lib "user32" () As Long
  3. Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
  4. Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  5. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  6. Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
  7. Private Declare Function EmptyClipboard Lib "user32" () As Long
  8. Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
  9. Private Declare Function CloseClipboard Lib "user32" () As Long
  10.  
  11. Sub Ðèñîâàíèå_GDI_è_Êîïèðîâàíèå()
  12. Dim hCompDC As Long, hCompBM As Long
  13.     'â ïàìÿòè
  14.     hCompDC = CreateCompatibleDC(0)
  15.     hCompBM = CreateCompatibleBitmap(GetDC(GetDesktopWindow), ðàçìåð_X, ðàçìåð_Y)
  16.     Call SelectObject(hCompDC, hCompBM)
  17.     'ðèñîâàíèå
  18.     Call Ðèñîâàíèå_GDI(hCompDC) 'âûçîâ ïîäïðîãðàììû ðèñîâàíèÿ ñ äèñêðèïòîðîì â êà÷åñòâå àðãóìåíòà
  19.     'â áóôåð îáìåíà
  20.     If OpenClipboard(0) Then
  21.         EmptyClipboard
  22.         Call SetClipboardData(2, hCompBM)  'vbCFBitmap=2, åñòü íå âî âñåõ âåðñèÿõ VBA
  23.         CloseClipboard
  24.     Else
  25.         MsgBox "Áóôåð îáìåíà íå äîñòóïåí" 'ñèòóàöèÿ ìàëîâåðîÿòíàÿ
  26.     End If
  27.     'óäàëåíèå
  28.     MsgBox DeleteDC(hCompDC)
  29.     MsgBox DeleteObject(hCompBM)
  30. End Sub

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 02.10.09 14:00
litvin44 пишет:
Ну, причем здесь VB.NET?!

Не знаю, но пан UnDeAdZak зачем-то в первом посте завел о нем речь, я посчитал нужным прокомментирвоать.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам