Jump to content

Setting ListView background color doesn't work properly


Recommended Posts

Hello,

I'm trying to set the background color for the listview and the window. I just can't figure this one out though, no matter how much I look at it.

I cut the code down to the bare minimum. Still not working as intended.

You are supposed to select the color in the menu. Then the function _SwitchBackgroundColor is called with the string for the color.

Works fine for the window background. But the ListView background is messed up.

First, the window is grey and the text background is white. Text background should be white, since the function is called before the main loop.

Whenever I click the corresponding menu, first the window changes color, than on the second click the text background changes color. Why this requires two clicks is beyond me.

Does anyone have any idea why that is?

;##### stuff we need for this script
#include <File.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Misc.au3>

;##### stuff needed for the gui
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <ColorConstants.au3>

#Region ### START global variables
;####### global variables
Global $sVersion = "0.06"
Global $sBackgroundColor = "default" ; background color of the window
#EndRegion ### START global variables

#Region ### START Koda GUI section ### Form=q:\programme\autoit\src\gui_main.kxf
$hGuiWindow = GUICreate("asdf", 1000, 700)

$hComboBox = GUICtrlCreateCombo("nichts", 700, 8, 300 - 8)

$hGuiMenuHelp = GUICtrlCreateMenu("Hilfe?")
$hGuiMenuHelpHelp = GUICtrlCreateMenuItem("Hilfe", $hGuiMenuHelp)

$hGuiMenuColor = GUICtrlCreateMenu("Hintergrundfarbe")
$hGuiMenuColorDefault = GUICtrlCreateMenuItem("Standard", $hGuiMenuColor)
$hGuiMenuColorBlue = GUICtrlCreateMenuItem("Blau", $hGuiMenuColor)

$hGuiInput = GUICtrlCreateEdit("", 8, 8, 1000 - 16 - 300, 21, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))

Global $hGuiListview = _GUICtrlListView_Create($hGuiWindow, "asdf|qwer|zxcv", 8, 37, 1000 - 16, 700 - 45 - 21)
_GUICtrlListView_AddItem($hGuiListview, "lalala", 0)
_GUICtrlListView_AddSubItem($hGuiListview, 0, "blablabla", 0)
_GUICtrlListView_AddSubItem($hGuiListview, 0, "woiejf", 0)
_GUICtrlListView_AddItem($hGuiListview, "ythyj", 0)
_GUICtrlListView_AddSubItem($hGuiListview, 1, "seff", 0)
_GUICtrlListView_AddSubItem($hGuiListview, 1, "iaw", 0)
_GUICtrlListView_AddItem($hGuiListview, "vyzw", 0)
_GUICtrlListView_AddSubItem($hGuiListview, 2, "xenuvt", 0)
_GUICtrlListView_AddSubItem($hGuiListview, 2, "cscs", 0)

_GUICtrlListView_SetExtendedListViewStyle($hGuiListview, $LVS_EX_FULLROWSELECT)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

_SwitchBackgroundColor($sBackgroundColor, $hGuiWindow, $hGuiListview)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hGuiMenuHelpHelp
            MsgBox(0, '', '' & _
                    @CRLF & '' & _
                    @CRLF & "Version: " & $sVersion & _
                    @CRLF & '')
        Case $hGuiMenuColorBlue
            $sBackgroundColor = "blue"
            _SwitchBackgroundColor($sBackgroundColor, $hGuiWindow, $hGuiListview)
        Case $hGuiMenuColorDefault
            $sBackgroundColor = "default"
            _SwitchBackgroundColor($sBackgroundColor, $hGuiWindow, $hGuiListview)
    EndSwitch

    Sleep(10)
WEnd


Func _SwitchBackgroundColor($sColor, $hWindow, $hListview) ; switches the background color of the window
    Local $RGB ; the rgb color
    Local $BGR ; the bgr color

    If $sColor = "blue" Then
        $RGB = 0xA6CAF0
        $BGR = 0xF0CAA6
;~      $RGB = 0xA6CAF0
;~      $BGR = _ColorConvert($RGB)
    EndIf
    If $sColor = "default" Then
        $RGB = 0xF0F0F0
        $BGR = 0xF0F0F0
;~      $RGB = 0xF0F0F0
;~      $BGR = _ColorConvert($RGB)
    EndIf

    GUISetBkColor($RGB, $hWindow)
    _GUICtrlListView_SetBkColor($hListview, $BGR)
    _GUICtrlListView_SetTextColor($hListview, $CLR_BLACK)
    _GUICtrlListView_SetTextBkColor($hListview, $BGR)
EndFunc   ;==>_SwitchBackgroundColor

Func _ColorConvert($nColor);RGB to BGR or BGR to RGB
    ; source for this function:
    ; https://www.autoitscript.com/forum/topic/73302-where-can-i-get-a-version-that-supports-bgr-colormode/
    Return _
            BitOR(BitShift(BitAND($nColor, 0x000000FF), -16), _
            BitAND($nColor, 0x0000FF00), _
            BitShift(BitAND($nColor, 0x00FF0000), 16))
EndFunc   ;==>_ColorConvert

 

Edited by Kira16651
added tags
Link to comment
Share on other sites

You could try to replace this

GUISetBkColor($RGB, $hWindow)
_GUICtrlListView_SetBkColor($hListview, $BGR)
_GUICtrlListView_SetTextColor($hListview, $CLR_BLACK)
_GUICtrlListView_SetTextBkColor($hListview, $BGR)

with this

_GUICtrlListView_SetBkColor($hListview, $BGR)
_GUICtrlListView_SetTextColor($hListview, $CLR_BLACK)
_GUICtrlListView_SetTextBkColor($hListview, $BGR)
GUISetBkColor($RGB, $hWindow)

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...