This utility accepts BMP, as well as ICO.
Before usage it's necessary to create own list (see DATA)
------------------
E-MAIL: [email protected]
Before usage it's necessary to create own list (see DATA)
Code:
#Compile Exe #Register None #Dim All #Include "Win32Api.Inc" Declare Function CreateTrueColorBmpFile (FileBmp As String, hDC As Long, rc As RECT) As Long CallBack Function DlgProc '============= Correct here ================== Data 24 ' Width of single image (pixels) Data 24 ' Height Data &H00FF00 ' Background; standart is &HC0C0C0 Data "C:\ToolBar Image.Bmp" ' Output file ' List of Ico, Bmp Data 5 ' Number Data "C:\BmpIco\New.Bmp" Data "C:\BmpIco\Graph09.Ico" Data "C:\BmpIco\Open.Bmp" Data "C:\BmpIco\Pc04.Ico" Data "C:\BmpIco\Files10.Ico" '================================== Select Case CbMsg Case %WM_PAINT Local nPic As Long, dx As Long, dy As Long, clr As Long, BmpFileDst As String Local hDC As Long, hMemDc As Long, hIcon As Long, hBmp As Long, hBrush As Long, rc As RECT Local TmpString As String, i As Long TmpString = Read$(1): dx = Val(TmpString) TmpString = Read$(2): dy = Val(TmpString) TmpString = Read$(3): clr = Val(TmpString) BmpFileDst = Read$(4) TmpString = Read$(5): nPic = Val(TmpString) hDC = GetDC(CbHndl) rc.nRight = nPic * dx: rc.nBottom = dy hBrush = CreateSolidBrush(clr) FillRect hDC, rc, hBrush DeleteObject hBrush For i = 1 To nPic TmpString = Read$(5 + i) Select Case Right$(UCase$(TmpString), 4) Case ".ICO": hIcon = LoadImage(ByVal 0&, ByCopy TmpString, %IMAGE_ICON, 0, 0, %LR_LOADFROMFILE) DrawIconEx hDC, dx * (i - 1), 0, hIcon, dx, dy, 0, 0, %DI_NORMAL DeleteObject hIcon Case ".BMP": hBmp = LoadImage(ByVal 0&, ByCopy TmpString, %IMAGE_BITMAP, dx, dy, %LR_LOADFROMFILE) hMemDC = CreateCompatibleDC (hDC) SelectObject hMemDC, hBmp BitBlt hDC, dx * (i - 1), 0, dx, dy, hMemDC, 0, 0, %SRCCOPY DeleteDC hMemDc: DeleteObject hBmp End Select Next CreateTrueColorBmpFile BmpFileDst, hDC, rc ReleaseDC CbHndl, hDC i = Shell ("mspaint.exe " + Chr$(34) + BmpFileDst + Chr$(34), 1) PostMessage CbHndl, %WM_SYSCOMMAND, %SC_CLOSE, 0 End Select End Function Function PbMain As Long Local hDlg As Long, i1 As Long, i2 As Long Dialog New hDlg, " Creating BMP for toolbar", , , 0 , 0, %WS_POPUP To hDlg SetWindowPos hDlg, 0, 0, 0, GetSystemMetrics(%SM_CXSCREEN), GetSystemMetrics(%SM_CYSCREEN), 0 Dialog Show Modal hDlg, Call DlgProc End Function Function CreateTrueColorBmpFile (FileBmp As String, hDC As Long, rc As RECT) As Long Local f As Long, hMemDC As Long Local hMemBmp As Long, bm As BITMAP, bmi As BITMAPINFO Local lpBITMAPFILEHEADER As BITMAPFILEHEADER, lpBITMAPINFOHEADER As BITMAPINFOHEADER hMemDC = CreateCompatibleDC (hDC) bmi.bmiHeader.biSize = SizeOf(bmi.bmiHeader) bmi.bmiHeader.biWidth = (rc.nRight - rc.nLeft) bmi.bmiHeader.biHeight = (rc.nBottom - rc.nTop) bmi.bmiHeader.biPlanes = 1 bmi.bmiHeader.biBitCount = 24 bmi.bmiHeader.biCompression = %BI_RGB hMemBmp = CreateDIBSection(hMemDC, bmi, %DIB_RGB_COLORS, 0, 0, 0) GlobalLock hMemBmp SelectObject hMemDC, hMemBmp GetObject hMemBmp, SizeOf(bm), bm BitBlt hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hDC, rc.nLeft, rc.nTop, %SRCCOPY lpBITMAPFILEHEADER.bfType = Cvi("BM") lpBITMAPFILEHEADER.bfSize = Len(lpBITMAPFILEHEADER) + Len(lpBITMAPINFOHEADER) + _ bm.bmWidthBytes * bm.bmHeight lpBITMAPFILEHEADER.bfOffBits = 54 lpBITMAPINFOHEADER.biSize = 40 lpBITMAPINFOHEADER.biWidth = bm.bmWidth lpBITMAPINFOHEADER.biHeight = bm.bmHeight lpBITMAPINFOHEADER.biPlanes = 1 lpBITMAPINFOHEADER.biBitCount = 24 lpBITMAPINFOHEADER.biSizeImage = 54& + bm.bmWidthBytes * bm.bmHeight f = FreeFile: Open FileBmp For Output As #f Print #f, lpBITMAPFILEHEADER lpBITMAPINFOHEADER _ Peek$(bm.bmBits, bm.bmWidthBytes * bm.bmHeight);: Close #f DeleteDC hMemDC: GlobalUnlock hMemBmp: DeleteObject hMemBmp End Function
E-MAIL: [email protected]