Test it ...
Code: Select all
;-TOP by mk-soft, v1.01.2, 19.11.2025
#ProgramTitle = "Example Create Button Image"
#Version = "v1.01.2"
Enumeration Windows
#Main
EndEnumeration
Enumeration Menus
#MainMenu
EndEnumeration
Enumeration MenuItems
#MainMenuExitApplication
EndEnumeration
Enumeration Gadgets
#MainButton1
#MainButton2
#MainButton3
EndEnumeration
Enumeration Status
#MainStatusBar
EndEnumeration
Enumeration Images
#MainButtonIcon1
#MainButtonImage1
#MainButtonImage2
#MainButtonImage3
EndEnumeration
Global ExitApplication
UsePNGImageDecoder()
; ----
Procedure CenterImage(Image, NewImage, Width, Height, Depth = 32, BackColor = #PB_Image_Transparent)
Protected r1, x, y, dx, dy, image2
r1 = CreateImage(NewImage, Width, Height, Depth, BackColor)
If r1
If NewImage = #PB_Any
NewImage = r1
EndIf
dx = ImageWidth(Image)
dy = ImageHeight(Image)
x = (Width - dx) / 2
y = (Height - dy) / 2
If StartDrawing(ImageOutput(NewImage))
DrawAlphaImage(ImageID(Image), x, y)
StopDrawing()
EndIf
EndIf
ProcedureReturn r1
EndProcedure
Procedure CreateButtonImage(Image, Width, Height, Text.s, Icon=#PB_Ignore, TextColor=#Black,BackColor=#Gray)
Protected r1, x, y, dx, dy, x2, y2, dx2, dy2
dx = DesktopScaledX(Width)
dy = DesktopScaledY(Height)
r1 = CreateImage(Image, dx, dy, 32, #PB_Image_Transparent)
If r1
If Image = #PB_Any
Image = r1
EndIf
If StartDrawing(ImageOutput(Image))
x = 3
y = 3
dx2 = dx - 6
dy2 = dy - 6
DrawingMode(#PB_2DDrawing_AllChannels)
RoundBox(x, y, dx2, dy2, 4, 4, $FF000000 | BackColor)
DrawingMode(#PB_2DDrawing_Outlined)
RoundBox(x, y, dx2, dy2, 4, 4, $FF000000 | #Gray)
If icon <> #PB_Ignore
DrawingMode(#PB_2DDrawing_Transparent)
dx2 = ImageWidth(Icon)
dy2 = ImageHeight(Icon)
x = dx2
y = (dy - dy2) / 2
DrawAlphaImage(ImageID(Icon), x, y)
dy2 = TextHeight("X")
x + dx2 * 3 / 2
y = (dy /2 - dy2 / 2)
DrawText(x, y, Text, TextColor)
Else
DrawingMode(#PB_2DDrawing_Transparent)
dx2 = TextWidth(Text)
dy2 = TextHeight("X")
x = (dx / 2 - dx2 / 2)
y = (dy / 2 - dy2 / 2)
DrawText(x, y, Text, TextColor)
EndIf
StopDrawing()
EndIf
EndIf
ProcedureReturn r1
EndProcedure
; ----
Procedure UpdateWindow()
Protected dx, dy
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
; Resize gadgets
EndProcedure
; ----
Procedure Main()
Protected dx, dy, IconFile.s
#MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
; Menu
CreateMenu(#MainMenu, WindowID(#Main))
MenuTitle("File")
MenuItem(#MainMenuExitApplication, "E&xit")
; For Mac
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
If Not IsMenu(#MainMenu)
CreateMenu(#MainMenu, WindowID(#Main))
EndIf
MenuItem(#PB_Menu_About, "")
MenuItem(#PB_Menu_Preferences, "")
CompilerEndIf
; StatusBar
CreateStatusBar(#MainStatusBar, WindowID(#Main))
AddStatusBarField(#PB_Ignore)
StatusBarText(#MainStatusBar, 0, " " + #Version)
; Gadgets
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
IconFile = #PB_Compiler_Home + "examples"+#PS$+"sources"+#PS$+"Data"+#PS$+"world.png"
LoadImage(#MainButtonIcon1, IconFile)
CreateButtonImage(#MainButtonImage1, 180, 40, "Hell World", 0, #White, #Blue)
ButtonImageGadget(#MainButton1, 10, 10, 180, 40, ImageID(#MainButtonImage1))
CreateButtonImage(#MainButtonImage2, 180, 40, "Hell World", 0)
ButtonImageGadget(#MainButton2, 10, 60, 180, 40, ImageID(#MainButtonImage2))
CreateButtonImage(#MainButtonImage3, 180, 40, "Alarm", #PB_Ignore, #Yellow, #Red)
ButtonImageGadget(#MainButton3, 10, 110, 180, 40, ImageID(#MainButtonImage3))
; Bind events
BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
; Main loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
ExitApplication = #True
Case #PB_Event_Menu
Select EventMenu()
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
Case #PB_Menu_About
MessageRequester("Info", #ProgramTitle + " " + #Version)
Case #PB_Menu_Preferences
Case #PB_Menu_Quit
ExitApplication = #True
CompilerEndIf
Case #MainMenuExitApplication
ExitApplication = #True
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
Until ExitApplication
EndIf
EndProcedure : Main()