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 IP Editfeld? (https://www.delphipraxis.net/113876-ip-editfeld.html)

STS301 16. Mai 2008 08:57


IP Editfeld?
 
hi

wie kann man es bei einem Editfeld einstellen, dass man wie bei den netzwerkeinstellungen drei oder weniger Zahlen eingibt, dann ein Punkt ist.

Muss ich dafür eine eigene Komponente schreiben (Abgeleitet von TEdit) oder wie macht man das?

mfg

mkinzler 16. Mai 2008 08:59

Re: IP Editfeld?
 
In der JVCL gibt es schon eine Edit-Komponente dafür

STS301 16. Mai 2008 09:00

Re: IP Editfeld?
 
aha, habe ich noch gar nicht gesehen, aber wie ist es dann, wenn ich es zb. mit Lazarus schreiben will

NickelM 16. Mai 2008 09:06

Re: IP Editfeld?
 
Ich weiß nicht ob Lazarus auch ein sogenanntest TMaskEdit hat.
Wenn dann benutze dies, da kannst du dan eine Maske einstellen mit punkten

Matze 16. Mai 2008 09:08

Re: IP Editfeld?
 
Hallo,

wenn es in Lazarus ein TMaskEdit gibt, kannst du es damit machen:

Delphi-Quellcode:
MaskEdit.EditMask := '000\.000\.000\.000;0;'
Allerdings sind dann auch unerlaubte Eingaben wie 999.999.999.999 möglich. Dann gibt's ja noch IPv6, was gesondert behandelt werden müsste.

Grüße

Edit: Ohje bin ich langsam. Aber ich habe wenigstens einen Beispiel-Code dabei. *g*

STS301 16. Mai 2008 09:18

Re: IP Editfeld?
 
danke, ich schaue dann einmal nach

was bedeutet eigentlich die letzte null hier

Zitat:

Zitat von Matze
Delphi-Quellcode:
MaskEdit.EditMask := '000\.000\.000\.000;0;'// hier die ;0;


Matze 16. Mai 2008 09:31

Re: IP Editfeld?
 
Die 0 bedeutet, dass die Leerzeichen auch als solche dargestellt werden: "___.___.___.___"
Würde dort einen 1 stehen, werden Leerzeichen zu Unterstrichen: "___.___.___.___"


Edit: Da Leerzeichen im Forum bei der Darstellung untergehen, habe ich weiße Unterstriche fürs erste Beispiel genommen.
Edit 2: Hm oder auch nicht, ich dachte immer das sei so, doch mein Delphi zeigt beides Mal Leerzeichen an. :oops:
Edit 3: Ah, die 1 steht für "Literalzeichen speichern". :)

STS301 16. Mai 2008 09:51

Re: IP Editfeld?
 
hi

es gibt keine TMaskEdit (falls du eine Visuelle Komponenten meinst)

was ist ein Literalzeichen?

RavenIV 16. Mai 2008 09:54

Re: IP Editfeld?
 
Bei torry.net gibt es auch jede Menge Komponenten für IP-Eingabe.
Aber keine Ahnung, ob die auch bei Lazarus laufen.

STS301 16. Mai 2008 10:03

Re: IP Editfeld?
 
ehrlich überlegt, um Das Programm auch auf Linux zum Laufen zu bringen, müsste ich die Einstellungen ändern (Netzwerkkonfiguration), daher werde ich es mit Delphi machen.

shmia 16. Mai 2008 10:04

Re: IP Editfeld?
 
Du könntest aber auch ein ganz normales Editfeld nehmen und als Ausgleich eine erweiterte Funktionalität anbieten.
Wenn der Inhalt nur Ziffern und Punkte hat, wird er als IP-Adresse betrachtet.
Alles andere wird als Rechnername (wie z.B. 'www.delphipraxis.net') betrachtet und über eine Namensauflösung in eine IP-Adresse verwandelt.

himitsu 16. Mai 2008 13:48

Re: IP Editfeld?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Solange es nur auf Windows laufen soll, ist es egal welche Compiler verwendet wird, da Windows sleber schon seit Jahren eine entsprechende Komponente anbietet.
leider fehlt diese nur in fast jeder Entwicklungsumgebung. :shock:

>> MSDN-Library durchsuchenSysIPAddress32 / MSDN-Library durchsuchenWC_IPADDRESS

Delphi-Quellcode:
// InitCommonControlsEx + ICC_INTERNET_CLASSES

Const
  IPN_FIRST = UINT(-860);
  IPN_LAST = UINT(-879);

Const WC_IPADDRESS              = 'SysIPAddress32';

  // IP Address Edit Control Messages
  IPM_CLEARADDRESS              = WM_USER + 100;
  IPM_SETADDRESS                = WM_USER + 101;
  IPM_GETADDRESS                = WM_USER + 102;
  IPM_SETRANGE                  = WM_USER + 103;
  IPM_SETFOCUS                  = WM_USER + 104;
  IPM_ISBLANK                   = WM_USER + 105;

  // IP Address Edit Control Notification Codes
  IPN_FIELDCHANGED              = IPN_FIRST - 0;

Type NMIPADDRESS = packed Record {IPN_FIELDCHANGED}
    hdr:   NMHDR;
    iField: _INT;
    iValue: _INT;
  End;
  pNMIPADDRESS = ^NMIPADDRESS;
einige nette Funktionen/Makros > siehe PSDK
Delphi-Quellcode:
Function MAKEIPRANGE    (Low, High: BYTE): DWORD;
Function MAKEIPADDRESS  (B1, B2, B3, B4: BYTE): DWORD;
Function FIRST_IPADDRESS (X: DWORD): BYTE;
Function SECOND_IPADDRESS(X: DWORD): BYTE;
Function THIRD_IPADDRESS (X: DWORD): BYTE;
Function FOURTH_IPADDRESS(X: DWORD): BYTE;
Erstellung in nonVCL:
Delphi-Quellcode:
Handle := CreateWindowExW(0, WC_IPADDRESS, nil, WS_CHILD or WS_VISIBLE
  or WS_TABSTOP, Left, Top, Width, Height, Parent, DlgID, HInstance, nil);
'ne fertiges Objekt hab ich derzeit aber nicht rumliegen :|
Jedenfalls versteckt sich grad irgendeinfehler in meiner Demo :?



[add]
'nen leeres Projekt und dann dieses ... Ergebnis = siehe Anhang
Delphi-Quellcode:
const
  WC_IPADDRESS  = 'SysIPAddress32';
  IPM_SETADDRESS = WM_USER + 101;

procedure TForm1.FormCreate(Sender: TObject);
var
  H: HWND;
begin
  Randomize;
  H := CreateWindowEx(0, WC_IPADDRESS, nil, WS_CHILD or WS_VISIBLE
    or WS_TABSTOP, Left, Top, 120, 21, Handle, 0, HInstance, nil);
  SendMessage(H, IPM_SETADDRESS, 0, Random($7fffffff));
end;

STS301 16. Mai 2008 14:17

Re: IP Editfeld?
 
danke :thumb: es gehört zwar eher zu meinem anderen Thread, aber danke, ich versuche dann einmal den Fehler zu finden :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr.

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