原创 TStringGrid控件用法

2011-1-8 22:57 6353 10 10 分类: 软件与OS

在C++ Builder 2010 控件库里有个表格控件,叫做TStringGrid,在嵌入式烧写程序中,用于显示文件内容非常方便,比如显示一个EEPROM文件的内容.
TStringGrid使用非常简单,Colwidths[]数据对应每一列的单元格宽度,Cells[c][r]则对应单元格的内容,其中c是列索引,r是行索引.以下程序通过TFileStream对象
每次读取256字节(16行,16列,方便显示),如果读到文件尾部不够256字节时,则用"-"来填充.程序运行结果如图所示.


void __fastcall TForm1::LoadToGrid(__int64 StartIndex,UnicodeString FileName)
{
 int MSB;
 int LSB;
 String strMSB;
 int iSize;
 int iBytesReaded;
 int i;
 Byte *Buffer;


 Buffer=new Byte[256];


 MSB=(int)(StartIndex>>32); //高32位
 strMSB=IntToHex(MSB,8);
 LSB=(int)StartIndex;//低32位


 sGrid->ColWidths[0]=50;//设置0列的宽度
 for(i=0;i<16;i++)
 {
  int Offset;
  String strOffset="";
  sGrid->Cells[i+1][0]=IntToHex(i,2);//显示行地址
  Offset=i*16;
  Offset+=LSB;
  if(MSB!=0)
  {
   //如果文件超过4GB的话,显示高32位地址
   strOffset=strMSB + " ";
   sGrid->ColWidths[0]=110;
  }
  strOffset+=IntToHex((int)Offset,8);
  sGrid->Cells[0][i+1]=strOffset;//显示列地址
 }


 TFileStream *fs=new TFileStream(FileName,fmOpenRead);//文件流


 fs->Position=StartIndex;//定位到指定位置
 iBytesReaded=fs->Read(Buffer,256);//读取256字节,iBytesReaded返回实际字节数
 i=0;
 for(int m=1;m<17;m++)
 {
  for(int n=1;n<17;n++)
  {
   if(i>=iBytesReaded)
   {
    sGrid->Cells[n][m]="-";//如果超过文件尾部的话,显示成"-"
   }
   else
   {
    sGrid->Cells[n][m]=IntToHex(Buffer,2);//以16进制形式显示数据内容
   }
   i++;
  }
 }


 fs->Free();
 delete [] Buffer;
}


ec8a9d15-6678-4963-8e86-1857b7d34ece.JPG


 <梅川酷子原创>

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条