Seite 1 von 1

Dialoge "X-en"

Verfasst: Do, 18.06.2009 16:44
von keksi1970
Hi,

wie kann man das Schliessen eines Dialogs per"X" verhindern ?

LG
Andreas

Re: Dialoge "X-en"

Verfasst: Do, 18.06.2009 16:56
von komma4
nur, indem Du die hinterlegte Betriebssystemfunktion änderst.

Also: gar nicht.

Re: Dialoge "X-en"

Verfasst: Do, 18.06.2009 17:15
von keksi1970
OK,

also anders,

wie kann ich das Schliessen eines Dialogs per "X" abfangen, die bis dahin geänderten variablen speichern, und den Dialog nach neustart wieder füllen ?

LG
Andreas

Re: Dialoge "X-en"

Verfasst: Do, 18.06.2009 17:18
von komma4
Da wirst Du wohl einen ActionListener für den Dialog brauchen (ungetestet!)

Re: Dialoge "X-en"

Verfasst: Do, 18.06.2009 17:25
von keksi1970
:D

war mir fast klar, leider kenne ich die "Action" nicht, die ein Klick auf das X auslöst :P

vielleicht so 2-3 kleine Tipps ?
bitte mit Erklärung, was ich da dann eigentlich mache :)

obwohl mir reichen würde, bei einem klick auf das X ein entsprechendes Makro auszuführen (Löschen des bis dahin eingegebenen Datensatzes)

LG Andreas

Re: Dialoge "X-en"

Verfasst: Mo, 22.06.2009 09:30
von hawkhunter2002
Also wenn ich das richtig verstehe 8) willst du deine eigene Funktion beim drücken auf's "X".
Das ist natürlich möglich wenn du den Dialog programmierst, wie folgender Code zeigt.

Code: Alles auswählen

REM  *****  BASIC  *****

global EinstellungenDialog as object
global oWinListener 
global oCB1Listener
global oCB2Listener
dim oEvent1
dim oEvent2
dim oNix

Sub Dialog_Anzeigen
	EinstellungenDialogMod = createUnoService("com.sun.star.awt.UnoControlDialogModel")
	with EinstellungenDialogMod
		.setPropertyValue("BackgroundColor", (RGB(255,255,255)))
		.setPropertyValue("Height", 180)
		.setPropertyValue("Width", 70)
		.setPropertyValue("Title", "Einstellungen")
		.setPropertyValue("HelpText", "Bitte die gewünschten Einstellungen machen")
		
	end with
	
	EinstellungenDialog = createUnoService("com.sun.star.awt.UnoControlDialog")
        '****Der Listener für's X
	oWinListener = createUnoListener("bas2_", "com.sun.star.awt.XTopWindowListener")
	EinstellungenDialog.addTopWindowListener(oWinListener)
	EinstellungenDialog.setModel(EinstellungenDialogMod)
	oCB1Listener = createUnoListener("oCb1_", "com.sun.star.awt.XActionListener")
	oCB2Listener = createUnoListener("oCb2_", "com.sun.star.awt.XActionListener")
	REM die Checkbox
		oCheckbox1 = EinstellungenDialogMod.createInstance("com.sun.star.awt.UnoControlCheckBoxModel")
		with oCheckbox1
			.setPropertyValue("Label", "Checkbox_eins")
			.setPropertyValue("PositionX", 10)
			.setPropertyValue("PositionY", 10)
			.setPropertyValue("Height", 15)
			.setPropertyValue("Width", 140)
			.setPropertyValue("State", 0)
		end with
		EinstellungenDialogMod.insertByName("Checkbox1", oCheckbox1)
		oCheckbox1Control = EinstellungenDialog.getControl("Checkbox1")
		oCheckbox1Control.addActionListener(oCB1Listener)
	
	'Die zweite Checkbox
	
		oCheckbox2 = EinstellungenDialogMod.createInstance("com.sun.star.awt.UnoControlCheckBoxModel")
		with oCheckbox2
			.setPropertyValue("Label", "Checkbox_zwei")
			.setPropertyValue("PositionX", 10)
			.setPropertyValue("PositionY", 30)
			.setPropertyValue("Height", 15)
			.setPropertyValue("Width", 140)
		end with
		EinstellungenDialogMod.insertByName("Checkbox2", oCheckbox2)
		oCheckbox2Control = EinstellungenDialog.getControl("Checkbox2")
		oCheckbox2Control.addActionListener(oCB2Listener)	
	
	EinstellungenDialog.setPosSize(20, 270, 40, 40, 3)	
	EinstellungenDialog.setvisible(true)
	
End Sub


'************Die Aktion des Listeners fürs X
sub bas2_windowClosing()

	'Entfernen der Listener 
	EinstellungenDialog.removeTopWindowListener(oWinListener)
	EinstellungenDialog.getControl("Checkbox1").removeActionListener(oCB1Listener)
	EinstellungenDialog.getControl("Checkbox2").removeActionListener(oCB2Listener)
	'Schliesen des Dialogs
	EinstellungenDialog.dispose
end sub




'*********checkbox1 wird geändert***********
sub oCb1_actionPerformed(oEvent1)
	if EinstellungenDialog.getControl("Checkbox1").State Then
		msgbox "Checkbox1 ist aktiv"
	else
		msgbox "Checkbox1 ist inaktiv"
	end if		

end sub


'*********checkbox2 wird geändert***********
sub oCb2_actionPerformed(oEvent2)
	if EinstellungenDialog.getControl("Checkbox2").State Then
		msgbox "Checkbox2 ist aktiv"
	else
		msgbox "Checkbox2 ist inaktiv"
	end if		

end sub




'****Fenster wird aktiviert*******
sub bas2_windowActivated
	oVSize = EinstellungenDialog.getPosSize
	EinstellungenDialog.setPosSize(oVSize.X, oVSize.Y, oVSize.Width * 3, oVSize.Height  , 12)
	
end sub


'****Fenster wird deaktiviert*******
sub bas2_windowDeActivated
	oVSize = EinstellungenDialog.getPosSize
	EinstellungenDialog.setPosSize(oVSize.X, oVSize.Y, oVSize.Width * (1/3), oVSize.Height  , 12)
end sub
Die Methode den Dialog über Dialog.setvisible(true) anzuzeigen bietet die Möglichkeit, neben dem geöffneten Dialog weiter am Dokument zu arbeiten.
Die "normale" Methode wäre Dialog.execute() zum Anzeigen und Dialog.endexecute() zum Beenden.

Re: Dialoge "X-en"

Verfasst: Mo, 22.06.2009 14:05
von keksi1970
so was hab ich gesucht, ich werde es mal im laufe der Woche testen.
Danke

LG
Andreas

Re: Dialoge "X-en" ///Gelöst ???

Verfasst: Do, 20.08.2009 11:31
von keksi1970
So, hab da mal was getestet.

also bevor ich mir die Sache mit dem Listener antue, hab ich einfach mal in den Dialogeigenschaften den Dialog deaktiviert.

Stellt sich die Frage, ob das irgendwelche anderen Nachteile bringt.

Hat da jemand Infos ?

Re: Dialoge "X-en"

Verfasst: Do, 20.08.2009 12:05
von eBayer
Hallo,
wenn Du NUR die im Dialog getätigten Eingaben oder die Variablen retten willst, ist das doch ganz einfach.
ich habe Dir mal eine funktionsreduzierte Funktion, aus der ich den Dialog aufrufe, hier hereinkopiert.
Schau Dir das mal an - ich hoffe, es hilft.
Jedenfalls kann Dir das X beim schließen ziemlich egal sein, weil Du bei Beendigung des Dialogs immer an der gleichen Stelle landest.
Gruß eBayer

Function DialogPLZ()
Dim oListbox As Object
Dim i As Integer, iResult As Integer
Dim aPLZ

DialogLibraries.LoadLibrary("Library1")

oDialog = CreateUnoDialog(DialogLibraries.Library1.DialogPLZ)
oDialog.setTitle("Auswahl Postleitzahl und Ort")
oListBox = oDialog.GetControl("LB_PLZ")

aPLZ = LadePLZ
for i=0 to ubound(aPLZ(),1)
oListbox.addItem(trim(aPLZ(0,i)) + " " + trim(aPLZ(1,i)),i) ' PLZ und Ort
next i
iResult = oDialog.execute()
' hier ist der Dialog beendet, aber alle Variablen und DialogControls sind noch vorhanden
' über iResult frage ich zusätzlich ab, wie der Dialog beendet wurde
' hier kannst Du alle Variablen und alle Inhalte von Controls z.B. in eine Textdatei sichern, um sie beim nächsten Aufruf des Dialogs wieder zu füllen
oDialog.dispose() ' jetzt wird der Dialog endgültig zerstört
End Function

Re: Dialoge "X-en"

Verfasst: Do, 20.08.2009 12:18
von keksi1970
Na, mir ging es eigentlich nur um das "X".

wenn Menschen ein "X" sehen, klicken sie drauf (erfahrungswerte)

Ausserdem kann ich nun vorschreiben, ob der Dialog beendet werden darf (fehlende Aktionen oder Bereitstellung von Informationen für andere, ebenso alle Verbindungen zur Datenbank schliessen usw.)

Die Informationen werden entweder durch einen Speicherbutton, oder beim verlassen einer Seite direkt in die Datenbank eingepflegt.

Bei deiner Variante ist der Dialog zuende, und genau das will ich ja nicht :D

LG
Andreas

Re: Dialoge "X-en"

Verfasst: So, 23.08.2009 12:56
von keksi1970
OK

hab den "Fehler" daran gefunden.

Wenn der Dialog noch nicht fertig ist sollte man ihn nicht deaktivieren, da man sonst nicht aus dem "Testmodus" rauskommt.

Also erst fertig stellen, dann deaktivieren.

LG
Andreas