Formulareingabe mit Turbo Pascal

Software-Entwicklung, Compiler, Interpreter, ...
Antworten
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Formulareingabe mit Turbo Pascal

Beitrag von bbock »

Für eine komfortable Eingabe sind die Standardprozeduren von Turbo Pascal zu rudimentär. Ich habe mir die Mühe gemacht, eine Formular-Erweiterung zu schreiben, die ohne viel Aufwand per Include-Dateien in eigene Programme eingebunden werden kann. Eine Herausforderung war dabei, das Ganze möglichst als "black box" zu realisieren, obwohl Pascal keine gute Unterstützung für Modularisierung bietet.

Um Formulare zu verwenden, muss man nur
  1. die Include-Dateien einbinden
  2. das Formular per InitFormElements-Prozedur definieren
  3. InitForm und ProcessForm aufrufen
  4. die Benutzereingaben auslesen und ggf. konvertieren
Näheres - u.a. ein Beispielprogramm - ist der Dokumentation zu entnehmen.

FORM21.zip
Die Include-Dateien
(5.94 KiB) 506-mal heruntergeladen
FORMS2_Doku.zip
Dokumentation als PDF-Datei
(106.07 KiB) 451-mal heruntergeladen

Es stehen bereits weitere Ergänzungen auf der TODO-Liste:
  • Dateinameneingabe mit Laufwerksbuchstaben (bisher geht z.B. nur HELLO.TXT, aber nicht B:HELLO.TXT)
  • Unterstützung der ESC-Taste um Änderungen in einem Feld zu verwerfen
  • Pflichtfelder
Paul
Beiträge: 137
Registriert: 17.09.2017, 22:27
Wohnort: Germanys west end

Re: Formulareingabe mit Turbo Pascal

Beitrag von Paul »

Sehr gut. Das muss ich unbedingt ausprobieren.
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: Formulareingabe mit Turbo Pascal

Beitrag von bbock »

Version 2.2 unterstützt auch Laufwerksangaben im Dateinamen (Feldtyp FTFileName); die Datumseingabe wurde ebenfalls etwas verbessert: man kann jetzt nicht mehr den 43.12.2021 eingeben. ;)
Die wichtigste Neuerung ist aber die Änderung im Aufruf von InitFormElements und InitForm: die beiden Prozeduren haben jetzt einen Formulaindex-Parameter, wodurch in einem Programm mehrere Formulare verwendet werden können. Das Beispielprogramm test3 in der Dokumentation wurde entsprechend erweitert, um die neue Funktion zu demonstrieren.

FORMS22.zip
Die Includedateien von FORMS v2.2
(6.01 KiB) 444-mal heruntergeladen
FORMS22_Doku.zip
Dokumentation zu FORMS v2.2
(108.22 KiB) 421-mal heruntergeladen
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: Formulareingabe mit Turbo Pascal

Beitrag von bbock »

Version 2.3 unterstützt Pflichtfelder, Buttons werden nach Funktion unterschieden (Ok, Cancel, Other), es gibt weitere Hilfsfunktionen, darunter eine Funktion zur Prüfung, ob das Formular mit einem Cancel Button abgebrochen wurde.
Die Bedienung der Eingabefelder wurde um eine Taste erweitert: ein Druck auf CAN (bzw. Bild^ im Emulator CP/M Box) leert das aktuelle Feld komplett.

Der Funktionsumfang ist für meine Wünsche nun komplett. Nützliche Ergänzungen wären vielleicht noch Auswahl- und Optionsfelder - mal sehen, wann ich Zeit dafür habe. :)

FORMS23.zip
Die Include-Dateien von FORMS v2.3
(6.73 KiB) 495-mal heruntergeladen
FORMS23_Doku.zip
Dokumentation zu FORMS v2.3
(116.14 KiB) 488-mal heruntergeladen
Paul
Beiträge: 137
Registriert: 17.09.2017, 22:27
Wohnort: Germanys west end

Re: Formulareingabe mit Turbo Pascal

Beitrag von Paul »

Hallo Bernd, wie versprochen habe ich es mir angeschaut und ich muss sagen:
Sehr schön gemacht.
Ich hätte das TEST3.PAS auch noch dazu gegeben. ;)
Ich habe es nur auf der CPMBOX ausprobiert wo es sehr gut funktioniert.
Allerdings hätte ich erwartet das "vorbelegte" Daten erhalten bleiben,
also wenn man Processform ein zweites mal aufruft eine ausgefüllte Maske vorfindet und "nur" die Buttons initialisiert werden.
Dazu habe ich in Form2.inc DisplayForm modifiziert:

WriteCharPtrString(txt);
for j := ord(txt^) to fieldLength do Write('_');
statt
for j := 1 to fieldLength do Write('_');
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: Formulareingabe mit Turbo Pascal

Beitrag von bbock »

Hallo Paul,

danke für den Hinweis bzgl. der vorbelegten Daten; das sehe ich mir mal in Ruhe an. Was mir direkt aufgefallen ist:
Bei for j := ord(txt^) to fieldLength do Write('_'); kann ord(txt^) auch 0 sein (das ist es standardmäßig auch zu Beginn bei leeren Feldern). Fehlt da evtl. ein "+ 1" ?
Paul
Beiträge: 137
Registriert: 17.09.2017, 22:27
Wohnort: Germanys west end

Re: Formulareingabe mit Turbo Pascal

Beitrag von Paul »

ich habe es ausprobiert.
Mit +1 wird die richtige Anzahl "_" angedruckt.
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: Formulareingabe mit Turbo Pascal

Beitrag von bbock »

Danke für die Unterstützung, Paul. Ich habe daraufhin den Code noch etwas erweitert:
  • Wenn Felder bereits einen Text enthalten, d.h. wenn sie vorbelegt sind, dann wird der Text beim Aufruf von ProcessForm auch angezeigt.
  • Der Cursor steht jetzt bei Feldern, die bereits Text enthalten, hinter dem Text. Das fand ich so natürlicher.
  • Für die einfache Vorbelegung von Feldern gibt es jetzt eine Prozedur: SetFieldText
FORMS24.zip
Die Include-Dateien von FORMS v2.4 und das Testprogramm test3
(7.83 KiB) 505-mal heruntergeladen
FORMS24_Doku.zip
Dokumentation zu FORMS v2.4
(118.17 KiB) 445-mal heruntergeladen
Antworten