Seite 1 von 1

PanelGadget und Event TCN_SELCHANGING

Verfasst: 22.08.2005 18:06
von shadow
Hi,
ich habe ein PanelGadget mit mehreren TABs. Jetzt versuch ich in der Callback-Funktion im WM_NOTIFY-Bereich das Ereignis abzufangen, wenn ein TAB ausgewählt wurde. Hierzu folgender Code:

Code: Alles auswählen

  Select message
    Case #WM_SIZE
        ...
    Case #WM_NOTIFY 
      *pnmh.NMHDR = lParam 
      Select *pnmh\code 
        Case #TCN_SELCHANGING
          Debug "klick"
          Result = #True
        Case #NM_CUSTOMDRAW 
            ...
Das Problem ist jedoch, dass ich das Ereignis nicht bekomme!?!
Weiß nicht, werden bestimmte Ereignisse in PB rausgefiltert oder mach ich was falsch? Der selbe Code funktioniert aber in C++ ...

Hinweis: Die Callback wurde dem Parent-Window zugewiesen. Das PanelGadget liegt in einem ScrollAreaGadget. Könnte es daran liegen?

Verfasst: 23.08.2005 13:45
von shadow
Hat sich noch niemand damit auseinandersetzen müssen?

Verfasst: 23.08.2005 14:43
von Batze
Ich verstehe nicht direkt was du meinst.
Zeig mal mehr Code um es auch jemandem wie mir klar zu machen. :wink:

Verfasst: 23.08.2005 15:13
von shadow
OK, einfach ausgedrückt: Ich habe ein PanelGadget (Tab Control), kriege aber kein Ereignis, wenn der Benutzer einen anderen Reiter ausgewählt hat.

Meine Callback:

Code: Alles auswählen

Procedure.l WindowCallback(WindowID, message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  
  Select message
    Case #WM_SIZE
      If WindowID = hStdPlan
        ResizeGadget(#Gadget_StdPlanScrollArea, 0, 40, WindowWidth(), WindowHeight() - 60)
        UpdateTB(#Toolbar_StdPlan)
      EndIf
    Case #WM_NOTIFY 
      *pnmh.NMHDR = lParam 
      Select *pnmh\code 
[color=red]
        Case #TCN_SELCHANGING
          Debug "klick"
          Result = #True
[/color]
        Case #NM_CUSTOMDRAW 
          *LVCDHeader.NMLVCUSTOMDRAW = lParam
          ForEach StdPlanTbls() 
            If *LVCDHeader\nmcd\hdr\hwndFrom = StdPlanTbls()\handle
              Select *LVCDHeader\nmcd\dwDrawStage 
                Case #CDDS_PREPAINT 
                  Result = #CDRF_NOTIFYITEMDRAW 
                Case #CDDS_ITEMPREPAINT 
                  Result = #CDRF_NOTIFYSUBITEMDRAW 
                Case #CDDS_SUBITEMPREPAINT 
                  Row = *LVCDHeader\nmcd\dwItemSpec 
                  col = *LVCDHeader\iSubItem 
                  If col = 0 
                    SelectObject_(*LVCDHeader\nmcd\hdc, hCourierNewSmallBold) 
                  Else 
                    SelectObject_(*LVCDHeader\nmcd\hdc, hCourierNewSmall) 
                  EndIf 
                  If Row&1=0 
                    *LVCDHeader\clrTextBk = RGB(255, 255, 223) 
                    If col=3 
                      *LVCDHeader\clrText = RGB(255, 0, 0) 
                    Else 
                      *LVCDHeader\clrText = RGB(0, 0, 0) 
                    EndIf 
                  Else 
                    *LVCDHeader\clrTextBk = RGB(208, 208, 176) 
                    If col=3 
                      *LVCDHeader\clrText = RGB(0, 0, 255) 
                    Else 
                      *LVCDHeader\clrText = RGB(0, 0, 0) 
                    EndIf 
                  EndIf 
                  Result = #CDRF_NEWFONT 
              EndSelect 
              Break
            EndIf 
        Next
      EndSelect 
  EndSelect

  ProcedureReturn Result 
EndProcedure
Ich denke das reicht verständnishalber aus. Oder braucht ihr nochwas?

NACHTRAG:
Ah, jetzt hab ich es :mrgreen:
Das Change-Ereignis wird an die normale PB-Ereignisprozedur weitergegeben und kann mittels EventGadgetID() abgefragt werden. Weiß nicht genau, ob das so korrekt ist, wird aber fürs erste wohl ausreichen müssen ...