Jump to content

[delphi] problem z Application.ProcessMessages


maZi

Recommended Posts

witam.

 

mam taką procedurkę:

 

procedure TForm1.Button2Click(Sender: TObject);
begin
 for I := 0 to ListView1.Items.Count-1 do begin
   Application.ProcessMessages;
   ListView1.Items.Item[I].SubItems[0] := 'Wysyłam';
   PostStream := TIdMultiPartFormDataStream.Create;
   IdHTTP1.Request.ContentType := PostStream.RequestContentType;
   PostStream.AddFile('file', ListView1.Items.Item[I].Caption, ExtractFileName(ListView1.Items.Item[I].Caption), '');
   IdHTTP1.Post('http://unhost.pl/xxx.php', PostStream);
   Application.ProcessMessages;
   ListView1.Items.Item[I].SubItems[0] := 'Wysłany';
   PostStream.Free;
 end;
end;

 

jak można z kodu się domyśleć status wysyłki jest widoczny w subitemie[0] w listview. domyślnie ma on wartość "Czekam", jednak podczas wysyłania pliku i po jego wysłaniu zmieniam wartości odpowiednio na "Wysyłam" i "Wysłany". wszystko ładnie śmiga, tylko dlaczego w trakcie wysyłki nie wyświetla się "Wysyłam" (dopiero po wrzuceniu pliku zmienia się status z "Czekam" na "Wysłany") ? co tutaj jest źle?

 

z góry dzięki za pomoc.

pozdro.

maZi

Link to comment
Share on other sites

a teraz??

 

procedure TForm1.Button2Click(Sender: TObject);
begin
 for I := 0 to ListView1.Items.Count-1 do begin
   ListView1.Items.Item[I].SubItems[0] := 'Wysyłam';
   Application.ProcessMessages;
   PostStream := TIdMultiPartFormDataStream.Create;
   IdHTTP1.Request.ContentType := PostStream.RequestContentType;
   PostStream.AddFile('file', ListView1.Items.Item[I].Caption, ExtractFileName(ListView1.Items.Item[I].Caption), '');
   IdHTTP1.Post('http://unhost.pl/xxx.php', PostStream);
   Application.ProcessMessages;
   ListView1.Items.Item[I].SubItems[0] := 'Wysłany';
   PostStream.Free;
 end;
end;

Link to comment
Share on other sites

ListView1.Items.Item.SubItems[0] := 'Wysyłam'; - wysyłasz komunikat o zmianie wartości

 

Application.ProcessMessages; - pozwalasz swojej aplikacji odebrać komunikaty

 

tak w dużym skrócie :lol: chyba już kumasz dlaczego kolejność jest ważna w tej sytuacji :rolleyes:

 

Pozdrawiam!

Link to comment
Share on other sites

na moje oko to zaraz za tym pętla przechodzi do następnej iteracji

 

i znowu trafia na to pierwsze Application.ProcessMessages;

 

ale lepiej zawsze trzymaj sie opcji, że najpierw coś zmieniasz

 

a pod tym dajesz Application.ProcessMessages;

 

Pozdrawiam!

Link to comment
Share on other sites

ok. dzięki za wyjaśnienie chociaż ciągle nie jest to do końca jasne. to nawet nie głupie, że korzysta z Application.ProcessMessages; w następnej iteracji, ale przecież gdyby tylko tak było to w ostatnim itemie w listview nie powinno się pokazać "Wysłany", prawda?

 

Pozdrawiam.

Link to comment
Share on other sites

...to nawet nie głupie, że korzysta z Application.ProcessMessages; w następnej iteracji, ale przecież gdyby tylko tak było to w ostatnim itemie w listview nie powinno się pokazać "Wysłany", prawda?

 

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaa :lol:

 

w ostatnim to już musi, po wyjściu z pętli :lol: przestajesz zamulać aplikacje...

Link to comment
Share on other sites

no tak... racja, nie pomyślałem ;) w takim razie całkiem wywalę to drugie Application.ProcessMessages;

 

wszystko już jasne, temat uważam za zamknięty.

 

jeszcze raz dzięki za wszystkie wyjaśnienia.

pozdrawiam.

maZi

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...