Jump to content
Sign in to follow this  
Pedro Pinheiro

Criar listview propria.

Recommended Posts

Existe alguma maneira de criar uma listview própria, que não use elementos do windows e possa usar uma imagem como caixa de seleção? Fiz um exemplo na imagem abaixo. Você seleciona o elemento com aquela imagem verde. Eu estava vendo um projeto do belini e fiquei curioso também para saber. Eu estava pensando em fazer um joguinho de pc e usar esse listview como menu dele.

 

lyGSdg1.jpg

 

 

Eu fiz um, mas não consegui listar mais itens que não aparece na tela. Ex: 1 a 100

 

zRssvwT.gif

 

Eu fiz um GuiCtrlSetData nos elementos de 1 a 10. Ex: quando eu chego no elemento 11 ele volta pro elemento 1 e os 10 elementos da lista muda para 11 a 20. Até ai beleza, mas o "GUICtrlSetBkColor($lbl1, $GUI_BKCOLOR_TRANSPARENT)" buga com o "GUICtrlSetData". Quando o GUICtrlSetData coloca uma informação nova da um pequeno bug e ele perde o background transparente as vezes. Olha na imagem abaixo eu dando GUICtrlSetData nos 10 elementos e alguns por um instante fica com background branco ao invés de ficar transparente. Fica piscando rapidamente alguns elementeos.

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites

E ai @Pedro Pinheiro.

 

Algum Tempo atrás iniciei um projeto de JukeBox mas parei nos 60%.

Costumo testar tanta coisa que usando um simples GUICtrlCreatePic vazio junto com GUICtrlSetStyle fiz um Seletor para Capas, pois meu programa trabalha em cima de uma Array e tem o seletor que navega pelas Capas.

 

O Único problema é colocar cor nele, só consegui alterando o Tema do Windows XP em Propriedades de Vídeo, mais precisamente aba Aparência, Botão Avançada depois em Objetos 3D , depois altere a Cor 1.

 

Na Época Pensei em Usar uma imagem em PNG como Seletor, mas fiquei mesmo com o GUICtrlCreatePic vazio

 

Fiz um Exemplo :

#cs ----------------------------------------------------------------------------
AutoIt Version:3.3.14.2
    Author: Fábio iGames

Script Function:
    ListView Personalizada.
#ce ----------------------------------------------------------------------------
AutoItSetOption("MustDeclareVars", 1)
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
Global Const $Joyid1 = 0, $Joy_Centro = 32511
Global Const $Branco = 0xFFFFFF , $Verde = 0x00FF00
Global Const $Fonte = "Arial"
Global $L1, $L2, $L3, $L4, $L5, $L6, $L7, $L8, $L9, $L10
Global $item, $msg, $seletor, $Njogos, $total
Global $cor = $Branco
Global $posy = 65
Global $retjoy1, $bt_joy1, $x1, $y1

Local $Joyinfo1, $Joystrutura
; Cria as Estruturas Responsáveis Por Conter as Informações dos Joysticks.
$Joystrutura = "int x;int y;int z;int buttons"
$Joyinfo1    = DllStructCreate($Joystrutura)
If @error Then Exit (0) & MsgBox(0x40000," Erro","Não Foi Possível Criar a Estrutura do Joystick.", 5)

SoundSetWaveVolume(100)
If Not FileExists(@ScriptDir &"\Lista de Jogos.ini") Then Criar_Lst() ; Cria Lista se Não Existir no Diretório.

Janela()

$item  = 1
GUICtrlSetColor($L1, $Verde) ; 1ª Label Fica Verde ao Iniciar.
Local $hDLL = DllOpen("user32.dll")

While 1 ; Loop
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then
	   $Joyinfo1 = 0
	   DllClose($hDLL)
	   Exit (0)
    EndIf
	; Lê o Estado dos Joysticks.
	$retjoy1 = DllCall("winmm.dll", "int", "joyGetPos", "int", $Joyid1, "ptr", DllStructGetPtr($Joyinfo1))
	$bt_joy1 = DllStructGetData($Joyinfo1,"buttons")
	$x1 = DllStructGetData($Joyinfo1,"x")
	$y1 = DllStructGetData($Joyinfo1,"y")
    ; Direcional do Joystick Para Cima ou Seta do Teclado Para Cima Move o Seletor Para Cima.
	If $y1 < $Joy_Centro And $x1 == $Joy_Centro Or _IsPressed("26",$hDLL) Then
	   If $item > 1  Then ; Se For Maior que 1 Não Faz Nada.
		  $item -= 1
	      $posy -= 40
		  If $item < 10 Then GUICtrlSetPos($seletor, 5, $posy) ; Se For Menor que 10 Move o Seletor Para Cima
		  Switch $item
			 Case 1
				GUICtrlSetColor($L1, $Verde)
				GUICtrlSetColor($L2, $Branco)
			 Case 2
				GUICtrlSetColor($L2, $Verde)
				GUICtrlSetColor($L3, $Branco)
			 Case 3
				GUICtrlSetColor($L3, $Verde)
				GUICtrlSetColor($L4, $Branco)
			 Case 4
				GUICtrlSetColor($L4, $Verde)
				GUICtrlSetColor($L5, $Branco)
			 Case 5
				GUICtrlSetColor($L5, $Verde)
				GUICtrlSetColor($L6, $Branco)
			 Case 6
				GUICtrlSetColor($L6, $Verde)
				GUICtrlSetColor($L7, $Branco)
			 Case 7
				GUICtrlSetColor($L7, $Verde)
				GUICtrlSetColor($L8, $Branco)
			 Case 8
				GUICtrlSetColor($L8, $Verde)
				GUICtrlSetColor($L9, $Branco)
			 Case 9
				GUICtrlSetColor($L9, $Verde)
				GUICtrlSetColor($L10, $Branco)
			 Case Else
				Local $next  = IniRead(@ScriptDir &"\Lista de Jogos.ini", "Jogos", $item, "")
			    GUICtrlSetColor($L10, $Verde)
			    GUICtrlSetData($L10, $next)
			 EndSwitch
			 GUICtrlSetData($Njogos, "Jogos: " & $item & "/" & $total)
             Sleep(100) ; Delay Pro Seletor Não Mover Muito Rápido.
		  EndIf
    EndIf
	; Direcional do Joystick Para Baixo ou Seta do Teclado Para Baixo Move o Seletor Para Baixo.
	If $y1 > $Joy_Centro And $x1 == $Joy_Centro Or _IsPressed("28",$hDLL) Then
	   If $item < $total  Then ; Se For Menor ao Total de Jogos Encontrados a Variável $item sempre vai ser 10 e o Seletor Fica na Última Posição da 10ª Label.
		  $item += 1
	      $posy += 40
		  If $item <= 10 Then GUICtrlSetPos($seletor, 5, $posy) ; Se For Menor ou Igual a 10 Move o Seletor Para Baixo.
		  Switch $item
			 Case 2
				GUICtrlSetColor($L1, $Branco)
				GUICtrlSetColor($L2, $Verde)
			 Case 3
				GUICtrlSetColor($L2, $Branco)
				GUICtrlSetColor($L3, $Verde)
			 Case 4
				GUICtrlSetColor($L3, $Branco)
				GUICtrlSetColor($L4, $Verde)
			 Case 5
				GUICtrlSetColor($L4, $Branco)
				GUICtrlSetColor($L5, $Verde)
			 Case 6
				GUICtrlSetColor($L5, $Branco)
				GUICtrlSetColor($L6, $Verde)
			 Case 7
				GUICtrlSetColor($L6, $Branco)
				GUICtrlSetColor($L7, $Verde)
			 Case 8
				GUICtrlSetColor($L7, $Branco)
				GUICtrlSetColor($L8, $Verde)
			 Case 9
				GUICtrlSetColor($L8, $Branco)
				GUICtrlSetColor($L9, $Verde)
			 Case 10
				GUICtrlSetColor($L9, $Branco)
				GUICtrlSetColor($L10, $Verde)
			 Case Else
				Local $jogo = IniRead(@ScriptDir &"\Lista de Jogos.ini", "Jogos", $item, "")
				GUICtrlSetColor($L10, $Verde)
				GUICtrlSetData($L10, $jogo)
		  EndSwitch
		  GUICtrlSetData($Njogos, "Jogos: " & $item & "/" & $total)
		  Sleep(100) ; Delay Pro Seletor Não Mover Muito Rápido.
	    Else
		  $item = $total
	   EndIf
	EndIf
Wend

Func Janela()
    Local $Gui = GUICreate("ListView Personalizada", 360, 480, -1, -1, BitOR ($WS_POPUP,$WS_BORDER), BitOR($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
    GUISetBkColor(0x300AA9, $Gui)
    GUISetFont (16, -1, -1, $Fonte)
    Local $by = IniRead(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "(O o)", "")
    GUICtrlCreateLabel($by, 0, 461, 360)
    GUICtrlSetColor(-1, 0xFAB100)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetStyle(-1, $SS_Center)
    GUICtrlSetFont(-1, 11, 100) ; Parâmetros da Fonte.
    GUICtrlCreateLabel("ListView  Personalizada", 0, 7, 360)
    GUICtrlSetColor(-1, $Verde)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetStyle(-1, $SS_Center)
    GUICtrlSetFont(-1, 21, 600) ; Parâmetros da Fonte.
    $total =  IniRead(@ScriptDir &"\Lista de Jogos.ini","Jogos","TOTAL","") ; Lê o Número Total de Jogos.
    $Njogos = GUICtrlCreateLabel("Jogos: 1/" & $total, 230, 38, 360)
    GUICtrlSetColor(-1, $Branco)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 15, 100) ; Parâmetros da Fonte.

    $seletor = GUICtrlCreatePic("", 5, $posy, 350, 36) ; Seletor
;~     GUICtrlSetStyle($seletor, $WS_DLGFRAME, $WS_EX_CLIENTEDGE)      ; Modelo Grosso.
    GUICtrlSetStyle($seletor, $WS_DLGFRAME,"")         ; Modelo Medio com Realce Para Cima.
;~     GUICtrlSetStyle($seletor, $DS_MODALFRAME, $WS_EX_CLIENTEDGE) ; Modelo Fino com Profundidade.

    $L1 = GUICtrlCreateLabel("", 17, 70, 360, 25) ; 1ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L1, $cor)
    GUICtrlSetBkColor($L1, $GUI_BKCOLOR_TRANSPARENT)
    $L2 = GUICtrlCreateLabel("", 17, 110, 360, 25) ; 2ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L2, $cor)
    GUICtrlSetBkColor($L2, $GUI_BKCOLOR_TRANSPARENT)
    $L3 = GUICtrlCreateLabel("", 17, 150, 360, 25) ; 3ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L3, $cor)
    GUICtrlSetBkColor($L3, $GUI_BKCOLOR_TRANSPARENT)
    $L4 = GUICtrlCreateLabel("", 17, 190, 360, 25) ; 4ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L4, $cor)
    GUICtrlSetBkColor($L4, $GUI_BKCOLOR_TRANSPARENT)
    $L5 = GUICtrlCreateLabel("", 17, 230, 360, 25) ; 5ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L5, $cor)
    GUICtrlSetBkColor($L5, $GUI_BKCOLOR_TRANSPARENT)
    $L6 = GUICtrlCreateLabel("", 17, 270, 360, 25) ; 6ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L6, $cor)
    GUICtrlSetBkColor($L6, $GUI_BKCOLOR_TRANSPARENT)
    $L7 = GUICtrlCreateLabel("", 17, 310, 360, 25) ; 7ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L7, $cor)
    GUICtrlSetBkColor($L7, $GUI_BKCOLOR_TRANSPARENT)
    $L8 = GUICtrlCreateLabel("", 17, 350, 360, 25) ; 8ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L8, $cor)
    GUICtrlSetBkColor($L8, $GUI_BKCOLOR_TRANSPARENT)
    $L9 = GUICtrlCreateLabel("", 17, 390, 360, 25) ; 9ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L9, $cor)
    GUICtrlSetBkColor($L9, $GUI_BKCOLOR_TRANSPARENT)
    $L10 = GUICtrlCreateLabel("", 17, 430, 360, 25) ; 10ª Label Vazia que vai Receber o Nome Jogo.
    GUICtrlSetColor($L10, $cor)
    GUICtrlSetBkColor($L10, $GUI_BKCOLOR_TRANSPARENT)
    For $i = 1 To 10
	   Local $jogo = IniRead(@ScriptDir &"\Lista de Jogos.ini","Jogos", $i,"") ; Lê o Nome do Jogo em Ordem Crescente Numérica.
	   Switch $i
		  Case 1
		     GUICtrlSetData($L1, $jogo)
		  Case 2
		     GUICtrlSetData($L2, $jogo)
		  Case 3
			 GUICtrlSetData($L3, $jogo)
		  Case 4
		     GUICtrlSetData($L4, $jogo)
		  Case 5
		     GUICtrlSetData($L5, $jogo)
		  Case 6
		     GUICtrlSetData($L6, $jogo)
		  Case 7
		     GUICtrlSetData($L7, $jogo)
		  Case 8
		     GUICtrlSetData($L8, $jogo)
		  Case 9
		     GUICtrlSetData($L9, $jogo)
		  Case 10
		     GUICtrlSetData($L10, $jogo)
	   EndSwitch
    Next
    GUISetState(@SW_SHOW, $Gui)
EndFunc

Func Criar_Lst() ; Cria Lista de Jogos Para a ListView Personalizada.
    IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "1", "1941 - Counter Attack")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "2", "Aero Fighters 3 / Sonic wings 3")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "3", "Alien vs. Predator")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "4", "Cadillacs and Dinosaurs")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "5", "Demon Front (V102)")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "6", "Final Fight (World)")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "7", "Golden Axe")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "8", "King of Fighters '97")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "9", "King of Fighters 2002 Magic Plus II")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "10", "Metal Slug X")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "11", "Rad Mobile(Word)")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "12", "Rygar")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "13", "Samurai Shodown / Samurai Spirits")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "14", "Shadow Dancer")
    IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "15", "Shinob")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "16", "SNK vs. Capcom SVC")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "17", "Street Fighter IV")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "18", "Super Mario Bros")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "19", "The Simpsons (4 Player World)")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "20", "X-Men Vs. Street Fighter")
    IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "(O o)", "By: Fábio iGames")
	IniWrite(@ScriptDir &"\Lista de Jogos.ini", "Jogos", "TOTAL", "20")
	MsgBox(0x40000,"  ListView  Personalizada   -    By: Fábio iGames","Joystick ou as Setas para Cima e Para Baixo do Teclado Selecionam o Jogo.", 10)
EndFunc 
Vou Postar ele no Arcadebr com uma imagem embutida e aquele som click.wav que você postou lá pois aqui está dando erro quando posto o Script completo.
Aparece a mensagem post_too_long quando coloco um Script grande, mesmo usando o botão <> Código, alguém sabe como resolver?
Edited by Fábio iGames

Share this post


Link to post
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

Sign in to follow this  

×