Here's what I use now for simulating the line below the shortcut character -- quite complicate but there's a small bonus, the line color can be set to a prefered colour...
Code: Select all
Global OptIconsActive=#True
#ButtonIconBorder=10
#ButtonIconPadding=6
#ButtonIconDefaultSize=16
#ButtonIconPrefixColor=#Red
Enumeration
#ButtonIcon_Null =%0000
#ButtonIcon_Left =%0001
#ButtonIcon_Center =%0010
#ButtonIcon_NoPrefix =%1000
EndEnumeration
#NoTransparency=$ff000000
#FullTransparency=$00000000
Procedure SetGadgetIconText(Gadget,IconHandle,Text.s,IconSize=0,IconFlags=#ButtonIcon_Left)
Protected Font=GetGadgetFont(#PB_Default)
Protected BW,BH,IW
Protected WW,WX,WY
Protected Prefix,PX,PY,PW
If IconSize=0
IconSize=#ButtonIconDefaultSize
EndIf
BW=GadgetWidth(Gadget)
BH=GadgetHeight(Gadget)
IW=IconSize+#ButtonIconPadding
CreateImage(Gadget,1,1)
StartDrawing(ImageOutput(Gadget))
DrawingFont(Font)
If IconFlags&#ButtonIcon_NoPrefix=#False
Prefix=FindString(Text,"&",1)
If Prefix
Text=ReplaceString(Text,"&","")
PX=TextWidth(Left(Text,Prefix-1))
PW=TextWidth(Mid(Text,Prefix,1))
PY=TextHeight("W")-1
EndIf
EndIf
WW=IW+TextWidth(Text)
WY=(BH-TextHeight("Wg"))>>1
StopDrawing()
Select IconFlags&(#ButtonIcon_Left|#ButtonIcon_Center)
Case #ButtonIcon_Left,#ButtonIcon_Null
WX=#ButtonIconBorder
Case #ButtonIcon_Center
WX=(BW-WW)>>1
EndSelect
CreateImage(Gadget,BW,BH,32)
StartDrawing(ImageOutput(Gadget))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,BW,BH,#FullTransparency)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DrawingFont(Font)
If Prefix
LineXY(WX+IW+PX,WY+PY,WX+IW+PX+PW,WY+PY,#NoTransparency|#ButtonIconPrefixColor)
EndIf
DrawText(WX+IW,WY,Text,#NoTransparency|#Black)
If IconHandle
DrawImage(IconHandle,WX,(BH-IconSize)>>1)
EndIf
StopDrawing()
SetGadgetAttribute(Gadget,#PB_Button_Image,ImageID(Gadget))
EndProcedure
Procedure GadgetIconText(Gadget,X,Y,W,H,IconHandle,Text.s,Flags=0)
If OptIconsActive
ButtonImageGadget(Gadget,X,Y,W,H,0)
SetGadgetIconText(Gadget,IconHandle,Text,#ButtonIconDefaultSize,Flags)
Else
ButtonGadget(Gadget,X,Y,W,H,Text,Flags)
EndIf
EndProcedure
OpenWindow(0, 0, 0, 512, 384, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
UsePNGImageDecoder()
IconHandle=CatchImage(0,?IconData)
ImageGadget(99,220,200,200,200,0)
GadgetIconText(1,10,20,400,40,IconHandle,"#&ButtonIcon_Left",#ButtonIcon_Left)
GadgetIconText(2,10,70,400,40,IconHandle,"#ButtonIcon_Left & #ButtonIcon_NoPrefix",#ButtonIcon_Left|#ButtonIcon_NoPrefix)
GadgetIconText(3,10,120,400,40,IconHandle,"#B&uttonIcon_Center",#ButtonIcon_Center)
GadgetIconText(4,10,170,400,40,IconHandle,"#ButtonIcon_Center & #ButtonIcon_NoPrefix",#ButtonIcon_Center|#ButtonIcon_NoPrefix)
GadgetIconText(5,10,220,400,40,IconHandle,"Change Text & Prefix ?!")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
DisableGadget(1,Random(1)); dis/enables one button
SetGadgetIconText(5,IconHandle,"Demo &"+Chr(Random(25)+'A'),0,#ButtonIcon_Center); changes button text
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
DataSection
IconData:; Purebasic 'Z' by Michael Vogel
Data.b 0,0,1,0,1,0,16,16,0,0,1,0,8,0,104,5
Data.b 0,0,22,0,0,0,40,0,0,0,16,0,0,0,32,0
Data.b 0,0,1,0,8,0,0,0,0,0,0,1,0,0,0,0
Data.b 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0
Data.b 0,0,33,36,33,0,57,60,57,0,0,32,198,0,115,134
Data.b 214,0,132,146,222,0,165,174,231,0,222,219,222,0,231,231
Data.b 231,0,247,243,247,0,0,0,0,0,0,0,0,0,0,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.b 2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
Data.b 0,9,9,9,9,9,9,9,9,9,8,0,0,0,0,0
Data.b 0,9,9,9,9,9,9,9,9,9,8,0,0,0,0,0
Data.b 0,9,9,6,6,6,6,6,6,9,8,0,0,0,0,0
Data.b 0,9,9,3,3,3,3,3,3,9,8,0,0,0,0,0
Data.b 0,9,9,3,5,9,9,9,9,9,8,0,0,0,0,0
Data.b 0,9,9,6,3,5,9,9,9,9,8,0,0,0,0,0
Data.b 0,9,9,9,6,3,5,9,9,9,8,0,0,0,0,0
Data.b 0,9,9,9,9,6,3,5,9,9,8,0,0,0,0,0
Data.b 0,9,9,9,9,9,6,3,5,9,8,0,0,0,0,0
Data.b 0,9,9,3,3,3,3,3,4,8,7,0,0,0,0,0
Data.b 0,9,9,6,6,6,6,6,0,0,0,0,0,0,0,0
Data.b 0,9,9,9,9,9,9,9,0,8,0,0,0,0,0,0
Data.b 0,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0
Data.b 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,3
Data.b 0,0,192,3,0,0,192,3,0,0,192,3,0,0,192,3
Data.b 0,0,192,3,0,0,192,3,0,0,192,3,0,0,192,3
Data.b 0,0,192,3,0,0,192,3,0,0,192,3,0,0,192,7
Data.b 0,0,192,15,0,0,192,31,0,0,255,255,0,0
EndDataSection