Is it possible to use controls within listboxes? specifically I would like to use a checkbox for logical fields. I saw a Q&A on TWBrowse + Checkboxes, but alas I don't read Espanol.
Greg
Controls in Listbox
- Greg Gammon
- Posts: 105
- Joined: Fri Jun 09, 2006 3:27 pm
- Location: Bryan, Texas
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Greg,
You have to use a trick to make it appear like it is a control. Below is a copy of my notes on this.
James
----------------------------
Here is how to do a checkbox in a listbox:
You need to use two bimaps for the checkbox, one checked and one unchecked. Load the bitmaps:
hChecked:=loadbitmap( getresources(),"checked")
hUnchecked:= loadbitmap( getrources(),"unchecked")
Define the bitmaps conditionally in the listbox definition:
@0,0 listbox oLbx fields date, description, ;
if(empty(::oTask:completed),hChecked,hUnchecked)
Then you have to define an action when the column is clicked on:
oLbx:blClicked := {| nRow, nCol| ( if(oLbx:nAtCol(nCol)=3,;
toggleCheck(),),oLbx:drawSelect()) }
The above line checks for column 3. If that is the column, then the function toggleCheck() is called. ToggleCheck() toggles the variable and saves the record. Finally, you redraw the line using oLbx:drawSelect().
[Note: You may need to pass nRow and check to make sure it is greater than 15 to avoid triggering the checkbox when the user clicks on the header. See file:///c:\apps\todo\task.prg, method click() for an example.]
You have to use a trick to make it appear like it is a control. Below is a copy of my notes on this.
James
----------------------------
Here is how to do a checkbox in a listbox:
You need to use two bimaps for the checkbox, one checked and one unchecked. Load the bitmaps:
hChecked:=loadbitmap( getresources(),"checked")
hUnchecked:= loadbitmap( getrources(),"unchecked")
Define the bitmaps conditionally in the listbox definition:
@0,0 listbox oLbx fields date, description, ;
if(empty(::oTask:completed),hChecked,hUnchecked)
Then you have to define an action when the column is clicked on:
oLbx:blClicked := {| nRow, nCol| ( if(oLbx:nAtCol(nCol)=3,;
toggleCheck(),),oLbx:drawSelect()) }
The above line checks for column 3. If that is the column, then the function toggleCheck() is called. ToggleCheck() toggles the variable and saves the record. Finally, you redraw the line using oLbx:drawSelect().
[Note: You may need to pass nRow and check to make sure it is greater than 15 to avoid triggering the checkbox when the user clicks on the header. See file:///c:\apps\todo\task.prg, method click() for an example.]
-
- Posts: 334
- Joined: Fri Oct 14, 2005 1:54 pm
- Greg Gammon
- Posts: 105
- Joined: Fri Jun 09, 2006 3:27 pm
- Location: Bryan, Texas
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact: