PowerBASIC FORUM - Kirschbaum Software GmbH UBB.threads™ copyright by Infopop Corporation.

Hier helfen sich PowerBASIC Programmierer gegenseitig ..... >> Der Umstieg von PB/DOS nach PB/WIN bzw. PB/CC

Josef KirschbaumAdministrator
Moderator

Registriert: 15.12.2002
Beiträge: 342
Wohnort: Emmering
Spielereien mit dem Editfeld
      19.01.2004 18:01

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

Extras: Beitrag drucken   Auf den Merkzettel     Moderator benachrichtigen

Ganzes Thema
Betreff Erstellt von Erstellt am
* Spielereien mit dem Editfeld Josef KirschbaumAdministrator 19.01.2004 18:01

Statistiken
0 registrierte Benutzer und 0 Besucher in diesem Forum.

Moderator:  Josef Kirschbaum 



Rechte
      Sie können keine neuen Themen erstellen
      Sie können keine neuen Antworten erstellen
      HTML ist deaktiviert
      UBBCode ist aktiviert

Bewertung:
Thema gelesen: 5169

Bewerten Sie dieses Thema
Sprung zu

Kontaktformular | Datenschutzerklärung zur PowerBASIC Startseite



UBB.threads™ 6.2.1