Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Edit für eine IP Adresse (https://www.delphipraxis.net/128571-edit-fuer-eine-ip-adresse.html)

xZise 1. Feb 2009 22:58


Edit für eine IP Adresse
 
Hallo ihr,

ich habe danach gesucht, aber da die DP leider IP blockiert weiß ich nicht, ob ich es übersehen habe. Und zwar würde ich einfach eine IP-Adresse in einem Edit angeben. Also so wie es auch Windows an einigen Stellen tut.

MfG
xZise

Meflin 1. Feb 2009 23:03

Re: Edit für eine IP Adresse
 
Guck mal da:
http://www.spotlight.de/zforen/dlp/m...593-28634.html

Allerdings sollte dir klar sein, dass du dadurch implizit auf IPv4 limitierst, was per se vermutlich auch mit IPv6 laufen würde ;)

Und du solltest darüber nachdenken, ob jemand, der weiß was eine IP ist, nicht auch ohne ein spezielles Eingabefeld dazu in der Lage ist, selbige einzugeben...

Reinhardtinho 1. Feb 2009 23:16

Re: Edit für eine IP Adresse
 
TJvIPAddress, wenn du Jedis installiert hast.

Aber das ist wahrscheinlich auch auf IPv4 beschränkt, ich kann es gerade nicht nachschauen.

Luckie 1. Feb 2009 23:18

Re: Edit für eine IP Adresse
 
Du kannst das Win-API IP-Adresseingabfeld benutzen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // IP-Controll erstellen
  hIP := CreateWindowEx(WS_EX_CLIENTEDGE,WC_IPADDRESS,nil,
    WS_VISIBLE or WS_CHILD,80,51,125,21,
    Panel1.Handle,IDC_IPCTRL,hInstance,nil);

  // So f.cking what?
  if(hIp = 0) then
    begin
      MessageBox(self.Handle,'Fehler beim Erstellen des IP-Controls',
        nil,0);
      self.Close;
    end;

  // in die "WndProc" des Panels eingreifen
  OldPanelProc := POINTER(SetWindowLong(Panel1.Handle,GWL_WNDPROC,
    integer(@PanelWndProc)));

  // aktuellen Font für das IP-Control nutzen
  hFont := GetStockObject(DEFAULT_GUI_FONT);
  if(hFont <> 0) and (hIP <> 0) then
    SendMessage(hIP,WM_SETFONT,hFont,1);

  // in den Edits für die Ports nur Ziffern zu lassen
  // im Objektinspektor ist zusätzlich eine Begrenzung auf
  // 5 Stellen aktiv!
  SetWindowLong(edtStartPort.Handle, GWL_STYLE,
    GetWindowLong(edtStartPort.Handle, GWL_STYLE) or ES_NUMBER);
  SetWindowLong(edtEndPort.Handle, GWL_STYLE,
    GetWindowLong(edtEndPort.Handle, GWL_STYLE) or ES_NUMBER);
end;

// -- Panel (Subclassing) ---------------------------------------------------------- //

// dient zum Aktivieren des Buttons "Scannen", wenn direkt eine
// IP-Adresse angegeben wird

var
  OldPanelProc : POINTER;

function PanelWndProc(hPanel: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): dword; stdcall;
var
  dwIp : dword;
begin
  Result := 0;

  case uMsg of
    WM_COMMAND:
      case HIWORD(wp) of
        // irgendein Edit wurde geändert
        EN_CHANGE:
          // es ist das IP-Control; na dann holen wir uns die IP
          // doch mal
          if(LOWORD(wp) = IDC_IPCTRL) then
            begin
              SendMessage(hIp,IPM_GETADDRESS,0,LPARAM(@dwIp));
              Form1.btnScan.Enabled := (dwIp <> 0);
            end
          // hm, interessiert uns nicht; soll sich Windows
          // darum kümmern
          else
            Result := CallWindowProc(OldPanelProc,hPanel,uMsg,wp,lp);
        // irgendeine andere Nachricht als EN_CHANGE?
        // pöh! wozu gibt´s Windows?
        else
          Result := CallWindowProc(OldPanelProc,hPanel,uMsg,wp,lp);
      end;
    WM_NOTIFY:
      if(PNMIpAddress(lp)^.hdr.Code = IPN_FIELDCHANGED) then
        begin
          SendMessage(hIp,IPM_GETADDRESS,0,LPARAM(@dwIp));
          Form1.btnScan.Enabled := (dwIp <> 0);
        end;
    else
      Result := CallWindowProc(OldPanelProc,hPanel,uMsg,wp,lp);
  end;
end;

toms 2. Feb 2009 07:31

Re: Edit für eine IP Adresse
 
Zitat:

Zitat von xZise
ich habe danach gesucht, aber da die DP leider IP blockiert weiß ich nicht, ob ich es übersehen habe.

Das Suchwort in der DP muss mindestens drei Buchstaben lang sein.
Aber du kannst auch jederzeit die Google Suche verwenden:

Suche nach Stichwort "IP" in delphipraxis.net

xZise 15. Feb 2009 09:20

Re: Edit für eine IP Adresse
 
Zitat:

Zitat von Meflin
[...]Allerdings sollte dir klar sein, dass du dadurch implizit auf IPv4 limitierst, was per se vermutlich auch mit IPv6 laufen würde ;)

Und du solltest darüber nachdenken, ob jemand, der weiß was eine IP ist, nicht auch ohne ein spezielles Eingabefeld dazu in der Lage ist, selbige einzugeben...

Danke für die Antworten, aber es wird bei einem Edit bleiben.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz