Grundsätzlich existieren im StarBasic des SO4 nur SO-weit modale Dialoge: modal heisst hier, dass das Fenster so lange im Vordergrund bleibt, bis es geschlossen wird. Es ist während dieser Zeit nicht möglich, in ein anderes Fenster innerhalb des SOs zu wechseln. Dennoch wäre es manchmal wünschenswert, während der Programmausführung im SO4 anderweitig weiter arbeiten zu können, ohne aber auf eine Bildschirmausgabe (z.B. Fortschrittsanzeige, mehr dazu im nächsten Abschnitt) des laufenden Makros verzichten zu müssen. Dies ist durchaus auch möglich: durch Einbetten von Kontrollfeldern in ein SO (meist wohl SW)-Dokument.
Die modalen Dialoge sind die ganz normalen Dialoge, die man in der
StarBasic-Entwicklungsumgebung entwerfen kann. Um einen solchen
Dialog zum Projekt hinzuzufügen, reicht ein rechter Mausklick in
die Region am unteren Bildschirmrand, die die Laschen für
allenfalls schon bestehende Module enthält. Aus dem darauf
erscheinenden Menü kann man dann einen Dialog einfügen.
Danach steht die ganze Palette von Werkzeugen für die Gestaltung
von Dialogen und deren Kontrollfeldern bereit.

Wird ein solcher Dialog angezeigt, so bezieht das SO einen erstaunlichen Anteil Rechenpower für sich... Ob dies nötig ist oder nicht, sei andernorts diskutiert. Auf alle Fälle resultiert daraus eine höhere Geschwindigkeit für die im Hintergrund laufenden Makros, als wenn die folgende, nicht modale Variante verwendet wird. Ausserdem kann der Anwender nicht auf das übrige SO zugreifen, so lange dieser Dialog auf dem Bildschirm steht. Dies kann u.U. aber durchaus sinnvoll und gewollt sein, wenn z.B. ein Makro zahlreiche Dokumente öffnet, darin arbeitet, schliesst etc. In einem solchen Fall könnte ein Benutzereingriff nicht vorhersehbare Resultate zur Folge haben.
Soll auf ein Kontrollfeld eines Dialoges zugegriffen werden, so muss der Dialog selber in der Anweisung mit angegeben werden. Im oben dargestellten Beispiel-Dialog «ExtendDlg» können wir mit folgender Anweisung auf den Abbrechen-Knopf zugreifen:
ExtendDlg.CancelButton.Caption = "&Abbrechen"
Nicht modale Dialoge sind derzeit mit StarBasic nicht möglich.
Es ist jedoch möglich, einen solchen in Form von in ein Dokument
eingebetteten Kontrollfeldern nachzuahmen. Da ein im Hintergrund
ablaufendes Makro seine Anzeige in diesem Dokument vornimmt, ist es
möglich, zur gleichen Zeit in einem anderen Dokument weiter zu
arbeiten.
Im Vergleich zu den Dialogen verbraucht diese Methode viel weniger Rechenpower, ist aber auch deutlich langsamer. Im abgebildeten Beispiel (aus dem Abschnitt über die Fortschrittsanzeige), das keine Datei-Manipulationen vornimmt, sondern lediglich ein paar Zahlen berechnet, differieren die Laufzeiten um einen Faktor 2-3! Für Abläufe, die sowieso lange dauern, kann es aber dennoch angenehmer sein, wenn zwar länger gewartet werden muss, während dieser Zeit das System für weitere Aufgaben aber zur Verfügung steht.
Im Gegensatz zu den Dialogen ist bei dieser Methode das Ansprechen einzelner Kontrollfelder noch etwas einfacher: die Benennung des Dialoges entfällt. Es reicht folgende Anweisung:
CancelButton.Caption = "&Abbrechen"
Documents.Open(myFile,, "R",)) sollte dies
entschärfen.Um in einem Dokument einen Dialog einigermassen ansprechend zu gestalten, ist oftmals etwas mehr Aufwand notwendig. Meist muss mit Hilfe von Tabellen und/oder Textrahmen für eine ansprechende Gestaltung gesorgt werden. Dafür ist es ein vielfaches einfacher, etwa Abbildungen oder andere graphische Elemente mit einzubeziehen.
|
|
Modaler Dialog |
Nicht modaler Dialog |
|---|---|---|
|
Zugriff auf SO während Makro-Ausführung |
- |
+ |
|
«Schutz» vor Benutzereingriffen während Makro-Ausführung |
+ |
- |
|
Ausführungs-Geschwindigkeit des Makros |
+ |
- |
|
Gestaltungsmöglichkeiten |
- |
+ |
|
Gestaltungsaufwand |
+ |
- |