|
|
|||||||
|
In einem Editfeld kann man nicht nur Text anzeigen, editieren oder neu erfassen. Das Editfeld bietet dem Entwickler eine Vielzahl von weiteren Möglichkeiten! Die Programmierung ist meist problemlos - man muss nur wissen, was möglich ist und wie man es umsetzen kann. Ohne Zweifel ist das Editfeld eines der wichtigsten Standardsteuerelemente! Deshalb lohnt es sich, für einen genaueren Blick etwas Zeit zu investieren. In der Literatur finden sich viele unterschiedliche Bezeichnungen für dieses Steuerelement: Textbox, Edit Box, Edit Control, Textfeld, Editierfeld, Editfenster, Textfenster, usw.. Ich habe für diesen Beitrag das Wort Editfeld gewählt, weil ich Textfeld für die statische Textanzeige (Label) passender finde und Editierfeld etwas lang erscheint. Die meisten der nachfolgend beschriebenen Möglichkeiten beziehen sich auf mehrzeilige Editfelder. Einzeilige Editfelder (Eingabefelder) können zwar auch ein paar Fragen aufwerfen (z.B. formatierte Eingabe, ENTER-Taste), sind aber fast immer problemlos zu handhaben. Sobald ein Editfeld den Fokus erhält, blinkt das Caret (Textmarke) an der Eingabeposition. Der Anwender kann danach Text eintippen oder aus der Zwischenablage einfügen. Er kann das Caret an eine andere Position setzen, er kann Text markieren, löschen oder ausschneiden und an einer anderen Position wieder einfügen. Er kann eben alle diese üblichen Bearbeitungsschritte ausführen, die jeder Windows-Anwender von vielen Windows-Anwendungen her kennt. Für den Programmierer machen diese genannten Operationen keine Mühe, weil sich Windows darum kümmert. Nach kurzer Einarbeitungszeit wird es auch keinerlei Schwierigkeiten bereiten, ein Editfeld mit allen gewünschten Eigenschaften einzurichten. Bereits mit dem DDT-Befehl CONTROL ADD TEXTBOX kann man für das Editfeld leicht die gewünschte Größe, die Positionierung, das Aussehen und das Verhalten bestimmen. Weitaus bequemer geht es natürlich mit dem Werkzeug PB/Forms oder mit einem vergleichbaren Tool. Wem die Bestimmung der Stil-Eigenschaften zunächst noch mühsam erscheint, kann diese für die ersten Versuche einfach weglassen und dadurch mit den voreingestellten Werten arbeiten. Die genaue Wirkung der einzelnen Werte kann man sich aber leicht durch Ausprobieren verdeutlichen. Beispielsweise erlaubt der Wert %ES_NUMBER nur noch Ziffern als mögliche Eingabe. Es empfiehlt sich unbedingt, für die Festlegung der Stileigenschaften nur mit den vorgegebenen Konstanten zu arbeiten, welche über OR kombiniert werden - auch wenn der Quelltext dadurch etwas länger wird. Der Wert &H8& als Stilparameter bewirkt zwar genau den gleichen Programmablauf wie %ES_UPPERCASE, jedoch erkennt man im zweiten Fall sofort, dass alle Zeichen in Großbuchstaben umgewandelt werden sollen. Alle diese Konstanten basieren auf englischen Ausdrücken. Eine Übersetzung kommt schon deshalb nicht in Frage, weil dann eine Suche im Internet oder in Stichwortverzeichnissen von Büchern unmöglich wäre. Auch wären die Wertzuweisungen in diversen INC-Dateien unbrauchbar. Das Vorgeben von Text und die Übernahme des geänderten Textes aus dem Editfeld machen sicher ebenfalls keine Probleme. Problematischer wird es schon eher, wenn die Texteingabe überwacht werden muss, um beispielsweise Textkorrekturen vorzunehmen oder um eingegebene Textkürzel sofort in längere Begriffe umzuwandeln. Wie andere Steuerelemente meldet auch das Editfeld verschiedene Ereignisse an die Callback-Funktion zurück, welche daraufhin entsprechend reagieren kann. Dabei müssen oft weitere Informationen vom Editfeld angefordert werden. Es gibt eine Anzahl von Nachrichten, die man über den DDT-Befehl CONTROL SEND direkt an ein Editfeld sendet, um benötigte Daten zu erfragen oder um bestimmt Aktionen auszuführen. Eine genaue Beschreibung der bei den verschiedenen Windows-Versionen möglichen Nachrichten findet man auf den Seiten von MSDN, aber auch in der Hilfedatei WIN32.HLP. Es ist empfehlenswert, sich zumindest diese Hilfedatei aus dem Internet zu laden und innerhalb PB/WIN einzurichten. Setzt man danach im PowerBASIC-Editor das Caret auf eine der folgenden Nachrichten-Bezeichnungen und drückt die F1-Funktionstaste, so erhält man sofort eine für die meisten Fälle ausreichende nähere Beschreibung. Ich habe ein kleines Testprogramm Spielereien mit dem EDITFELD erstellt, welches als Quelltext im PowerBASIC-Forum zur Verfügung steht. Bitte einfach alles einmal ausprobieren und durch Änderungen im Quelltext weitere Möglichkeiten entdecken. Wenn ich etwas Wichtiges vergessen haben sollte, so bitte ich um entsprechende Ergänzungsvorschläge. Alle interessierten Programmierer, die im Moment PB/WIN noch nicht zur Verfügung haben, finden das Programm in ausführbarer Form im Downloadbereich auf der deutschen PowerBASIC-Homepage. Dies sind die wichtigsten Nachrichten an ein Editfeld: EM_CANUNDO stellt fest, ob eine Aktion rückgängig gemacht werden kann, ob also eine EM_UNDO-Operation möglich ist EM_CHARFROMPOS ermittelt das zur übergebenen Koordinate nächstgelegene Zeichen EM_EMPTYUNDOBUFFER macht das Rückgängigmachen einer Aktion unmöglich durch Zurücksetzen des zugehörigen Flags EM_FMTLINES legt fest, ob in einem mehrzeiligen Editfeld weiche Zeilenumbrüche mittels $CRCRLF erlaubt sind (im Gegensatz zum normalen Umbruch $CRLF) EM_GETFIRSTVISIBLELINE ermittelt die erste sichtbare Zeile in einem mehrzeiligen Editfeld. Bei einem einzeiligen Editfeld ist es das erste sichtbare Zeichen EM_GETHANDLE ermittelt den Handle des zum mehrzeiligen Editfeld gehörigen Speicherbereiches EM_GETLIMITTEXT ermittelt die aktuelle Einstellung der maximal zulässigen Anzahl an Zeichen im Editfeld EM_GETLINE kopiert eine Zeile aus dem Editfeld in eine Stringvariable EM_GETLINECOUNT ermittelt die aktuelle Anzahl der Zeilen im Editfeld EM_GETMARGINS ermittelt die Breite der Textränder (links und rechts) EM_GETMODIFY ermittelt, ob der Inhalt des Editfeldes geändert wurde EM_GETPASSWORDCHAR ermittelt das gesetzte Passwortzeichen EM_GETRECT ermittelt die Koordinaten, in denen der eigentliche Text des Editfeldes angezeigt wird EM_GETSEL ermittelt die Start- und Endposition eines markierten Bereiches im Editfeld EM_GETTHUMB ermittelt die Position des Schiebers der vertikalen Scrollleiste in einem mehrzeiligen Editfeldes EM_GETWORDBREAKPROC ermittelt die Adresse der Funktion für den Zeilenumbruch EM_LIMITTEXT legt die maximal erlaubte Anzahl der Zeichen im Editfeld fest EM_LINEFROMCHAR ermittelt die Zeilennummer der Zeile, in dem sich die gegebene Zeichenposition befindet EM_LINEINDEX ermittelt die Zeichenposition des ersten Zeichens in einer gegebenen Zeile EM_LINELENGTH ermittelt die Länge einer bestimmten Zeile in einem Editfeld EM_LINESCROLL Scrollt den Text in einem mehrzeiligen Editfeld EM_POSFROMCHAR ermittelt die Koordinaten eines Zeichens innerhalb eines Editfeldes EM_REPLACESEL ersetzt einen markierten Bereich in einem Editfeld durch einen anderen Text EM_SCROLL Scrollt den Text zeilen- oder seitenweise auf und ab EM_SCROLLCARET scrollt den Text im Editfeld so, dass das Caret in den sichtbaren Bereich kommt, sobald das Editfeld den Fokus erhält EM_SETHANDLE setzt einen neuen Handle für den Speicherbereich des Editfelds EM_SETLIMITTEXT gleiche Funktion wie EM_LIMITTEXT EM_SETMARGINS setzt die Breite der Textränder (links und rechts) EM_SETMODIFY setzt das MODIFY-Flag, welches zeigt, ob der Text im Editfeld verändert wurde EM_SETPASSWORDCHAR legt fest, mit welchem Zeichen verdeckte Eingaben dargestellt werden EM_SETREADONLY setzt das Editfeld auf read-only EM_SETRECT setzt die Koordinaten für die Anzeige innerhalb eines Editfeldes EM_SETRECTNP setzt die Koordinaten für die Anzeige, ohne den Text neu zu zeichnen EM_SETSEL Markiert (selektiert) einen bestimmten Bereich in einem Editfeld EM_SETTABSTOPS setzt die Anzahl und den Abstand der TabStops im Editfeld EM_SETWORDBREAKPROC setzt die Adresse für die Funktion, die den Zeilenumbruch regelt EM_UNDO macht die letzte Aktion im Editfeld rückgängig, falls möglich |
|