ToolBar Hintergrundfarbe

Für allgemeine Fragen zur Programmierung mit PureBasic.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

ToolBar Hintergrundfarbe

Beitrag von Lambda »

wie bekomme ich eine ToolBar eingefärbt so dass
sie auch noch funktioniert?

wenn ich sie einem MDI zuweiße kann ich die farbe ohne
probleme ändern, nur werden die IDs der Buttons durch EventMenu() nichtmehr
zurückgegeben.

kennt jemand eine Lösung?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: ToolBar Hintergrundfarbe

Beitrag von Lambda »

ah danke :allright: . ist schon eine bessere Lösung als durch das MDI.. da eine
ToolBar an sich transparent ist... gibt es auch eine Möglichkeit ein Image
als Hintergrund festzulegen?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von RSBasic »

Ich hab zwar den folgenden Code noch nicht in Verbindung einer ToolBar ausprobiert, aber vielleicht klappt es: http://www.rsbasic.de/aktualisierung/wi ... 3%BCgen.pb
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von Frabbing »

Zur Information: Es klappt nicht. :D
Gruß, Frank
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von RSBasic »

Doch funktioniert:

Code: Alles auswählen

EnableExplicit

Define EventID
Define bgimage
Define hBrush
Define hwndTB

bgimage = LoadImage(#PB_Any,"C:\Windows\System32\oobe\background.bmp");Beispiel-Pfad überprüfen und ggf. anpassen

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  If OpenWindow(1,50,50,200,100,"",#WS_CHILD,WindowID(0))
    hBrush = CreatePatternBrush_(ImageID(bgimage))
    SetClassLong_(WindowID(1), #GCL_HBRBACKGROUND, hBrush)
    InvalidateRect_(WindowID(1), #Null, #True)
    
    hwndTB = CreateToolBar(0,WindowID(1))
    ToolBarStandardButton(0,#PB_ToolBarIcon_New)
    ToolBarStandardButton(1,#PB_ToolBarIcon_Open)
    ToolBarStandardButton(2,#PB_ToolBarIcon_Save)
    
    SendMessage_(hwndTB,#TB_SETSTYLE,0,SendMessage_(hwndTB,#TB_GETSTYLE,0,0) | #CCS_NODIVIDER)
  EndIf
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von Frabbing »

Funktioniert aber nicht richtig. Wenn man mit dem Mauszeiger einfach von links nach rechts über die Toolbarbuttons fährt, entsteht dort ein Mosaikeffekt des Hintergrunds. Bei großen, einfarbigen Flächen in der Hintergrundgrafik tolerierbar, aber nicht bei detailreichen Grafiken. Sieht dann gleich unprofessionell aus, also besser sein lassen oder gut darauf Acht geben.
Gruß, Frank
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von RSBasic »

Oh, das ist mir nicht aufgefallen.
Besser so?

Code: Alles auswählen

EnableExplicit

Define EventID
Define bgimage
Define hBrush
Global hwndTB

UsePNGImageDecoder()

bgimage = LoadImage(#PB_Any,"C:\[...]\Testheader.png");Beispiel-Pfad überprüfen und ggf. anpassen

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
  Protected *notify.NMTOOLBAR
  
  Select uMsg
    Case #WM_NOTIFY
      *notify = lparam
      
      If *notify\hdr\code = -713
        InvalidateRect_(hwndTB,0,#True)
      EndIf
      
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  If OpenWindow(1,50,50,200,100,"",#WS_CHILD,WindowID(0))
    hBrush = CreatePatternBrush_(ImageID(bgimage))
    SetClassLong_(WindowID(1), #GCL_HBRBACKGROUND, hBrush)
    InvalidateRect_(WindowID(1), #Null, #True)
   
    hwndTB = CreateToolBar(0,WindowID(1))
    ToolBarStandardButton(0,#PB_ToolBarIcon_New)
    ToolBarStandardButton(1,#PB_ToolBarIcon_Open)
    ToolBarStandardButton(2,#PB_ToolBarIcon_Save)
   
    SendMessage_(hwndTB,#TB_SETSTYLE,0,SendMessage_(hwndTB,#TB_GETSTYLE,0,0) | #CCS_NODIVIDER)
    
    SetWindowCallback(@WindowCallback())
    
  EndIf
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von Frabbing »

Jetzt ist es 'ne saubere Sache, mit der Notify zusätzlich geht's perfekt. :allright:

#TBN_HOTITEMCHANGE = $FFFFFD37
Gruß, Frank
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ToolBar Hintergrundfarbe

Beitrag von RSBasic »

Danke fürs Heraussuchen der API-Konstante. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten