Kurzbeschreibung TVDialogEd Version 1.00 - M r. 1993 alle Rechte bei: Jeanette Winzenburg, Arndtstr. 12, 1000 Berlin 61 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, m ssen 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 Progammiertools kommen, weil Sie die weitere Programmentwicklung f rdern. , Inhalt Programmidee Optik Funktions bersicht Funktionen Einzelnen Fehlerbehandlung Grenzen - was TVDialogEd nicht kann/k nnen will Kessel Buntes Hinweise weiter Programmidee TVDialogEd ist eine Turbo Vision Applikation, mit der interaktiv am Bildschirm ein Dialogfenster f r 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 einzuf genden 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. A Auf eine Fehler berpr fung 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: F r eine "vern nftige" Dialoggestaltung ist eben ausschlie lich der/die ProgrammiererIn verantwortlich. weiter zur Optik Nach dem Start zeigt sich TVDialogEd im gewohnten TurboVision-Look mit Men zeile, 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. weiter zur Funktions bersicht Mit den unter Turbo Vision blichen Mitteln - Men auswahl, 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 eingef gt 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 eingef gten Elements neu. Er kann au erdem mit Maus oder Tastatur beliebig innerhalb des Fensters bewegt werden. Jedes eingef gte 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 "verf gbaren 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 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. j 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 es 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 f r die Daten bergabe notwendige Datenrecord eingef weiter zur 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 Men zeile hat folgende Auswahlmen Datei Dateioperationen Dialog Funktionen f r den Entwurfsdialog NeueElementeEinf gen von Dialogelementen Elemente Funktionen f r das selektierte Dialogelement Optionen Vorgabeeinstellungen weiter zur Der Men punkt Datei Er enth lt die Funktionen f r alle unterst tzten Dateioperationen, zur Programmunterbrechung und zum Programmende. O Lesen Sichern Sichern Quelltext Verzeichnis wechseln DOS-Shell Exit weiter zur Lesen ffnet einen Dateidialog, mit dem eine Datei zum Lesen ausgew hlt werden kann, die Vorgabe f r die Dateikennung ist ".STM". Enth lt die Datei am Anfang ein Objekt vom Typ TDialog, wird daraus ein Entwurfsdialog aufgebaut und in den Desktop eingef gt, andernfalls erfolgt eine Fehlermeldung. Gibt es bereits einen Entwurfsdialog auf dem Desktop, ist dieser Befehl gesperrt. weiter zur Sichern ffnet einen Dateidialog, mit dem eine Datei zum Speichern des Entwurfsdialogs als TDialog-Objekt ausgew hlt werden kann, die Vorgabe f r 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. weiter zur Sichern als Quelltext ffnet einen Dateidialog, mit dem eine Datei zum Speichern des Entwurfsdialogs als TDialog-Objekt ausgew hlt werden kann, die Vorgabe f r 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 f r 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 f r eine "Procedure DialogInit(var D: PDialog)" geschrieben, die bei Ausf hrung 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. weiter zur Verzeichnis wechseln ffnet einen ChangeDirDialog. DOS-Shell wechselt zur DOS-Ebene, wenn der Arbeitsspeicher ausreicht; R ckkehr wie blich mit "Exit". Exit Programmende; ist ein Entwurfsdialog auf dem Desktop, wird eine Datenspeicherung vorgeschlagen. weiter zur Der Men punkt Dialog Er enth lt die Funktionen, die den Entwurfsdialog betreffen. Es kann jeweils nur ein Dialog bearbeitet werden. : schen Titel Verschieben/Resize Zoom Ergebnis weiter zur Ein leerer Entwurfsdialog wird erzeugt und in den Desktop eingef gt. Ein Cursor markiert die aktuelle Einf geposition f r 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. schen Der Entwurfsdialog wird vom Desktop entfernt, vorher wird eine Datenspeicherung vorgeschlagen. Diese Aktion wird auch bei Anklicken des Schlie feldes ausgef hrt. weiter zur Titel Es wird ein Dialogfenster ge ffnet, mit dem der Titel des Anwendungsdialogs ge ndert werden kann. Die Vorgabe f r den Titel ist ''; er wird nur im Ergebnis (s. Dialog/Ergebnis), nicht aber im Entwurfsdialog angezeigt. weiter zur Verschieben/Resize Der Entwurfsdialog wird im TV- blichen Verschiebemodus verschoben, vergr ert oder verkleinert. Eine Verkleinerung geht nur soweit, da jedes eingef gte Elememt noch mit seiner minimal notwendigen Gr e enthalten ist. Zoom Die Gr e des Entwurfsdialogs wird zwischen Zoomrect/voller Bildschirm umgeschaltet. weiter zur 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 linksb ndig 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. weiter zur Der Men punkt NeueElemente Er enth lt alle Funktionen zum Einf gen eines neuen Dialogelements. TLabel k nnen nur in Verbindung mit anderen Elementen eingef gt werden. Bei Anwahl eines Unterpunktes wird ein Dialog erzeugt, mit dem man alle wichtigen Parameter des neu einzuf genden Elements festlegen kann. Ist der verf gbare Platz an der Einf geposition nicht ausreichend, wird ein Fehler erzeugt. Bei Fehlern oder Abbruch des Dialogs wird kein Element eingef gt. Diese Funktionen sind gesperrt, wenn kein Entwurfsdialog auf dem Desktop ist. Y Eingabezeile Text Aktionsschalter Okbutton, EscButton, YesButton, NoButton Listbox weiter zur Eingabezeile Ein neues Element vom Typ TInputline wird eingef gt. 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 einf gen m chte. Zus tzlich kann als Option eine Historyliste eingef gt werden. weiter zur Text Ein neues Element vom Typ TStatictext wird eingef gt. Abgefragt wird der Text. Ist der bergebene Text leer, so wird ein Platzhaltertext eingef weiter zur Aktionsschalter Ein neues Element vom Typ TButton wird eingef gt. 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, daf r 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 eingef gt, die Turbo Vision Standardkommandos werden benutzt. OkButton erh lt den Status bfDefault. weiter zur Checkboxes, Radiobuttons Ein neues Element vom Typ TCheckboxes bzw. TRadiobuttons wird eingef gt. Abgefragt werden Labelname und Name des Auswahlfeldes. Dieses Auswahlfeld ist das Leitfeld des gesamten Clusters; es wird hervorgehoben dargestellt. Es gilt als Link f r 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. weiter zur Listbox Ein neues Element vom Typ TListbox wird eingef gt. Abgefragt werden Labelname, Breite, H he und Anzahl der Spalten. Als Option kann ein Rollbalken, entweder vertikal oder horizontal, eingef gt werden. weiter zur Der Men punkt 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. Y Edit Cluster erweitern schen Verschieben Befestigen/l Alle befestigen/l weiter zur 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. weiter zur 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. weiter zur Verschieben Der TV- bliche Verschiebemodus wird f r das selektierte Element eingestellt; jedes Element kann auch durch Ziehen mit der Maus verschoben werden. Befestigen/L Der "Befestigungsbezug" des selektierten Elements wird umgeschaltet, er ist entscheidend f r die Position des Elements bei Gr 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 Der Befestigungszustand wird f r alle eingef gten Elemente entsprechend gesetzt. weiter zur punkt Optionen Er enth lt Funktionen, mit denen verschiedene Vorgaben eingestellt werden k nnen. ! Ordnungsrichtung Begrenzungen weiter zur Ordnungsrichtung legt die Vorzugsrichtung bei der Einstellung der Z-Ordnung im Anwendungsdialog fest. Dabei bedeutet der Zustand "Zeilen" eine Einf gung von links nach rechts, der Zustand "Spalten" eine Einf gung von oben nach unten. Diese Funktion ist gesperrt, wenn kein Entwurfsdialog auf dem Desktop ist. weiter zur Begrenzungen ffnet ein Dialogfenster, mit dem die programmglobalen Begrenzungen eingestellt werden k nnen. Zeilenl Die maximale Zeilenl nge f r 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. weiter zur Fehlerbehandlung Tritt bei der Ausf hrung 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 Einf 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 gen gend Platz im Dialog der Cursor im Entwurfsdialog steht so, da das einzuf gende Element nach rechts und/oder nach unten nicht mehr gen gend 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. u Die n chsten beiden Meldungen sollten wirklich n i e auftreten! Wenn doch, bitte Umst nde merken und mir mitteilen. 2 - Stream-Fehler (stPutError): Contact Operator. - Nicht identifizierter Fehler weiter zur 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. R - Der Cursor wird nach dem Einf gen automatisch nur in Y-Richtung verschoben. I - Innerhalb eines Dialogs haben alle Aktionsschalter gleiche Breite. j - Der Druckzustand eines TClusters kann nicht eingestellt werden; es ist immer value = 0 im Ergebnis. weiter zur Ein Kessel Buntes - Hinweise - F r die Sch nheit h lt TVDialogEd am linken und rechten Rand jeweils eine Spalte frei, in die kein Element geschoben/eingef gt 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 diese Position zur Hervorhebeung. Aus Kompatibilit nden 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. q - 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 Stream gelesen wird, berpr ft der Load-Konstruktor zwischendrin den Speicher nicht. Das macht meistens keine Probleme, weil gen gend 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 abst rzen 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! o - 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 dr cken. Eventuell ist auch die dann folgende Messagebox unpassend. Nun aber nicht die Nerven verlieren, sondern Fehler beheben und nochmal probieren!