How about drawing the text to the screen yourself. Use a callback function
with the list (LstSetDrawFunction). When the callback is executed, figure
out which item needs to be drawn, retrieve the string from your DB, and use
WinDrawChars. I found its a little easier then dynamically building the
list (plus you won't have to worry about running out of memory should the DB
get very large)
----- Original Message -----
From: "Lauren B. Robert" <[EMAIL PROTECTED]>
To: "Palm Developer Forum" <[EMAIL PROTECTED]>
Sent: Wednesday, October 16, 2002 7:18 AM
Subject: How to read data from second field of database and display it on
dynamic list?
> Hi All,
> I'm trying to display data from the second field of database, and
display it on a dynamic list. Hope someone understands what I'm talking
about.
> I've simply unpack each record and display on a text field and it was
successful. However, under some circumstances, I've to use dynamic list to
display the data.
>
> This is what I've been trying to do:
>
> typedef struct {
> Int32 ID;
> const Char *Name;
> const Char *Class;
> const Char *Gender;
> } StudentRecord;
>
> typedef struct {
> Int32 ID;
> char Name[1];
> } PackedStudentRecord;
>
> // Unpack Function
> static void Unpack(StudentRecord *studentrecord, const PackedStudentRecord
*psr)
> {
> const char* p = psr->Name;
>
> studentrecord->ID = psr->ID;
>
> studentrecord->Name = p;
> p +=StrLen(p) + 1;
>
> studentrecord->Class = p;
> p +=StrLen(p) + 1;
>
> studentrecord->Gender = p;
> p +=StrLen(p) + 1;
>
> }
>
> //Name List Function
> static void FillListWithName(ListType *lst)
> {
> MemHandle RecordHa;
> UInt16 NumRecor, indx;
> char *RecordPointr;
> Char **itemlisT;
> const int kCardNumber = 0;
> const char *kName = "test-DB";
> Err err;
> LocalID dbID;
> ListPtr list;
> StudentRecord theStudent;
> FormPtr form;
>
> dbID = DmFindDatabase(kCardNumber, kName);
> if(!DbID)
> err = DmGetLastErr;
> else {
> gDatabase= DmOpenDatabase(kCardNumber, dbID, dmModeReadOnly);
> if(!gDatabase)
> err = DmGetLastErr;
> }
>
> NumRecor = DmNumRecords(gDatabase);
>
> itemlisT = (Char **) MemPtrNew(NumRecor * sizeof(Char *));
>
> for (indx=0; indx < NumRecor; indx++)
> {
> RecordHa = DmQueryRecord(gDatabase, indx);
>
> Unpack(&theStudent, (PackedStudentRecord *) MemHandleLock(RecordHa));
>
> list = (ListPtr) GetObjectFromForm(form, MainStudentsNameList);
>
> RecordPointr = MemHandleLock(RecordHa);
> MemHandleUnlock(RecordHa);
>
> // assuming RecordPointer has a null terminated string,
> itemlisT[indx] = (char *) MemPtrNew(MemPtrSize(RecordPointr));
> MemMove(itemlisT[indx], RecordPointr, MemPtrSize(RecordPointr));
>
> }
>
> LstSetListChoices(lst, itemlisT, NumRecor);
>
> DmCloseDatabase(gDatabase);
> }
>
> void *GetObjectFromForm(FormPtr frmP, UInt16 objectID)
> {
> return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID));
> }
>
> I'm sure that I'm missing something in the Name List Function which I
don't know. When I debug on POSE, my dynamic list shows a blank screen,
although I'm still able to scroll up and down. All I just want is to display
the Names of each student on the dynamic list.
> Am I doing the correct way?? What did I did wrong?? I'm using CW7, hope
someone can explain to me please.
>
> Sorry for the long post.
>
> Many Thanks
> Regards
> Lauren
>
>
>
>
>
>
> ____________________________________________________________
> Watch a championship game with Elway or McGwire.
> Enter Now at http://champions.lycos.com
>
> --
> For information on using the Palm Developer Forums, or to unsubscribe,
please see http://www.palmos.com/dev/support/forums/
>
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/support/forums/