Sorry fürs mehrfach posten.
Das mit dem Einfärben des aktiven Reiters habe ich Dank des Codeschnipsels aus dem englischen Forum hingekriegt. (Solange nur 1 PanelGadget da ist)
Ich habe aber zwei Panelgadget´s - sh. Code unten.
Wenn ich den Callback nur für ein Panel aktiviere klappt auch alles (Zeilen 55 und 56 sind im Code auskommentiert). Aktiviere ich den Callback auch fürs zweite Panel wird zwar dort auch der aktive Reiter eingefärbt. Klickt man aber im zweiten Panel auf die Reiter TAB1 bis TAB5 sieht man an der Beschriftung des Buttons (TXT1 der sich nicht ändert) das die Fläche des Panels nicht mehr aktualisiert wird. Ist nur für ein Panel der Callback aktiviert ändert sich beim Klick auf TAB1 bis TAb5 auf der Text des Button, sprich die Fläche des Panels wird dort dann auch aktualisiert.
Ich checke das gerade nicht, da mein Callback ja eigentlich nur auf die "REPAINT" des Tab´s reagiert (was bei einem Panel ja auch klappt).
Wenn da einer der API-Profis vielleicht mal drüber schauen könnte... *** NicknameFJ schön bitte bitte sagt***
Danke
NicknameFJ
//EDIT:
Habe XP SP3 und PB 4.60
//noch ein Edit:
Jetzt brat mir einer einen Storch:
Habe noch Openwindow folgendes eingefügt:
und das Ganze mit PB
4.10 compiliert und es läuft wie es soll. Wenn da jetzt aber jemand noch eine Lösung für PB 4.60 / 4.61 hat.
// ENDEDIT
Hier noch der Code:
Code: Alles auswählen
Global defaultBrush = CreateSolidBrush_(GetSysColor_(#COLOR_3DFACE))
Global OldProc
#MainWindow = 1
#PanelMain = 1
#PanelExt = 2
Procedure myPGcallback(hwnd, msg, wParam, lParam)
Result = CallWindowProc_(OldProc, hwnd, msg, wParam, lParam)
Select msg
Case #WM_DRAWITEM
*PGdis.DRAWITEMSTRUCT = lParam
If *PGdis\CtlType = #ODT_TAB
Gadget = GetProp_(*PGdis\hwnditem, "PB_ID")
If *PGdis\itemID = GetGadgetState(Gadget)
Color = #Red
If Gadget = #PanelExt
Color = #Blue
EndIf
tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID)
FillRect_(*PGdis\hdc, *PGdis\rcItem, defaultBrush)
SetTextColor_(*PGdis\hdc, Color)
SetBkMode_(*PGdis\hdc, #TRANSPARENT)
DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
Else
tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID)
FillRect_(*PGdis\hdc, *PGdis\rcItem, defaultBrush)
SetTextColor_(*PGdis\hdc, #Black)
SetBkMode_(*PGdis\hdc, #TRANSPARENT)
DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(#MainWindow,10,10,800,500,"TEST")
PanelGadget(#PanelMain,10,10,750,450)
SetWindowLong_(GadgetID(#PanelMain), #GWL_STYLE, GetWindowLong_(GadgetID(#PanelMain), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
OldProc = SetWindowLong_(GetParent_(GadgetID(#PanelMain)), #GWL_WNDPROC, @myPGcallback())
For i = 1 To 10
OpenGadgetList(#PanelMain)
AddGadgetItem(#PanelMain,-1,"Reiter # "+Str(i))
If i = 1 ; im ersten Reiter des Hauptpanel (und nur dort) ein weiteres Panelgadget erstellen
PanelGadget(#PanelExt,10,10,600,350)
; SetWindowLong_(GadgetID(#PanelExt), #GWL_STYLE, GetWindowLong_(GadgetID(#PanelExt), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
; Old = SetWindowLong_(GetParent_(GadgetID(#PanelExt)), #GWL_WNDPROC, @myPGcallback())
If OldProc = 0
OldProc = Old
EndIf
For lp = 1 To 5
AddGadgetItem(#PanelExt,-1,"Tab "+Str(lp) )
ButtonGadget(10+lp,10,10,80,20,"TXT"+Str(lp))
Next
EndIf
Next
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf