Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/20: Рейтинг темы: голосов - 20, средняя оценка - 4.80
Litvinov
10 / 10 / 1
Регистрация: 23.08.2009
Сообщений: 23
1

Как рисовать API-функциями из VBA?

26.09.2009, 17:21. Просмотров 4172. Ответов 2
Метки нет (Все метки)

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

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

Что можно придумать? На чем рисовать?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2009, 17:21
Ответы с готовыми решениями:

Как рисовать графики в VBA?
Господа! Подскажте, если кто знает, можно ли на VBA рисовать графики, Допустим у меня есть...

В чем различие между функциями VBA и функциями Excel?
В чем различие между функциями VBA и функциями Excel. Скажите пожалуйста , в гугле не могу найти)

Решение на VBA с функциями
Здесь я первый раз в своей жизни)...Оч нужна помощь... Добавлено через 15 минут Даны...

Как рисовать средствами API на BITMAP?
Линия, нарисованная на контексте устройства PictureBox с помощью MoveToEx и LineTo, сотрётся если...

Рисовать на рабочем столи, API
Доброго всем... Народ пожалуста, срочно нужна помощь начинющему. Пишу на VC++2008, проблема...

2
Litvinov
10 / 10 / 1
Регистрация: 23.08.2009
Сообщений: 23
30.09.2009, 15:24  [ТС] 2
Лучший ответ Сообщение было отмечено как решение

Решение

Для тех, кому это интересно


Visual Basic
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
'создание, выбор
Private Declare Function CreateDCBynum Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) 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 DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc 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 hScreen As Long, hCompDC As Long, hCompBM As Long
    'в памяти
    hScreen = CreateDCBynum("DISPLAY", vbNullString, vbNullString, 0)
    hCompBM = CreateCompatibleBitmap(hScreen, размер_X, размер_Y)
    hCompDC = CreateCompatibleDC(0)
    Call SelectObject(hCompDC, hCompBM)
    'рисование
    Call Рисование_GDI(hCompDC) 'вызов подпрограммы рисования с дискриптором в качестве аргумента
    'в буфер обмена
    If OpenClipboard(0) Then
        EmptyClipboard
        Call SetClipboardData(2, hCompBM)  'vbCFBitmap=2, есть не во всех версиях VBA
        CloseClipboard
    Else
        MsgBox "Буфер обмена не доступен" 'ситуация маловероятная
    End If
    'удаление
    MsgBox DeleteDC(hScreen)
    MsgBox DeleteDC(hCompDC)
    MsgBox DeleteObject(hCompBM)
End Sub
6
Dan-K
0 / 0 / 0
Регистрация: 07.03.2016
13.02.2010, 18:17 3
Цитата Сообщение от Litvinov Посмотреть сообщение
Для тех, кому это интересно


Visual Basic
1
2
3
'создание, выбор
    Call Рисование_GDI(hCompDC) 'вызов подпрограммы рисования с дискриптором в качестве аргумента
    'в буфер обмена
Программа застревает в связи с отсутствием подпрограммы...
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2010, 18:17

Работа с API функциями из C#
Здравствуйте друзья!!! 1) Как мне сделать чтоб моя программа (язык C#) не "реагировала" на...

Программа с API-функциями
Нужна программа в качестве лабки, на свободную тему, где бы использовались апи функции, минимум 10...

Библиотека с API функциями
Добрый день! В очередной раз писал dllimport и подумал, а нет ли готовой библиотеки с WinAPI...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.