Progressbar przy pobiernaniu pliku z FTP i ładowaniu do Memo

0

Witam,
Czy wiecie jak może napisać kawałek kodu, który jest odpowiedzialny za progressbar przy pobieraniu pliku z ftp (po naciśnięciu jednego przyciusku) i załadowanie go do memo(po naciśnięciu drugiego przycisku)?

Dzięki za pomoc!

2

Tak - wiemy.
Czy nie wystarczy jednego przycisku?
Co ma się stać po naciśnięciu drugiego przycisku bez poprzedniego naciśnięcia pierwszego?

0

Napisałem coś takiego, ale nie wiem czy w dobrym miejscu i przede wszystkim czy dobrze

procedure TForm1.Timer1Timer(Sender: TObject);
begin

  if sender=button1 then
  begin
    Progressbar1.Position:=Progressbar1.Position+1;
      if Progressbar1.Position=100 then
        showmessage('Połączono z bazą!');
  end;
  end; 

Wystarczy dla jednego:)

0

Przy pobieraniu z FTP za pomocą czego Indy, Synapse, WinINet? Pokaż kod odpowiedzialny za pobieranie to się zobaczy jak tam dodać ProgressBar.

0

Jakich komponentów używasz do FTP'a. Bo to najważniejsza informacja, której nie podałeś. Poza tym jakim cudem Senderem dla OnTimer może być jakiś Button? Chyba tylko jeżeli zrobił byś gdzieś w kodzie ręcznie OnTimer(Button1);. Ale i o tym precyzyjnie nie wspominasz.

Jednak takie rzeczy jak pobieranie robi się w wątku, a nie w Timerze. Jeżeli wątek jest pod WinAPI. to przerywamy go funkcją opisaną na MSDN TerminateThread. A pod VCL TwojWatek.Terminate;. I oczywiście do pokazywania postępu, różne komponenty do FTP, mają swoje zdarzenia.

EDIT: @kAzek był szybszy. I oczywiście zauważył najważniejszą kwestie. Czego używasz do obsłużenia FTP'a.

0
  IdFTP1.Username:='    ';
  IdFTP1.Password:=' ';
  IdFTP1.Host:='  ';
      if not IdFTP1.Connected then
        begin
          IdFTP1.Connect();
           if IdFTP1.Connected then
           begin
IdFTP1.get('/orders.xml', 'D:/orders.xml');

           end;

Indy. generalnie to potrzebuje progressbar po kliknięciu w przycisk, gdzie po przeleceniu progressbaru wyskakuje showmessage. Nic więcej.

0
cleim_3103 napisał(a):

Napisałem coś takiego, ale nie wiem czy w dobrym miejscu i przede wszystkim czy dobrze

Za ten kod, nominuję Cię do nagrody best shotgun programmer.
Pięknie realizujesz założenia takiego programowania, a one są bardzo proste.
Bierzesz shotguna i na...sz we wszystko co się rusza dookoła (oczywiście bez żadnego zrozumienia i pomyślunku, bo one nie są do niczego potrzebne takiemu "shotgun programmerowi"), w końcu coś trafisz i zacznie działać.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if sender=button1 then
  begin
    Progressbar1.Position:=Progressbar1.Position+1;
      if Progressbar1.Position=100 then
        showmessage('Połączono z bazą!');
  end;
  end; 

Wystarczy dla jednego:)

To jest metoda obsługi zdarzenia OnTimer komponentu o nazwie Timer1 klasy TTimer - prawda? Prawda.
Ten warunek:

if sender=button1 then

Nigdy nie zostanie spełniony i nigdy się nie wykona, bo Sender w tym przypadku jest zawsze Timer1.
Tak jak napisałeś to zadziała w zdarzeniu TButton.OnClick

2
procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgreesBar1.Position:=AWorkCount;
end;

procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgreesBar1.Visible:=true;
  ProgreesBar1.Max:=AWorkCountMax;
end;

procedure TForm1.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  ProgreesBar1.Visible:=false;
end;
0

A możecie mi powiedzieć co jest tego powodem - załącznik? showmessage pulsuje.

Schowek01.png

dodanie obrazka do treści posta - furious programming

0

A gdzie go wsadziłeś.

0

nie wiem czy dobrze

 if Progressbar1.Position=100 then

showmessage('połączono');
1

Nie wiem co robi ProgressBar w timerze ale proponuję zatrzymać Timer

if Progressbar1.Position = 100 then
begin
  Timer1.Enabled:= False;
  Showmessage('połączono');
end;
0

a możecie mi powiedzieć jak wyszukiwać kilkukrotnie danego wyrażenia w tekście? Mam coś takiego:

begin
S:=Edit1.Text;
For I:=0 to  Memo1.Lines.Count-1 do
If Pos(S,  Memo1.Lines[i])>0 then
begin

Memo2.Lines.Add(Memo1.Lines[i]);
  for j:= 1 to 3 do
begin
Memo2.Lines.Add(Memo1.Lines[i-j]);
end;
memo2.Lines.Add('---------------------------------------');
end;
end ;

I chodzi o to, że gdy chce jeszcze raz coś wyszukać, to nie chce mi znaleźć, próbowałem na początku tego ustawić pętle while, ale nie śmiga.

Dzięki za pomoc.

0

Albo na bieżąco rób ze znalezioną linią "coś" (zaznaczaj, poprawiaj itp.), albo wrzucaj indeksy znalezionych linii do jakiejś macierzy i po skończeniu przeszukiwania rób "coś" z liniami spod zgromadzonych indeksów;

Wczoraj w dziale Newbie był wątek dotyczacy przeszukiwania listy pod kątem danego słowa i wyszukiwaniu linii go zawierającej od początku, jesli od zaznaczonego itema nie znaleziono nic do końca listy; Znajdź go i przeczytaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1