Windows-Design-Fragen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Andy82
Beiträge: 2
Registriert: 16.04.2020 11:47

Windows-Design-Fragen

Beitrag von Andy82 »

Hallo erstmal, ich bin relativ neu, sowohl beim Programmieren, als auch hier im Forum, also bin ich dankbar für Hinweise für besseres Programmieren, Verhalten im Forum, bessere Fragestellungen... :wink:

Nachdem alles, was ich bisher so versucht habe, sogar zu einem (zumindest für mich) positiven Resultat geführt hat, bin ich nun schon seit einiger Zeit dabei, die Programmoberfläche an das Windows 10 Dark-Design anzupassen auch ein bisschen mit Anlehnung an die Microsoft Teams Oberfläche.

Allerdings habe ich mittlerweile mehr Fragen als Lösungen und komme leider über die Forumsuche nicht weiter.
Was ich bisher verstanden habe ist, dass ich wohl an Windows CallBacks nicht vorbei komme.

Hier mein bisheriges Ergebnis - vielleicht könnte mir ja jemand weiterhelfen oder auf grobe Fehler aufmerksam machen.

Als nächstes würde ich gerne bei den Panel Gadgets die Rahmen verändern, so dass sie einen dünnen hellgrauen Rahmen haben, wie gewöhnliche PanelGadgets eben auch.

Dann wäre da das ListIcon - hier sieht man leider in der nicht vorhanden vierten Spalte einen weißen Fleck im Header - bekomme ich das irgendwie weg, ohne eine vierte Spalte anzulegen mit einer sehr großen Breite und zu hoffen, dass niemand weiter nach rechts scrollen mag?

Code: Alles auswählen


; Erster Verusch der Anpassung zum Dark-Windows-Theme von Windows 10 (und Microsoft Teams)
EnableExplicit



;Variablen
Global panel, result, b, bstyle, event, Gadget, tabText$
Global active=0
Global active1=0
Global oldWndProc, oldPanelWndProc
Global panelBackColorBrush = CreateSolidBrush_(RGB(30,36,40))
Global tabBackColorBrush   = CreateSolidBrush_(RGB(30,36,40))
Global tabTextColor        = RGB(255, 255, 255)
Global Color = RGB(60, 145, 231) ;Textfarbe der aktiven Lasche
Global Color2 = RGB (202,80,16) ;Textfarbe des Bearbeitungsmodus
Global defaultBrush = CreateSolidBrush_(GetSysColor_(#COLOR_3DFACE))
Define DefaultListIconCallback.I


;Konstanten für Änderung des Kopfes für Listicon
Global oldListIconCallback, hHeader, redbrush, bluebrush
redbrush=CreateSolidBrush_(RGB(30,36,40))
bluebrush=CreateSolidBrush_(#Blue)

#LVM_GETHEADER = #LVM_FIRST + 31


;Konstanten für Mausbewegungen über Buttons
#TME_HOVER = 1
#TME_LEAVE = 2
#TME_NONCLIENT = $10
#TME_QUERY = $40000000
#DoHover = 1
#DoLeave = 2



Enumeration
  #Window1
  #Panel_links
  #Panel_rechts
  #Text0
  #Text1
  #Text3
  #Liste
  #Container  
  #Font14
  #check1
EndEnumeration



Enumeration ;Buttons
  #Button1 =100
  #Button2
  #Button3
  #Button4
  #Button5
  #Button6
  #Button7
EndEnumeration



;{ Variablen für Buttons
Structure ButtonData
  oldCallback.i
  brushLeave.l
  brushClick.l
  brushHover.l
  brushDisabled.l
EndStructure

Global mte.TRACKMOUSEEVENT, doWhat
mte\cbSize = SizeOf(TRACKMOUSEEVENT)

Global buttonBrushDisabled = CreateSolidBrush_(RGB(200, 200, 200))
Global buttonBrushLeave = CreateSolidBrush_(RGB(88, 93, 98))
Global buttonBrushClick = CreateSolidBrush_(RGB(0,65,151))
Global buttonBrushHover = CreateSolidBrush_(RGB(60, 145, 231))
Global hBrushBack = CreateSolidBrush_(RGB(200,200,200))

Global bData.ButtonData
bData\brushHover = buttonBrushHover
bData\brushLeave = buttonBrushLeave
bData\brushClick = buttonBrushClick
bData\brushDisabled = buttonBrushDisabled
;}


LoadFont(#Font14, "Arial", 14, #PB_Font_HighQuality)



;{ Callback-Prozeduren
Procedure myWindowCallback(hwnd, msg, wParam, lParam)
  
  result = #PB_ProcessPureBasicEvents
  Select msg
      
    Case #WM_CTLCOLORSTATIC ;Verändert das Aussehen der Textfelder
      
      Select lparam
      
        Case GadgetID(#Text0)
          
          SetBkMode_(wparam,#TRANSPARENT)
          SetTextColor_(wparam, RGB(135, 100, 184))
          ProcedureReturn GetStockObject_(#HOLLOW_BRUSH)  
          
        Case GadgetID(#Text1)
          SetBkMode_(wparam,#TRANSPARENT)
          SetTextColor_(wparam, RGB(136, 23, 152))
          ProcedureReturn GetStockObject_(#HOLLOW_BRUSH)
          
      EndSelect  
  
    Case #WM_DRAWITEM ;Verändert das Aussehen der Buttons
      Define *dis.DRAWITEMSTRUCT = lParam
      If *dis\CtlType = #ODT_BUTTON
        Define buttonNum = *dis\CtlID
        Define *bData.ButtonData = GetGadgetData(buttonNum)
        ;... Default button attributes
        SetBkMode_(*dis\hdc, #TRANSPARENT)
        Define doWhatBrush = *bData\brushLeave
        Define doFlags = #DFCS_FLAT | #DFCS_BUTTONPUSH | #DFCS_MONO | #DFCS_ADJUSTRECT
        If *dis\itemState > 500
             *dis\itemState = *dis\itemState -768
        EndIf             
        Select *dis\itemState
          Case #ODS_SELECTED
            ;... DoHover or DoLeave
            If *dis\itemAction = 1 And doWhat = #DoHover
              ;... DoHover
              SetTextColor_(*dis\hdc, RGB(255, 255, 255))
              doWhatBrush = *bData\brushHover
              doFlags = #DFCS_BUTTONPUSH | #DFCS_MONO | #DFCS_ADJUSTRECT
            ElseIf *dis\itemAction = 1 And doWhat = #DoLeave
              ;... DoLeave
              SetTextColor_(*dis\hdc, RGB(255, 0, 0))
              doWhatBrush = *bData\brushLeave
              doFlags = #DFCS_FLAT | #DFCS_BUTTONPUSH | #DFCS_MONO | #DFCS_ADJUSTRECT
            EndIf
          Case #ODS_DISABLED
            SetTextColor_(*dis\hdc, RGB(255, 255, 255))
            doWhatBrush = *bData\brushDisabled
           
          Case *dis\itemState & #ODS_FOCUS
            ;... ClickDown
            SetTextColor_(*dis\hdc, RGB(255, 255, 255))
            doWhatBrush = *bData\brushLeave
            doFlags = #DFCS_BUTTONPUSH | #DFCS_MONO | #DFCS_ADJUSTRECT
            
            If *dis\itemAction = 2 And doWhat = #DoLeave
              ;... DoHover
              doWhatBrush = *bData\brushHover
            EndIf
            
            If *dis\itemAction = 1 And doWhat = #DoHover
              ;... DoHover
              doWhatBrush = *bData\brushHover
            EndIf
            
          Case*dis\itemState & ( #ODS_FOCUS | #ODS_SELECTED)
            ;... ClickUp
            SetTextColor_(*dis\hdc, RGB(255, 255, 255))
            doWhatBrush = *bData\brushClick
            doFlags = #DFCS_BUTTONPUSH | #DFCS_PUSHED | #DFCS_ADJUSTRECT
        EndSelect       
           
      EndIf
      DrawFrameControl_(*dis\hdc, *dis\rcItem, #DFC_BUTTON, doFlags)
      FillRect_(*dis\hdc, *dis\rcItem, doWhatBrush)     
      DrawText_(*dis\hdc, GetGadgetText(buttonNum), Len(GetGadgetText(buttonNum)), *dis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER)
      doWhat = #DoLeave
  EndSelect
  ProcedureReturn result
EndProcedure
      


Procedure myButtonCallback(hwnd, msg, wParam, lParam)
  
  Define mouseLeave, hover, hot 
  Define buttonID = GetDlgCtrlID_(hwnd)
  Define *bData.ButtonData = GetGadgetData(buttonID)

  Select msg
    Case #WM_MOUSEMOVE
      If wParam <> #MK_LBUTTON And mouseLeave = 0
        mouseLeave = 1
        doWhat = #DoHover
        ;... Force #WM_DRAWITEM
        InvalidateRect_(GadgetID(buttonID), 0, 0)
        ; Track mouse leaving button
        mte\dwFlags = #TME_LEAVE
        mte\hwndTrack = GadgetID(buttonID)
        TrackMouseEvent_(mte)
      EndIf
    Case #WM_MOUSELEAVE
      mouseLeave = 0
      doWhat = #DoLeave
      ;... Force #WM_DRAWITEM
      InvalidateRect_(GadgetID(buttonID), 0, 0)
    Case #WM_LBUTTONDOWN
      ;SetCapture_(hWnd)
      ;... Set flag to reset previous down botton
      doWhat = #DoLeave

  EndSelect
  ProcedureReturn CallWindowProc_(*bData\oldCallback, hwnd, msg, wParam, lParam)
EndProcedure



Procedure myWindowProc(hWnd,msg,wParam,lParam)
  
  Define backColorBrush    = CreateSolidBrush_(RGB(30,36,40))     
  Define *PGdis.DRAWITEMSTRUCT = lParam
  Define item=wParam
  

  Select msg
       Case #WM_DRAWITEM
         
       If *PGdis\CtlType = #ODT_TAB
       Gadget = GetProp_(*PGdis\hwnditem, "PB_ID")
  
  
            If item = 1
            Select *PGdis\itemID  
       
            Case 0 ;Linkes Panel, erste Lasche
                If *PGdis\itemID = GetGadgetState(Gadget) 
                              
                ;Lasche aktiv  
                    If active=0 ;Prüfung ob Bearbeitungsmodus aktiv - 0=nein
                    tabText$ = GetGadgetItemText(#Panel_links, *PGdis\itemID, 0) 
                    SetTextColor_(*PGdis\hdc, Color) 
                    FillRect_(*PGdis\hdc, *PGdis\rcItem, tabBackColorBrush)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT) 
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)   
                    Else  ;Prüfung ob Bearbeitungsmodus aktiv - 0=ja
                    tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID)
                    FillRect_(*PGdis\hDC,*PGdis\rcItem,tabBackColorBrush) ;Hintergrundfarbe der aktiven Lasche
                    SetTextColor_(*PGdis\hdc, Color2)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT)
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
                    EndIf
             
                ;Lasche inaktiv 
                Else 
                    If active=1 ;Prüfung ob Bearbeitungsmodus aktiv - 0=nein
                    tabText$ = GetGadgetItemText(#Panel_links, *PGdis\itemID, 0) 
                    SetTextColor_(*PGdis\hdc, Color2) 
                    FillRect_(*PGdis\hdc, *PGdis\rcItem, tabBackColorBrush)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT) 
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)   
                    Else
                    tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID) ;Textfarbe der inaktiven Lasche
                    FillRect_(*PGdis\hDC,*PGdis\rcItem,tabBackColorBrush) ;Hintergrundfarbe der inaktiven Lasche
                    SetTextColor_(*PGdis\hdc, #White)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT)
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
                    EndIf
                EndIf
            
            
              Case 1 ;Linkes Panel, zweite Lasche
              If *PGdis\itemID = GetGadgetState(Gadget) 
                              
               ;Lasche aktiv  
                    If active1=0 ;Prüfung ob Bearbeitungsmodus aktiv - 0=nein
                    tabText$ = GetGadgetItemText(#Panel_links, *PGdis\itemID, 0) 
                    SetTextColor_(*PGdis\hdc, Color) 
                    FillRect_(*PGdis\hdc, *PGdis\rcItem, tabBackColorBrush)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT) 
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)   
                    Else  ;Prüfung ob Bearbeitungsmodus aktiv - 0=ja
                    tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID)
                    FillRect_(*PGdis\hDC,*PGdis\rcItem,tabBackColorBrush) ;Hintergrundfarbe der aktiven Lasche
                    SetTextColor_(*PGdis\hdc, Color2)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT)
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
                    EndIf
             
              ;Lasche inaktiv 
              Else 
                    If active1=1 ;Prüfung ob Bearbeitungsmodus aktiv - 0=nein
                    tabText$ = GetGadgetItemText(#Panel_links, *PGdis\itemID, 0) 
                    SetTextColor_(*PGdis\hdc, Color2) 
                    FillRect_(*PGdis\hdc, *PGdis\rcItem, tabBackColorBrush)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT) 
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)   
                    Else
                    tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID) ;Textfarbe der inaktiven Lasche
                    FillRect_(*PGdis\hDC,*PGdis\rcItem,tabBackColorBrush) ;Hintergrundfarbe der inaktiven Lasche
                    SetTextColor_(*PGdis\hdc, #White)
                    SetBkMode_(*PGdis\hdc, #TRANSPARENT)
                    DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
                    EndIf
               EndIf
             EndSelect     
          EndIf   
             
   
           If item=2 ;rechtes Panel (ohne Bearbeitungsmodus)
         
                   If *PGdis\itemID = GetGadgetState(Gadget) 
                   Color = RGB(2, 145, 231) ;Textfarbe der aktiven Lasche
                   tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID)
                   FillRect_(*PGdis\hDC,*PGdis\rcItem,tabBackColorBrush) ;Hintergrundfarbe der aktiven Lasche
                   SetTextColor_(*PGdis\hdc, Color)
                   SetBkMode_(*PGdis\hdc, #TRANSPARENT)
                   DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
                   Else
                   tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID) ;Textfarbe der inaktiven Lasche
                   FillRect_(*PGdis\hDC,*PGdis\rcItem,tabBackColorBrush) ;Hintergrundfarbe der inaktiven Lasche
                   SetTextColor_(*PGdis\hdc, #White)
                   SetBkMode_(*PGdis\hdc, #TRANSPARENT)
                   DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
                   EndIf
           EndIf            
           
      EndIf

      DeleteObject_(defaultBrush)
      ProcedureReturn 1
      EndSelect
      ProcedureReturn CallWindowProc_(oldWndProc,hWnd,msg,wParam,lParam)    
        
EndProcedure



Procedure myPanelProc(hWnd,msg,wParam,lParam)
  Protected rect.Rect
  Select msg
      Case #WM_ERASEBKGND
          GetClientRect_(hWnd,rect)
          FillRect_(wParam,rect,panelBackColorBrush)
          ProcedureReturn #True
    EndSelect
    ProcedureReturn CallWindowProc_(oldPanelWndProc,hWnd,msg,wParam,lParam)
EndProcedure
  


Procedure myListIcon(hwnd, msg, wparam, lparam)
  Protected hdi.hd_item
  Protected *pnmh.NMHDR
  Protected *pnmcd.NMCUSTOMDRAW
  Protected result
  Protected text$
  
  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.
            InflateRect_(*pnmcd\rc,-1,-1)
            SetBkMode_(*pnmcd\hdc,#TRANSPARENT)
             *pnmcd\dwItemSpec&1
              FillRect_(*pnmcd\hdc, *pnmcd\rc, redbrush)
              SetTextColor_(*pnmcd\hdc, #White)
            
            DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_CENTER|#DT_VCENTER|#DT_END_ELLIPSIS)
            result = #CDRF_SKIPDEFAULT
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure  

;}



;{ Programmstart
OpenWindow(#Window1,0,0,800,680,"Panel_Test",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
ContainerGadget(#Container,0,0,800,680, #PB_Container_BorderLess); Container wird benötigt, damit auch Button1 eingefärbt wird
SetGadgetColor(#Container,#PB_Gadget_BackColor,RGB(30,36,40)); anpassen an Window1-Farbe
ButtonGadget(#Button1, 375, 620 , 80, 25, "Ende")
CloseGadgetList()

    
SetWindowColor(#Window1, RGB(30,36,40))                          ;Farbe des Fensters
SetWindowLongPtr_(WindowID(#Window1),#GWL_EXSTYLE,#WS_EX_LAYERED) ;Fenster wird auf Transparenz vorbereitet
SetLayeredWindowAttributes_(WindowID(#window1),0,240,#LWA_ALPHA) ;Transparenz wird eingestellt 0=durchsichtig

SetWindowCallback(@myWindowCallback()) 
oldWndProc = SetWindowLong_(WindowID(#Window1),#GWL_WNDPROC,@myWindowProc())

    
    PanelGadget(#Panel_rechts,400,10,390,580)  
    oldPanelWndProc = SetWindowLong_(GadgetID(#Panel_rechts),#GWL_WNDPROC,@myPanelProc()) ;Farbe der Lasche
    SetWindowLong_(GadgetID(#Panel_rechts),#GWL_STYLE,#TCS_OWNERDRAWFIXED|GetWindowLong_(GadgetID(#Panel_rechts),#GWL_STYLE)) ;Farbe des Panels
    AddGadgetItem (#Panel_rechts, 0, "Tab1_rechts")
    ButtonGadget(#Button2, 10, 10, 80, 25,"Hallo")
    TextGadget(#Text0,10,50,220,80,"Beispiel ListIconGadget:")
    SetGadgetFont(#Text0,FontID(#Font14))
    ListIconGadget(#Liste, 10, 100, 186, 240,"Spalte1", 60, #PB_ListIcon_GridLines  | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
    AddGadgetColumn(#Liste,1,"Spalte2",60)
    AddGadgetColumn(#Liste,2,"Spalte3",60)
    ;AddGadgetColumn(#Liste,3,"",200) ;Spalte, die den "weißen Fleck" im Header verdeckt
    AddGadgetItem(#Liste, -1, "SubItem 1"+ #LF$ +"Eintrag"+ #LF$ +"Null")
    SetGadgetItemColor(#Liste, -1, #PB_Gadget_FrontColor, RGB (135, 100, 184))
    SetGadgetColor(#Liste, #PB_Gadget_BackColor, RGB(30,36,40))
    SetGadgetColor(#Liste, #PB_Gadget_LineColor, RGB(135, 100, 184))
    SetWindowLongPtr_(GadgetID(#Liste),#GWL_EXSTYLE,0)
    SetWindowPos_(GadgetID(#Liste),0,10,100,186,240,#SWP_FRAMECHANGED )
    hHeader = SendMessage_(GadgetID(#Liste), #LVM_GETHEADER, 0, 0 )
    ;Subclass ListIcon so we can customdraw the header text
    oldListIconCallback = SetWindowLong_(GadgetID(#Liste), #GWL_WNDPROC, @myListIcon())
    
    
    AddGadgetItem (#Panel_rechts, 1, "Tab2_rechts")
    ButtonGadget(#Button3, 10, 10, 80, 25,"Welt")
    CloseGadgetList()
    
    PanelGadget(#Panel_links, 10 , 10 , 390, 580) 
    oldPanelWndProc = SetWindowLong_(GadgetID(#Panel_links),#GWL_WNDPROC, @myPanelProc()) ;Farbe der Lasche
    SetWindowLong_(GadgetID(#Panel_links),#GWL_STYLE,#TCS_OWNERDRAWFIXED|GetWindowLong_(GadgetID(#Panel_links),#GWL_STYLE)) ;Farbe des Panels
    AddGadgetItem(#Panel_links, 2,"Tab1_links")
    TextGadget(#Text1,50,50,150,80,"Beispiel-Text1")
    SetGadgetFont(#Text1,FontID(#Font14))
    ButtonGadget(#Button4, 10, 10, 120, 25, "Bearbeitungsmodus")
    ButtonGadget(#Button5, 150, 10, 120, 25,"Bearbeiten beenden")
    AddGadgetItem(#Panel_links, 3, "Tab2_links")
    ButtonGadget(#Button6, 10, 10, 120, 25, "Bearbeitungsmodus")
    ButtonGadget(#Button7, 150, 10, 120, 25,"Bearbeiten beenden")
    CloseGadgetList()
        
For b = #Button1 To #Button7
    bStyle = GetWindowLongPtr_(GadgetID(b), #GWL_STYLE)
    SetWindowLongPtr_(GadgetID(b), #GWL_STYLE, bStyle & ~#BS_PUSHBUTTON | #BS_OWNERDRAW)
    bData\oldCallback = SetWindowLongPtr_(GadgetID(b), #GWL_WNDPROC, @myButtonCallback())
    SetGadgetData(b, bData)
Next b      
;}



 ;{ Eventschleife
 
Repeat
    event = WaitWindowEvent()
    

    Select event
      Case #PB_Event_Gadget
        Select EventGadget()
            
                      
          Case #Button1
            End
            
          Case #Button4
            If active1=1
            Else  
            active=1
            ResizeGadget(#Panel_links, #PB_Ignore , #PB_Ignore , #PB_Ignore, #PB_Ignore) 
            EndIf
                    
          Case #Button5
            active=0
            ResizeGadget(#Panel_links, #PB_Ignore , #PB_Ignore , #PB_Ignore, #PB_Ignore)
            
          Case #Button6
            If active=1
            Else 
            active1=1
            ResizeGadget(#Panel_links, #PB_Ignore , #PB_Ignore , #PB_Ignore, #PB_Ignore)
            EndIf
          
          Case #Button7
            active1=0
            ResizeGadget(#Panel_links, #PB_Ignore , #PB_Ignore , #PB_Ignore, #PB_Ignore)
            
            
            
         EndSelect
    EndSelect
  Until event = #PB_Event_CloseWindow

DeleteObject_(panelBackColorBrush)
DeleteObject_(tabBackColorBrush)
DeleteObject_(buttonBrushLeave)
DeleteObject_(buttonBrushClick)
DeleteObject_(buttonBrushHover)
DeleteObject_(buttonBrushDisabled) 
;}
Vielleicht hat ja jemand neue Ideen, Verbesserungsvorschläge oder sogar Lösungswege für meine Fragen

Danke
Benutzeravatar
kapege
Beiträge: 39
Registriert: 28.12.2004 17:35
Computerausstattung: AMD Ryzen 7 3700X 8-Core Processor 3.60 GHz
Windows 10 Pro 64bit
14 GB Ram

PureBasic 6.00 LTS (Windows - x64)
Wohnort: Trostberg

Re: Windows-Design-Fragen

Beitrag von kapege »

hallo Andy82,
du erstellst ein ListIconGadget mit einer Breite von 186 pixel, nutzt aber nur 180 pixel. die restlichen 6 pixel sind die weisse Fläche.
bin aber noch nicht dahinter gekommen, warum links und unten kein Rahmen gezeichnet wird.
lg
Andy82
Beiträge: 2
Registriert: 16.04.2020 11:47

Re: Windows-Design-Fragen

Beitrag von Andy82 »

Hallo kapege,

na super - so einfach kann es sein. Da hätte ich ja auch drauf kommen können :)

Vielen Dank!

Das mit dem Rahmen war ursprünglich Absicht, da ich die horizontale Bildlaufleiste mittels #LVS_NOSCROLL ausgeblendet hatte.

Ich fand es da rahmenlos ganz schick - entfernt habe ich ihn so:

Code: Alles auswählen

SetWindowLongPtr_(GadgetID(#Liste),#GWL_EXSTYLE,0)
SetWindowPos_(GadgetID(#Liste),0,10,100,186,240,#SWP_FRAMECHANGED)
lg
Antworten