Superscript & Subscript for ButtonGadget-TextGadegt(Windows)

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Superscript & Subscript for ButtonGadget-TextGadegt(Windows)

Post by RASHAD »

Hi

Code: Select all

CrossCur  = LoadCursor_(0, #IDC_HAND)
HelpCur  = LoadCursor_(0, #IDC_HELP)

LoadFont(0,"Georgia",14)
LoadFont(1,"Georgia",7)
  
Procedure TransImage(gad,w,h,text$,fcolor,bcolor)
  result$ = RemoveString(text$,",")
  result$ = RemoveString(result$,"+")
  result$ = RemoveString(result$,"-")
  StartDrawing(WindowOutput(0))
    DrawingFont(FontID(0))
    hh = TextHeight("Q") + 3
    pos = TextWidth("W")    
    ww = TextWidth(result$)
  StopDrawing()
  If IsImage(gad)
    MessageRequester("Error","The image is created before !",#PB_MessageRequester_Ok|#MB_ICONSTOP)
    ProcedureReturn
  Else
    If GadgetType(gad) = #PB_GadgetType_Button
      SetWindowLongPtr_(GadgetID(gad),#GWL_STYLE, GetWindowLongPtr_(GadgetID(gad),#GWL_STYLE)|#BS_BITMAP)
    ElseIf GadgetType(gad) = #PB_GadgetType_Text
      SetWindowLongPtr_(GadgetID(gad),#GWL_STYLE, GetWindowLongPtr_(GadgetID(gad),#GWL_STYLE)|#SS_BITMAP|#SS_NOTIFY)
    EndIf
    CreateImage(gad,ww,hh,32,$FFFFFF)
    n = CountString(text$,",") + 1
  EndIf
  StartDrawing(ImageOutput(gad))
    DrawingMode(#PB_2DDrawing_Transparent )
    For k = 1 To n
      result$ = StringField(text$, k, ",")
      If Left(result$,1) = "+"
        result$ = RemoveString(result$,"+",#PB_String_CaseSensitive,1,1)
        DrawingFont(FontID(1))
        pos = DrawText(pos,0,result$,fcolor)
      ElseIf Left(result$,1) = "-"
        result$ = RemoveString(result$,"-",#PB_String_CaseSensitive,1,1)
        DrawingFont(FontID(1))
        pos = DrawText(pos,hh/2,result$,fcolor)
      Else
        DrawingFont(FontID(0))
        pos = DrawText(pos,2,result$,fcolor)
      EndIf
    Next
    For y = 0 To hh-1
      For x = 0 To ww-1
        DrawingMode(#PB_2DDrawing_Default)
        If Point(x,y) = $FFFFFF
           DrawingMode(#PB_2DDrawing_AllChannels )
           If GadgetType(gad) = #PB_GadgetType_Button
              Plot(x,y,$00FFFFFF)
           ElseIf GadgetType(gad) = #PB_GadgetType_Text
              Plot(x,y,bcolor)
           EndIf
        EndIf
      Next
    Next    
  StopDrawing()
  ResizeGadget(gad,#PB_Ignore,#PB_Ignore,#PB_Ignore,hh)
  If GadgetType(gad) = #PB_GadgetType_Button
      SendMessage_(GadgetID(gad),#BM_SETIMAGE,#IMAGE_BITMAP, ImageID(gad))
  ElseIf GadgetType(gad) = #PB_GadgetType_Text
      SendMessage_(GadgetID(gad),#STM_SETIMAGE,#IMAGE_BITMAP, ImageID(gad))
  EndIf
EndProcedure 
  
OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(0, 10, 10, 200, 0, "")
  TransImage(0,140,10,"HH,++2,OO,-RASHAD",0,0)
  ContainerGadget(1,10,40,200,26,#PB_Container_Flat)  
    TextGadget(2, 0, 0, 200, 26, "")
    TransImage(2,140,10,"H,-2,O,+RASHAD",$151AFF,$FFDAFEFE)
  CloseGadgetList()
  SetGadgetColor(1,#PB_Gadget_BackColor,$FFDAFEFE & $FFFFFF) 
  ButtonGadget(3, 10, 70, 200, 26, "Right Button", #PB_Button_Right)
  ButtonGadget(4, 10,100, 200, 60, "Multiline Button  (longer text gets automatically wrapped)", #PB_Button_MultiLine)
  ButtonGadget(5, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow 
      Quit=1 
  
  Case #WM_MOUSEMOVE  
    Select ChildWindowFromPoint_(WindowID(0),WindowMouseY(0) << 32 + WindowMouseX(0)) 
      Case GadgetID(0)
        SetClassLongPtr_(GadgetID(0), #GCL_HCURSOR, 0)
        SetCursor_(CrossCur)
        
      Case GadgetID(1)
        SetClassLongPtr_(GadgetID(1), #GCL_HCURSOR, 0)
        SetCursor_(HelpCur)
    EndSelect 
  EndSelect 
Until Quit=1
Egypt my love