Eingabefelder erzeugen


Der Fokus dieses Tutorials liegt auf den wichtigsten Funktionen von Eingabefeldern. Sie sind zu komplex, um jedes Detail zu behandeln. Am häufigsten wird man wohl etwas in sie schreiben bzw. etwas aus ihnen auslesen wollen. Und genau das wird hier demonstriert.

Auch ein Eingabefeld wird mit der Funktion "CreateWindowEx" erstellt. Und auch hier gibt es spezielle Stilattribute, die Sie nutzen können, und die Sie wie immer in der Hilfe oder im MSDN finden. Unser Beispielprogramm erzeugt ein Editfeld z.B. mit folgendem Aufruf:

hwndEdit1 := CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT', 'Edit1', WS_VISIBLE or
  WS_CHILD or ES_NOHIDESEL, 10, 20, 400, 20, hWnd, IDC_EDIT1, hInstance, nil);

Als Besonderheit ist die Eigenschaft ES_NOHIDESEL zu nennen. Normalerweise versteckt das System den aktuell markierten Text, wenn Sie den Fokus wechseln und vom Eingabefeld zu einem anderen Control gehen. Erst wenn das Editfeld den Fokus zurückerhält, sehen Sie die Markierung auch wieder. Mit der o.g. Eigenschaft können Sie dieses Verhalten ausschalten, so dass der markierte Text auch dann markiert bleibt, wenn Sie ein anderes Control benutzen. Weitere Eigenschaften finden Sie wie ebenfalls in der Hilfe und im MSDN.


Probleme mit dem Passwortmodus unter Windows XP

Der Passwortmodus eines Eingabefeldes dürfte Ihnen bekannt sein. Mit Hilfe des Stils ES_PASSWORD kann das Control angewiesen werden, anstelle des Textes Sternchen anzuzeigen. Wenn Sie unter Windows XP eine Manifest-Datei oder -Resource benutzen, dann werden statt der Sternchen üblicherweise Punkte angezeigt. Das liegt u.a. daran, dass die Standardschrift für Dialogboxen unter Windows XP Tahoma ist. Einige Dialogeditoren, darunter auch der Ressourceneditor des Visual Studio 6, setzen aber MS Sans Serif als Standardschrift, weil dies in den älteren Windows-Versionen die Standardschrift für Dialoge war

100 DIALOGEX DISCARDABLE  0, 0, 249, 61
STYLE DS_MODALFRAME | DS_NOFAILCREATE | DS_CENTER | WS_VISIBLE | WS_CAPTION |
    WS_SYSMENU
CAPTION "ES_PASSWORD"
FONT 8, "MS Sans Serif"
BEGIN
    EDITTEXT        110,10,10,229,14,ES_PASSWORD | ES_AUTOHSCROLL
    PUSHBUTTON      "Schließen",120,90,37,65,14
END

Dadurch kommt es aber zu dem Phänomen, dass anstelle der Punkte vertikale Striche angezeigt werden:


Dieses Problem wird auch bei Microsoft unter dem Stichwort Q316306 beschrieben. Sie können es beheben, indem Sie Tahoma gezielt als Schriftart angeben, oder Sie setzen ein eigenes Passwortzeichen mit Hilfe der Nachricht "EM_SETPASSWORDCHAR". Ein relativ einfacher Weg ist aber auch die Änderung der Dialogressource, die vom Visual Studio-Editor ohne Probleme akzeptiert wird:

#define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS)
100 DIALOGEX DISCARDABLE 0, 0, 249, 61 STYLE DS_MODALFRAME | DS_NOFAILCREATE | DS_CENTER | DS_SHELLFONT | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "ES_PASSWORD" FONT 8, "MS Shell Dlg"

Auch dieser Weg wird im o.g. Artikel beschrieben.