在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;
}
<梅川酷子原创>
文章评论(0条评论)
登录后参与讨论