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));
 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)
 {
  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 < 4; i++)
  {
    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);
    }
    row = event->data.tblSelect.row;
    col = event->data.tblSelect.column;
    TblGetItemBounds(table, row, col, &rect);
    WinInvertRectangle(&rect, 0);
    selectedRow = row;
    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;
 rowHeight = TblGetRowHeight(table, 0);
 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);
  delta = newTopVisibleWord - topItem;
  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;
 }
}
 
/*********************************************************************/
 
case tblEnterEvent:
         handled = formulario.enterEvent(formP, eventP);
         break;
       
case sclRepeatEvent:
    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/

Reply via email to