wie stelle ich den Font/Backcolor beim ComboBoxGadget() ein?
Code: Alles auswählen
  UsePNGImageDecoder()
  LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/world.png")
  
  If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ComboBoxGadget(0, 10, 10, 250, 21, #PB_ComboBox_Editable)
      AddGadgetItem(0, -1, "ComboBox editable...")
    ComboBoxGadget(1, 10, 40, 250, 21, #PB_ComboBox_Image)
      AddGadgetItem(1, -1, "ComboBox item with image", ImageID(0))
    ComboBoxGadget(2, 10, 70, 250, 21)
      For a = 1 To 5
        AddGadgetItem(2, -1,"ComboBox item " + Str(a))
      Next
    SetGadgetState(0, 0)
    SetGadgetState(1, 0)
    SetGadgetState(2, 2)    ; den dritten Eintrag (beginnend bei 0) als den aktiven Eintrag setzen
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Code: Alles auswählen
;Autor: Hroudtwolf
;http://www.purebasic.fr/english/viewtopic.php?p=284242#p284242
EnableExplicit
Define a
Structure tCBGEX
   hBackgroundBrush  .i
   nFrontColor       .i
   *oProc
EndStructure
Procedure _CBGExCB ( hWnd.i , idMsg.i , wParam.i , lParam.i )
   Protected *CBGEx.tCBGEX = GetProp_( hWnd , "CBGEXDATA" )
 
   Select idMsg
      Case #WM_CTLCOLOREDIT , #WM_CTLCOLORLISTBOX
      SetBkMode_( wParam , #TRANSPARENT )
      SetTextColor_( wParam , *CBGEx\nFrontColor )
      ProcedureReturn *CBGEx\hBackgroundBrush
     
      Case #WM_DESTROY
      DeleteObject_( *CBGEx\hBackgroundBrush )
      SetWindowLongPtr_( hWnd , #GWL_WNDPROC , *CBGEx\oProc )
      FreeMemory ( *CBGEx )
     
   EndSelect
 
  ProcedureReturn CallWindowProc_( *CBGEx\oProc , hWnd.i , idMsg.i , wParam.i , lParam.i )
EndProcedure
Procedure.i ComboBoxGadgetEx ( idGadget.i , nX.i , nY.i , nWidth.i , nHeight.i , btFlags.i = #Null )
   Protected nResult .i
   Protected hWnd    .i
   Protected *CBGEx  .tCBGEX
   
   nResult = ComboBoxGadget ( idGadget , nX , nY , nWidth , nHeight , btFlags )
   If Not nResult
      ProcedureReturn #Null
   EndIf
   
   If idGadget = #PB_Any
      hWnd = GadgetID ( nResult )
   Else
      hWnd = GadgetID ( idGadget )
   EndIf
   
   *CBGEx                     = AllocateMemory ( SizeOf ( tCBGEX ) )
   *CBGEx\oProc               = GetWindowLongPtr_( hWnd , #GWL_WNDPROC )
   *CBGEx\nFrontColor         = GetSysColor_( #COLOR_BTNTEXT )
   *CBGEx\hBackgroundBrush    = CreateSolidBrush_( GetSysColor_( #COLOR_WINDOW ) )
   
   SetProp_( hWnd , "CBGEXDATA" , *CBGEx )   
   SetWindowLongPtr_( hWnd , #GWL_WNDPROC , @ _CBGExCB () )
   
   InvalidateRect_( hWnd , #Null , #True )
   
   ProcedureReturn nResult
EndProcedure
Procedure.i ComboBoxGadgetEx_Color ( idGadget.i , nMode.i , nColor.i )
   Protected *CBGEx.tCBGEX 
   Protected hWnd
   
   If IsGadget ( idGadget )
      *CBGEx = GetProp_( GadgetID ( idGadget ) , "CBGEXDATA" )
      If Not *CBGEx
         ProcedureReturn #False
      EndIf   
   
      Select nMode
         Case #PB_Gadget_BackColor
         DeleteObject_( *CBGEx\hBackgroundBrush )
         *CBGEx\hBackgroundBrush = CreateSolidBrush_( nColor )
         
         Case #PB_Gadget_FrontColor
         *CBGEx\nFrontColor = nColor
         
         Default
         ProcedureReturn #False
               
      EndSelect
   
      InvalidateRect_( hWnd , #Null , #True )
      ProcedureReturn #True
   EndIf
   
   ProcedureReturn #False
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ComboBoxGadgetEx(1,10,10,480,20,0)
  
  For a=1 To 10
    AddGadgetItem(1,-1,"Testitem "+Str(a),0,0)
  Next
  
  SetGadgetState(1,0)
  
  ComboBoxGadgetEx_Color(1,#PB_Gadget_BackColor,RGB(50,50,255))
  ComboBoxGadgetEx_Color(1,#PB_Gadget_FrontColor,RGB(200,200,255))
  
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 2
; Folding = -
; EnableUnicode
; EnableXP
; EnableUser
; EnableCompileCount = 0
; EnableBuildCount = 0

 
 