Code: Alles auswählen
; This Function creates 2 new Images out of the Icon.
; The Image specified in 'Image.l' will hold the Icon Image, and
; the one in 'Mask.l' will hold the Icon AND Mask. This is a Black&White
; Bitmap image, where all white parts are transparent in the Icon.
; All numbers here are PB #Image numbers.
Procedure SplittIcon(Icon.l, Image.l, Mask.l)
UseImage(Icon)
If CreateImage(Image, ImageWidth(), ImageHeight())
DC.l = StartDrawing(ImageOutput())
DrawIconEx_(DC, 0, 0, UseImage(Icon), 0, 0, 0, 0, 2)
StopDrawing()
EndIf
If CreateImage(Mask, ImageWidth(), ImageHeight())
DC.l = StartDrawing(ImageOutput())
DrawIconEx_(DC, 0, 0, UseImage(Icon), 0, 0, 0, 0, 1)
StopDrawing()
EndIf
UseImage(Image)
EndProcedure
; This Function creates a new Icon, out of the Images specified in Image and Mask.
; Both must be of the same size, and the Mask may only contain black and white.
Procedure.l CreateIcon(Icon.l, Image.l, Mask.l)
Protected *Bitmap.LONG
UseImage(Image)
CreateImage(Icon, ImageWidth(), ImageHeight())
!extrn _PB_Image_CurrentObject
!mov eax, [_PB_Image_CurrentObject]
!mov [esp+12], eax
DeleteObject_(*Bitmap\l)
NewIcon.ICONINFO
NewIcon\fIcon = #True
NewIcon\hbmMask = UseImage(Mask)
NewIcon\hbmColor = UseImage(Image)
*Bitmap\l = CreateIconIndirect_(@NewIcon)
ProcedureReturn UseImage(Icon)
EndProcedure
#Icon = 0
#Image = 1
#Mask = 2
Font.l = LoadFont(0, "Times", 8)
If OpenWindow(0, 0, 0, 100, 50, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Icon")
If CreateGadgetList(WindowID())
; Create and draw the Icon Image:
CreateImage(#Image, 16, 16)
StartDrawing(ImageOutput())
DrawingMode(1)
FrontColor($FF, $00, $00)
Locate(2, 2)
DrawingFont(Font)
DrawText("PB")
StopDrawing()
; See the result:
ImageGadget(1, 20, 20, 32, 32, ImageID())
; Create and draw the mask. Everything that is white
; will be transparent, everything black will be displayed.
; so we just draw the same as above in black on a white background.
CreateImage(#Mask, 16, 16)
StartDrawing(ImageOutput())
Box(1, 1, 14, 14, $FFFFFF)
FrontColor($00, $00, $00)
DrawingMode(1)
Locate(2, 2)
DrawingFont(Font)
DrawText("PB")
StopDrawing()
; Yet another test:
ImageGadget(1, 60, 20, 32, 32, ImageID())
; Now we make our new #Icon out of these 2...
CreateIcon(#Icon, #Image, #Mask)
; And place it in the systray.
AddSysTrayIcon(0, WindowID(), ImageID())
Repeat
Until WaitWindowEvent() = #PB_EventCloseWindow
EndIf
EndIf
End