Oppure

Loading
07/05/11 10:05
Goblin
Postato originariamente da camaleonteplus:

da questo errore:
[Error] Unit1.pas(35): Not enough actual parameters in questa riga:
sStream := TStringStream.Create;


Ho controllato, con D2010 il codice funziona, invece con D7 la create della classe TStringStream vuole una variabile di tipo stringa, non ho investigato il motivo, cmq problema risolvibile:

var s:String;
....
sStream := TStringStream.Create(s);
...

Se hai tempo e voglia controlla cosa ci fa lo stream con la variabile passata nel create
Ibis redibis non morieris in bello
07/05/11 13:10
camaleonteplus
Riguardo a questo codice:
function TForm1.GetPublicIp: String;
          begin
      IdHttp1.Request.Host:= 'http://www.whatismyip.com/automation/n09230945.asp';
      result := IdHttp1.Get('http://www.whatismyip.com/automation/n09230945.asp');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IPPubblico.Caption:= 'IP Pubblico: ' + (GetPublicIp);
end;

L'errore l'ho risolto bisognava inserire l'indirizzo del sito in entrambe le righe. Adesso funziona.
aaa
07/05/11 13:17
camaleonteplus
Dopo aver fatto le modifiche suggerite questo codice funziona:
Function TForm1.GetMyIP: String;
Var oHttp: TIdHTTP;
    sStream: TStringStream;
    nPos: Integer;
    s:String;
begin
  sStream := TStringStream.Create(s);
  oHttp := TIdHTTP.Create(Nil);
  Result := 'Error';
  Screen.Cursor := crHourGlass;
  try
    Try
      oHttp.Get('http://www.ilmioip.it', sStream);  // tutta la pagina è nello stream
      nPos :=Pos('var IP_CLIENT =', sStream.DataString);
      if nPos>0 then
        Result:= copy(sStream.DataString,npos+17,14);
    Except
      ShowMessage('gestioneerrori');
    End;
  Finally
    freeandnil(sStream);
    freeandnil(oHttp);
    Screen.Cursor := crDefault;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IP.Caption:= 'IP Pubblico: ' + (GetMyIP);
end;

Ma c'è il problema che l'IP compare a video in questo modo:
191.20.30.1';
questo formato non va bene perchè questi 2 caratteri (') e (;) danno fastidio se devo fare un Whois. Sarebbe perfetto se si potrebbero eliminare.
aaa
07/05/11 16:06
Goblin
modifica la riga 16 mangiando uno o due byte
Result:= copy(sStream.DataString,npos+17,12); oppure
Result:= copy(sStream.DataString,npos+17,13);

Ibis redibis non morieris in bello
08/05/11 0:41
smanettone83
Postato originariamente da Goblin:

modifica la riga 16 mangiando uno o due byte
Result:= copy(sStream.DataString,npos+17,12); oppure
Result:= copy(sStream.DataString,npos+17,13);


oppure piu semplicemente:

result:= copy(Sstream.dataStream,1,length(sstream.datastream)-2);// - 2 = elimina gli ultimi 2 caratteri


non lo ho testato provalo
Ultima modifica effettuata da smanettone83 08/05/11 0:43
aaa
08/05/11 15:37
Goblin
Postato originariamente da smanettone83:

oppure piu semplicemente:

result:= copy(Sstream.dataStream,1,length(sstream.datastream)-2);// - 2 = elimina gli ultimi 2 caratteri


non lo ho testato provalo


dipende, in quanto in sStream.DataString c'e' tutta la pagina, dunque se ti va bene trovi quello cerchi altrimenti trovo sporcizia. :)
Ibis redibis non morieris in bello
08/05/11 18:05
smanettone83
si certo era sottinteso che il contenuto della pagina era formato solo dall'ip ;)
aaa