Statusbar Textfarbe ändern?

Anfängerfragen zum Programmieren mit PureBasic.
pebo
Beiträge: 66
Registriert: 01.12.2006 21:08
Wohnort: 66450 Bexbach

Statusbar Textfarbe ändern?

Beitrag von pebo »

Hallo zusammen,

gibt es eine Möglichkeit die Textfarbe in einer Statusbar zu ändern?

Gruss
Peter
Alle sagten "das geht nicht!" .... und dann kam einer der nichts davon wusste und machte es einfach.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Suchen im englischen Forum ist meine erste Idee, wenn ich hier nix finde. Guckst Du in diesen Thread oder hier.

Im CodeArchiv ist auch ein Beispielcode:

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=3001&highlight=
; Author: isidoro (updated for PB4.00 by blbltheworm)
; Date: 11. December 2003
; OS: Windows
; Demo: No

#SB_SETBKCOLOR = $2001 
color=RGB($FF,$FF,$AA) 

#MainWin=0 
MainWinX=100 
MainWinY=150
MainWinW=400 
MainWinH=200 


hwnd=OpenWindow(#MainWin, MainWinX, MainWinY, MainWinW, MainWinH, "Test Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 

statuswnd= CreateStatusBar(0,WindowID(#MainWin)) 
If statuswnd 
  AddStatusBarField(500) 
EndIf 


If hwnd 
;  OleTranslateColor_(color,0,@color); Falls Farbwerte umgewandelt werden müssen 
SendMessage_(statuswnd,#SB_SETBKCOLOR ,0,color) 
StatusBarText(0,0,"Das ist die tolle bunte Leiste ",#PB_StatusBar_Center ) 
  
  Repeat 
    EventID.l = WindowEvent() 
    If EventID 
      Select EventID 
        Case #PB_Event_CloseWindow 
          Quit=1 
      EndSelect 
    Else 
      Delay(10) 
    EndIf 
  Until Quit 
EndIf 
End
Vielleicht kannst Du da ja was abwandeln.

PureCOLOR scheint nur für Gadgets zu sein.

hdh... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

So gehts, XP kompatibel:

Code: Alles auswählen

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

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

		If *lpdis\hWndItem = StatusBarID(0)
			Protected *osbt.ODSBTEXT = *lpdis\itemData

			SetTextColor_(*lpdis\hDC,*osbt\clrFront)
			
			If *osbt\clrBack = -1
				SetBkMode_(*lpdis\hDC,1)			
			Else
				SetBkColor_(*lpdis\hDC,*osbt\clrBack)				
			EndIf
			
			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())

CreateStatusBar(0,WindowID(0))

AddStatusBarField(100) : AddStatusBarField(100) : AddStatusBarField(100)

osbt1.ODSBTEXT
osbt1\szText = @"Statusbar Field #1"
osbt1\clrFront = #Green
osbt1\clrBack = #Black
SendMessage_(StatusBarID(0),#SB_SETTEXT,0 | #SBT_OWNERDRAW,osbt1)

osbt2.ODSBTEXT
osbt2\szText = @"Statusbar Field #2"
osbt2\clrFront = #Yellow
osbt2\clrBack = #Red
SendMessage_(StatusBarID(0),#SB_SETTEXT,1 | #SBT_OWNERDRAW,osbt2)

osbt3.ODSBTEXT
osbt3\szText = @"Statusbar Field #3"
osbt3\clrFront = #Cyan
osbt3\clrBack = #Blue
SendMessage_(StatusBarID(0),#SB_SETTEXT,2 | #SBT_OWNERDRAW,osbt3)

While WaitWindowEvent() ! 16 : Wend
[edit]
Du kannst die Hintergundfarbe transparent machen wenn du "\clrBack" auf -1 setzt.
[/edit]
Windows 10 Pro, 64-Bit / Outtakes | Derek
pebo
Beiträge: 66
Registriert: 01.12.2006 21:08
Wohnort: 66450 Bexbach

Beitrag von pebo »

Ich danke euch beiden für die Hilfe :allright:

Gruss
Peter
Alle sagten "das geht nicht!" .... und dann kam einer der nichts davon wusste und machte es einfach.
Antworten