| Rapid-Q Documentation by William Yu (c)1999-2000 | Appendix A: QLISTVIEW |
TYPE ItemType '' ie. ListView.Item(0).Caption
Caption AS STRING
Checked AS INTEGER '' If CheckBoxes is enabled and item is checked
Handle AS INTEGER '' Read-only
ImageIndex AS INTEGER
Index AS INTEGER '' Read-only
Selected AS INTEGER
StateIndex AS INTEGER
END TYPE
TYPE ColumnType '' ie. ListView.Column(0).Width
Caption AS STRING
Width AS INTEGER
END TYPE
QListView Properties
| Field | Type | R/W | Default |
| Align | INTEGER | RW | alNone |
| Align determines how the control aligns within its parent control. | |||
| BorderStyle | INTEGER | RW | bsSingle |
| CheckBoxes | INTEGER | RW | False |
| CheckBoxes specifies whether checkboxes appear next to the items in the listview. | |||
| Color | INTEGER | RW | |
| Column | ARRAY of ColumnType | RW | |
| ColumnClick | INTEGER | RW | True |
| ColumnClick determines whether the column header behaves like a button. | |||
| ColumnsCount | INTEGER | RW | |
| Cursor | INTEGER | RW | crDefault |
| Enabled | INTEGER | RW | True |
| Font | QFONT | W | |
| GridLines | INTEGER | RW | False |
| GridLines determines whether lines are drawn separating items in the list. | |||
| Handle | INTEGER | R | |
| Height | INTEGER | RW | |
| HideSelection | INTEGER | RW | False |
| HideSelection determines whether the listview gives a visual indication of which item is selected when focus shifts to another control. | |||
| Hint | STRING | RW | |
| HotTrack | INTEGER | RW | False |
| HotTrack specifies whether list items are highlighted when the mouse passes over them. | |||
| Item | ARRAY of ItemType | RW | |
| ItemCount | INTEGER | RW | |
| ItemIndex | INTEGER Index of selected Item | RW | |
| LargeImages | QIMAGELIST | W | |
| Left | INTEGER | RW | 0 |
| MultiSelect | INTEGER | RW | False |
| Parent | QFORM/QPANEL/QTABCONTROL | W | |
| PopupMenu | QPOPUPMENU | W | |
| ReadOnly | INTEGER | RW | False |
| RowSelect | INTEGER | RW | False |
| RowSelect determines whether an entire row in the listview can be selected. | |||
| SelCount | INTEGER | RW | |
| Selected | ARRAY of INTEGER | RW | |
| ShowColumnHeaders | INTEGER | RW | True |
| ShowHint | INTEGER | RW | False |
| SmallImages | QIMAGELIST | W | |
| SortType | INTEGER | RW | stNone |
| SortType determines if and how the items in the list are automatically sorted. 0 = stNone -- No sorting is done. 2 = stText -- Items are sorted according to their caption property. | |||
| StateImages | QIMAGELIST | W | |
| SubItem | 2D ARRAY of STRING | RW | |
| TabOrder | INTEGER | RW | |
| Tag | INTEGER | RW | |
| Top | INTEGER | RW | 0 |
| Width | INTEGER | RW | |
| ViewStyle | INTEGER CONST vsIcon = 0 '-- View Style: Full sized icon, text on bottom CONST vsSmallIcon = 1 '-- Small icons, text aligned to the right CONST vsList = 2 '-- Same as above (nevermind this) CONST vsReport = 3 '-- Each item appears on its own line with information '-- arranged in columns |
RW | vsIcon |
| Visible | INTEGER | RW | True |
| Method | Type | Description | Params |
| AddColumns | SUBI | Add column headers to listview | STRING, Infinite |
| AddItems | SUBI | Add items to listview | STRING, Infinite |
| AddSubItem | SUB (Index%, String$) | Add sub item to Index% | 2 |
| Clear | SUB | Clear all items in listview | 0 |
| ClearColumns | SUB | Clear all columns in listview | 0 |
| DelItems | SUBI | Delete items from listview by
ItemIndex example: ListView.DelItems ListView.ItemIndex | INTEGER, Infinite |
| DelSubItem | SUB (Index%, SubIndex%) | Delete subitem from listview | 2 |
| InsertItem | SUB (Index%, String$) | Insert item at Index% | 2 |
| InsertSubItem | SUB (Index%, SubIndex%, String$) | Insert subitem | 3 |
| SwapItem | SUB (Index1%, Index2%) | Swap items | 2 |
| Event | Type | Occurs when... | Params |
| OnClick | VOID | Item was clicked on | 0 |
| OnChange | SUB (Index%, Change AS BYTE) | Item changed (text, image, or state) | 2 |
| OnColumnClick | SUB (Column%) | Column header was clicked This sub is bugly! Always return 0 in Column% See example2 to solve this problem |
1 |
| OnDblClick | VOID | Selection was double clicked on | 0 |
| OnKeyPressed | SUB (Key AS BYTE) | Key was pressed | 1 |
' Simple .ZIP viewer (doesn't extract or anything useful like that).
' You're free to modify and distribute the code without restrictions.
' Written in Rapid-Q by William Yu
' Demonstrates QOpenDialog, QFileStream, QListView, QMainMenu, QMenuItem
' and 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 Signature/ID
TYPE ZFHeader
Signature AS LONG
Version AS WORD
GPBFlag AS WORD ' ?
Compress AS WORD ' Compression types
DateTime AS LONG ' Packed format
CRC32 AS LONG
CSize AS LONG ' Compressed size
USize AS LONG ' Uncompressed size
FileNameLen AS LONG
END TYPE
TYPE PackedDateType ' I think this is it:
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" '' Could be DeflatX as well...
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 ' Scale 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
'-- Likely not a .ZIP file
ShowMessage(ZIPFile+" is not a valid ZIP file!")
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("Can't extract "+ListView.Item(ListView.ItemIndex).Caption);
END IF
END SUB
Example2 (Oscar Fernandez)
$TYPECHECK ON $INCLUDE "RAPIDQ.INC" TYPE RECTA Left As Long Top As Long Right As Long Bottom As Long END TYPE CONST LVM_FIRST = &H1000 Const LVM_GETHEADER = (LVM_FIRST + 31) Const HDM_FIRST = &H1200 Const HDM_HITTEST = HDM_FIRST + 6 Declare Function SendMessagea Lib "user32" Alias_ "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,_ ByVal wParam As Integer, ByVal lParam As LONG) As Long Declare Function GetWindowRect Lib "user32" Alias_ "GetWindowRect" (ByVal hwnd As Long, lpRect As RECTA)AS Long Declare Function GetParent Lib "user32"_ Alias "GetParent" (ByVal hwnd As Long) As Long DECLARE SUB OK(COLUMN%, sender as qlistview) dim r as rectA dim rh as rectA dim IDcolumn as integer dim ccount as integer CREATE Form AS QForm Center Caption = "Sorting Listview Click in the Buttons Headers" Height = 330 Width = 525 CREATE ListView AS QListView ColumnClick = TRUE ALIGN=5 Gridlines=1 Width = Form.ClientWidth Height = Form.ClientHeight ViewStyle = vsReport AddColumns "Group","Lead Guitar","Rithms Guitar","Bass","Drums", "Others" Column(0).Width = 110 Column(1).Width = 80 Column(2).Width = 80 Column(3).Width = 80 Column(4).Width = 80 Column(5).Width = 80 AddItems "The Rolling Stones" AddSubItem 0, "Keith" AddSubItem 0, "Brian" AddSubItem 0, "Bill" AddSubItem 0, "Charlie" AddSubItem 0, "Mick" AddItems "The Beatles" AddSubItem 1, "George" AddSubItem 1, "John" AddSubItem 1, "Paul" AddSubItem 1, "Ringo" AddItems "Yes" AddSubItem 2, "Steve" AddSubItem 2, "Jon" AddSubItem 2, "Chris" AddSubItem 2, "Alan" AddSubItem 2, "Rick" AddItems "Nirvana" AddSubItem 3, "Kurt" AddSubItem 3, "" AddSubItem 3, "Kris" AddSubItem 3, "Dave" ONCOLUMNCLICK=OK END CREATE END CREATE Form.ShowModal SUB OK(COLUMN%, sender as qlistview) with sender defint i,cw,lvh,cc,hh,parw lvh=ListView.Handle hh=sendMESSAGEa(lvh, (LVM_GETHEADER),0,0)'get handler of header ccount=sendMESSAGEa ( hh, (HDM_FIRST + 0),0, 0) 'get number of columns parw=getparent(lvh) getWINDOWrect(hh,Rh) ' rect of header !!' cc=0:cw=0 for i=0 to ccount-1 cw=.column(i).width cc=cw+cc if cc+Rh.left>screen.mousex then exit for next idcolumn=i print "idcolumn=",idcolumn end with END SUB
| Prev Component | Contents | Next Component |