Страница: 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
Что можно придумать? На чем рисовать?
Ответить
|
Номер ответа: 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
|
Для тех, кому интересно
- Private Declare Function GetDesktopWindow Lib "user32" () As Long
- Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
- Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
- Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
- Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
- Private Declare Function EmptyClipboard Lib "user32" () As Long
- Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
- Private Declare Function CloseClipboard Lib "user32" () As Long
-
- Sub Ðèñîâàíèå_GDI_è_Êîïèðîâàíèå()
- Dim hCompDC As Long, hCompBM As Long
-
- hCompDC = CreateCompatibleDC(0)
- hCompBM = CreateCompatibleBitmap(GetDC(GetDesktopWindow), ðàçìåð_X, ðàçìåð_Y)
- Call SelectObject(hCompDC, hCompBM)
-
- Call Ðèñîâàíèå_GDI(hCompDC)
-
- If OpenClipboard(0) Then
- EmptyClipboard
- Call SetClipboardData(2, hCompBM)
- CloseClipboard
- Else
- MsgBox "Áóôåð îáìåíà íå äîñòóïåí"
- End If
-
- MsgBox DeleteDC(hCompDC)
- MsgBox DeleteObject(hCompBM)
- End Sub
Ответить
|
Страница: 1 |
Поиск по форуму