ToolBar + ComboBox

Partagez votre expérience de PureBasic avec les autres utilisateurs.
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

ToolBar + ComboBox

Message 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.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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 
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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 
:)
Répondre