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 TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist (https://www.delphipraxis.net/170612-tmaskedit-mit-maske-pruefen-ob-eingabe-erfolgt-ist.html)

Helmi 25. Sep 2012 20:42

TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist
 
Hallo,

ich nutze ein TMaskEdit um eine IP-Adresse eingeben zu können.

Dabei hat das MaskEdit unter EditMask die Maske:
Zitat:

099.099.099.099;1;_
Wenn jetzt nichts eingegeben wurde, dann erhalte ich als Text:
Zitat:

. . .
Momentan entfern ich alle Leerzeichen und prüf danach auf
Zitat:

...
In diesem Falle ist für mich das MaskEdit leer.

Gibt es noch eine andere Möglichkeit um zu prüfen ob im MaskEdit etwas vorhanden ist/eingegeben wurde?

Bummi 25. Sep 2012 22:15

AW: TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist
 
was hältst Du hiervon?
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Commctrl;

type
  TForm2 = class(TForm)
    ButtonCreateInput: TButton;
    ButtonAcceptInput: TButton;
    procedure ButtonCreateInputClick(Sender: TObject);
    procedure ButtonAcceptInputClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    MyIPEdit: HWND;
    MyIPAddress: integer;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.ButtonCreateInputClick(Sender: TObject);
Const
 x=10;
 y=10;
 w=130;
 h=22;
begin
  MyIPAddress := MAKEIPADDRESS(127, 0, 0, 1); // Vorbelegung
  InitCommonControl(ICC_INTERNET_CLASSES);
  MyIPEdit := CreateWindow(WC_IPADDRESS, nil, WS_CHILD or WS_VISIBLE, x, y,
    w, h, self.Handle, 0, hInstance, nil);
  SendMessage(MyIPEdit, IPM_SETADDRESS, 0, MyIPAddress);
  // Vorbelegung eintragen wenn gewünscht
  SendMessage(MyIPEdit, IPM_SETFOCUS, 0, 0);

end;

procedure TForm2.ButtonAcceptInputClick(Sender: TObject);
begin
  SendMessage(MyIPEdit, IPM_GETADDRESS, 0, longint(@MyIPAddress));
  if MyIPAddress = 0 then
  begin
    Showmessage('Keine IP-Adresse');
    SendMessage(MyIPEdit, IPM_SETFOCUS, 0, 0);
  end
  else
    Showmessage('IP: ' + IntToStr(FIRST_IPADDRESS(MyIPAddress)) + '.' + IntToStr
        (SECOND_IPADDRESS(MyIPAddress)) + '.' + IntToStr
        (THIRD_IPADDRESS(MyIPAddress)) + '.' + IntToStr
        (FOURTH_IPADDRESS(MyIPAddress)) + '.')
end;

end.

sx2008 26. Sep 2012 03:53

AW: TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist
 
Zitat:

Zitat von Helmi (Beitrag 1184446)
ich nutze ein TMaskEdit um eine IP-Adresse eingeben zu können.

Also ich bin im Laufe der Zeit von derlei restiktiven Eingaben abgekommen.
Wenn man eine IP-Adresse erwartet, dann kann man genausogut auch einen Rechnernamen zulassen.
Sollte man tatsächlich nur eine IP-Adresse benötigen, dann könnte man bei Verlassen des Eingabefeldes den Rechnernamen auflösen und die IP in das Eingabefeld zurückschreiben.

Manche Benutzer wollen die IP nicht eintippen, sondern kopieren sie über das Clipboard aus einer anderen Anwendung heraus.
Hier wäre ein TMaskEdit ebenfalls störend (Benutzer denkt: "man warum muss ich jetzt die blöde IP abtippen, ich will's doch nur kopieren")

Und ausserdem kommt ja irgendwann IPv6.
Gut wenn der Programmierer mitgedacht hat und die Eingabe von IPv6-Adressen zulässt.
Mit der Funktion WSAStringToAddress() kann man prüfen, ob eine IPv4, IPv6 oder etwas Anderes (Rechnername) vorliegt.

Helmi 26. Sep 2012 09:44

AW: TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist
 
@Bummi: Schaut gut aus - nur gefällt mir dieses Windows-eigene-IP-Anzeige-Edit nicht wirklich - da bleib ich lieber bei meiner TMaskEdit-Logik (auch wenn sie mir nicht wirklich gefällt

Zitat:

Zitat von sx2008 (Beitrag 1184460)
Zitat:

Zitat von Helmi (Beitrag 1184446)
ich nutze ein TMaskEdit um eine IP-Adresse eingeben zu können.

Also ich bin im Laufe der Zeit von derlei restiktiven Eingaben abgekommen.
Wenn man eine IP-Adresse erwartet, dann kann man genausogut auch einen Rechnernamen zulassen.
Sollte man tatsächlich nur eine IP-Adresse benötigen, dann könnte man bei Verlassen des Eingabefeldes den Rechnernamen auflösen und die IP in das Eingabefeld zurückschreiben.

Manche Benutzer wollen die IP nicht eintippen, sondern kopieren sie über das Clipboard aus einer anderen Anwendung heraus.
Hier wäre ein TMaskEdit ebenfalls störend (Benutzer denkt: "man warum muss ich jetzt die blöde IP abtippen, ich will's doch nur kopieren")

Und ausserdem kommt ja irgendwann IPv6.
Gut wenn der Programmierer mitgedacht hat und die Eingabe von IPv6-Adressen zulässt.
Mit der Funktion WSAStringToAddress() kann man prüfen, ob eine IPv4, IPv6 oder etwas Anderes (Rechnername) vorliegt.

Ich gib dir ja recht - aber in meinem Falle kann man nur eine IP-Adresse angeben - und in diesem Falle auch nur eine IPv4

himitsu 26. Sep 2012 12:41

AW: TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist
 
Via NonVCL kann man sich vom Windows auch direkt ein Edit für die IP-Eingabe besorgen (allerdingt nur IPv4).

Im Prinzip ist es ein NumEdit, mit 3 Punkten und 4 1- bis 3-stelligen Zahlen.
Auslesen und befüllen kann man es dort direkt mit einem LongWord, bzw. einen 4-Byte-Record oder einem Array[0..3] of Byte.

Bummi 26. Sep 2012 12:59

AW: TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist
 
@himitsu

#2

himitsu 26. Sep 2012 13:37

AW: TMaskEdit mit Maske prüfen ob Eingabe erfolgt ist
 
:oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 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