KOD cpp: UKRYJ
void __fastcall TForm1::setBar(int maxpos)
{
this->MaxData=maxpos;
this->StatusBar1->Panels->Items[0]->Text="Loading... (0-"+IntToStr(this->MaxData)+")";
}
void __fastcall TForm1::increaseBar(int i)
{
int p;
this->StatusBar1->Panels->Items[0]->Text="Loading... ("+IntToStr(i)+"-"+IntToStr(this->MaxData)+")";
p=100*(((float)i)/((float)this->MaxData));
if(!(p%5))this->StatusBar1->Panels->Items[1]->Text=IntToStr(p);
}
{
this->MaxData=maxpos;
this->StatusBar1->Panels->Items[0]->Text="Loading... (0-"+IntToStr(this->MaxData)+")";
}
void __fastcall TForm1::increaseBar(int i)
{
int p;
this->StatusBar1->Panels->Items[0]->Text="Loading... ("+IntToStr(i)+"-"+IntToStr(this->MaxData)+")";
p=100*(((float)i)/((float)this->MaxData));
if(!(p%5))this->StatusBar1->Panels->Items[1]->Text=IntToStr(p);
}
odwołuje się do nich poprzez:
KOD cpp: UKRYJ
bool __fastcall TFilesData::LoadData()
{
if(!this->OpenFile()) return false;
this->_File->Seek(0,soFromEnd);
int maxpos=this->_File->Position;
Form1->setBar(maxpos);
this->_File->Seek(0,soFromBeginning);
char buffer[256];
while(this->_File->Position!=maxpos)
{
this->_File->Read(buffer,256);
Form1->increaseBar(this->_File->Position);
}
return true;
}
{
if(!this->OpenFile()) return false;
this->_File->Seek(0,soFromEnd);
int maxpos=this->_File->Position;
Form1->setBar(maxpos);
this->_File->Seek(0,soFromBeginning);
char buffer[256];
while(this->_File->Position!=maxpos)
{
this->_File->Read(buffer,256);
Form1->increaseBar(this->_File->Position);
}
return true;
}
(wiem że na przeczytanych danych w chwili obecnej nic nie robię )
Problemem jest to, że w momencie odczytu program "zawiesza się", a po chwili (~3-4sec) wyskakuje informacja, że przeczytał cały plik. Niema informacji pośredniej tj wskaźnika w procentach ani numeru odczytywanej lini/położenia wskaźnika. Jak temu zaradzić?
PS. TFileStream->Read(void* buffer,int n) czyta to dane do n-tego baju i/lub napotkania znaczka \n tak?