Hallo devnull,
das ist alles äusserst schlecht, was Du da machst.
Wenn Du urlDownloadFile in einem Thread aufrufst, wird auf DownloadThread.UpdateForm1; in diesem Thread aufgerufen.
Und da Du in UpdateForm auf die
VCL zugreifst (Buttons, Labels) MUSS dieser Aufruf mit Synchronize erfolgen.!
Undbedingt.
Noch viel Besser wäre natürlich, wenn Du ein Update Event einrichtest.
Was ist, wenn Du diesen DownloadThread nochmal verwenden willst, aber z.B. mit einem ganz anderen Form ?
Du solltest Dir also ein Status Event einrichten. Und das aktualisieren von Buttons übernimmt das FORM SELBER !
TDownStatusEvent = procedure( sender : Tobject; progress, progressmax, status : integer) of object;
Nun zu Deinem Problem.
Das
Code:
BINDSTATUS_ENDDOWNLOADDATA : begin
PagesDlg1.Label4.Caption := 'Download "'+fileinfo+'" fertiggestellt ...';
DownloadThread.UpdateForm1;
end;
ist nur ne MEldung, da ist Dein Download noch nicht zu ENDE.
Du musst also in BINDSTATUS_ENDDOWNLOADDATA eine Variable "FERTIG" setzen.
Und dann
Code:
try
UrlDownloadtoFile(nil, PCHAR(runterladen), PCHAR(speichernals), 0, CDownStatus);
if not abgebrochen or sonstwas and fertig then
begin
if MessageDlg ('Programm beenden und Update entpacken ?',mtConfirmation,[mbYes,mbNo],0)
= mrNo then exit;
ShellExecute(self.Handle, NIL, pchar(speichernals),'','',SW_SHOWNORMAL);
halt;
end;
finally
cDownStatus.Free;
end;