Kurzbeschreibung TVDialogEd Version 1.00 - M„r. 1993 alle Rechte bei: Jeanette Winzenburg Arndtstr. 12, W-1000 Berlin 61 (ab 7/93: 10965 Berlin) Testen Sie das Programm nach Herzenslust, aber denken Sie daran, daá es sich um eine Shareware-Version handelt: wenn Sie es regelm„áig benutzen, sp„testens aber nach Ablauf der Testzeit von 3 Monaten, mssen Sie eine registrierte Version (zum fairen Preis von 60,00 DM bei Vorkasse; bei Nachnahme + 6,- DM) erwerben. Die Datei REGFORM.TXT enth„lt ein Registrierungsformular, bereit zum Ausdrucken und Abschicken. Eine Registrierung bringt einige Vorteile: - Sie erhalten 50% Rabatt auf das n„chste Update. - Sie erhalten den vollst„ndigen Quelltext. - Sie k”nnen in den Genuá von immer besseren Programmiertools kommen, weil Sie die weitere Programmentwicklung f”rdern. Inhalt Programmidee Optik Funktionsbersicht Die Funktionen im Einzelnen Fehlerbehandlung Grenzen - was TVDialogEd nicht kann/k”nnen will Ein Kessel Buntes - Hinweise Programmidee TVDialogEd ist eine Turbo Vision Applikation, mit der interaktiv am Bildschirm ein Dialogfenster fr Turbo Vision erstellt und/oder ver„ndert werden kann. Die Leitidee bei der Programmentwicklung war, einen Dialog m”glichst ausschlieálich nach dem optischen Eindruck aufzubauen und den/die ProgrammiererIn vollst„ndig von der l„stigen Aufgabe des Zeilen- und Spaltenz„hlens zu entlasten. Eine Folge davon ist, daá die einzufgenden Dialogelemente ihre Ausdehnung soweit wie m”glich und sinnvoll selbst festlegen, ohne die Gestaltungsm”glichkeiten der DialogentwicklerInnen zu sehr einzuschr„nken. Das Programm ist sehr robust gegen Fehlbedienungen: im Kontext unsinnige Funktionen sind in der Regel gesperrt, unerlaubte Eingaben werden ignoriert, Datenverluste sind durch Sicherheitsabfragen nahezu ausgeschlossen. Auf eine Fehlerberprfung bezogen auf die Anordnung der Elemente relativ zueinander wird allerdings verzichtet: so ist es durchaus m”glich - wenn auch v”llig unsinnig - mehrere Dialogelemente bereinanderzustapeln: Fr eine "vernnftige" Dialoggestaltung ist eben ausschlieálich der/die ProgrammiererIn verantwortlich. Optik Nach dem Start zeigt sich TVDialogEd im gewohnten TurboVision-Look mit Menzeile, Desktop und Statuszeile - das Hinweisfenster erinnert Sie daran, daá eine Registrierung durchaus Vorteile bringt... In der Statuszeile werden die wichtigsten Befehle angezeigt, zus„tzlich ist rechts unten der freie Heap eingeblendet, bei < 20k in roter Schrift. Funktionsbersicht Mit den unter Turbo Vision blichen Mitteln - Menauswahl, Hotkey, Mausclick - wird ein im folgenden Entwurfsdialog genanntes Fenster aufgespannt, vergr”áert, verkleinert oder verschoben. Es stellt einen Cursor als aktuelle Position bereit, an der die Dialogelemente TStaticText, TLabel, TInputline - wahlweise mit THistory - TButton, TCheckboxes, TRadiobutton und TListbox eingefgt werden k”nnen. Die Funktionalit„t dieser Elemente ist im Entwurfsdialog gesperrt, so kann z. B. in eine TInputline kein Text eingegeben werden. Der Cursor positioniert sich in Abh„ngigkeit von der Gr”áe des eingefgten Elements neu. Er kann auáerdem mit Maus oder Tastatur beliebig innerhalb des Fensters bewegt werden. Jedes eingefgte Element kann mit Maus/Tastatur selektiert und danach ver„ndert, gel”scht oder verschoben werden, bis das Erscheinungsbild des Dialogs den eigenen Vorstellungen entspricht. Bei Verschiebungen und/oder Gr”áenver„nderungen passen sich die Elemente an den "verfgbaren Platz" im Dialogfenster an. Dieser wird aus der Position des Elements und den Grenzen des Entwurfsdialogs berechnet, andere Elemente haben dagegen keinen Einfluá auf die Berechnung. Wird umgekehrt die Gr”áe des Fensters ver„ndert, so kann ein Dialogelement seine Position wahlweise relativ zur linken oberen oder zur rechten unteren Ecke des Fensters konstant halten. Bei Verkleinerung des Fensters wird sichergestellt, daá der Dialog keine Elemente "verlieren" kann. Der fertig bearbeitete Dialog kann als Standardobjekt TDialog in einem Datei-Stream gespeichert werden, so daá er direkt von Anwendungsprogrammen eingelesen werden kann. Umgekehrt kann jedes in einem Datei-Stream gespeicherte Standard-TDialog-Objekt direkt in TVDialogEd eingelesen und bearbeitet werden - allerdings darf er nur die Standard-TViews enthalten. Daneben besteht die M”glichkeit, einen bearbeiteten Dialog als Pascal Sourcecode (TP 6.0) zu speichern; dabei wird zus„tzlich die Typdeklaration des fr die Datenbergabe notwendige Datenrecord eingefgt. Die Funktionen im Einzelnen Als Turbo Vision Applikation h„lt sich die Programmbedienung an die von Pascal 6.0 gewohnten IDE- Konventionen, die hier nicht wiederholt werden. In der Regel sind nur die im Kontext sinnvollen Aktionen aktivierbar. Die Menzeile hat folgende Auswahlmens: Datei Dateioperationen Dialog Funktionen fr den Entwurfsdialog NeueElemente Einfgen von Dialogelementen Elemente Funktionen fr das selektierte Dialogelement Optionen Vorgabeeinstellungen Info Registrierung und Hilfe Der Menpunkt Datei Er enth„lt die Funktionen fr alle untersttzten Dateioperationen, zur Programmunterbrechung und zum Programmende. Lesen ™ffnet einen Dateidialog, mit dem eine Datei zum Lesen ausgew„hlt werden kann, die Vorgabe fr die Dateikennung ist ".STM". Enth„lt die Datei am Anfang ein Objekt vom Typ TDialog, wird daraus ein Entwurfsdialog aufgebaut und in den Desktop eingefgt, andernfalls erfolgt eine Fehlermeldung. Gibt es bereits einen Entwurfsdialog auf dem Desktop, ist dieser Befehl gesperrt. Sichern ™ffnet einen Dateidialog, mit dem eine Datei zum Speichern des Entwurfsdialogs als TDialog-Objekt ausgew„hlt werden kann, die Vorgabe fr die Dateikennung ist ".STM". Existiert die gew„hlte Datei bereits, so wird eine Backup-Datei mit der Dateikennung ".JBK" angelegt. Der Entwurfsdialog wird geordnet (s. Dialog/Ergebnis) und daraus ein Objekt TDialog erzeugt, das in der Datei gespeichert wird. Der Entwurfsdialog bleibt zur weiteren Bearbeitung auf dem Desktop. Ist kein Entwurfsdialog auf dem Desktop, so ist dieser Befehl gesperrt. Sichern als Quelltext ™ffnet einen Dateidialog, mit dem eine Datei zum Speichern des Entwurfsdialogs als TDialog-Objekt ausgew„hlt werden kann, die Vorgabe fr die Dateikennung ist ".JWD". Existiert die gew„hlte Datei bereits, so wird sie ohne Nachfrage berschrieben. Der Entwurfsdialog wird geordnet (s. Dialog/Ergebnis) und daraus Pascal 6.0 Sourcecode erzeugt, der in der Datei als Text gespeichert wird. Dabei wird zuerst der Sourcecode fr den erforderlichen Datenrecord geschrieben. Jedes Element erzeugt die von ihm geforderte Typbezeichnung, als Variablennamen werden die ersten 10 Buchstaben des zugeh”rigen Labels benutzt. Anschlieáend wird Code fr eine "Procedure DialogInit(var D: PDialog)" geschrieben, die bei Ausfhrung in D einen Zeiger auf einen initialisierten TDialog bergibt. Der Entwurfsdialog bleibt zur weiteren Bearbeitung auf dem Desktop. Ist kein Entwurfsdialog auf dem Desktop, so ist dieser Befehl gesperrt. Verzeichnis wechseln ”ffnet einen ChangeDirDialog. DOS-Shell wechselt zur DOS-Ebene, wenn der Arbeitsspeicher ausreicht; Rckkehr wie blich mit "Exit". Exit Programmende; ist ein Entwurfsdialog auf dem Desktop, wird eine Datenspeicherung vorgeschlagen. Der Menpunkt Dialog Er enth„lt die Funktionen, die den Entwurfsdialog betreffen. Es kann jeweils nur ein Dialog bearbeitet werden. Neu Ein leerer Entwurfsdialog wird erzeugt und in den Desktop eingefgt. Ein Cursor markiert die aktuelle Einfgeposition fr die Dialogelemente. Er kann mit den Richtungstasten bewegt oder durch Druck auf die rechte Maustaste an die Mausposition versetzt werden. Gibt es bereits einen Entwurfsdialog auf dem Desktop, ist dieser Befehl gesperrt. L”schen Der Entwurfsdialog wird vom Desktop entfernt, vorher wird eine Datenspeicherung vorgeschlagen. Diese Aktion wird auch bei Anklicken des Schlieáfeldes ausgefhrt. Titel Es wird ein Dialogfenster ge”ffnet, mit dem der Titel des Anwendungsdialogs ge„ndert werden kann. Die Vorgabe fr den Titel ist ''; er wird nur im Ergebnis (s. Dialog/Ergebnis), nicht aber im Entwurfsdialog angezeigt. Verschieben/Resize Der Entwurfsdialog wird im TV-blichen Verschiebemodus verschoben, vergr”áert oder verkleinert. Eine Verkleinerung geht nur soweit, daá jedes eingefgte Elememt noch mit seiner minimal notwendigen Gr”áe enthalten ist. Zoom Die Gr”áe des Entwurfsdialogs wird zwischen Zoomrect/voller Bildschirm umgeschaltet. Ergebnis Der Entwurfsdialog wird so angezeigt, wie er in der Anwendung erscheint. Dazu wird zuerst die Z- Ordnung der Dialogelemente entsprechend ihrer Position eingestellt (s. Optionen/ Ordnungsrichtung). Elemente vom Typ TCluster werden dabei eventuell verschoben: sie werden linksbndig unter dem Leitfeld (s. NeueElemente/Checkboxes) angeordnet, wobei jedes Auswahlfeld eine neue Zeile belegt. Die Anzeige wird mit Esc oder Bet„tigen eines Aktionsschalters beendet. Der Menpunkt NeueElemente Er enth„lt alle Funktionen zum Einfgen eines neuen Dialogelements. TLabel k”nnen nur in Verbindung mit anderen Elementen eingefgt werden. Bei Anwahl eines Unterpunktes wird ein Dialog erzeugt, mit dem man alle wichtigen Parameter des neu einzufgenden Elements festlegen kann. Ist der verfgbare Platz an der Einfgeposition nicht ausreichend, wird ein Fehler erzeugt. Bei Fehlern oder Abbruch des Dialogs wird kein Element eingefgt. Diese Funktionen sind gesperrt, wenn kein Entwurfsdialog auf dem Desktop ist. Eingabezeile Ein neues Element vom Typ TInputline wird eingefgt. Abgefragt werden Labelname und L„nge des Eingabetextes (TInputline.maxlen). Als Option kann festgelegt werden, ob die L„nge von der globalen maximalen Zeilenl„nge begrenzt werden soll. Dies ist nur sinnvoll, wenn man rechts neben langen Eingabezeilen noch andere Dialogelemente einfgen m”chte. Zus„tzlich kann als Option eine Historyliste eingefgt werden. Text Ein neues Element vom Typ TStatictext wird eingefgt. Abgefragt wird der Text. Ist der bergebene Text leer, so wird ein Platzhaltertext eingefgt. Aktionsschalter Ein neues Element vom Typ TButton wird eingefgt. Abgefragt werden Schalterbeschriftung, Name des verbundenen Kommandos, Zahlenwert des Kommandos und der Zustand von TButton.flags. Der Zahlenwert des Kommandos wird bei Sicherung im Stream verwendet, der Name bei Sicherung als Sourcecode. Es liegt in der Verantwortung der ProgrammierInnen, dafr zu sorgen, daá beides zusammenpaát. Ist kein Kommandoname vorhanden, so wird auch im Sourcecode die Zahl verwendet. OkButton, EscButton, YesButton, NoButton Es wird jeweils ohne Abfrage ein entsprechender Button eingefgt, die Turbo Vision Standardkommandos werden benutzt. OkButton erh„lt den Status bfDefault. Checkboxes, Radiobuttons Ein neues Element vom Typ TCheckboxes bzw. TRadiobuttons wird eingefgt. Abgefragt werden Labelname und Name des Auswahlfeldes. Dieses Auswahlfeld ist das Leitfeld des gesamten Clusters; es wird hervorgehoben dargestellt. Es gilt als Link fr den Label. Wird es gel”scht, so l”scht man den gesamten Cluster. Neue Auswahlfelder zu dem Cluster werden mit der Funktion Elemente/Erweitern erzeugt. Listbox Ein neues Element vom Typ TListbox wird eingefgt. Abgefragt werden Labelname, Breite, H”he und Anzahl der Spalten. Als Option kann ein Rollbalken, entweder vertikal oder horizontal, eingefgt werden. Der Menpunkt Elemente Er enth„lt alle Funktionen, die das im Entwurfsdialog selektierte Element betreffen. Mit den blichen Tasten Tab und Shift-Tab wird das selektierte Element gewechselt. Diese Funktionen sind gesperrt, wenn kein Entwurfsdialog auf dem Desktop ist. Editieren Das selektierte Dialogelement ”ffnet einen Dialog, mit dem alle Parameter ge„ndert werden k”nnen. Cluster erweitern Ist das selektierte Element vom Typ TCluster, wird hiermit ein weiteres Auswahlfeld angelegt. Der Label des Clusters wird angezeigt, kann aber nicht ver„ndert werden. L”schen Das selektierte Dialogelement wird aus dem Entwurfsdialog entfernt. Ein zugeh”riger Label wird ebenfalls entfernt. Ist ein Label selektiert, so wird der Link auch gel”scht. Ein Element vom Typ TCluster wird mit allen Auswahlfeldern gel”scht, wenn das hervorgehobene Leitelement selektiert ist. Verschieben Der TV-bliche Verschiebemodus wird fr das selektierte Element eingestellt; jedes Element kann auch durch Ziehen mit der Maus verschoben werden. Befestigen/L”sen Der "Befestigungsbezug" des selektierten Elements wird umgeschaltet, er ist entscheidend fr die Position des Elements bei Gr”áen„nderungen des Entwurfsdialogs: im befestigen Zustand bleibt sie relativ zur rechten unteren, um gel”sten relativ zur linken oberen Ecke konstant. Der befestigte Zustand wird optisch durch ein Sternchen links oben im Element gekennzeichnet. Die Umschaltung kann auch durch Doppelclick auf die linke Maustaste erfolgen. Alle Befestigen Alle L”sen Der Befestigungszustand wird fr alle eingefgten Elemente entsprechend gesetzt. Menpunkt Optionen Er enth„lt Funktionen, mit denen verschiedene Vorgaben eingestellt werden k”nnen. Ordnungsrichtung legt die Vorzugsrichtung bei der Einstellung der Z-Ordnung im Anwendungsdialog fest. Dabei bedeutet der Zustand "Zeilen" eine Einfgung von links nach rechts, der Zustand "Spalten" eine Einfgung von oben nach unten. Diese Funktion ist gesperrt, wenn kein Entwurfsdialog auf dem Desktop ist. Begrenzungen ”ffnet ein Dialogfenster, mit dem die programglobalen Begrenzungen eingestellt werden k”nnen. Zeilenl„nge: Die maximale Zeilenl„nge fr Eingabezeilen wird festgelegt. Sie ist nur in den Eingabezeilen wirksam, deren Option "Grenze beachten" gesetzt ist. Die Vorgabe ist 20; beim Einlesen eines Dialogs vom Stream wird sie auf die L„nge der l„ngsten gefundenen Eingabezeile gesetzt. Schalterbreite: Die Breite der Aktionsschalter wird ge„ndert. Die Vorgabe ist 12. Beim Einlesen eines Dialogs vom Stream wird sie auf die Breite des ersten gefundenen TButtons gesetzt. Fehlerbehandlung Tritt bei der Ausfhrung einer Funktion ein Fehler auf, stellt TVDialogEd so weit wie m”glich den Zustand vor dem Aufruf der Funktion wieder her und zeigt eine Fehlermeldung. Eine Ausnahme bilden die Funktionen zum Einfgen/Žndern der Dialogelemente: unsinnige Eingaben werden ignoriert. Dies ist m”glich, weil alle Žnderungen in der Regel sofort auf dem Bildschirm sichtbar werden. Die Fehlermeldung erkl„rt das Problem meist ausreichend, auáer vielleicht bei den Folgenden: - Nicht gengend Platz im Dialog der Cursor im Entwurfsdialog steht so, daá das einzufgende Element nach rechts und/oder nach unten nicht mehr gengend Platz hat; Cursor versetzen und/oder Dialog vergr”áern und nochmal probieren. - Fehler bei Anordnung Bei Einstellung der Z-Ordnung vor einer Speicherung oder der Funktion Dialog/Ergebnis ben”tigt ein Element mehr Platz als vorhanden ist. Zur Zeit kann das nur ein TCluster sein: Entweder den Dialog vergr”áern oder das Leitfeld des Verursachers verschieben. Die n„chsten beiden Meldungen sollten wirklich n i e auftreten! Wenn doch, bitte Umst„nde merken und mir mitteilen. - Stream-Fehler (stPutError): Contact Operator. - Nicht identifizierter Fehler Grenzen - was TVDialogEd nicht kann/k”nnen will - Die Ordnung der Elemente erfolgt entweder von links nach rechts oder von oben nach unten. Eine gemischte Festlegung durch Einzelvorgaben ist nicht m”glich. - Die Dialogelemente nehmen sich gegenseitig nicht als Hindernisse wahr. Es liegt in der Verantwortung der ProgrammiererIn, sie nicht bereinanderzustapeln. - Der Cursor wird nach dem Einfgen automatisch nur in Y-Richtung verschoben. - Innerhalb eines Dialogs haben alle Aktionsschalter gleiche Breite. - Der Druckzustand eines TClusters kann nicht eingestellt werden; es ist immer value = 0 im Ergebnis. Ein Kessel Buntes - Hinweise - Fr die Sch”nheit h„lt TVDialogEd am linken und rechten Rand jeweils eine Spalte frei, in die kein Element geschoben/eingefgt werden darf. - TLabel und TButton haben am linken Rand immer ein Blank - das ist aber nicht meine Idee, Turbo Vision war's: bei Monochrom-Bildschirmen benutzt es dieses Position zur Hervorhebung. Aus Kompatibilit„tsgrnden habe ich die Blanks beibehalten. - Bei der Anzeige eines Ergebnisdialogs, der ein TCluster enth„lt, kommt der Hilfekontext durcheinander, wenn h”here Schaltfelder selektiert sind (sel > 0): TV findet dann helpctx = sel statt helpctx = owner^.helpctx + sel. Unsch”n aber harmlos. - TVDialogEd ist exzessiv dynamisch programmiert. Heapoverflows sind trotzdem nahezu ausgeschlossen, weil konsequent die Sicherheitszone (s. TV Handbuch) beachtet wird. Es gibt allerdings eine Situation, in der diese Maánahme wirkungslos ist: wenn ein Dialog vom Stream gelesen wird, berprft der Load- Konstruktor zwischendrin den Speicher nicht. Das macht meistens keine Probleme, weil gengend Speicher vorhanden ist und ein "normaler" Dialog nicht mehr als 5 - 10k verbraucht. Zur Sicherheit fragt TVDialogEd vor dem Einlesen aber noch mal nach, wenn zu diesem Zeitpunkt der Heap < 20k ist (daher die rote Anzeige!). - Zur Speicherung als Quellcode muá etwa 15k Heap frei sein, im Stream braucht man weniger. - In der - auch in TVDialogEd eingesetzten - TV Unit Stddlg ist im TFiledialog ein Bug, der das Programm sang- und klanglos abstrzen l„át, wenn auf einem Diskettenlaufwerk beim ™ffnen des Filedialogs keine Datei mit dem bergebenen Dateinamen zu finden ist. Als "quick and dirty"- L”sung legt TVDialogEd deshalb eine Datei "DUMMY.STM" bzw. "DUMMY.JWD" an, wenn er im aktuellen Verzeichnis keine STM- bzw. JWD-Datei findet. Sorry! - TV bernimmt die Fehlerbehandlung bei Disk-Errors: in der Statuszeile erscheint dann eine - englische - Fehlermeldung. Wie schon in der TV-Dokumentation erw„hnt, muá man dann in der Regel mehrfach Esc bzw Enter drcken. Eventuell ist auch die dann folgende Messagebox unpassend. Nun aber nicht die Nerven verlieren, sondern Fehler beheben und nochmal probieren!