Aktuelle Zeit: 25.05.2013 13:53

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: TreeGadget Item Font
BeitragVerfasst: 22.04.2012 23:34 
Offline
Benutzeravatar

Registriert: 16.06.2011 14:38
Ich möchte die Schriftart eines einzelnen Items ändern. Habe dazu schon ein Code gefunden, allerdings werden die TreeGadgets in eine LinkedList gespeichert. Zudem kommt das durch den Wert von SetGadgetItemData() bestimmt wird wie es "umgestyled" wird.

Code:
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Courier New", 8, #PB_Font_Underline)

Procedure WinCallback(hwnd, msg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_NOTIFY
      *pNMHDR.NMHDR = lParam
      If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(1)
        *pTVcd.NMTVCUSTOMDRAW = lParam
        Select *pTVcd\nmcd\dwDrawStage
          Case #CDDS_PREPAINT
            result = #CDRF_NOTIFYITEMDRAW
          Case #CDDS_ITEMPREPAINT
            ; --> Here we get the text of the TreeGadget item being drawn
            tvi.TV_ITEM\mask = #TVIF_TEXT | #TVIF_HANDLE
            tviText$ = Space(100)
            tvi\pszText = @tviText$
            tvi\cchTextMax = 100
            tvi\hItem = *pTVcd\nmcd\dwItemSpec
            SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)
            ; --> Now we underline "Item 0" and "Item 4" in blue
            Select tviText$
              Case "Item 0"
                ; --> Select underlined font into item 0 dc
                SelectObject_(*pTVcd\nmcd\hdc, hFont)
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
                result = #CDRF_NEWFONT
              Case "Item 4"
                ; --> Select underlined font into item 4 dc
                SelectObject_(*pTVcd\nmcd\hdc, hFont)
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 200, 255))
                result = #CDRF_NEWFONT
              Default
                result = #CDRF_DODEFAULT
            EndSelect
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  TreeGadget(1, 10, 10, 160, 160)

  SetWindowCallback(@WinCallback())
  For i = 0 To 10
    AddGadgetItem (1, -1, "Item "+Str(i))
    SetGadgetItemData(1,0,-1)
  Next i
  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
EndIf
End

_________________
Mevedia Control Framework
Cross-platform Solution with full Theme-Support for Workspace,
Grid\Tree\List, Menu & Node, Scroll Bar&Area, Button, Swift, Aerotic,
PropertyBox and more. Especially designed for PureBasic.

Bild
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 00:00 
Offline

Registriert: 19.09.2007 22:18
Ja.

_________________
"Ich habe aus Spontanität den Thread arbeiten lassen - er bietet kein deutliches Fundament." — Alexi (aka. cOoki3druqs)
"ich hogffe ihr könnt den fehle endecken" — Marvin133
"Ideoten gibts ..." — computerfreak


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 08:30 
Offline

Registriert: 03.03.2011 00:03
Oder um es anders auszudrücken: Wo ist die Frage?

_________________
Bild
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 10:31 
Offline
Benutzeravatar

Registriert: 16.06.2011 14:38
Um es kurz zu fassen :D ich muss aus *pNMHDR\hwndFrom wieder die PureBasic GadgetNummer bekommen da ich durch den Wert von GetGadgetData() prüfe ob das Gadget geändert wird.

_________________
Mevedia Control Framework
Cross-platform Solution with full Theme-Support for Workspace,
Grid\Tree\List, Menu & Node, Scroll Bar&Area, Button, Swift, Aerotic,
PropertyBox and more. Especially designed for PureBasic.

Bild
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 10:45 
Offline
-= Anfänger =-
Benutzeravatar

Registriert: 29.08.2004 03:07
cOoki3druqs hat geschrieben:
Um es kurz zu fassen :D ich muss aus *pNMHDR\hwndFrom wieder die PureBasic GadgetNummer bekommen da ich durch den Wert von GetGadgetData() prüfe ob das Gadget geändert wird.

Code:
gadget = GetWindowLongPtr_(*pNMHDR\hwndFrom,#GWL_ID)

Und das Item ist dann tvi\lParam:
Code:
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Arial", 8, #PB_Font_Underline)

Procedure WinCallback(hwnd, msg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_NOTIFY
      *pNMHDR.NMHDR = lParam
      gadget = GetWindowLongPtr_(*pNMHDR\hwndFrom,#GWL_ID)
      If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(2)
        *pTVcd.NMTVCUSTOMDRAW = lParam
        Select *pTVcd\nmcd\dwDrawStage
          Case #CDDS_PREPAINT
            result = #CDRF_NOTIFYITEMDRAW
          Case #CDDS_ITEMPREPAINT

            tvi.TV_ITEM\mask = #TVIF_PARAM | #TVIF_HANDLE
            tvi\hItem = *pTVcd\nmcd\dwItemSpec
            SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)

            If GetGadgetItemData(gadget,tvi\lParam) = 1
                SelectObject_(*pTVcd\nmcd\hdc, hFont)
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
                result = #CDRF_NEWFONT|#CDRF_DODEFAULT
            Else
                result = #CDRF_DODEFAULT
            EndIf
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;And CreateGadgetList(WindowID(0))
  TreeGadget(2, 10, 10, 160, 160)

  SetWindowCallback(@WinCallback())
  For i = 0 To 10
    AddGadgetItem (2, -1, "Item "+Str(i))
    SetGadgetItemData(2,0,-1)
  Next i
  SetGadgetItemData(2,0,1) ; item 0 and 5
  SetGadgetItemData(2,5,1)
  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
EndIf

Item 0 und 5 bekommen hier ein SetGadgetItemData mit 1, also wird diesen Items
ein neuer Font zugewiesen.

_________________
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 11:11 
Offline
Benutzeravatar

Registriert: 16.06.2011 14:38
Hm, also wParam gibt scheinbar schon die GadgetID zurück. Anfangs funktioniert es noch, doch ändert sich das TreeGadget wird die Änderung gelöscht

Code:
Select GetGadgetItemData(wParam, tvi\hItem)
              Case -1
                ; --> Select underlined font into item 0 dc
                SelectObject_(*pTVcd\nmcd\hdc, FontID(Font_MB))
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
                result = #CDRF_NEWFONT
              Default
                result = #CDRF_DODEFAULT
EndSelect


Das Item hat weiterhin -1 als Wert.

_________________
Mevedia Control Framework
Cross-platform Solution with full Theme-Support for Workspace,
Grid\Tree\List, Menu & Node, Scroll Bar&Area, Button, Swift, Aerotic,
PropertyBox and more. Especially designed for PureBasic.

Bild
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 11:15 
Offline
Benutzeravatar

Registriert: 16.06.2011 14:38
Vielen Dank Danilo :allright: so geht es.

_________________
Mevedia Control Framework
Cross-platform Solution with full Theme-Support for Workspace,
Grid\Tree\List, Menu & Node, Scroll Bar&Area, Button, Swift, Aerotic,
PropertyBox and more. Especially designed for PureBasic.

Bild
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 11:16 
Offline
-= Anfänger =-
Benutzeravatar

Registriert: 29.08.2004 03:07
tvi\hItem ist das Handle des Items, das musst Du noch übersetzen. Siehe mein letzter Code, dann ist
die Item-Nummer in tvi\lParam.

EDIT: OK, bissl zeitliche Überschneidungen hier, oder Fehler in der Matrix. ;)

_________________
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 11:23 
Offline
Benutzeravatar

Registriert: 16.06.2011 14:38
Wie kommt es eigentlich das die Farbe bei XP-Skin nichtmehr genommen wird ^^

_________________
Mevedia Control Framework
Cross-platform Solution with full Theme-Support for Workspace,
Grid\Tree\List, Menu & Node, Scroll Bar&Area, Button, Swift, Aerotic,
PropertyBox and more. Especially designed for PureBasic.

Bild
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: TreeGadget Item Font
BeitragVerfasst: 23.04.2012 11:35 
Offline
-= Anfänger =-
Benutzeravatar

Registriert: 29.08.2004 03:07
cOoki3druqs hat geschrieben:
Wie kommt es eigentlich das die Farbe bei XP-Skin nichtmehr genommen wird ^^

Ist wohl so ein Style-Ding. Mußt Du es eben alles selbst zeichnen.
Code:
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Arial", 8, #PB_Font_Underline)

Procedure WinCallback(hwnd, msg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_NOTIFY
      *pNMHDR.NMHDR = lParam
      gadget = GetWindowLongPtr_(*pNMHDR\hwndFrom,#GWL_ID)
      If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(2)
        *pTVcd.NMTVCUSTOMDRAW = lParam
        Select *pTVcd\nmcd\dwDrawStage
          Case #CDDS_PREPAINT
            result = #CDRF_NOTIFYITEMDRAW
          Case #CDDS_ITEMPREPAINT
            tvi.TV_ITEM\mask = #TVIF_TEXT | #TVIF_HANDLE | #TVIF_PARAM
            tviText$ = Space(100)
            tvi\pszText = @tviText$
            tvi\cchTextMax = 100
            tvi\hItem = *pTVcd\nmcd\dwItemSpec
            SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)

            If GetGadgetItemData(gadget,tvi\lParam) = 1
                SelectObject_(*pTVcd\nmcd\hdc, hFont)
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
               
                *pTVcd\nmcd\rc\left = 25
                DrawText_(*pTVcd\nmcd\hdc,tviText$,Len(tviText$),*pTVcd\nmcd\rc,0)
               
                result = #CDRF_NEWFONT|#CDRF_SKIPDEFAULT
            Else
                result = #CDRF_DODEFAULT
            EndIf
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;And CreateGadgetList(WindowID(0))
  TreeGadget(2, 10, 10, 160, 160)

  SetWindowCallback(@WinCallback())
  For i = 0 To 10
    AddGadgetItem (2, -1, "Item "+Str(i))
    SetGadgetItemData(2,0,-1)
  Next i
  SetGadgetItemData(2,0,1) ; item 0 and 5
  SetGadgetItemData(2,5,1)
  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
EndIf


EDIT:

Alle Items selbst gezeichnet:
Code:
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Arial", 8, #PB_Font_Underline)

Procedure WinCallback(hwnd, msg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_NOTIFY
      *pNMHDR.NMHDR = lParam
      gadget = GetWindowLongPtr_(*pNMHDR\hwndFrom,#GWL_ID)
      If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(2)
        *pTVcd.NMTVCUSTOMDRAW = lParam
        Select *pTVcd\nmcd\dwDrawStage
          Case #CDDS_PREPAINT
            result = #CDRF_NOTIFYITEMDRAW
          Case #CDDS_ITEMPREPAINT
            tvi.TV_ITEM\mask = #TVIF_TEXT | #TVIF_HANDLE | #TVIF_PARAM
            tviText$ = Space(100)
            tvi\pszText = @tviText$
            tvi\cchTextMax = 100
            tvi\hItem = *pTVcd\nmcd\dwItemSpec
            SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)

            If GetGadgetItemData(gadget,tvi\lParam) = 1
                SelectObject_(*pTVcd\nmcd\hdc, hFont)
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
            EndIf

            rc.RECT = *pTVcd\nmcd\rc
            rc\left = 15
            rc\right = 20
            rc\top   + 5
            rc\bottom - 6
            Rectangle_(*pTVcd\nmcd\hdc,rc\left,rc\top,rc\right,rc\bottom)
            *pTVcd\nmcd\rc\left = 25
            DrawText_(*pTVcd\nmcd\hdc,tviText$,Len(tviText$),*pTVcd\nmcd\rc,0)
               
            result = #CDRF_SKIPDEFAULT
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;And CreateGadgetList(WindowID(0))
  TreeGadget(2, 10, 10, 160, 160)

  SetWindowCallback(@WinCallback())
  For i = 0 To 10
    AddGadgetItem (2, -1, "Item "+Str(i))
    SetGadgetItemData(2,0,-1)
  Next i
  SetGadgetItemData(2,0,1) ; item 0 and 5
  SetGadgetItemData(2,5,1)
  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
EndIf

Du musst also auch die Linien vor den Item selbst zeichnen. Im letzten Beispiel kleine Rechtecke.

_________________
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye