Ip Adres Formatı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
serqet
Üye
Mesajlar: 6
Kayıt: 01 Nis 2014 10:22

Ip Adres Formatı

Mesaj gönderen serqet »

Merhaba arkadaşlar aşağıdaki kod la bilgisayarın ip sini çekebiliyorum fakat 192.168.2.2 olarak çekiyor, ben bunu 192.168.002.002 olarak çekmesini istiyorum yani 3'lü bloklar halinde otomatik tamamlasın istiyorum ne yapmam gerekiyor acaba? teşekkürler.

Kod: Tümünü seç

function DetectHostIP(var IP: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
    gethostname (hostName, sizeof (hostName));
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
finally
    WSACleanup;
end
end;

procedure TForm1.FormShow(Sender: TObject);
var
IPAdres: string;
begin

if DetectHostIP(IPAdres) then
begin
   Edit12.Text := IpAdres;
   end else
   begin
   Edit12.Text := 'Ip Adresi alinamadi';
end;
end;

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Ip Adres Formatı

Mesaj gönderen mrmarman »

Cevap zaten kullanmakta olduğun Format fonksiyonunda saklı. %d olan yerleri %.3d yaparsan sol tarafı eksik hane kadar (0) doldurur.
Resim
Resim ....Resim
serqet
Üye
Mesajlar: 6
Kayıt: 01 Nis 2014 10:22

Re: Ip Adres Formatı

Mesaj gönderen serqet »

mrmarman yazdı:Cevap zaten kullanmakta olduğun Format fonksiyonunda saklı. %d olan yerleri %.3d yaparsan sol tarafı eksik hane kadar (0) doldurur.
Çok teşekkür ederim.
serqet
Üye
Mesajlar: 6
Kayıt: 01 Nis 2014 10:22

Re: Ip Adres Formatı

Mesaj gönderen serqet »

Birşey daha sorucam üstadım edit.text 'in OnExit eventında yazılan ip yi konrtol etiroyurum ve XXX.XXX.XXX.XXX formatında değilse hata veriyor program duruyor, ben oraya şöyle bir şey yapamazmıyım örneğin text'e 192.168.2.2 girildiğinde textten çıkıldığı an girilen yazıyı xxx.xxx.xxx.xxx formatına çevirsin?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Ip Adres Formatı

Mesaj gönderen mrmarman »

İlk aklıma gelen basit bir parse fonksiyonu işini görür...

Kod: Tümünü seç

Function IP_Duzelt( strIp : String ): String;
Var
  i, iDeger : Integer;
  slListe : TStringList;
begin
  Result := '';
  slListe := TStringList.Create;
  slListe.Delimiter := '.'; // Ayracımız...
  slListe.DelimitedText := strIp; // Ayrılacak IP içeriği
  // Her IP bloğunu 3 haneye tamamlıyoruz. Zaten 3 hane ise dokunmaz...
  for i := 0 to slListe.Count - 1 do 
  begin
    Try iDeger := StrToInt(slListe[i]); Except iDeger := 0; End;
    slListe[i] := Format('%.3d', [iDeger]);
    if Result = '' then Result := slListe[i]
                   else Result := Result + '.' + slListe[i];
  end;
  // Eksik girilmişse sona tamamlıyoruz...
  if slListe.Count <= 3 then for i := slListe.Count to 3 do 
  begin
    Result := Result + '.' + '000';
  end;
  slListe.Free;
end;
Kullanımı:
,

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Edit1.Text := IP_Duzelt( Edit1.text );
end;
Resim
Resim ....Resim
serqet
Üye
Mesajlar: 6
Kayıt: 01 Nis 2014 10:22

Re: Ip Adres Formatı

Mesaj gönderen serqet »

teşekkür ederim üstad.
Cevapla