Страница: 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 | 
 
		
			Поиск по форуму