1

Тема: AHK: задание фона в ListView

Доброе время суток,

Есть ли возможность в ListView задать фон разного цвета для строк или столбцов (для лучшей читаемости)?

2

Re: AHK: задание фона в ListView

Нельзя.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: задание фона в ListView

Спасибо

4 (изменено: yalanne, 2015-03-29 01:02:22)

Re: AHK: задание фона в ListView

Можно!
Вот пожалуйста:

#SingleInstance,Force
Gui, +LastFound
Gui, Add, ListView, x5 y5 w200 h200 vLV_Sample hwndlv,Номер|День
lv:=new ListView(lv)
LV.Add("",1,"Понедельник")
LV.Add("",2,"Вторник")
LV.Add("",3,"Среда")
LV.Add("",4,"Четверг")
LV.Add("",5,"Пятница")
LV.Add("",6,"Субота")
LV.Add("",7,"Воскресенье")
Gui,Show,x50 y50 w210 h210

lv.Color(1,0xA8FFFF,0xC030FF)

lv.Color(3,0xA8FFFF,0xA8FF84)

WinSet,Redraw,,A
Return 
GuiClose:
GuiEscape:
Exitapp
class ListView{
    static list:=[]
    __New(hwnd){
        this.list[hwnd]:=this
        OnMessage(0x4e,"WM_NOTIFY")
        this.hwnd:=hwnd
        this.control:=[]
    }
    add(options,items*){
        Gui,ListView,% this.hwnd
        for a,b in items{
            if A_Index=1
                item:=LV_Add(options,b)
            Else
                LV_Modify(item,"col" A_Index,b)
        }
    }
    clear(){
        this.control:=[]
    }
    Color(item,fore="",back=""){
        LV_GetText(text,item)
        if fore!=""
            this.Control[text,"fore"]:=fore
        if Back!=""
            this.Control[text,"back"]:=back
    }
}
WM_NOTIFY(Param*){
    Critical
    control:=
    if (this:=ListView.list[NumGet(Param.2)])&&(NumGet(Param.2,2*A_PtrSize,"int")=-12){
        stage:=NumGet(Param.2,3*A_PtrSize,"uint")
        if (stage=1)
            return 0x20 ;sets CDRF_NOTIFYITEMDRAW
        if (stage=0x10001){ ;NM_CUSTOMDRAW && Control is in the list
            index:=numget(Param.2,A_PtrSize=4?9*A_PtrSize:7*A_PtrSize,"uint")
            LV_GetText(text,index+1)
            info:=this.Control[text]
            if info.fore!=""
                NumPut(info.fore,Param.2,A_PtrSize=4?12*A_PtrSize:10*A_PtrSize,"int") ;sets the foreground
            if info.back!=""
                NumPut(info.back,Param.2,A_PtrSize=4?13*A_PtrSize:10.5*A_PtrSize,"int") ;sets the background
        }
    }
}

Взято от сюда.
и 16й код цвета можно подобрать  тут.

5

Re: AHK: задание фона в ListView

О, не знал!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: задание фона в ListView

yalanne, спасибо. То, что доктор прописал

7

Re: AHK: задание фона в ListView

В оригинальном скрипте автора используется вот такая функция LV_ModifyCol. Для чего она? я её в своем примере убрал так, как вроде нечего не изменилось.

8

Re: AHK: задание фона в ListView

В данном конкретном случае не нужна, а, например:

#SingleInstance,Force
Gui, +LastFound
Gui, Add, ListView, x5 y5 w200 h200 vLV_Sample hwndlv,Номер|День|Месяц
lv:=new ListView(lv)
LV.Add("",1,"Понедельник","Сентябрь")
LV.Add("",2,"Вторник","Сентябрь")
LV.Add("",3,"Среда","Сентябрь")
LV.Add("",4,"Четверг","Сентябрь")
LV.Add("",5,"Пятница","Сентябрь")
LV.Add("",6,"Субота","Сентябрь")
LV.Add("",7,"Воскресенье","Сентябрь")
Gui,Show, w210 h210

lv.Color(1,0xA8FFFF,0xC030FF)

lv.Color(3,0xA8FFFF,0xA8FF84)

WinSet,Redraw,,A
Return 
GuiClose:
GuiEscape:
Exitapp
class ListView{
    static list:=[]
    __New(hwnd){
        this.list[hwnd]:=this
        OnMessage(0x4e,"WM_NOTIFY")
        this.hwnd:=hwnd
        this.control:=[]
    }
    add(options,items*){
        Gui,ListView,% this.hwnd
        for a,b in items{
            if A_Index=1
                item:=LV_Add(options,b)
            Else
                LV_Modify(item,"col" A_Index,b)
        }
    }
    clear(){
        this.control:=[]
    }
    Color(item,fore="",back=""){
        LV_GetText(text,item)
        if fore!=""
            this.Control[text,"fore"]:=fore
        if Back!=""
            this.Control[text,"back"]:=back
    }
}
WM_NOTIFY(Param*){
    Critical
    control:=
    if (this:=ListView.list[NumGet(Param.2)])&&(NumGet(Param.2,2*A_PtrSize,"int")=-12){
        stage:=NumGet(Param.2,3*A_PtrSize,"uint")
        if (stage=1)
            return 0x20 ;sets CDRF_NOTIFYITEMDRAW
        if (stage=0x10001){ ;NM_CUSTOMDRAW && Control is in the list
            index:=numget(Param.2,A_PtrSize=4?9*A_PtrSize:7*A_PtrSize,"uint")
            LV_GetText(text,index+1)
            info:=this.Control[text]
            if info.fore!=""
                NumPut(info.fore,Param.2,A_PtrSize=4?12*A_PtrSize:10*A_PtrSize,"int") ;sets the foreground
            if info.back!=""
                NumPut(info.back,Param.2,A_PtrSize=4?13*A_PtrSize:10.5*A_PtrSize,"int") ;sets the background
        }
    }
}

и

#SingleInstance,Force
Gui, +LastFound
Gui, Add, ListView, x5 y5 w200 h200 vLV_Sample hwndlv,Номер|День|Месяц
lv:=new ListView(lv)
LV.Add("",1,"Понедельник","Сентябрь")
LV.Add("",2,"Вторник","Сентябрь")
LV.Add("",3,"Среда","Сентябрь")
LV.Add("",4,"Четверг","Сентябрь")
LV.Add("",5,"Пятница","Сентябрь")
LV.Add("",6,"Субота","Сентябрь")
LV.Add("",7,"Воскресенье","Сентябрь")
LV_ModifyCol(2,"AutoHdr")
Gui,Show, w210 h210

lv.Color(1,0xA8FFFF,0xC030FF)

lv.Color(3,0xA8FFFF,0xA8FF84)

WinSet,Redraw,,A
Return 
GuiClose:
GuiEscape:
Exitapp
class ListView{
    static list:=[]
    __New(hwnd){
        this.list[hwnd]:=this
        OnMessage(0x4e,"WM_NOTIFY")
        this.hwnd:=hwnd
        this.control:=[]
    }
    add(options,items*){
        Gui,ListView,% this.hwnd
        for a,b in items{
            if A_Index=1
                item:=LV_Add(options,b)
            Else
                LV_Modify(item,"col" A_Index,b)
        }
    }
    clear(){
        this.control:=[]
    }
    Color(item,fore="",back=""){
        LV_GetText(text,item)
        if fore!=""
            this.Control[text,"fore"]:=fore
        if Back!=""
            this.Control[text,"back"]:=back
    }
}
WM_NOTIFY(Param*){
    Critical
    control:=
    if (this:=ListView.list[NumGet(Param.2)])&&(NumGet(Param.2,2*A_PtrSize,"int")=-12){
        stage:=NumGet(Param.2,3*A_PtrSize,"uint")
        if (stage=1)
            return 0x20 ;sets CDRF_NOTIFYITEMDRAW
        if (stage=0x10001){ ;NM_CUSTOMDRAW && Control is in the list
            index:=numget(Param.2,A_PtrSize=4?9*A_PtrSize:7*A_PtrSize,"uint")
            LV_GetText(text,index+1)
            info:=this.Control[text]
            if info.fore!=""
                NumPut(info.fore,Param.2,A_PtrSize=4?12*A_PtrSize:10*A_PtrSize,"int") ;sets the foreground
            if info.back!=""
                NumPut(info.back,Param.2,A_PtrSize=4?13*A_PtrSize:10.5*A_PtrSize,"int") ;sets the background
        }
    }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: задание фона в ListView

А понял, авто-размер столбов. Спасибо