HTTPGet

0

Siemka. Mam pytanie, jak w komponencie HTTPGet dać takie coś, że jak NIE MA dostępu do internetu to wywala błąd ? Można to by było jakoś zrobić z timeout serwera, jak nieodpowieda przez 30 sekund wyświetla się błąd. Możecie pomóc, jak w tym komponencie się tego nieda, to może w jakimś innym ? :)

0

Po co ci jakis komponent, czytaj faq kurna chata! :) Masz:

  1. W interface dodaj takie cos:
function InetIsOffline(Flag: Integer): Boolean; stdcall;
external 'URL.DLL';
  1. Wpisz sobie taki kodzik gdziestam:
 if InetIsOffline(0) then
    HttpGet.Enabled:=False else
  HttpGet.Enabled:=True;

Coś w tym stylu sobie wpiszesz i bedzie good ;-)

0

Tylko, że w komponencie HttpGet NIE MA takiego czegoś jak Enabled :-P
Chodzi mi przeważnie o timeout serwera, ponieważ jak odłączyłem sobie internet i włączyłem moduł AutoUpdate mojego programu to wyświetlił się błąd Windosowy - Wystąpił błąd z aplikacją i musi być ona zamknięta. Mi chodzi, że jak NIE MA neta, to wyświetla się labelik z napisam, że wystąpił błąd. Więc pytam się może o inne komponenty, który sprawdzają, czy komputer jest podłączony z siecią.

0

Tylko, że w komponencie HttpGet NIE MA takiego czegoś jak Enabled :-P
Chodzi mi przeważnie o timeout serwera, ponieważ jak odłączyłem sobie internet i włączyłem moduł AutoUpdate mojego programu to wyświetlił się błąd Windosowy - Wystąpił błąd z aplikacją i musi być ona zamknięta. Mi chodzi, że jak NIE MA neta, to wyświetla się labelik z napisam, że wystąpił błąd. Więc pytam się może o inne komponenty, który sprawdzają, czy komputer jest podłączony z siecią.

Dlatego ja wzialem caly kod w try except, co dziwne HTTPGet1DoneFile

0

Hmmm cos z try tez niechce :/ zobaczcie, może wy coś poradzicie:

procedure TQUpdate.HTTPGet1DoneFile(Sender: TObject; FileName: String;
FileSize: Integer);
var
INI : TINIFile;
updtVersion : string;
cyfra1 : integer;
cyfra2 : integer;
updtCyfr1 : integer;
updtCyfr2 : integer;
begin
Label1.Caption := 'Sprawdzanie dostępności aktualizacji...';
INI := TINIFile.Create(HTTPGet1.FileName);
try
updtVersion := INI.ReadString('update','version','');
cyfra1 := StrToInt(wersja[1]);
cyfra2 := StrToInt(wersja[3]);
updtCyfr1 := StrToInt(updtVersion[1]);
updtCyfr2 := StrToInt(updtVersion[3]);
if (cyfra1 < updtCyfr1) or (cyfra2 < updtCyfr2) then
begin
Label1.Caption := 'Dostępna jest nowa wersja aplikacji, czy pobrać ?';
Button2.Visible := True;
Button3.Visible := True;
end
else
Label1.Caption := 'Używasz najnowszej wersji.';
Button1.Caption := 'Zamknij';
finally
INI.Free;
DeleteFile(HTTPGet1.FileName);
end;
end;

procedure TQUpdate.HTTPGet1Error(Sender: TObject);
begin
Label1.Font.Style:=[fsBold];
Label2.Visible := True;
Label1.Caption := 'Wystapił błąd z aktualizacją, odwiedź stronę';
Label2.Caption := 'domową, aby dowiedzieć się więcej...';
Button1.Caption := 'Zamknij';
end;

procedure TQUpdate.FormActivate(Sender: TObject);
begin
HTTPGet1.URL := 'http://strona.pl/version.ini';
HTTPGet1.FileName := ExtractFilePath(Application.ExeName) + 'version.ini';
HTTPGet1.GetFile;
Label1.Caption := 'Trwa łączenie z serwerem, proszę czekać...';
end;

procedure TQUpdate.FormDeactivate(Sender: TObject);
begin
Label1.Font.Style:=[];
Label2.Visible := False;
Button1.Visible := True;
Button1.Caption := 'Anuluj';
end;

0

u mnie to tak wyglada:

procedure TForm1.HTTPGet1DoneFile(Sender: TObject; FileName: String; FileSize: Integer);
var
INI : TINIFile;
updtVersion : string;
cyfra1 : integer;
cyfra2 : integer;
updtCyfr1 : integer;
updtCyfr2 : integer;
begin
try
Memo1.Lines.Add('Sprawdzanie, czy jest nowa wersja');
INI := TINIFile.Create(HTTPGet1.FileName);
try
updtVersion := INI.ReadString('update','version',''); //odcytanie wersji z pliku ini
//nie śmiejcie sie z tego sposobu. To tylko przykład :)
cyfra1 := StrToInt(wersja[1]);
cyfra2 := StrToInt(wersja[3]);
updtCyfr1 := StrToInt(updtVersion[1]);
updtCyfr2 := StrToInt(updtVersion[3]);
if (cyfra1 < updtCyfr1) or (cyfra2 < updtCyfr2) then //sprawdzenie, czy jest nowa wersja
begin
Memo1.Lines.Add('Jest nowa wersja programu');
{wyświetlenie zapytania. Jeśli użytkownik wybierze Tak, rozpoczyna się pobieranie programu }
if Application.MessageBox('Czy chcesz pobrać nową wersję programu?','Informacja',MB_YesNo) =
ID_NO then
exit
else
begin
HTTPGet2.URL := INI.ReadString('update','url','');
if SaveDialog1.Execute then HTTPGet2.FileName := SaveDialog1.FileName;
try
HTTPGet2.GetFile; //pobranie pliku ini
Memo1.Lines.Add('Pobieranie pliku');
except
Memo1.Lines.Add('Błąd. Sprawdź połączenie z internetem.');
end;
end;
end else
Memo1.Lines.Add('Nie znaleziono nowej wersji programu');
finally
INI.Free;
DeleteFile(HTTPGet1.FileName); //usunięcie pliku ini
end;
except
Memo1.Lines.Add('Błąd. Sprawdź połączenie z internetem.');
end;
end;

0

Kurcze, modyfikowałem już tak jak to Ty masz i nadal jak NIE MA połączenia to pisze - Aplikacja wykonała nieprawidłowa operację i musi zostać zamknięta :( Może ktoś wie, jak zmodyfikować MÓJ kodzik, aby wszytko było OK. Za wszelka pomoc serdeczne dzięki.

0

OMG przeciez w drugim poscie macie napisane jak to zrobic, to o co jeszczechodzi? Enabled to przyklad, wstaw se tam co chcesz, jakies gety, connecty czy co tam jeszcze innego, CooBek w obrazowy sposob przedstawil jak sprawdzic polaczenie z netem. [glowa]

0
function InetIsOffline(Flag: Integer): Boolean; stdcall;
external 'URL.DLL';

No i lol, zrobiłem to, nadawałem już różne wartości i nic :(

0

No nie zawsze działa ten sposób, ale kto powiedział, iż istnieje tylko jeden - tym razem oddaje działkę tobie -> http://torry.net sam poszukaj rozwiązania, nikt za ciebie tego nie zrobi ;-) pozdrawiam

0

Pewnie, ten sposob tez jest prosty. Daj te sprawdzanie po prostu na zdarzenie przycisku wlaczajacego akcje httpget.

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