Hintergrundgrafik eines Dialogs zur Laufzeit abschalten

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Hintergrundgrafik eines Dialogs zur Laufzeit abschalten

Beitrag 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
Dateianhänge
Testdatei_für_Forum.odt
(13.47 KiB) 119-mal heruntergeladen
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten

Beitrag 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
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten

Beitrag 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
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten

Beitrag 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
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Hintergrundgrafik eines Dialogs zur Laufzeit abschalten

Beitrag 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
Antworten