StarBasic FAQWissen, das weiterhilft.

Dialoge/Formulare

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

Basic
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.

Basic
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ässt wenn die Checkbox aktiviert ist. Um das Textfeld nicht sichtbar zu machen muss das Textfeld vor dem Start des Dialoges eingestellt (visible=false) werden.

Basic
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.

Basic
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ässt sich auf alle anderen Manipulationen eines Kontrollfeldes ableiten. Einzig die Größe des Dialoges kann man nicht ändern.