Mit der Eigenschaft "Seite" beim Dialog und den Kontrollfeldern. Mit dieser
kann man die
einzelnen Objekte Seiten zu ordnen, wenn man dann die Seite des Dialoges aktiviert,
erscheinen nur die Objekte mit der gleichen Seitennummer.
Wir erstellen jetzt einen zweiseitigen Dialog, bei dem zwischen den Seiten gewechselt
werden
kann. Welche Elemente braucht solch ein Dialog. Erstmal braucht er auf jeden Fall
Schaltflächen die immer zu sehen sind und mit denen der Dialog gesteuert werden kann. Also
legen wir vier Schaltflächen an: Abbrechen, OK, Vorwärts und Zurück. Diese können wir noch
optisch mit einem Rahmen trennen. Damit der Rahmen keinen Text enthält bleibt die
Eigenschaft Titel leer.
Das sollte dann in etwa so aussehen:
Die Schaltflächen und der Rahmen haben in der Eigenschaft "Seite" die 0
eingetragen. Sie
sollen auf allen Dialog-Seiten sichtbar sein. Jetzt legen wir eine zweite Seiten mit einigen
Checkboxen an. Dazu wechseln wir in der Eigenschaft "Seite" auf die 1. Wir sehen jetzt
natürlich keinen Unterschied, weil ja alle Elemente zu sehen sind. Um jetzt auch dem
Anwender die Trennung der Seiten leichter zu machen legen wir um die Checkboxen einen
Rahmen mit einem Titel. In unserem Beispiel "Optionen Seite 1".
Jetzt brauchen wir noch die zweite Seite. Dazu markieren wir den Dialog und stellen
die
Eigenschaft Seite auf 2. Sofort verschwinden Rahmen, Checkboxen und die Optionsbutton.
Wenn das nicht passiert, sind sie noch der falschen Seite, 0, zugeordnet.
Auf dieser neuen Seite können wir jetzt den nächsten Rahmen und weitere Checkboxen
und
Eingabefelder anlegen.
So jetzt haben wir das Grundgerüst unseres Dialoges. Jetzt müssen wir diesen noch
mit Leben
erfüllen. Die zwei einfachen Teile davon sind hinter der Abbrechen und der OK Schaltfläche
verbunden. In beiden Fällen muß sich unser Dialog schließen. Einmal mit der Rückmeldung
"Abbruch" und einmal mit der Rückmeldung "OK". Wir erinnern uns, dazu stellen wie
die "Art
der Schaltfläche" auf Abbrechen bzw. OK.
Das war der einfache Teil. Jetzt wollen wir die Reaktion auf das Drücken der anderen
beiden
Schaltflächen festlegen. Wenn die Schaltfläche "Zurück" gedrückt wird soll der Dialog eine
Seite zurück blättern. Moment mal? Wenn man auf der ersten Seite ist, kann man nicht weiter
zurück. Also müssen wir später noch dafür sorgen das die Schaltfläche nur aktiv ist wenn es
Sinn macht. Das gilt nachher auch für die andere Schaltfläche "Vorwärts". Kümmern wir uns
erstmal um das wechseln der Seiten.
Das erste Wichtige ist, dass das Dialogobjekt öffentlich existiert. Also erstmal eine
Routine
zum Öffnen des Dialoges:
Public MyDlg as object
Sub CallDialog
DialogLibraries.LoadLibrary( "Standard"
)
MyDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog2
)
MyDlg.Model.Step=1
MyDlg.Execute()
MyDlg.Dispose()
end Sub
Man sollte immer die gewünschte Seite beim Aufruf einstellen. Die IDE sorgt dafür,
dass immer
die letzte in der IDE aktive Seite aufgerufen wird. Man verhindert also mit dem Einstellen vor
dem Aufruf Fehler.
Jetzt kommt die Routine die mit der Vorwärts-Schaltfläche verknüpft werden muß. In
dieser
müssen wir nur die Seite des Dialoges ändern. Um es universal zu verwenden, erhöhen wir die
aktuelle Seitenzahl um eins.
Sub schflaeche_cbFore
MyDlg.Model.Step= MyDlg.Model.Step+1
End Sub
Das war es schon. Jetzt verknüpfen wir diese Routine mit der Schaltfläche und schon
können
wir den ersten Test durchführen. Das sieht ja nicht schlecht aus aber jetzt sehen wir schon das
oben erwähnte Problem. Wenn man nach unseren zweiten Seite nochmal Vorwärts anklickt
scheint nichts zu passieren. In Wirklichkeit wird aber die Dialogseite weiter hochgesetzt. Am
Besten fügen wir den Befehl für Zurück ein, dann können wir schauen was da passiert.
Für die Schaltfläche "Zurück" können wir fast den Code von "Vorwärts"
nehmen. Wir müssen
nur den Seitenwert um eins runtersetzen statt rauf.
Sub schflaeche_cbBack
MyDlg.Model.Step= MyDlg.Model.Step-1
End Sub
Wenn wir nun den Dialog starten können wir beliebig oft zurück und vorwärts blättern.
Das liegt
daran, dass wir dem Dialog keine Einschränkung bezüglich der Seitenanzahl zuordnen können.
Also wird der Wert immer weiter rauf oder runter gesetzt. Um dies zu verhindern prüfen wir die
Position der Seite und handeln entsprechend nach dem Auslösen der Schaltflächen. Als
unteres Ende ist die 0 bekannt. Diese darf nicht eingestellt werden, da sonst alle Kontrollfelder
sichtbar sind. Das obere Ende ist die Zwei, die wir als letzte Seite angelegt haben.
Wir prüfen also bei zurück gehen ob wir die 1 erreicht haben und deaktiveren dann
die Zurück-
Schaltfläche, so daß dann nicht mehr gedrückt werden kann.
Sub schflaeche_cbBack
Back=MyDlg.GetControl("cbBack")
MyDlg.Model.Step= MyDlg.Model.Step-1
If MyDlg.Model.Step=1 then
back.model.enabled=false
else
back.model.enabled=true
End if
End Sub
Natürlich müssen wir auch den möglichen Zustand der anderen Schaltfläche prüfen. Diese
könnte ja deaktiviert sein und muß wieder aktiviert werden.
Sub schflaeche_cbBack
Back=MyDlg.GetControl("cbBack")
MyDlg.Model.Step= MyDlg.Model.Step-1
If MyDlg.Model.Step=1 then
back.model.enabled=false
else
back.model.enabled=true
End if
Fore=MyDlg.GetControl("cbFore")
If MyDlg.Model.Step<2 then
Fore.model.enabled=true
else
Fore.model.enabled=false
End if
End sub
Wir haben jetzt die Routine für die Zurück-Schaltfläche und brauchen das Ganze nochmal
für
die Vorwärts-Schaltfläche. Aber dann haben wir ja eigentlich viel Code doppelt. Also machen
wir es uns etwas einfacher. Wir trennen den Code, der die Aktivierung der Schaltflächen macht,
heraus, machen uns daraus eine neue Routine und rufen diese zweimal auf.
Sub schflaeche_einstellen
Back=MyDlg.GetControl("cbBack")
If MyDlg.Model.Step=1 then
back.model.enabled=false
else
back.model.enabled=true
End if
Fore=MyDlg.GetControl("cbFore")
If MyDlg.Model.Step<2 then
Fore.model.enabled=true
else
Fore.model.enabled=false
End if
End sub
Sub schflaeche_cbBack
MyDlg.Model.Step=
MyDlg.Model.Step-1
schflaeche_einstellen
End sub
Sub schflaeche_cbFore
MyDlg.Model.Step=
MyDlg.Model.Step+1
schflaeche_einstellen
End sub
Mit der zusätzlichen Routine haben wir noch einen Vorteil. Mit ihr können wir auch
den Dialog
beim ersten Start einstellen.
Sub CallDialog
DialogLibraries.LoadLibrary( "Standard"
)
MyDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog2
)
MyDlg.Model.Step=1
schflaeche_einstellen
MyDlg.Execute()
MyDlg.Dispose()
end Sub
Und fertig ist unser Dialog mit zwei Seiten und richtig angepaßten Schaltflächen.