PanelGadget und Event TCN_SELCHANGING

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

PanelGadget und Event TCN_SELCHANGING

Beitrag 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?
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Beitrag von shadow »

Hat sich noch niemand damit auseinandersetzen müssen?
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ich verstehe nicht direkt was du meinst.
Zeig mal mehr Code um es auch jemandem wie mir klar zu machen. :wink:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Beitrag 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 ...
Antworten