ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Für allgemeine Fragen zur Programmierung mit PureBasic.
canrap
Beiträge: 14
Registriert: 08.08.2011 15:30

ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von canrap »

Guten Morgen liebe Community,

ich würde gerne zwei Buttons mit #BS_COMMABDLINK als Flag benutzen, nur mit der Hintergrundfarbe Weiß, nur gelingt es mir nicht. :(

Ich hab schon alles versucht aber ich kriegs nur in Standart Grau :(

Hier zum Test: (Bitte als Unicode mit XP-Skin starten)

Code: Alles auswählen

#BS_COMMANDLINK  = $0000000E
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  SetWindowColor(0,#White)
  ButtonGadget(1, 10, 10, 150, 58, "Step Back", #BS_COMMANDLINK)
  SetGadgetColor(0,#PB_Gadget_BackColor,#White)
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
    
  Until Quit = 1
  
EndIf

End
Hab schon tausend Codes zum einfärben getestet und Windows hats ja von Standart auch:
Bild

Wäre schön wenn jemand ne Idee hätte :)

lg

canrap
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von ts-soft »

Code: Alles auswählen

Global white = CreateSolidBrush_($FFFFFF) 

Procedure myCallback(hWnd, uMsg, wParam, lParam) 

  Select uMsg 
    Case #WM_CTLCOLORBTN 
      If lparam = GadgetID(1) 
        SetBkMode_(wParam, #TRANSPARENT) 
        SetTextColor_(wParam, $000000) 
        ProcedureReturn white
      EndIf 
    EndSelect 
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

#BS_COMMANDLINK  = $0000000E
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  SetWindowColor(0, #White)
  ButtonGadget(1, 10, 10, 150, 58, "Step Back", #BS_COMMANDLINK)
  SetWindowCallback(@myCallback())
  Repeat
    Event = WaitWindowEvent()
   
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
   
  Until Quit = 1
 
EndIf

DeleteObject_(white)
End 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
canrap
Beiträge: 14
Registriert: 08.08.2011 15:30

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von canrap »

Super :) Lieben vielen Dank!
canrap
Beiträge: 14
Registriert: 08.08.2011 15:30

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von canrap »

Eine Frage hab ich doch noch ;)

Es ist ja möglich mit SetWindowTheme das Design des ListIconGadgets dem des Explorers anzunähern, nur leider nicht komplett.

Mit SetWindowTheme siehts so aus:
Bild

Ich hätte es aber gerne so:
Bild

Also diese weiße Columnbar, gibt es dafür vlt. ein kurzes Codeschnipsel?

Danke schonmals :)
canrap
Beiträge: 14
Registriert: 08.08.2011 15:30

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von canrap »

Ich push hier mal, falls jemand noch eine Lösung für mich hat?! Ich bin zwar soweit das sich die Columnheader eigl. nurnoch sehr gering unterscheiden, aber halt immernoch etwas. Und bevor ich nun auch den letzten Strich selbst zeichne, frag ich lieber nochmal, obs nicht doch einfacher geht?

Ansonsten trotzdem danke :)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von RSBasic »

Sowas?

Code: Alles auswählen

;Coloured header control.
;By srod.
;Purebasic 4.
;Windows.


#LVM_GETHEADER = #LVM_FIRST + 31

; Globals
Global oldListIconCallback, hHeader, redbrush, bluebrush
redbrush=CreateSolidBrush_(#White)
bluebrush=CreateSolidBrush_(#White)


; Proc for subclassed ListIconGadget
Procedure SubclassedListIcon(hwnd, msg, wparam, lparam)
  Protected hdi.hd_item
  result = CallWindowProc_(oldListIconCallback, hwnd, msg, wparam, lparam)
  Select msg
    Case #WM_NOTIFY
      *pnmh.NMHDR = lparam
      ;--> Get handle to ListIcon header control
      If *pnmh\code = #NM_CUSTOMDRAW
        *pnmcd.NMCUSTOMDRAW = lparam
        ;--> Determine drawing stage
        Select *pnmcd\dwDrawStage
          Case #CDDS_PREPAINT
            result = #CDRF_NOTIFYITEMDRAW
          Case #CDDS_ITEMPREPAINT
;Get header text.
            text$=Space(100)
            hdi\mask = #HDI_TEXT
            hdi\psztext = @text$
            hdi\cchtextmax = Len(text$)
            SendMessage_(hHeader, #HDM_GETITEM,*pnmcd\dwItemSpec,hdi)
;Check button state.
            If *pnmcd\uItemState & #CDIS_SELECTED
              DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH|#DFCS_PUSHED)
;Offset text because of the selected button.
              InflateRect_(*pnmcd\rc,-1,-1)
            Else
              DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH)
            EndIf
;Draw background.
;Here we alternate red text on blue background.
            ;InflateRect_(*pnmcd\rc,-1,-1)
            SetBkMode_(*pnmcd\hdc,#TRANSPARENT)
            If *pnmcd\dwItemSpec&1
              FillRect_(*pnmcd\hdc, *pnmcd\rc, redbrush)
            ;  SetTextColor_(*pnmcd\hdc, #Blue)
            Else
              FillRect_(*pnmcd\hdc, *pnmcd\rc, bluebrush)
            ;  SetTextColor_(*pnmcd\hdc, #Red)
            EndIf
            DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_CENTER|#DT_VCENTER|#DT_END_ELLIPSIS)
            result = #CDRF_SKIPDEFAULT
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure


; ************************************************
; Main Window
; ************************************************
If OpenWindow(0, 100, 100, 415, 300, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  ListIconGadget(0, 5, 5, 405, 200, "col 0", 50, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  hHeader = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)
;Subclass ListIcon so we can customdraw the header text
  oldListIconCallback = SetWindowLong_(GadgetID(0), #GWL_WNDPROC, @SubclassedListIcon())

;Add 10 more columns.
  For i = 1 To 10
    AddGadgetColumn(0, i, "col "+Str(i), 50)
  Next 
;Add some data
  For b=0 To 99; Add 100 rows.
    AddGadgetItem(0,-1,"")
  Next
  For i = 0 To 99
    For j = 0 To 50
      SetGadgetItemText(0,i,Str(i+j),j)
    Next j
  Next i           

  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow

  DeleteObject_(redbrush)
  DeleteObject_(bluebrush)
 
EndIf
End 
Quelle: http://www.purebasic.fr/english/viewtop ... 28#p149328
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von ts-soft »

RSBasic hat geschrieben:

Code: Alles auswählen

redbrush=CreateSolidBrush_(#White)
bluebrush=CreateSolidBrush_(#White)
Sprechende Variablen :bounce:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von RSBasic »

Ich habe einfach (siehe Quellenangabe) den Code aus dem Thread entnommen und einfach die entsprechende Konstante angepasst. Ich hab mir aber nicht die Mühe gegeben, die Variablennamen anzupassen und es zusammenzufassen und u.a. auch dafür zu sorgen, dass es auch unter x64 funktioniert. (SetWindowLong > SetWindowLongPtr). :mrgreen:
Soviel Zeit habe ich grad nicht. Ist eh nur eine Beispiel-Vorlage für canrap. Wenn canrap es gut findet, kann man es sowieso noch verfeinern. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von ts-soft »

Soll ja kein Vorwurf sein, ich wollte damit nur ausdrücken, das nachdem redbrush und bluebrush aus der
Dusche kamen, waren beide whitebrush :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: ButtonGadget mit #BS_COMMABDLINK Flag in Weiß?

Beitrag von rolaf »

ts-soft hat geschrieben:Soll ja kein Vorwurf sein, ich wollte damit nur ausdrücken, das nachdem redbrush und bluebrush aus der
Dusche kamen, waren beide whitebrush
:lol:
Bild
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Antworten