Рисунки в файле

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Рисунки в файле

Сообщение Odrick » 20.02.2005 (Вс) 1:19

Есть следующая задачка: в одном файле находятся какая-либо информация и несколько bmp-файлов. Эти файлы можно прочитать либо в память, либо сформировать в рантайме отдельные временные файлы. Вопрос в том, есть ли фозможность вывести рисунок в Picture-box, если он находится в памяти/массиве/другое. Или все-же нужно формировать временные файлы и в последствии удалять?
То, что для одних константа, для других только переменная...

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 21.02.2005 (Пн) 7:32

Код: Выделить всё
' Here is my code. I tested it by adding a resource 101 on "CUSTOM"
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Const GMEM_MOVEABLE = &H2
Private Declare Function CLSIDFromString Lib "ole32" (ByVal OleStringCLSID As Long, myGUID As Any) As Long
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hMem&, ByVal DeleteOnRelease&, pStream As IUnknown) As Long
Private Declare Function OleLoadPicture Lib "olepro32" (ByVal pStream As IUnknown, ByVal memSize&, ByVal fRunMode&, myGUID As Any, pPicture As IPicture) As Long

Private Sub Command1_Click()
   Const IID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
   Dim hMem&, lpMem&, bArr() As Byte, myGUID(0 To 15) As Byte
   Dim pStream As IUnknown, myPic As IPicture

   ' Формирование массива
   bArr = LoadResData(101, "CUSTOM")

   hMem = GlobalAlloc(GMEM_MOVEABLE, UBound(bArr) + 1)
   If (hMem) Then
      lpMem = GlobalLock(hMem)
      If (lpMem) Then
         Call CopyMemory(ByVal lpMem&, bArr(0), UBound(bArr) + 1)
         Call GlobalUnlock(hMem)
         If CreateStreamOnHGlobal(hMem, 1, pStream) = 0 Then
            If CLSIDFromString(StrPtr(IID_IPicture), myGUID(0)) = 0 Then
               If OleLoadPicture(pStream, UBound(bArr) + 1, 0, myGUID(0), myPic) = 0 Then

                  ' Фух! Сделали
                  Set Picture1.Picture = myPic

               End If
            End If
         End If
      End If
      Call GlobalFree(hMem)
   End If
   Erase bArr
End Sub
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 120

    TopList