Page 1 sur 1

Problème avec #TB_GETBUTTONINFO

Publié : mar. 14/sept./2004 17:44
par nico
Je n'arrive pas à utiliser le message #TB_GETBUTTONINFO, avant d'envoyer ce message via Sendmessage, il faut au préalable remplir les champs cbSize et dwMask.

Je n'arrive pas à trouver mon erreur, si vous avez des idées :?

Voici le code d'essai:

Code : Tout sélectionner

Structure TBBUTTONINFO
  cbSize.l
  dwMask.l
  idCommand.l
  iImage.l
  fsState.b
  fsStyle.b
  cx.w
  *lParam.l
  *pszText.l
  cchText.l
EndStructure 

#TBIF_TEXT =2
#TBIF_STATE=4
#TBIF_COMMAND=$20
#TBIF_IMAGE=1
#TBIF_STYLE=8
#TBIF_LPARAM=$10
#TBIF_BYINDEX=$80000000

#TB_GETBUTTONINFO=$400+65 

  If OpenWindow(0, 0, 0, 150, 25, #PB_Window_SystemMenu |#PB_Window_ScreenCentered, "ToolBar") 
    hToolbar=CreateToolBar(0, WindowID()) 
    If hToolbar
      ToolBarStandardButton(0, #PB_ToolBarIcon_New) 
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open) 
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save) 
    EndIf
    
    button_info.TBBUTTONINFO
    button_info\cbSize=SizeOf(TBBUTTONINFO)
    button_info\dwMask=#TBIF_TEXT | #TBIF_STATE | #TBIF_COMMAND | #TBIF_IMAGE | #TBIF_STYLE | #TBIF_LPARAM 
    
    Debug SendMessage_( hToolbar, #TB_GETBUTTONINFO, 1, @button_info)
    
    Repeat 
      EventID = WaitWindowEvent() 
      If EventID = #PB_EventMenu 
        Debug "ToolBar ID: "+Str(EventMenuID()) 
      EndIf 
    Until EventID = #PB_EventCloseWindow 
  EndIf 

Publié : jeu. 16/sept./2004 18:15
par Chris
#TB_GETBUTTONINFO=$400+65
Non !, #TB_GETBUTTONINFO = $400 + 63 (ou #WM_USER + 63)

Publié : jeu. 16/sept./2004 19:08
par nico
C'est la première fois que ApiViewer me donne une fausse information!

MERCI CHRIS :D


Pour la peine, un petit code rien que pour toi:

Code : Tout sélectionner

;nico

#TB_GETIMAGELIST=$400+49

Dim nmt.NMTOOLBAR(5)

Global hToolbar

Procedure ProcedureCallback(WindowID, Message, wParam, lParam) 
  Resultat = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_NOTIFY
      *pointeur.NMHDR=lParam
      *pointeur1=*pointeur\hwndFrom
      Debug "--------------------" 
      Select *pointeur1  
        Case hToolbar
          *pointeur2=*pointeur\code
          Select *pointeur2
            Case #TBN_QUERYINSERT
              ProcedureReturn 1
              
            Case #TBN_QUERYDELETE 
              *pointeur3.NMTOOLBAR=lParam
              If *pointeur3\tbbutton\idCommand=3 
                ProcedureReturn 0 
              EndIf                   
              ProcedureReturn 1
              
            Case #TBN_GETBUTTONINFO
              *pointeur3.NMTOOLBAR=lParam 
              If *pointeur3\iItem < 5
                *pointeur4=AllocateMemory(SizeOf(NMTOOLBAR))
                *pointeur5=@nmt(*pointeur3\iItem)
                CopyMemory(*pointeur5, *pointeur3, (SizeOf(NMTOOLBAR)))
                FreeMemory(*pointeur4)
                ProcedureReturn 1
              EndIf 
              
          EndSelect
      EndSelect
  EndSelect
  ProcedureReturn Resultat 
EndProcedure 

hIcon= LoadImage(0, "c:\caption.ico") 
  
If OpenWindow(0, 0, 0, 150, 100, #PB_Window_SystemMenu |#PB_Window_ScreenCentered, "ToolBar")
  SetWindowCallback(@ProcedureCallback()) 
  hToolbar=CreateToolBar(10, WindowID())
  
  If hToolbar 
    ToolBarStandardButton(0, #PB_ToolBarIcon_New) 
    ToolBarStandardButton(1, #PB_ToolBarIcon_Open) 
    ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
    ToolBarImageButton(3, UseImage(0))
  EndIf
  
  If CreateMenu(0, WindowID())
    MenuTitle("Dialog")
    MenuItem(4, "Custom")
  EndIf
   
  For i=0 To 4
    If i=3
      hIml= SendMessage_( hToolbar, #TB_GETIMAGELIST, 0, 0)
      ImageList_ReplaceIcon_(hIml, 12, hIcon)
      nmt(i)\tbbutton\iBitmap=12 
    Else
      nmt(i)\tbbutton\iBitmap=i+6
    EndIf 
      nmt(i)\tbbutton\idCommand=i
      nmt(i)\tbbutton\fsState=#TBSTATE_ENABLED 
  Next i
  
  Repeat 
    EventID = WaitWindowEvent()
    Select EventID 
      Case #PB_EventMenu 
        Select EventMenuID() 
          Case 4
            SendMessage_(hToolbar,#TB_CUSTOMIZE,0,0)
          Default
            MessageRequester("Information", "ToolBar or Menu ID: "+Str(EventMenuID()), 0)
        EndSelect  
    EndSelect 
  Until EventID = #PB_EventCloseWindow 
EndIf