Page 1 sur 1

ToolBar + ComboBox

Publié : jeu. 03/juin/2004 9:38
par fweil
Voici un code qui permet d'intégrer un ComboBox dans la barre d'outil d'une fenêtre.

Le truc est tout simple mais comme la question était posée (sur le forum EN) j'ai commis cet exemple (nommage de variables assez clair je pense, mais sans commentaires) :

Code : Tout sélectionner

Enumeration
#Window_Main
#ToolBar
#ToolBar_New
#ToolBar_Open
#ToolBar_Save
#ToolBar_Print
#ToolBar_Find
#ToolBar_NewProject
#ToolBar_SaveProject
#Gadget_ComboBox_1
#Gadget_ComboBox_2
#ImageNewProject
#ImageSaveProject
#Menu
EndEnumeration
  WindowXSize = 480
  WindowYSize = 360
  Quit = #FALSE
  If OpenWindow(#Window_Main, 0, 0, WindowXSize, WindowYSize, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered, "ToolBar + ComboBox example")
      hToolBar = CreateToolBar(#ToolBar, WindowID(#Window_Main))
      If hToolBar
          ToolBarStandardButton(#ToolBar_New, #PB_ToolBarIcon_New)
          ToolBarStandardButton(#ToolBar_Open, #PB_ToolBarIcon_Open)
          ToolBarStandardButton(#ToolBar_Save, #PB_ToolBarIcon_Save)
          ToolBarSeparator()
          ToolBarStandardButton(#ToolBar_Print, #PB_ToolBarIcon_Print)
          ToolBarToolTip(#ToolBar_Print, "Print")
          ToolBarStandardButton(#ToolBar_Find, #PB_ToolBarIcon_Find)
          ToolBarToolTip(#ToolBar_Find, "Find a document")
          ToolBarSeparator()
          ToolBarImageButton(#ToolBar_NewProject, LoadImage(#ImageNewProject, "Data\NewProject.ico"))
          ToolBarImageButton(#ToolBar_SaveProject, LoadImage(#ImageSaveProject, "Data\SaveProject.ico"))
      EndIf
      If CreateMenu(#Menu, WindowID(#Window_Main))
          MenuTitle("Project")
          MenuItem(#ToolBar_New, "New")
          MenuItem(#ToolBar_Open, "Open")
          MenuItem(#ToolBar_Save, "Save")
      EndIf
      If CreateGadgetList(WindowID(#Window_Main))
          hComboBox1 = ComboBoxGadget(#Gadget_ComboBox_1,180,0,250,100,#PB_ComboBox_editable)
          SetParent_(hComboBox1, hToolBar)
          AddGadgetItem(#Gadget_ComboBox_1,-1,"ComboBox editable...") 
          ComboBoxGadget(#Gadget_ComboBox_2,10,80,250,100) 
          For a=1 To 5
            AddGadgetItem(#Gadget_ComboBox_2,-1,"ComboBox item "+Str(a))
          Next 
          SetGadgetState(#Gadget_ComboBox_2,2)
      EndIf
      DisableToolBarButton(#ToolBar_Save, 1)
      Repeat
        EventID = WaitWindowEvent()
        Select EventID
          Case #PB_EventMenu
            MessageRequester("Information", "ToolBar ou item menu : "+Str(EventMenuID()), 0)
          Case #PB_EventCloseWindow
            Quit = #TRUE
        EndSelect
      Until Quit
  EndIf
End
A utiliser avec les images situées dans Examples/Sources/Data de PureBasic.

Publié : jeu. 03/juin/2004 10:03
par Le Soldat Inconnu
exepté que pour le comboboxgadget, l'évènement est toujours en #PB_Event_Gadget et non en #PB_Event_Menu

sinon, l'astuce est toute bête, j'y avais jamais songé, merci

donc avec le messagerequester pour la combobox qui marche

Code : Tout sélectionner

Enumeration 
#Window_Main 
#ToolBar 
#ToolBar_New 
#ToolBar_Open 
#ToolBar_Save 
#ToolBar_Print 
#ToolBar_Find 
#ToolBar_NewProject 
#ToolBar_SaveProject 
#Gadget_ComboBox_1 
#Gadget_ComboBox_2 
#ImageNewProject 
#ImageSaveProject 
#Menu 
EndEnumeration 
  WindowXSize = 480 
  WindowYSize = 360 
  Quit = #False 
  If OpenWindow(#Window_Main, 0, 0, WindowXSize, WindowYSize, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered, "ToolBar + ComboBox example") 
      hToolBar = CreateToolBar(#ToolBar, WindowID(#Window_Main)) 
      If hToolBar 
          ToolBarStandardButton(#ToolBar_New, #PB_ToolBarIcon_New) 
          ToolBarStandardButton(#ToolBar_Open, #PB_ToolBarIcon_Open) 
          ToolBarStandardButton(#ToolBar_Save, #PB_ToolBarIcon_Save) 
          ToolBarSeparator() 
          ToolBarStandardButton(#ToolBar_Print, #PB_ToolBarIcon_Print) 
          ToolBarStandardButton(#ToolBar_Find, #PB_ToolBarIcon_Find) 
          ToolBarSeparator() 
      EndIf 
      If CreateGadgetList(WindowID(#Window_Main)) 
          hComboBox1 = ComboBoxGadget(#Gadget_ComboBox_1,170,0,250,100,#PB_ComboBox_Editable) 
          SetParent_(hComboBox1, hToolBar) 
          AddGadgetItem(#Gadget_ComboBox_1,-1,"ComboBox editable...") 
      EndIf 
     
      Repeat 
        EventID = WaitWindowEvent() 
        Select EventID 
          Case #PB_EventMenu 
            MessageRequester("Information", "ToolBar : "+Str(EventMenuID()), 0)
          Case #PB_EventGadget
            MessageRequester("Information", "ComboBox : "+Str(EventMenuID()), 0)
          Case #PB_EventCloseWindow 
            Quit = #True 
        EndSelect 
      Until Quit 
  EndIf 
End 

Publié : jeu. 03/juin/2004 16:18
par Chris
Ca me fait penser que j'avais commencé un code, et que je l'avais laissé tomber à cause de ce problème de combo, justement.

Je l'ai modifié, (ajouté SetParent_()), et ça fonctionne mieux, maintenant.

Le but du prog était de mettre un combo dans la barre d'outils de l'éditeur, (jaPBe, ou PureBasic), et d'y faire afficher les fichiers qui sont dans CodeArchiv avec leur répertoire. Mais c'était un peu gros pour moi, à l'époque :wink:

Par contre, j'ai toujours le problème d'arriver à détecter si c'est jaPBe ou PureBasic qui est lancé. Alors pour l'instant, il faut choisir "à la main".
1 pour jaPBe, et 2 pour PureBasic.

Je mets le code ici, si ça vous dit de continuer le truc,...

Code : Tout sélectionner

;- Constantes
#NewCombo = 100
#NewWindow = 1000

#JaPBe = 1
#PureBasic = 2

;- Choix de l'éditeur : 1 pour jaPBe, ou 2 pour PureBasic
Editeur = 1 ; Choisir 1 ou 2 selon l'éditeur avec lequel on lance le programme

;- Détection de la barre d'outils de l'éditeur
Buffer.s = Space(255)
Select Editeur
  Case #JaPBe ; Editeur jaPBe
    hMain = FindWindow_("WindowClass_7","jaPBe")
    hToolBar = FindWindowEx_(hMain,#Null,"ToolbarWindow32","")
    
  Case #PureBasic ; Editeur PureBasic
    hMain = FindWindow_("WindowClass_0",#Null)
    GetWindowText_(hMain,@Buffer,255)
    If Left(Buffer,9) = "PureBasic"
      hToolBar = FindWindowEx_(hMain,#Null,"ToolbarWindow32","")
    EndIf
EndSelect

;- On crée une fenêtre PopUp qui vient se superposer à la barre d'outils
;- et on met un ComboBox à l'intérieur
hWnd = OpenWindow(#NewWindow,600,0,200,20,#WS_POPUP ,"")
If CreateGadgetList(hWnd)
  hCombo = ComboBoxGadget(#NewCombo,0,0,200,200)
  For i = 0 To 5
    AddGadgetItem(100,i,"Ligne "+Str(i))
  Next
  SetGadgetState(#NewCombo,1)
EndIf

;- On déclare la nouvelle fenêtre comme "Fille" de la barre d'outils
SetParent_(hWnd,hToolBar); : UseWindow(#NewWindow)

Repeat
  Select WindowEvent()
    Case #PB_EventGadget
      Select EventGadgetID()
        Case #NewCombo
          If EventType() = #PB_EventType_RightClick
            MessageRequester("Cliqué sur...",Str(GetGadgetState(#NewCombo)))
          EndIf
      EndSelect
      
      ;- Pour le moment, comme on a pas de bouton pour quitter, on cliques 
      ;- dans le combo, et on quitte avec "Escape"
    Case #WM_KEYDOWN
      Select EventwParam()
        Case $1B : quit = #True
      EndSelect
  EndSelect
Until quit
End
@Fred
A propos, Fred, quand vas tu modifier EventType() pour que le click gauche dans un combo corresponde à #PB_EventType_LeftClick, au lieu de #PB_EventType_RightClick.?

Tu ne reconnais pas ta gauche de ta droite ? :wink:
Pour info, la main droite, c'est celle dont le pouce est à gauche 8) :jesors:

Chris :)

Publié : ven. 04/juin/2004 17:34
par nico
Pareil, un ancien code d'essai sur les Rebars calqué sur le Source du Soldat:

Code : Tout sélectionner

Enumeration 
  #Window_Main 
  #ToolBar 
  #ToolBar2
  #ToolBar_New 
  #ToolBar_Open 
  #ToolBar_Save 
  #ToolBar_Print 
  #ToolBar_Find 
  #ToolBar_NewProject 
  #ToolBar_SaveProject 
  #Gadget_ComboBox_1 
  #CheckBoxGadget 
  #ImageNewProject 
  #ImageSaveProject 
  #Menu 
EndEnumeration 

Structure REBARBANDINFO1
  cbSize.l
  fMask.l
  fStyle.l
  clrFore.l
  clrBack.l
  lpText.s
  cch.l
  iImage.l
  hwndChild.l
  cxMinChild.l
  cyMinChild.l
  cx.l
  hbmBack.l
  wID.l
  cyChild.l
  cyMaxChild.l
  cyIntegral.l
  cxIdeal.l
  lParam.l
  cxHeader.l
EndStructure

WindowXSize = 480 
WindowYSize = 360 
Quit = #False
rbi.REBARINFO 
rbBand.REBARBANDINFO1
rc.RECT          
 
If OpenWindow(#Window_Main, 0, 0, WindowXSize, WindowYSize,#WS_OVERLAPPEDWINDOW |#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered, "Rebar + ToolBar + ComboBox example") 
  
  hwndRebar.l=CreateWindowEx_(#WS_EX_TOOLWINDOW,"ReBarWindow32","",#WS_CHILD|#WS_VISIBLE| #WS_BORDER |#WS_CLIPCHILDREN |#WS_CLIPSIBLINGS | #RBS_VARHEIGHT | #RBS_BANDBORDERS |#CCS_NODIVIDER | #CCS_NOPARENTALIGN,0,0,WindowXSize, WindowYSize,WindowID(0),2025,0,#null)
  
  hToolBar = CreateToolBar(#ToolBar, hwndRebar) 
  If hToolBar 
    ToolBarStandardButton(#ToolBar_New, #PB_ToolBarIcon_New) 
    ToolBarStandardButton(#ToolBar_Open, #PB_ToolBarIcon_Open) 
    ToolBarStandardButton(#ToolBar_Save, #PB_ToolBarIcon_Save) 
    ToolBarSeparator() 
    ToolBarStandardButton(#ToolBar_Print, #PB_ToolBarIcon_Print) 
    ToolBarStandardButton(#ToolBar_Find, #PB_ToolBarIcon_Find) 
    ToolBarSeparator() 
  EndIf 
  
  hToolBar2 = CreateToolBar(#ToolBar2, hwndRebar)
  If hToolBar2 
    ToolBarStandardButton(#ToolBar_New, #PB_ToolBarIcon_New) 
    ToolBarStandardButton(#ToolBar_Open, #PB_ToolBarIcon_Open) 
    ToolBarStandardButton(#ToolBar_Save, #PB_ToolBarIcon_Save) 
    ToolBarSeparator() 
    ToolBarStandardButton(#ToolBar_Print, #PB_ToolBarIcon_Print) 
    ToolBarStandardButton(#ToolBar_Find, #PB_ToolBarIcon_Find) 
    ToolBarSeparator() 
  EndIf 
  
  If CreateGadgetList(WindowID(#Window_Main)) 
    hComboBox1 = ComboBoxGadget(#Gadget_ComboBox_1,170,0,220,100,#PB_ComboBox_Editable)
    HCheckBox=CheckBoxGadget(#CheckBoxGadget,170, 5,250,20,"CheckBox standard")
    SetParent_(hComboBox1, hToolBar)
    SetParent_(HCheckBox, hToolBar2)
    AddGadgetItem(#Gadget_ComboBox_1,-1,"ComboBox editable...") 
  EndIf 
   
  rbi\cbSize = SizeOf(REBARINFO)
  rbi\fMask  = 0
  rbi\himl   = 0
  SendMessage_(hwndRebar, #RB_SETBARINFO, 0, rbi)
  
  
  idtoolbar=GetDlgCtrlID_(hToolBar)
  GetWindowRect_(hToolBar, @rc.RECT)
  
  rbBand\cbSize       = SizeOf(REBARBANDINFO)
  rbBand\fMask        = #RBBIM_SIZE | #RBBIM_CHILD | #RBBIM_CHILDSIZE |#RBBIM_ID | #RBBIM_STYLE | #RBBIM_TEXT | #RBBIM_BACKGROUND 
  rbBand\cxMinChild   = rc\right - rc\left
  rbBand\cyMinChild   = rc\bottom - rc\top
  rbBand\cx           = 100
  rbBand\fStyle       = #RBBS_CHILDEDGE | #RBBS_FIXEDBMP | #RBBS_GRIPPERALWAYS 
  rbBand\wID          = idtoolbar
  rbBand\hwndChild    = hToolBar
  rbBand\lpText       = "Toolbar 1"
  rbBand\hbmBack      = 0
  
  lResult = SendMessage_(hwndRebar, #RB_INSERTBAND, 0, rbBand)
  
  
  idtoolbar2=GetDlgCtrlID_(hToolBar2) 
  GetWindowRect_(hToolBar2, @rc2.RECT)
  
  rbBand\cbSize       = SizeOf(REBARBANDINFO)
  rbBand\fMask        = #RBBIM_SIZE | #RBBIM_CHILD | #RBBIM_CHILDSIZE |#RBBIM_ID | #RBBIM_STYLE | #RBBIM_TEXT | #RBBIM_BACKGROUND 
  rbBand\cxMinChild   = rc2\right - rc2\left
  rbBand\cyMinChild   = rc2\bottom - rc2\top
  rbBand\cx           = 100
  rbBand\fStyle       = #RBBS_CHILDEDGE | #RBBS_FIXEDBMP | #RBBS_GRIPPERALWAYS 
  rbBand\wID          = idtoolbar2
  rbBand\hwndChild    = hToolBar2
  rbBand\lpText       = "Toolbar 2"
  rbBand\hbmBack      = 0
  
  lResult = SendMessage_(hwndRebar, #RB_INSERTBAND, 0, rbBand)
  
  Repeat 
    EventID = WaitWindowEvent() 
    Select EventID 
      Case #PB_EventMenu 
        MessageRequester("Information", "ToolBar : "+Str(EventMenuID()), 0) 
      Case #PB_EventGadget 
        MessageRequester("Information", "Id="+Str(EventMenuID()), 0) 
      Case #PB_EventCloseWindow 
        Quit = #True 
    EndSelect 
  Until Quit 
EndIf 
End 
:)