Yes, certainly much simpler (now that I understand...) and easy to use with
any number of entries in the database, exactly what I was looking for.
But...
I've created my list drawing function and have told the program to use it
and the list is created properly (i.e. when I tap on it is shows up with the
proper contents), however, the label does not get set (either initially or
when a selection is made) and I get an error (it says it's accessing low
memory).
I'm setting the text as follows:
static void ListDraw(Int16 item, RectangleType* bounds, Char** data)
{
MemHandle h = DmQueryRecord(myDB, item);
dbEntry = MemHandleLock(h);
WinDrawChars(dbEntry->name, StrLen(dbEntry->name),
bounds->topLeft.x, bounds->topLeft.y);
MemHandleUnlock(h);
}
I'm initializing the form in the following:
listP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, myList));
LstSetDrawFunction(listP, ListDraw);
LstSetListChoices(listP, NULL, DmNumRecords(myDB));
LstSetSelection(listP, prefs.lastSelection);
LstSetTopItem(listP, prefs.lastSelection);
ctrlP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, myPop));
CtlSetLabel(ctrlP, LstGetSelectionText(listP, prefs.lastSelection));
FrmDrawForm(frmP);
Thanks again for all the help you've been.
Andrew
DeAnna Davidson wrote:
> Andrew,
>
> Using the popup list, you really should just implement your own ListDraw
> function. I have a number of apps that list data from a database and
> they all just use their own draw function. It is simpler than trying to
> manage the memory of the char ** for the list data. At least look at
> the docs on how to implement a list draw function, and if you get stuck,
> ping the list and I'm sure we'll help. However, if you really feel you
> must use the char **, just make sure you allocate enough memory for each
> string in addition to having enough memory for the pointers to the
> strings. In particular, in the code you have listed, you're going to
> want to do a StrCopy of the data from the database to the char ** for
> the list, so you'll need to have already allocated the memory for it.
> Following your current implementation, consider doing this:
>
> char **myName;
>
> myName = MemPtrNew(sizeof(UInt32) * 28); //because you know there are
> going to be 28 items
>
> for (int i = 0; i < 28; i++)
> {
> h = DmQueryRecord(MyDB, i);
> myEntry = MemHandleLock(h);
> myName[i] = MemPtrNew(StrLen(myEntry->name));
> StrCopy(myName[i], myEntry->name);
> MemHandleUnlock(h);
> }
>
> Be aware that myName has to be around for as long as the list is and
> that you are responsible for freeing the memory associated with myName,
> both of which are annoying factors for managing the memory associated
> with the list. I would still strongly encourage you to just go ahead
> with a list draw function.
>
> DeAnna
>
> -----Original Message-----
> From: Andrew Perron [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, June 21, 2001 10:54 AM
> To: Palm Developer Forum
> Subject: Re: Dynamic List Content?
>
> I'm open to suggestions... I'm using it for a popup list, is there a
> good way
> to make a "popup table"?
>
> Thanks,
>
> Andrew
>
> Stringer wrote:
>
> > >From: Andrew Perron <[EMAIL PROTECTED]>
> > >Date: Wed, 20 Jun 2001 22:46:33 -0400
> > >Well, here I am with some more list problems/questions.
> > > .....
> > >Here's the scenario, I have a database on the palm that contains some
> > >information like so:
> > >
> > > typedef struct {
> > > FlpCompDouble MyFloat1;
> > > FlpCompDouble MyFloat2;
> > > Char* name;
> > > } MyData;
> >
> > >There are currently 28 entries and I have a list that I created
> manually
> > >with each of the name entries. Currently I get access to MyFloat1
> and
> > >MyFloat2 by using the indexes from the static list contents to
> database
> > >records. I would prefer to also get the name from the database and
> thus
> > >create the list (that way I only have to update the pdb when data
> > >changes...)
> >
> > My recommendation is the 'list' is the wrong UI object to use.
> > You can do better what you are trying to do by using the 'table' UI
> object.
> > That is certainly what I would do!
> >
> > Roger Stringer
> > Marietta Systems, Inc.
>
> --
> For information on using the Palm Developer Forums, or to unsubscribe,
> please see http://www.palmos.com/dev/tech/support/forums/
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/tech/support/forums/