Hallo zusammen,
ich habe ein Panelgadget und würde hier gerne den aktiven TAB/Reiter entweder,
1. die Schriftart bzw. Größe
2. die Schriftfarbe
oder
3. den Schriftstyle (fett)
ändern.
Habe schon etwas gesucht (Code Archiv, Win API Library von RS-Basic, Google) bin aber leider noch auf kein Codeschnipsel gestoßen.
Ich brauche das nur unter Windows, daher auch gerne WIN-API Lösungen.
Hat da jemand eine Idee bzw. ein Code-Schnipsel für mich?
Danke schon mal im Voraus.
Grüße
NicknameFJ
Panelgadget, aktiver Reiter in Fettschrift bzw. farbig
- NicknameFJ
- Beiträge: 324
- Registriert: 03.06.2007 14:36
- Wohnort: Von der Sonne aus gesehen der dritte Planet
Panelgadget, aktiver Reiter in Fettschrift bzw. farbig
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller


- NicknameFJ
- Beiträge: 324
- Registriert: 03.06.2007 14:36
- Wohnort: Von der Sonne aus gesehen der dritte Planet
Re: Panelgadget, aktiver Reiter in Fettschrift bzw. farbig
Kaum geschrieben, schon was gefunden im englischen Forum
Wer es auch gebrauchen kann:
http://www.purebasic.fr/english/viewtop ... or&start=0
Ich schaue mir das mal an ob es genau das ist was ich suche, sonst melde ich mich nochmal
NicknameFj
Wer es auch gebrauchen kann:
http://www.purebasic.fr/english/viewtop ... or&start=0
Ich schaue mir das mal an ob es genau das ist was ich suche, sonst melde ich mich nochmal
NicknameFj
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller


- NicknameFJ
- Beiträge: 324
- Registriert: 03.06.2007 14:36
- Wohnort: Von der Sonne aus gesehen der dritte Planet
Re: Panelgadget, aktiver Reiter in Fettschrift bzw. farbig
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:
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:
Code: Alles auswählen
CreateGadgetList(WindowID(#MainWindow))// 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller


Re: Panelgadget, aktiver Reiter in Fettschrift bzw. farbig
TCS_OWNERDRAWFIXED ueberlaesst das Parent Fenster das Zeichnen. Beim ersten Tab ist es das oberste Fenster, beim 2. Tab ist es ein Staticfenster. Das Mainfenster kann also nichts malen, was nicht auch auf dem Fenster liegt. Du musst also, jedes Parentfenster "subclassen".
Code: Alles auswählen
#MainWindow = 1
#PanelMain = 1
#PanelExt = 2
Procedure myPGcallback(hwnd, msg, wParam, lParam)
OldProc = GetProp_(hWnd, "OldProc")
result = CallWindowProc_(OldProc, hwnd, msg, wParam, lParam)
Select msg
Case #WM_DRAWITEM
*PGdis.DRAWITEMSTRUCT = lParam
If *PGdis\CtlType = #ODT_TAB
defaultBrush = CreateSolidBrush_(GetSysColor_(#COLOR_3DFACE))
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
DeleteObject_(defaultBrush)
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())
;edit
SetProp_(GetParent_(GadgetID(#PanelMain)),"OldProc",OldProc)
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())
;edit
SetProp_(GetParent_(GadgetID(#PanelExt)),"OldProc",OldProc)
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
- NicknameFJ
- Beiträge: 324
- Registriert: 03.06.2007 14:36
- Wohnort: Von der Sonne aus gesehen der dritte Planet
Re: Panelgadget, aktiver Reiter in Fettschrift bzw. farbig
Hallo Edel,
komme erstmal nicht dazu es zu testsen, aber trotzdem Danke.
Bei Problemen melde ich mich wieder.
Grüße
NicknameFJ
komme erstmal nicht dazu es zu testsen, aber trotzdem Danke.
Bei Problemen melde ich mich wieder.
Grüße
NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

