Download toolbr10.zip, last updated 09/04/2000 (219.80 KB)

Download
  • md5: c958d1e29df5f1dae69cb60751127938
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "ascMemoryBitmap"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False

'-----------------------------------------'
'           Ariad Development Library 2.1 '
'-----------------------------------------'
'                     Memory Bitmap Class '
'                             Version 1.0 '
'-----------------------------------------'
' Based on original code by Steve McMahon '
'-----------------------------------------'
'Copyright � 1999 by Ariad Software. All Rights Reserved

'Date Created:
'Last Updated: 21/05/1999

Option Explicit
DefInt A-Z

Private Type BITMAP '14 bytes
 bmType         As Long
 bmWidth        As Long
 bmHeight       As Long
 bmWidthBytes   As Long
 bmPlanes       As Integer
 bmBitsPixel    As Integer
 bmBits         As Long
End Type

Private Type PicBmp
 Size       As Long
 tType      As Long
 hBmp       As Long
 hPal       As Long
 Reserved   As Long
End Type

Private Type GUID
 Data1      As Long
 Data2      As Integer
 Data3      As Integer
 Data4(7)   As Byte
End Type

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop 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 CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function CreateDCAsNull Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, lpDeviceName As Any, lpOutput As Any, lpInitData As Any) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Private Declare Function GetObjectAPI Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long

Const BITSPIXEL = 12
Const LOGPIXELSX = 88    '  Logical pixels/inch in X
Const LOGPIXELSY = 90    '  Logical pixels/inch in Y

Dim m_hDC As Long
Dim m_hBmp As Long
Dim m_hBmpOld As Long
Dim m_lWidth As Long
Dim m_lHeight As Long
'----------------------------------------------------------------------
'Name        : Picture
'Created     : 28/06/1999 14:14
'Modified    :
'----------------------------------------------------------------------
'Author      : Richard Moss
'Organisation: Ariad Software
'----------------------------------------------------------------------
Public Property Get Picture() As IPicture
 Dim pic As PicBmp
 Dim IPic As IPicture
 Dim IID_IDispatch As GUID
 If m_hBmp Then
  ' Fill in with IDispatch Interface ID.
  With IID_IDispatch
   .Data1 = &H20400
   .Data4(0) = &HC0
   .Data4(7) = &H46
  End With
  ' Fill Pic with necessary parts.
  With pic
   .Size = Len(pic) ' Length of structure.
   .tType = vbPicTypeBitmap ' Type of Picture (bitmap).
   .hBmp = m_hBmp ' Handle to bitmap.
  End With
  ' Create Picture object.
  Call OleCreatePictureIndirect(pic, IID_IDispatch, 1, IPic)
  ' Return the new Picture object.
  Set Picture = IPic
 End If
End Property
Public Property Get hBmp() As Long
 hBmp = m_hBmp
End Property
Public Property Get Width() As Long
 Width = m_lWidth
End Property

Public Property Get Height() As Long
 Height = m_lHeight
End Property

Sub ClearUp()
 If m_hBmpOld <> 0 Then
  SelectObject m_hDC, m_hBmpOld
  m_hBmpOld = 0
 End If
 If m_hBmp <> 0 Then
  DeleteObject m_hBmp
  m_hBmp = 0
 End If
 If m_hDC <> 0 Then
  DeleteDC m_hDC
  m_hDC = 0
 End If
End Sub

Private Sub Class_Terminate()
 ClearUp
End Sub

Private Function LoadBitmapIntoMemory(P As StdPicture) As Boolean
 Dim tBM As BITMAP
 Dim hBmp As Long, hBmpOld As Long
 Dim hDCDesk As Long, hdcTemp As Long
 On Error GoTo ProcErr
  ClearUp
  hBmp = P.handle
  GetObjectAPI hBmp, Len(tBM), tBM
  hDCDesk = CreateDCAsNull("DISPLAY", ByVal 0&, ByVal 0&, ByVal 0&)
  If (hDCDesk <> 0) Then
   hdcTemp = CreateCompatibleDC(hDCDesk)
   If (hdcTemp <> 0) Then
    hBmpOld = SelectObject(hdcTemp, hBmp)
    If (hBmpOld <> 0) Then
     m_hDC = CreateCompatibleDC(hDCDesk)
     If (m_hDC <> 0) Then
      m_hBmp = CreateCompatibleBitmap(hDCDesk, tBM.bmWidth, tBM.bmHeight)
      If (m_hBmp <> 0) Then
       m_hBmpOld = SelectObject(m_hDC, m_hBmp)
       If m_hBmpOld <> 0 Then
        m_lWidth = tBM.bmWidth
        m_lHeight = tBM.bmHeight
        BitBlt m_hDC, 0, 0, m_lWidth, m_lHeight, hdcTemp, 0, 0, vbSrcCopy
        LoadBitmapIntoMemory = True
       Else
        ClearUp
       End If
      Else
       ClearUp
      End If
     Else
      ClearUp
     End If
     SelectObject hdcTemp, hBmpOld
    End If
    DeleteDC hdcTemp
   End If
   DeleteDC hDCDesk
  End If
 On Error GoTo 0
Exit Function

ProcErr:
 RaiseError "LoadBitmapIntoMemory"
Exit Function
End Function


Public Property Get hDC() As Long
 '##BD Returns a handle provided by the Microsoft Windows operating environment to the device context of the memory bitmap
 hDC = m_hDC
End Property


Public Function CreateByFile(ByVal FileName$) As Boolean
 Dim P As StdPicture
 On Error GoTo ProcErr
  Set P = LoadPicture(FileName$)
  If Not P Is Nothing Then
   CreateByFile = LoadBitmapIntoMemory(P)
  End If
 On Error GoTo 0
Exit Function

ProcErr:
 RaiseError "CreateByFile"
Exit Function
End Function

Public Function CreateByPicture(ByVal Picture As StdPicture) As Boolean
 On Error GoTo ProcErr
  If Not Picture Is Nothing Then
   If Picture.Type = vbPicTypeBitmap Then
    CreateByPicture = LoadBitmapIntoMemory(Picture)
   Else
    RaiseErrorEx "CreateByPicture", 481, "Picture property must be of type Bitmap"
   End If
  End If
 On Error GoTo 0
Exit Function

ProcErr:
 RaiseError "CreateByPicture"
Exit Function
End Function

Public Function CreateByResource(ByVal ResourceID As Variant) As Boolean
 Dim P As StdPicture
 On Error GoTo ProcErr
  Set P = LoadResPicture(ResourceID, vbResBitmap)
  If Not P Is Nothing Then
   CreateByResource = LoadBitmapIntoMemory(P)
  End If
 On Error GoTo 0
Exit Function

ProcErr:
 RaiseError "CreateByResource"
Exit Function
End Function

'----------------------------------------------------------------------
'Name        : RaiseError
'Created     : 14/07/1999 19:12
'Modified    :
'Modified By :
'----------------------------------------------------------------------
'Author      : Richard James Moss
'Organisation: Ariad Software
'----------------------------------------------------------------------
'Description : Raises a standard Visual Basic error
'            : When in Design Mode, a simple message box is displayed instead
'----------------------------------------------------------------------
'Updates     : 16/09/99 - Added support for procedure names
'
'----------------------------------------------------------------------
'------------------------------Ariad Procedure Builder Add-In 1.00.0026
Private Sub RaiseError(ByVal ProcName$)
' If Ambient.UserMode Then
  '"Runtime" - raise error
  Err.Raise Err, App.EXEName & "." & TypeName(Me) & ":" & ProcName$
' Else
'  '"Design time" - display error
'  VBA.MsgBox INTERR$ & vbCr & vbCr & Err.Description & " (" & Err & ")" & vbCr & vbCr & ERRTEXT$, vbCritical, App.EXEName & "." & TypeName(Me) & ":" & ProcName$
' End If
End Sub

'----------------------------------------------------------------------
'Name        : RaiseErrorEx
'Created     : 29/08/1999 16:11
'----------------------------------------------------------------------
'Author      : Richard James Moss
'Organisation: Ariad Software
'----------------------------------------------------------------------
'Description : Raises an extended error.
'
'              If the error occurs in design time, and not run time, a
'              simple error message is displayed instead of raising an error.
'----------------------------------------------------------------------
'Updates     : 16/09/99 - Added support for procedure names
'
'----------------------------------------------------------------------
'------------------------------Ariad Procedure Builder Add-In 1.00.0026
Private Sub RaiseErrorEx(ByVal ProcName$, ByVal ErrNum As Long, Optional ByVal ErrMsg$ = "")
' If Ambient.UserMode Then
  '"Runtime" - raise error
  If Len(ErrMsg$) Then
   Err.Raise ErrNum, App.EXEName & "." & TypeName(Me) & ":" & ProcName$, ErrMsg$
  Else
   Err.Raise ErrNum, App.EXEName & "." & TypeName(Me) & ":" & ProcName$
  End If
' Else
'  '"Design time" - display error
'  If Len(ErrMsg$) = 0 Then
'   On Error Resume Next
'    Error ErrNum
'    ErrMsg$ = Err.Description
'   On Error GoTo 0
'  End If
'  VBA.MsgBox INTERR$ & vbCr & vbCr & ErrMsg$ & " (" & ErrNum & ")" & vbCr & vbCr & ERRTEXT$, vbCritical, App.EXEName & "." & TypeName(Me)
' End If
End Sub

Donate

Donate