Hello, can you help me please?
I have a table, for default have 11 rows, my problem is when my table have more rows and I use the scrollBar (winUp) my table shows the first row 11 times... and when I use the scrollBar (winDown) my table shows the row number eleven 11 times..... I don't know the problem..... please help me. My code is:
void CFormularios::CargarTabla(FormPtr form)
{
TablePtr table;
Int16 i;
table = (TableType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, tblFormularios));
{
TablePtr table;
Int16 i;
table = (TableType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, tblFormularios));
BD BdFormularios(bd_Formularios_nombre,bd_Formularios_tarjeta,bd_Formularios_creador,bd_Formularios_tipo,bd_Formularios_fuente);
BdFormularios.Conectar();
DmOpenRef base = BdFormularios.devolver_manejador();
numRows = DmNumRecords(base);
numRowsTable = TblGetNumberOfRows(table);
//RectangleType bounds;
MemHandle manejador;
if (numRows > 0)
{
BdFormularios.Conectar();
DmOpenRef base = BdFormularios.devolver_manejador();
numRows = DmNumRecords(base);
numRowsTable = TblGetNumberOfRows(table);
//RectangleType bounds;
MemHandle manejador;
if (numRows > 0)
{
EFormularios *registro;
for (i = 0; i < numRows; i++)
{
manejador=DmGetRecord(base,i);
if (manejador)
{
registro = (EFormularios *)MemHandleLock(manejador);
TblSetItemStyle(table, i, 0, numericTableItem);
TblSetItemInt(table, i, 0, i+1);
TblSetItemStyle(table, i, 1, labelTableItem);
TblSetItemPtr(table, i, 1, registro->form_titu);
TblSetItemStyle(table, i, 2, numericTableItem);
TblSetItemInt(table, i, 2, registro->form_cod);
TblSetItemStyle(table, i, 3, numericTableItem);
TblSetItemInt(table, i, 3, registro->form_numPregs);
TblSetRowStaticHeight(table, i, true);
DmReleaseRecord(base,i,true);
}
}
MemPtrUnlock(registro);
}
for (i = 0; i < numRows; i++)
{
manejador=DmGetRecord(base,i);
if (manejador)
{
registro = (EFormularios *)MemHandleLock(manejador);
TblSetItemStyle(table, i, 0, numericTableItem);
TblSetItemInt(table, i, 0, i+1);
TblSetItemStyle(table, i, 1, labelTableItem);
TblSetItemPtr(table, i, 1, registro->form_titu);
TblSetItemStyle(table, i, 2, numericTableItem);
TblSetItemInt(table, i, 2, registro->form_cod);
TblSetItemStyle(table, i, 3, numericTableItem);
TblSetItemInt(table, i, 3, registro->form_numPregs);
TblSetRowStaticHeight(table, i, true);
DmReleaseRecord(base,i,true);
}
}
MemPtrUnlock(registro);
}
for (i = 0; i < 4; i++)
{
TblSetColumnUsable(table, i, true);
TblSetColumnSpacing(table, i, 0);
}
TblHasScrollBar(table, true);
SclSetScrollBar((ScrollBarType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, scrBFormularios)), topItem, 0, numRows, numRowsTable);
{
TblSetColumnUsable(table, i, true);
TblSetColumnSpacing(table, i, 0);
}
TblHasScrollBar(table, true);
SclSetScrollBar((ScrollBarType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, scrBFormularios)), topItem, 0, numRows, numRowsTable);
/*********** Removiendo filas que no se usan en la tabla *******************/
if (numRowsTable > numRows)
{
while (numRowsTable > numRows)
{
TblSetRowUsable(table, numRows, false);
numRows++;
}
}
/*********** Removiendo filas que no se usan en la tabla *******************/
selectedItem = -1;
topItem = 0;
BdFormularios.Desconectar();
}
My events:
Boolean CFormularios::enterEvent(FormType *form, EventPtr event)
{
TableType *table = (TableType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, tblFormularios));
if(selectedItem != -1 && !selectedIsOffScreen)
{
TblGetItemBounds(table, selectedRow, selectedCol, &rect);
WinInvertRectangle(&rect, 0);
}
{
TableType *table = (TableType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, tblFormularios));
if(selectedItem != -1 && !selectedIsOffScreen)
{
TblGetItemBounds(table, selectedRow, selectedCol, &rect);
WinInvertRectangle(&rect, 0);
}
row = event->data.tblSelect.row;
col = event->data.tblSelect.column;
col = event->data.tblSelect.column;
TblGetItemBounds(table, row, col, &rect);
WinInvertRectangle(&rect, 0);
WinInvertRectangle(&rect, 0);
selectedRow = row;
selectedCol = col;
selectedItem = topItem + row;
selectedIsOffScreen = false;
selectedCol = col;
selectedItem = topItem + row;
selectedIsOffScreen = false;
return true;
}
}
/* Get the number of rows on one page. */
UInt16 CFormularios::GetRowsPerPage(TablePtr table)
{
UInt16 rows;
UInt16 rowsInTable;
UInt16 tableHeight;
RectangleType r;
Int16 rowHeight;
rowsInTable = TblGetNumberOfRows(table);
TblGetBounds(table, &r);
tableHeight = r.extent.y;
tableHeight = r.extent.y;
rowHeight = TblGetRowHeight(table, 0);
rows = tableHeight / rowHeight;
rows = tableHeight / rowHeight;
return (rows <= rowsInTable) ? rows : rowsInTable;
}
}
void CFormularios::repeatEvent(FormType *form, EventPtr event)
{
TableType *table = (TableType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, tblFormularios));
UInt16 rowsPerPage = 0;
Int16 delta = 0;
WinDirectionType dir = winDown;
Coord dist = 0;
RectangleType r;
UInt16 i = 0;
UInt16 newTopVisibleWord = event->data.sclRepeat.newValue;
if (newTopVisibleWord != topItem)
{
rowsPerPage = GetRowsPerPage(table);
{
TableType *table = (TableType *)FrmGetObjectPtr(form, FrmGetObjectIndex(form, tblFormularios));
UInt16 rowsPerPage = 0;
Int16 delta = 0;
WinDirectionType dir = winDown;
Coord dist = 0;
RectangleType r;
UInt16 i = 0;
UInt16 newTopVisibleWord = event->data.sclRepeat.newValue;
if (newTopVisibleWord != topItem)
{
rowsPerPage = GetRowsPerPage(table);
delta = newTopVisibleWord - topItem;
i = (delta < 0) ? -delta : delta;
i = (delta < 0) ? -delta : delta;
if (i >= rowsPerPage)
{
TblMarkTableInvalid(table);
}
else
{
dir = (delta < 0) ? winDown : winUp;
dist = i * TblGetRowHeight(table, 0);
TblGetBounds(table, &r);
WinScrollRectangle(&r, dir, dist, &r);
while (i--)
{
TblMarkRowInvalid(table, (delta < 0) ? i : rowsPerPage - 1 - i);
}
}
TblRedrawTable(table);
topItem = newTopVisibleWord;
}
}
{
TblMarkTableInvalid(table);
}
else
{
dir = (delta < 0) ? winDown : winUp;
dist = i * TblGetRowHeight(table, 0);
TblGetBounds(table, &r);
WinScrollRectangle(&r, dir, dist, &r);
while (i--)
{
TblMarkRowInvalid(table, (delta < 0) ? i : rowsPerPage - 1 - i);
}
}
TblRedrawTable(table);
topItem = newTopVisibleWord;
}
}
/*********************************************************************/
case tblEnterEvent:
handled = formulario.enterEvent(formP, eventP);
break;
handled = formulario.enterEvent(formP, eventP);
break;
case sclRepeatEvent:
formulario.repeatEvent(formP, eventP);
handled = false;
break;
formulario.repeatEvent(formP, eventP);
handled = false;
break;
Thanks for your comments..... and sorry..... I don't speak English very good.
Dana.
For information on using the PalmSource Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/
