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.