Seite 2 von 2

Re: Farbe für StatusBar

Verfasst: 28.03.2011 15:46
von RSBasic
Versuch mal mit diesem Code:

Code: Alles auswählen

; Title:  Custom Statusbar Text Colors
; Author: Fluid Byte
; Date:   December 28, 2006

Structure ODSBTEXT
   szText.l
   clrFront.l
   clrBack.l
EndStructure

Procedure WindowCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
    Select uMsg
        Case #WM_DRAWITEM
      *lpdis.DRAWITEMSTRUCT = lParam

      ClassName$ = Space(19) : GetClassName_(*lpdis\hwndItem,ClassName$,19)

      If ClassName$ = "msctls_statusbar32"
         *osbt.ODSBTEXT = *lpdis\itemData

         SetTextColor_(*lpdis\hDC,*osbt\clrFront)
         SetBkColor_(*lpdis\hDC,*osbt\clrBack)

         SendMessage_(*lpdis\hwndItem,#SB_GETBORDERS,0,aBorders.RECT)
         InflateRect_(*lpdis\rcItem,-aBorders\right / 2,0)      
         DrawText_(*lpdis\hDC,*osbt\szText,-1,*lpdis\rcItem,#DT_SINGLELINE | #DT_VCENTER)
      EndIf
    EndSelect
     
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

OpenWindow(0,0,0,350,100,"Custom Statusbar Text Colors",#WS_OVERLAPPEDWINDOW | 1)

SetWindowCallback(@WindowCallback())

Result = CreateStatusBar(0,WindowID(0))

AddStatusBarField(100) : StatusBarText(0,0,"Statusbar Field #1")
AddStatusBarField(100) : StatusBarText(0,1,"Statusbar Field #2")
AddStatusBarField(100)

osbt.ODSBTEXT
osbt\szText = @"Statusbar Field #3"
osbt\clrFront = #Green
osbt\clrBack = #Black

SendMessage_(Result,#SB_SETTEXT,2 | #SBT_OWNERDRAW,osbt)

While WaitWindowEvent() ! 16 : Wend

Re: Farbe für StatusBar

Verfasst: 28.03.2011 15:49
von smateja
Oha - vielen Dank!

Hast du den jetzt auf purearea gefunden? Glaube, muss mich mal noch mehr mit der Suchentaste fusionieren :)

Re: Farbe für StatusBar

Verfasst: 28.03.2011 15:52
von RSBasic
Nein, habs aus diesem Thread entnommen: http://www.purebasic.fr/english/viewtop ... 69#p175469

Re: Farbe für StatusBar

Verfasst: 28.03.2011 16:06
von smateja
Also konnte das perfekt in meinen Code übernehmen,

leider muss ich jetzt nur noch herausfinden, wie ich dem Statusbartext dem Parameter #PB_StatusBar_Center|#PB_StatusBar_BorderLess

mit übergebe - sonst gibt es immer die hässlichen Rahmen-Ränder.

Nachtrag:

Habe jetzt die Struktur erweitert:

Structure ODSBTEXT
szText.l
clrFront.l
clrBack.l
aussehen.l
EndStructure

und die Zeile -> DrawText_(*lpdis\hDC,*osbt\szText,-1,*lpdis\rcItem,*osbt\aussehen) eben ergänzt.

So kann ich dann mit:

Code: Alles auswählen

statusbartext0.s= " "+FormatDate("%hh:%ii:%ss",date)
      
            osbt.ODSBTEXT
            osbt\szText = @statusbartext0.s 
            osbt\clrFront = RGB(255, 255, 255)
            osbt\clrBack = RGB(51, 31, 85)
            osbt\aussehen = #DT_CENTER| #DT_VCENTER| #DT_SINGLELINE
            
     
              SendMessage_(statuswnd,#SB_SETTEXT,0 | #SBT_OWNERDRAW,osbt)     
zumindest schon mal die Ausrichtung der Schrift für jedes Feld der Statusbar einzeln festlegen.

Randlos leider noch nicht geschafft bislang.

Re: Farbe für StatusBar

Verfasst: 28.03.2011 16:30
von RSBasic
#SBT_NOBORDERS

Also:

Code: Alles auswählen

SendMessage_(Result,#SB_SETTEXT,2 | #SBT_OWNERDRAW | #SBT_NOBORDERS,osbt)