Dziwne jest to że za 1 razem działa bez zarzutu tak jak ma być ale jeżeli podczas jednego działania programu odpali się to drugi raz wyskakuje okienko jak w załączniku.Poniżej przedstawiam kod tej funckji oraz kody okien dodatkowych (proszę o jakąś wyrozumiałość jest on fajnie wyglądający ale może nie w 100% poprawny proszę więc o wytłumaczenie a nie OPR ):
Kod główny :
- Kod: Zaznacz cały
String update;
IdFTP1->Connect();
IdFTP1->Get("update.txt", "update.txt", true, false);
IdFTP1->Disconnect();
Form5->Show();
char *Buf = new char[255];
ifstream infile;
infile.open("update.txt");
infile >> Buf;
infile.close();
update = Buf;
delete Buf;
DeleteFile("update.txt");
wersja = GetFileVersionInfo(NULL, "FileVersion");
Form5->Close();
Boolean Result = SameText(update, wersja);
if(!Result)
{
FormMsg->ShowModal();
}
else
{
MessageBox(NULL,"Posiadana wersja jest aktualna !","Update",MB_ICONINFORMATION|MB_OK);
}
Kod okna który dostałem od Cyfrowego Barona przerobiony bo wsumie odszedłem w tym miejscu od linku (ale go używam gdzie indziej) :
- Kod: Zaznacz cały
void __fastcall TFormMsg::Button1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::FormClose(TObject *Sender, TCloseAction &Action)
{
if(zamykanie==true)
{
Action = caNone;
}
else
{
Action = caFree;
}
if(pobrano==true)
{
ShellExecute(FormMsg->Handle, NULL , "setup.exe", "", "", SW_SHOWNORMAL);
}
Label2->WindowProc = OldLabelH;
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::FormShow(TObject *Sender)
{
Label1->Caption="Dostępna jest nowa aktualizacja programu !\nCzy chcesz dokonać aktualizacji ?";
ProgressBar1->Position=0;
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::Button2Click(TObject *Sender)
{
Button1->Enabled=false;
zamykanie=true;
ProgressBar1->Visible=true;
IdFTP2->Connect();
ProgressBar1->Max = IdFTP2->Size("setup.exe");
Application->ProcessMessages();
IdFTP2->Get("setup.exe", "setup.exe", true, false);
IdFTP2->Disconnect();
FormMsg->Close();
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::IdFTP2Work(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCount)
{
ProgressBar1->Position = AWorkCount;
Application->ProcessMessages();
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::IdFTP2WorkEnd(TObject *ASender, TWorkMode AWorkMode)
{
ProgressBar1->Position = ProgressBar1->Max;
pobrano=true;
zamykanie=false;
}
//---------------------------------------------------------------------------
A tutaj kod okna którego użyłem dla fajnego wyglądu i troche dla bajeru :
- Kod: Zaznacz cały
void __fastcall TForm5::FormActivate(TObject *Sender)
{
long style = GetWindowLong(ProgressBar1->Handle, GWL_STYLE);
style = style | PBS_MARQUEE;
SetWindowLong(ProgressBar1->Handle, GWL_STYLE, style);
// Rozpoczęcie odliczania
ProgressBar1->Perform(PBM_SETMARQUEE, true, 100);
for(int i = 0; i < 80; i++)
{
ProgressBar1->Position += 1;
Sleep(100);
Application->ProcessMessages();
}
// Zakończenie odliczania
ProgressBar1->Perform(PBM_SETMARQUEE, false, 100);
}
//---------------------------------------------------------------------------
Jeszcze raz proszę o wyrozumiałość oraz pomoc !
Treść okna pojawia się za drugim raze przy jednym otwarciu okna i powtarza się bez końca ale tyko wtedy kiedy jest dostępna aktualizacja bo jeżeli nie to MessageBox informujący o jej braku działa normalnie :