Page 1 sur 1
[R] ListView transparente
Posté : lun. 30 sept. 2013 15:52
par Hugues
Bonjour à tous,
J'aimerai savoir s'il est possible de rendre totalement transparente une ListView (Entête et fonds des colonnes)?
Merci par avance.
Re: [..] ListView transparente
Posté : lun. 30 sept. 2013 17:57
par mikell
Je ne peux te proposer qu'un truc comme ça
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <ListviewConstants.au3>
$soft1 = @Autoitexe
$soft2 = @SystemDir & "\cmd.exe"
$soft3 = @SystemDir & "\notepad.exe"
$gui = GUICreate("listview items", 420, 150, 100, 200)
GUISetBkColor(0xddeeff)
$gui2 = GUICreate("gné", 400, 130, 10, 10, $WS_POPUP, _
BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
$listview = GUICtrlCreateListView("|column1|column2 ", 0, 0, 400, 130, _
BitOR($LVS_SHOWSELALWAYS, $LVS_NOCOLUMNHEADER), $WS_EX_TRANSPARENT)
GUICtrlSetBkColor(-1, 0xABCDEF)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 280)
GUICtrlCreateListViewItem("|" & $soft1 & "|" & FileGetVersion($soft1), $listview)
GUICtrlSetImage(-1, $soft1, -1)
GUICtrlCreateListViewItem("|" & $soft2 & "|" & FileGetVersion($soft2), $listview)
GUICtrlSetImage(-1, $soft2 , -1)
GUICtrlCreateListViewItem("|" & $soft3 & "|" & FileGetVersion($soft3), $listview)
GUICtrlSetImage(-1, $soft3, -1)
_WinAPI_SetLayeredWindowAttributes($gui2, 0xABCDEF)
GUISetState(@SW_SHOW, $gui)
GUISetState(@SW_SHOW, $gui2)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit
Wend
Et pour les en-têtes si tu n'en as pas besoin pour cliquer dessus le mieux est de les remplacer par des labels transparentes
Re: [..] ListView transparente
Posté : lun. 30 sept. 2013 18:19
par Hugues
C'est presque ça! Donc on ne peut pas avoir la ListView transparente comme un GUI? Dommage...
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("Test", 600, 400, -1 , -1, -1, $WS_EX_LAYERED)
GUISetBkColor(0xABCDEF, $hGUI)
GUISetState(@SW_SHOW, $hGUI)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF)
GUICtrlCreateLabel("Mon texte est visible et pas le font de mon GUI", 50, 100, 200, 50, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetTip(-1, "Cliquer sur le label pour bouger la fenêtre")
Do
Until GUIGetMsg() = -3
Exit
Re: [..] ListView transparente
Posté : lun. 30 sept. 2013 18:30
par Hugues
J'ai parlé trop vite encore... (enfin écrit...)
J'ai fait ça, c'est pas très propre mais ça se rapproche du resultat escompté, maintenant il faut que je supprime le contour du GUI...
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <ListviewConstants.au3>
$hGUI = GUICreate("Test", 600, 400, -1 , -1, -1, $WS_EX_LAYERED)
GUISetBkColor(0xABCDEF, $hGUI)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF)
GUICtrlCreateLabel("Mon texte est visible et pas le font de mon GUI", 50, 100, 200, 50, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetTip(-1, "Cliquer sur le label pour bouger la fenêtre")
$soft1 = @Autoitexe
$soft2 = @SystemDir & "\cmd.exe"
$soft3 = @SystemDir & "\notepad.exe"
$gui2 = GUICreate("gné", 400, 130, 10, 10, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD, $GUI_WS_EX_PARENTDRAG), $hGUI)
$listview = GUICtrlCreateListView("|column1|column2 ", 0, 0, 400, 130, BitOR($LVS_SHOWSELALWAYS, $LVS_NOCOLUMNHEADER), $WS_EX_TRANSPARENT)
GUICtrlSetBkColor(-1, 0xABCDEF)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 280)
GUICtrlCreateListViewItem("|" & $soft1 & "|" & FileGetVersion($soft1), $listview)
GUICtrlSetImage(-1, $soft1, -1)
GUICtrlCreateListViewItem("|" & $soft2 & "|" & FileGetVersion($soft2), $listview)
GUICtrlSetImage(-1, $soft2 , -1)
GUICtrlCreateListViewItem("|" & $soft3 & "|" & FileGetVersion($soft3), $listview)
GUICtrlSetImage(-1, $soft3, -1)
_WinAPI_SetLayeredWindowAttributes($gui2, 0xABCDEF)
_WinAPI_SetBkColor($gui2, 0xffffff)
GUISetState(@SW_SHOW, $hGUI)
GUISetState(@SW_SHOW, $gui2)
Do
Until GUIGetMsg() = -3
Exit
Re: [..] ListView transparente
Posté : lun. 30 sept. 2013 18:54
par mikell
Ah, quand tu disais transparente, c'était pour voir le bureau à travers ?
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <ListviewConstants.au3>
$soft1 = @Autoitexe
$soft2 = @SystemDir & "\cmd.exe"
$soft3 = @SystemDir & "\notepad.exe"
$gui = GUICreate("listview items", 420, 150, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
GUISetBkColor(0xABCDEF)
$label1 = GUICtrlCreateLabel("", 10, 0, 15, 15, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x00ff00)
$label2 = GUICtrlCreateLabel("X", 27, 0, 15, 15, 1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0xff0000)
_WinAPI_SetLayeredWindowAttributes($gui, 0xABCDEF)
GUISetState(@SW_SHOW, $gui)
$gui2 = GUICreate("gné", 400, 130, 10, 10, $WS_POPUP, _
BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
GUISetBkColor(0xABCDEF)
$listview = GUICtrlCreateListView("|column1|column2 ", 10, 30, 400, 100, _
BitOR($LVS_SHOWSELALWAYS, $LVS_NOCOLUMNHEADER), $WS_EX_TRANSPARENT)
GUICtrlSetBkColor(-1, 0xABCDEF)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 280)
GUICtrlCreateListViewItem("|" & $soft1 & "|" & FileGetVersion($soft1), $listview)
GUICtrlSetImage(-1, $soft1, -1)
GUICtrlCreateListViewItem("|" & $soft2 & "|" & FileGetVersion($soft2), $listview)
GUICtrlSetImage(-1, $soft2 , -1)
GUICtrlCreateListViewItem("|" & $soft3 & "|" & FileGetVersion($soft3), $listview)
GUICtrlSetImage(-1, $soft3, -1)
_WinAPI_SetLayeredWindowAttributes($gui2, 0xABCDEF)
GUISetState(@SW_SHOW, $gui2)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit
If $msg = $label2 Then Exit
Wend
NB : $GUI_WS_EX_PARENTDRAG c'est pour un controle pas une gui
Re: [..] ListView transparente
Posté : mar. 01 oct. 2013 10:12
par Hugues
C'est bon sauf que je n'arrive plus à modifier la taille de Police de ma ListView...
Avec mon ancienne version, c'était bon mais pas là...
Nouveau code (merci Mikell):
► Afficher le texte
Code : Tout sélectionner
$hFont = _WinAPI_CreateFont(50, 12, 0, 0, $FW_THIN, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $PROOF_QUALITY, 0, 'Tahoma')
$hGUI = GUICreate("gné", 600, 110, (@DesktopWidth / 2) - 300, (@DesktopHeight / 2) - 210, $WS_POPUP, $WS_EX_LAYERED)
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF)
GUISetState(@SW_SHOW, $hGUI)
$hGUI2 = GUICreate("", 400, 130, 10, 10, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hGUI)
GUISetBkColor(0xABCDEF)
$hListView = GUICtrlCreateListView("Station|Nom|Temps", 2, 2, 600, 110, BitOR($LVS_SHOWSELALWAYS, $LVS_NOCOLUMNHEADER), $WS_EX_TRANSPARENT)
_WinAPI_SetFont($hListView, $hFont, True)
GUICtrlSetBkColor(-1, 0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGUI2, 0xABCDEF)
$MaxCycleTime = StringSplit(_ArrayMax($HelpArray2, 1, 1),";", 0)
_GUICtrlListView_AddItem($hListView, "Col1", 0)
_GUICtrlListView_AddSubItem($hListView, 0, "Col2", 1)
_GUICtrlListView_AddSubItem($hListView, 0, "Col3" & "s", 2)
GUISetState(@SW_SHOW, $hGUI2)
Ancien code:
► Afficher le texte
Code : Tout sélectionner
$hFont = _WinAPI_CreateFont(50, 12, 0, 0, $FW_THIN, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $PROOF_QUALITY, 0, 'Tahoma')
$hGUI = GUICreate("Gné", 600, 110, (@DesktopWidth / 2) - 300, (@DesktopHeight / 2) - 210, BitOR($WS_POPUP,$WS_CLIPSIBLINGS))
$hListView = _GUICtrlListView_Create($hGUI, "Station|Nom|Temps", 2, 2, 600, 110);, $LVS_NOSORTHEADER, $LVS_EX_GRIDLINES);-1, -1, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW
_WinAPI_SetFont($hListView, $hFont, True)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUISetState()
Merci.
Re: [..] ListView transparente
Posté : mar. 01 oct. 2013 13:53
par mikell
Sérieux tu aimes bien faire compliqué toi ...
Code : Tout sélectionner
$listview = GUICtrlCreateListView(...)
GUICtrlSetFont(-1, 12, 600, 0, "Comic Sans MS")
NB : Apprends à faire la différence entre les IDs et les handles
GUICtrlCreateListView retourne un id alors que _GUICtrlListView_Create retourne un handle
Or _WinAPI_SetFont veut un handle, donc pour un id il faut d'abord utiliser GUICtrlGetHandle
Re: [..] ListView transparente
Posté : mar. 01 oct. 2013 19:41
par Hugues
Merci, je vais essayer de suite tes conseils.
Sujet résolu.