4.1.3 Wie kann man Dialoge während der Eingabe manipulieren?
Man kann die Ereignisse von Kontrollfeldern abfragen und entsprechende Makros starten. Mit diesen kann man auch den Dialog selber ändern.

Die Ereignisse eines Kontrollfeldes sind bei den Eigenschaften eines Kontrollfeldes zu finden.
graphic

Als Beispiel verwende ich hier eine Checkbox. Wir werden jetzt den Status der Checkbox prüfen und dem Status entsprechend Änderungen im Dialog durchführen.

Als Erstes ist es wichtig den Dialog öffentlich zu deklarieren damit alle Routinen auf das Object zugreifen können. Die erste Routine startet den Dialog.

Public myDlg as Object

sub test_dialog
  doc = thiscomponent
  dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
  dlg.Execute()
end sub

Das folgende Makro ist mit dem Ereignis "Status geändert" der Checkbox verknüpft.

sub checkboxchange
   msgbox "Der Status wurde geändert"
end sub

Klickt man jetzt die Checkbox an, erscheint die Meldung.
graphic

Anstatt der Meldung kann man aber auch andere Kontrollfelder manipulieren. Im Beispiel fügen wir jetzt dem Dialog ein Textfeld hinzu, das nur zu sehen ist und Eingaben zuläßt wenn die Checkbox aktiviert ist. Um das Textfeld nicht sichtbar zu machen muss das Textfeld vor dem Start des Dialoges eingestellt (visible=false) werden.

sub test_dialog
  doc = thiscomponent
  dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
  ctl = dlg.getControl("TextField1")
  ctl.visible=true
  dlg.Execute()
end sub

Danach kann man diesen Parameter in der Routine zu Checkbox ändern. Dabei wird der Status der Checkbox ( 0/1) abgefragt und entsprechend reagiert.

sub checkboxchange
  ctlcheck=dlg.getControl("CheckBox1")
  ctl = dlg.getControl("TextField1")
  if ctlcheck.model.State=1 then
     ctl.visible=true
   else
     ctl.visible=false
    end if
end sub

Dieses Beispiel läßt sich auf alle anderen Manipulationen eines Kontrollfeldes ableiten. Einzig die Größe des Dialoges kann man nicht ändern.