Seite 1 von 2

Farbe für StatusBar

Verfasst: 21.03.2005 02:20
von Thatsanee
Hallo,

brauche Hilfe bei der Statusbar Erstellung:

CreateStatusBar(#status, WindowID())
AddStatusBarField(110)
AddStatusBarField(110)
..... usw.
StatusBarText(#status, 0, "Feld 0")
StatusBarText(#status, 0, "Feld 1")
..... usw.

soweit ist ja alles ok.
Aber wie kann man die Vordergrund- und Hintergrundfarbe
der einzelnen Felder ändern ?
Habe nur was gefunden mit dem die komplette Statuszeile
einen anderen Hintergrund bekommt und nicht die einzelnen
Felder. Hoffe es kann jemand helfen.

Thatsanee

Verfasst: 21.03.2005 02:24
von Hroudtwolf
Zeig doch mal den API-Code mit dem du die Statusbar färbst.
Vieleicht ist dort die Lösung schon fast drin.

Verfasst: 21.03.2005 02:30
von Thatsanee
Hroudtwolf hat geschrieben:Zeig doch mal den API-Code mit dem du die Statusbar färbst.
Vieleicht ist dort die Lösung schon fast drin.

Hier das habe ich bisher gefunden.


#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, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "Test Window")

statuswnd= CreateStatusBar(0,WindowID())
If statuswnd
AddStatusBarField(250)
AddStatusBarField(250)
EndIf


If hwnd
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

Verfasst: 21.03.2005 02:43
von Hroudtwolf
Hab das hier in Freds Forum gefunden. Vieleicht kommst du damit experimentierend zu einem Erfolg!?

Code: Alles auswählen

; By Nico
; Pure Basic, Version:3.92
; le 26/12/04

;/ Structure allowing the posting of the text in the Status bar
;/ containing the different information which we are going to administer.

Structure Status_Draw
  Texte.s
  couleur.l
  Font.l
  Emplacement.l
EndStructure

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #button
  #StatusBar
EndEnumeration

Global Hstatus

;/ Constants used to show the text
#DT_SINGLELINE  ; The text will be shown in a single line
#DT_TOP         ; The text will be aligned upward,
                ; The constant #DT_SINGLELINE Must be specified to use it
#DT_BOTTOM      ; The text will be aligned downward
                ; The constant #DT_SINGLELINE Must be specified to use it
#DT_VCENTER     ; The text will be centred vertically
                ; The constant #DT_SINGLELINE Must be specified to use it
#DT_CENTER      ; The text will be centred Horizontally
#DT_RIGHT       ; The text will be aligned to the Right
#DT_LEFT        ; The text will be aligned to the Left

;/ Constants used to show the icon
#SB_SETICON=(#WM_USER) +15

Procedure WindowCallback(WindowID, Message, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_DRAWITEM
      If wParam = GetDlgCtrlID_(Hstatus)
        *DrawItem.DRAWITEMSTRUCT = lParam
        *pointeur.Status_Draw=*DrawItem\itemData
        hFontOld = SelectObject_(*DrawItem\hDC,*pointeur\Font)
        SetBkMode_(*DrawItem\hDC, #TRANSPARENT)
        SetTextColor_(*DrawItem\hDC, *pointeur\couleur )
        DrawText_(*DrawItem\hDC, *pointeur\Texte, -1, *DrawItem\rcItem , *pointeur\Emplacement)
        ProcedureReturn #True
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure 

If OpenWindow(0, 100, 150, 300, 100, #PB_Window_SystemMenu | #PB_Window_SizeGadget, "De la couleur dans la Status Bar")
  SetWindowCallback(@WindowCallback())
 
  If CreateGadgetList(WindowID(0))
    ButtonGadget(#button,10,10,280,20,"Changer le nom et la couleur du champ N°0 par Louis")
  EndIf
 
  Hstatus= CreateStatusBar(#StatusBar, WindowID())
  ;/ To adjust the height of Status Bar
  SendMessage_(Hstatus, #SB_SETMINHEIGHT, 40, 0)
 
  ;/ Necessities for the immediate rafraichissement of the new size
  SendMessage_(Hstatus, #wm_size, 0,0)
 
  ;/ Creation of three Fields, 0 , 1, and 2
  If Hstatus
    AddStatusBarField(100)
    AddStatusBarField(50)
    AddStatusBarField(100)
  EndIf
 
  ;/ One fills structure for the field N°0 of Status Bar
  Champ_0.Status_Draw
  Champ_0\Texte="Pierre"
  Champ_0\couleur=RGB(255,0,0)
  Champ_0\Font=hFont=LoadFont (0, "Courier", 20)
  Champ_0\Emplacement=#DT_CENTER| #DT_VCENTER| #DT_SINGLELINE
 
  ;/ One fills structure for the field N°1 of Status Bar
  Champ_1.Status_Draw
  Champ_1\Texte="Paul"
  Champ_1\couleur=RGB(0,168,168)
  Champ_1\Font=hFont=LoadFont (1, "Courier", 8)
  Champ_1\Emplacement=#DT_LEFT| #DT_BOTTOM| #DT_SINGLELINE
 
  ;/ One fills structure for the field N°2 of Status Bar
  Champ_2.Status_Draw
  Champ_2\Texte="Nico"
  Champ_2\couleur=RGB(0,0,255)
  Champ_2\Font=hFont=LoadFont (2, "Arial", 16)
  Champ_2\Emplacement=#DT_TOP|#DT_RIGHT| #DT_SINGLELINE
 
  ;/ Pointer towards the Structure to be shown 
  *pointeur_champ0.Status_Draw=@Champ_0
  *pointeur_champ1.Status_Draw=@Champ_1
  *pointeur_champ2.Status_Draw=@Champ_2
 
  ;/ One sends the different pointer to Status Bar
  SendMessage_(Hstatus, #SB_SETTEXT, 0 | #SBT_OWNERDRAW ,*pointeur_champ0)
  SendMessage_(Hstatus, #SB_SETTEXT, 1 | #SBT_OWNERDRAW ,*pointeur_champ1)
  SendMessage_(Hstatus, #SB_SETTEXT, 2 | #SBT_OWNERDRAW ,*pointeur_champ2)
 
  ;/ Add an icon in the field N°2   
  Hicon=LoadImage(0, "data\CdPlayer.ico")
  SendMessage_( Hstatus, #SB_SETICON, 2, Hicon)
 
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_EventGadget
        Select EventGadgetID()
          Case #button
            ;/ Change of the Field N°0 
            Champ_0.Status_Draw
            Champ_0\Texte="Louis"
            Champ_0\couleur=RGB(255,255,0)
            SendMessage_(Hstatus, #SB_SETTEXT, 0 | #SBT_OWNERDRAW ,*pointeur_champ0)
        EndSelect
       
      Case #WM_CLOSE
        CloseFont(0)
        CloseFont(1)
        CloseFont(2)
        Quit+1
    EndSelect
  Until Quit=1
EndIf
End

Verfasst: 21.03.2005 03:06
von Thatsanee
Hi,
mit einer kleinenänderung / Erweiterung
läßt sich zwar auch eine Hintergrundfarbe für den Text angeben, aber
nicht für das Feld selbst.

Verfasst: 21.03.2005 03:42
von Hroudtwolf
Man müsste irgendwie an das Handle eines Feldes kommen können.
Wenn man das Handle hat kann man fast alles damit verändern.

Re: Farbe für StatusBar

Verfasst: 21.03.2005 03:52
von Danilo
Thatsanee hat geschrieben:Aber wie kann man die Vordergrund- und Hintergrundfarbe
der einzelnen Felder ändern ?
Habe nur was gefunden mit dem die komplette Statuszeile
einen anderen Hintergrund bekommt und nicht die einzelnen
Felder. Hoffe es kann jemand helfen.
Plaziere an Stelle der Statusbarfelder entsprechende ImageGadgets
und zeichne was Du willst in die Bilder. Farbe. Text. Anderes.

Re: Farbe für StatusBar

Verfasst: 21.03.2005 05:06
von Thatsanee
Danilo hat geschrieben:Plaziere an Stelle der Statusbarfelder entsprechende ImageGadgets
und zeichne was Du willst in die Bilder. Farbe. Text. Anderes.
Hi, habe es sonst immer mit TextGadget gemacht. Klappt klasse
damit. Nur im Gegensatz zu Status muß ich diese auch jedesmal neu
positionieren wenn ich die Fenstergröße änder. Also wollte ich es
mal mit StatusBar machen, aber scheint wohl nicht so zu klappen
wie ich es mir erhofft hatte, zumindest was die Farbe angeht.

Text und Grafik in einen Feld geht dagegen in StatusBar einfacher.
Und das war auch der Hauptgrund warum ich StatusBar gewählt habe,
da ich sonst etliches an Grafiken benötigen würde.

Na vielleicht kommt es ja noch in einen der nächsten Updates.
So wie ja auch gerade erst für ToolBar 2 neue Funktionen
hinzugekommen sind.

Verfasst: 21.03.2005 06:46
von Hroudtwolf
Na vielleicht kommt es ja noch in einen der nächsten Updates.
So wie ja auch gerade erst für ToolBar 2 neue Funktionen
hinzugekommen sind.
Ich glaube das kannst du vergessen. Mir deucht ,daß die Sache mit der Statusbar Systemintern so geregelt ist.
Ich beschäftige mich jetzt seit ein paar Stunden mit deinem Problemm und hab nicht mal den Ansatz einer Hoffnung gefunden. Hab sämtliche API-Referenzen die ich auf der Platte und in Buchform habe durchgewälzt und nix gefunden.

Re: Farbe für StatusBar

Verfasst: 28.03.2011 15:29
von smateja
Sorry dass ich den Vor-KriegsPost ausgrabe - aber hat hier evtl. jemand schon eine Lösung?
Bräuchte aktuell auch das einfärben bzw. das Ändern der Textfarbe in der Statusbar und mit dem Beispiel komm ich mal rein garnicht zurrecht es zu minimieren.

Thx und LG