Componente QListView (Mostra uma lista)
QListView provê 3 diferentes maneiras de mostrar itens em um form.
Os itens podem ser mostrados em colunas com cabeçalho e sub-itens, ou individualmente com grandes ou pequenos icones.
Demais componentes -Click Barra lateral esquerda
Informações adicionais -
Click propriedades em azul
Tipo Interno de QListView
TYPE ItemType
' ie. ListView.Item(0).Caption
Caption AS STRING  
Checked AS INTEGER     ' Se CheckBoxes estiver habilitado e item estiver checado
Handle AS INTEGER
' Apenas leitura
ImageIndex AS INTEGER
Index AS INTEGER
' Apenas leitura
Selected AS INTEGER
StateIndex AS INTEGER
END TYPE
TYPE ColumnType
' ie. ListView.Column(0).Width
Caption AS STRING
Width AS INTEGER
END TYPE
Propriedades de QListView
Campo |
Tipo |
R/W+ |
Padrão |
Align
|
INTEGER |
RW |
alNone |
BorderStyle
|
INTEGER |
RW |
bsSingle |
CheckBoxes
|
INTEGER |
RW |
False |
Color
|
INTEGER |
RW |
|
Column
|
Array de ColumnType |
RW |
|
ColumnClick
|
INTEGER |
RW |
True |
ColumnsCount
|
INTEGER |
RW |
|
Cursor
|
INTEGER |
RW |
crDefault |
Enabled
|
INTEGER |
RW |
True |
Font
|
QFONT |
W |
|
GridLines
|
INTEGER |
RW |
False |
Handle
|
INTEGER |
R |
|
Height
|
INTEGER |
RW |
|
HideSelection
|
INTEGER |
RW |
False |
Hint
|
STRING |
RW |
|
HotTrack
|
INTEGER |
RW |
False |
Item
|
ARRAY of ItemType |
RW |
|
ItemCount
|
INTEGER |
R |
|
ItemIndex
|
INTEGER |
RW |
|
LargeImages
|
QIMAGELIST |
W |
|
Left
|
INTEGER |
RW |
0 |
MultiSelect
|
INTEGER |
RW |
False |
Parent
|
QFORM/QPANEL/QTABCONTROL |
W |
0 |
PopupMenu
|
QPOPUPMENU |
W |
|
ReadOnly
|
INTEGER |
RW |
False |
RowSelect
|
INTEGER |
RW |
False |
SelCount
|
INTEGER |
RW |
|
Selected
|
ARRAY of INTEGER |
RW |
|
ShowColumnHeaders
|
INTEGER |
RW |
True |
ShowHint
|
INTEGER |
RW |
False |
SmallImages
|
QIMAGELIST |
W |
|
SortType
|
INTEGER |
RW |
stNone |
StateImages
|
QIMAGELIST |
W |
|
SubItem
|
2D ARRAY of STRING |
RW |
|
TabOrder
|
INTEGER |
RW |
|
Tag
|
INTEGER |
RW |
|
Top
|
INTEGER |
RW |
0 |
ViewStyle
|
INTEGER |
RW |
vsIcon |
Visible
|
INTEGER |
RW |
True |
Width
|
INTEGER |
RW |
|
+ R = Propriedade de leitura
W = Propriedade de escrita
Métodos de QListView
Método |
Tipo |
Descrição |
Parâmetros |
AddColumns
|
SUBI |
Adiciona colunas à listview |
STRING, Infinite |
AddItems
|
SUBI |
Adiciona itens à listview |
STRING, Infinite |
AddSubItem
|
SUB (Index%, String$) |
Adiciona sub-item a Index% |
2 |
Clear
|
SUB |
Limpa todos itens na listview |
0 |
ClearColumns
|
SUB |
Limpa todas colunas na listview |
0 |
DelItems
|
SUBI |
Apaga items da listview |
INTEGER, Infinite |
DelSubItem
|
SUB (Index%, SubIndex%) |
Apaga sub-item da listview |
2 |
InsertItem
|
SUB (Index%, String$) |
Insere item no Index% |
2 |
InsertSubItem
|
SUB (Index%, SubIndex%, String$) |
Insere sub-item |
3 |
SwapItem
|
SUB (Index1%, Index2%) |
Permuta items |
2 |
Eventos de QListView
Evento |
Tipo |
Ocorre quando... |
Parâmetros |
OnClick
|
VOID |
Item foi clicado |
0 |
OnChange
|
SUB (Index%,Change AS BYTE) |
Item alterado (texto, imagem, ou estado) |
2 |
OnColumnClick
|
VOID |
Texto da Coluna foi clicado |
1 |
OnDblClick
|
SUB (Index%,Change AS BYTE) |
Seleção com dois cliques |
0 |
OnKeyPressed
|
SUB (Key AS BYTE) |
Tecla pressionada |
1 |
QListView exemplo:
' Simples .ZIP viewer (não descompacta nem outra coisa deste tipo).
' Você está livre para modificar e distribuir este codigo sem restrições.
' Escrito em Rapid-Q por William Yu
' Demonstra QOpenDialog, QFileStream, QListView, QMainMenu, QMenuItem
' e QImageList.
$APPTYPE GUI
$TYPECHECK ON
$INCLUDE "RAPIDQ.INC"
$RESOURCE ICO_ZIP AS "ZIP.ICO"
$RESOURCE ICO_APP AS "APP.ICO"
DECLARE SUB ZipView (ZIPFile AS STRING)
DECLARE SUB FormResize
DECLARE SUB OpenClick
DECLARE SUB ExitClick
DECLARE SUB IconClick
DECLARE SUB SmallIconClick
DECLARE SUB ReportClick
DECLARE SUB ItemDblClick
CONST SIG = &H04034B50
' ZIP Assinatura/ID
TYPE ZFHeader
Signature AS LONG
Version AS WORD
GPBFlag AS WORD
' ?
Compress AS WORD
' Tipos de Compressão
DateTime AS LONG
' Formato de compressão
CRC32 AS LONG
CSize AS LONG
' Tamanho do compactado
USize AS LONG
' Tamanho não compactado
FileNameLen AS LONG
END TYPE
TYPE PackedDateType
' Penso que seja:
Year AS SHORT
' 7 bits
Month AS BYTE
' 4 bits
Day AS BYTE
' 5 bits
Hour AS BYTE
' 5 bits
Minute AS BYTE
' 6 bits
Secs AS BYTE
' 5 bits
END TYPE
' Total = 32 bits
DIM CompType(0 TO 9) AS STRING
CompType(0) = "Stored"
CompType(1) = "Shrunk"
CompType(2) = "Reduced1"
CompType(3) = "Reduced2"
CompType(4) = "Reduced3"
CompType(5) = "Reduced4"
CompType(6) = "Imploded"
CompType(7) = "Defalted"
CompType(8) = "DeflatN"
'' Poderia ser DeflatX também...
CompType(9) = "DeflatX"
DIM OpenItem AS QMenuItem
OpenItem.Caption = "&Open"
OpenItem.OnClick = OpenClick
DIM BreakItem AS QMenuItem
BreakItem.Caption = "-"
DIM ExitItem AS QMenuItem
ExitItem.Caption = "E&xit"
ExitItem.OnClick = ExitClick
DIM IconItem AS QMenuItem
IconItem.Caption = "vs&Icon"
IconItem.RadioItem = True
IconItem.OnClick = IconClick
DIM SmallIconItem AS QMenuItem
SmallIconItem.Caption = "vs&SmallIcon"
SmallIconItem.RadioItem = True
SmallIconItem.OnClick = SmallIconClick
DIM ReportItem AS QMenuItem
ReportItem.Caption = "vs&Report"
ReportItem.RadioItem = True
ReportItem.Checked = True
ReportItem.OnClick = ReportClick
DIM FileMenu AS QMenuItem
FileMenu.Caption = "&File"
FileMenu.AddItems OpenItem, BreakItem, ExitItem
DIM ViewMenu AS QMenuItem
ViewMenu.Caption = "&View"
ViewMenu.AddItems IconItem, SmallIconItem, ReportItem
DIM ImageList1 AS QImageList
ImageList1.Height = 32
ImageList1.Width = 32
ImageList1.AddICOHandle ICO_APP
ImageList1.AddICOHandle ICO_ZIP
DIM ImageList2 AS QImageList
' Escala 16x16
ImageList2.Height = 16
ImageList2.Width = 16
ImageList2.AddICOHandle ICO_APP
ImageList2.AddICOHandle ICO_ZIP
CREATE Form AS QForm
ICOHandle = ICO_ZIP
Center
OnResize = FormResize
Height = 330
Width = 525
Caption = "Simple
.ZIP Viewer for Rapid-Q"
CREATE MainMenu AS QMainMenu
AddItems FileMenu, ViewMenu
END CREATE
CREATE ListView AS QListView
Width = Form.ClientWidth
Height = Form.ClientHeight
SmallImages = ImageList2
LargeImages = ImageList1
ViewStyle = vsReport
AddColumns "FileName","Length","Method","Size","Rate","Date","Time","CRC-32"
Column(0).Width = 200
Column(4).Width = 40
Column(5).Width = 70
Column(7).Width = 70
OnDblClick = ItemDblClick
END CREATE
ShowModal
END CREATE
'------------------------------------------------------------------
SUB ZipView (ZIPFile AS STRING)
DIM Hdr AS ZFHeader
DIM ZF AS QFileStream
DIM PD AS PackedDateType
DIM FileName AS STRING
DIM Index AS INTEGER
IF ZF.Open(ZIPFile, fmOpenRead) = False THEN
ShowMessage("Problem with reading "+ZIPFile)
EXIT SUB
END IF
ListView.Clear
Hdr.Signature = ZF.ReadNum(4)
Index = 0
WHILE Hdr.Signature = SIG
Hdr.Version = ZF.ReadNum(2)
Hdr.GPBFlag = ZF.ReadNum(2)
Hdr.Compress = ZF.ReadNum(2)
Hdr.DateTime = ZF.ReadNum(4)
Hdr.CRC32 = ZF.ReadNum(4)
Hdr.CSize = ZF.ReadNum(4)
Hdr.USize = ZF.ReadNum(4)
Hdr.FileNameLen = ZF.ReadNum(4)
FileName = ZF.ReadStr(Hdr.FileNameLen)
PD.Year = ((Hdr.DateTime SHR 25) AND &H7F) + 1980
PD.Month = (Hdr.DateTime SHR 21) AND &H0F
PD.Day = (Hdr.DateTime SHR 16) AND &H1F
PD.Hour = (Hdr.DateTime SHR 11) AND &H1F
PD.Minute = (Hdr.DateTime SHR 5) AND &H3F
PD.Secs = Hdr.DateTime AND &H1F
ListView.AddItems FileName
IF INSTR(UCASE$(FileName), ".ZIP") THEN
ListView.Item(Index).ImageIndex = 1
END IF
ListView.AddSubItem Index, STR$(Hdr.USize)
ListView.AddSubItem Index, CompType(Hdr.Compress)
ListView.AddSubItem Index, STR$(Hdr.CSize)
IF Hdr.USize = 0 THEN
ListView.AddSubItem Index, "----"
ELSE
ListView.AddSubItem Index, STR$(INT((Hdr.USize - Hdr.CSize) / Hdr.USize * 100))+"%"
END IF
ListView.AddSubItem Index, STR$(PD.Month)+"-"+STR$(PD.Day)+"-"+STR$(PD.Year)
ListView.AddSubItem Index, STR$(PD.Hour)+":"+STR$(PD.Minute)
ListView.AddSubItem Index, LCASE$(HEX$(Hdr.CRC32))
ZF.Seek(Hdr.CSize, soFromCurrent)
Hdr.Signature = ZF.ReadNum(4)
Index = Index + 1
WEND
IF Index = 0 THEN
'-- Provavelmente um arquivo não .ZIP
ShowMessage(ZIPFile+" não é um arquivo ZIP válido!")
END IF
END SUB
SUB OpenClick
DIM OpenDialog AS QOpenDialog
OpenDialog.InitialDir = CurDir$
OpenDialog.Filter = "ZIP Files (*.zip)|*.zip|All Files (*.*)|*.*"
IF OpenDialog.Execute THEN
ZipView(OpenDialog.FileName)
END IF
END SUB
SUB ExitClick
Form.Close
END SUB
SUB FormResize
ListView.Height = Form.ClientHeight
ListView.Width = Form.ClientWidth
END SUB
SUB IconClick
IconItem.Checked = True
ListView.ViewStyle = vsIcon
END SUB
SUB SmallIconClick
SmallIconItem.Checked = True
ListView.ViewStyle = vsSmallIcon
END SUB
SUB ReportClick
ReportItem.Checked = True
ListView.ViewStyle = vsReport
END SUB
SUB ItemDblClick
IF ListView.ItemIndex >= 0 THEN
ShowMessage("Não é possivel extrair "+ListView.Item(ListView.ItemIndex).Caption);
END IF
END SUB
Sinta-se à vontade
para dar sugestões e fazer críticas construtivas.