Seite 1 von 1
Hintergrundgrafik eines Dialogs zur Laufzeit abschalten
Verfasst: So, 28.05.2017 12:23
von Stephan
Hallo,
ich starte einen Basic-Dialog, der eine Hintergrundgrafik hat, mit:
Code: Alles auswählen
Dim x_frm
Dim x_dialog
Sub Start()
x_frm = DialogLibraries.Standard.Dialog1
x_dialog = CreateUnoDialog(x_frm)
x_dialog.Model.Step = 1
x_dialog.Execute()
End Sub
auf dem Dialog (Step 1) ist eine Schaltfläche mit folgendem Code:
Code: Alles auswählen
Sub Step2()
x_dialog.Model.Step = 2
x_dialog.Model.ImageURL = ""
End Sub
das führt jedoch nicht zum (sauberen) Entfernen des Hintergrundbildes des Dialogs, wobei der Code wohl ansich richtig ist und das Problem nur darin liegt das der Dialog nicht sauber neu gezeichnet wird, denn lässt man den Code durch eine fehlerhafte Code-Zeile bewusst abstürzen ist anschliessend die Dialogdarstellung wie gewünscht, z.B.:
Code: Alles auswählen
Sub Step2()
x_dialog.Model.Step = 2
x_dialog.Model.ImageURL = ""
x_dialog.Model.Sepp = 2 'bewusst falscher Code um Laufzeitfehler auszulösen
End Sub
Was kann ich tun?
Ich glaube mich zu erinnern das wir ähnliche Dinge schon einmal diskutiert haben und es einen Trick gab.
Gruß
Stephan
Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten
Verfasst: So, 28.05.2017 14:46
von balu
Hallo Stephan,
ich hatte eben einen dicken Knoten im Hirn, weil ich deine Anforderung zu erst falsch verstanden hatte. Doch dann holte ich nochmal tief Luft, und ich zumindest hab dann einen möglichen Lösungsweg gefunden.
Das Problem liegt ja dadrin, das die Grafik wohl schon "gelöscht" wird, aber der Bildaufbau, besser gesagt der refresh hängt hinterher. Also habe ich folgendes ausprobiert, und es funktioniert bei mir. Habe es jetzt aber nur unter OO.o 3.2.1 getestet, in anderen Versionen müsste es aber auch funktionieren.
Code: Alles auswählen
Sub Step2()
x_dialog.Visible = FALSE '<- Dialog unsichtbar schalten
wait 5 ' <---probier mal einen kleineren Wert, oder lass es einfach weg
x_dialog.Visible = TRUE ' <- Dialog sichtbar schalten
Dim oDialogModel as Object
Dim oDialogControl as Object
oDialogControl = x_dialog
oDialogModel = x_dialog.Model
oDialogModel.ImageURL = ""
oDialogModel.Step = 2
End Sub
Ja(!), ich weiß das Du zur Laufzeit den Dialog erstellen willst, aber probier das dennoch mal einfach aus.
Viel Glück
Gruß
balu
Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten
Verfasst: So, 28.05.2017 15:16
von Stephan
Hallo Balu,
Das Problem liegt ja dadrin, das die Grafik wohl schon "gelöscht" wird, aber der Bildaufbau, besser gesagt der refresh hängt hinterher. Also habe ich folgendes ausprobiert, und es funktioniert bei mir.
Danke, das funkltioniert auch bei mir.
Ich hatte selbst mit .Visible experimentiert und kann jetzt garnicht mehr nachvollziehen warum ich zu keiner Lösung kam.
Ja(!), ich weiß das Du zur Laufzeit den Dialog erstellen willst
Nein, das will ich garnicht.
Anmerkung:
der Grund für mein Vorgehen ist ein ganz Anderer, was aber mit dem Thema des Threads hier nichts zu tun hat:
ich brauche (aus optischen Gründen) auf der ersten Seite (Step 1) einen Dialogs eine dialogfüllende Grafik, wenn ich dafür aber ein grafisches Steuerelement benutze, funktionieren Schaltflächen die auf der Grafik liegen nicht mehr (oder jemand sage mir wie) und deshalb die Hintergrundgrafik.
Gruß
Stephan
Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten
Verfasst: So, 28.05.2017 17:09
von balu
Hallo Stephan,
Danke, das funkltioniert auch bei mir.
Prima! Freut mich zu hören.
Nein, das will ich garnicht.
Tja dann habe ich deinen Titel hier falsch interpretiert. Spielt aber auch keine Rolle.
Dein "anderes Hauptproblem" (zwei Elemente übereinander) ist mir auch ein Rätsel, da fällt mir nix zu ein.
Gruß
balu
Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten
Verfasst: So, 28.05.2017 21:17
von Stephan
Hallo Balu,
Tja dann habe ich deinen Titel hier falsch interpretiert. Spielt aber auch keine Rolle.
stimmt, spielt keine Rolle, aber ich verstehe jetzt erst wie Du überhaupt darauf kamst.
Ich sprach aber nur von Hintergrundgrafik zur Laufzeit abschalten, einen Dialog zur Laufzeit
erstellen meint hingegen den kompletten Dialog nur per Code erstellen, d.h. es gibt keinen in der IDE vorher erstellten Dialog den man nur per Code starten muss, z.B.:
Code: Alles auswählen
Sub Main
wv_fortschritt_model = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
wv_fortschritt_model.setPropertyValue("Width", 150) '343
wv_fortschritt_model.setPropertyValue("Height", 20)
wv_fortschritt_model.SetPropertyValue("Title","Bitte etwas Geduld")
oMod_warten = wv_fortschritt_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
With oMod_warten
.setPropertyValue("Name","warten1")
.setPropertyValue("PositionX",5) '192
.setPropertyValue("PositionY",5)
.setPropertyValue("Width",140)
.setPropertyValue("Height",13)
.setPropertyValue("Label","Inhaltsverzeichnis wird erzeugt...")
End With
wv_fortschritt_model.insertByName("warten1", oMod_warten)
wv_fortschritt = CreateUnoService("com.sun.star.awt.UnoControlDialog")
wv_fortschritt.setModel(wv_fortschritt_model)
oWin2 = CreateUnoService("com.sun.star.awt.Toolkit")
wv_fortschritt.createPeer(oWin2, null)
wv_fortschritt.setVisible(True)
End Sub
Gruß
Stephan