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!
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!
Tak - wiemy.
Czy nie wystarczy jednego przycisku?
Co ma się stać po naciśnięciu drugiego przycisku bez poprzedniego naciśnięcia pierwszego?
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:)
Przy pobieraniu z FTP za pomocą czego Indy, Synapse, WinINet? Pokaż kod odpowiedzialny za pobieranie to się zobaczy jak tam dodać ProgressBar.
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.
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.
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
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;
A możecie mi powiedzieć co jest tego powodem - załącznik? showmessage pulsuje.
dodanie obrazka do treści posta - furious programming
A gdzie go wsadziłeś.
nie wiem czy dobrze
if Progressbar1.Position=100 then
showmessage('połączono');
Nie wiem co robi ProgressBar w timerze ale proponuję zatrzymać Timer
if Progressbar1.Position = 100 then
begin
Timer1.Enabled:= False;
Showmessage('połączono');
end;
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.
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.