Dialoge "X-en"

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

Moderator: Moderatoren

keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Dialoge "X-en"

Beitrag von keksi1970 »

Hi,

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

LG
Andreas
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Dialoge "X-en"

Beitrag von komma4 »

nur, indem Du die hinterlegte Betriebssystemfunktion änderst.

Also: gar nicht.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Dialoge "X-en"

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Dialoge "X-en"

Beitrag von komma4 »

Da wirst Du wohl einen ActionListener für den Dialog brauchen (ungetestet!)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Dialoge "X-en"

Beitrag 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
hawkhunter2002
**
Beiträge: 32
Registriert: So, 25.02.2007 09:11
Wohnort: Ingolstadt

Re: Dialoge "X-en"

Beitrag 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.
OOO Basic Programmierers best Friend XRay-Tool
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Dialoge "X-en"

Beitrag von keksi1970 »

so was hab ich gesucht, ich werde es mal im laufe der Woche testen.
Danke

LG
Andreas
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

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

Beitrag 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 ?
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Dialoge "X-en"

Beitrag 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
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Dialoge "X-en"

Beitrag 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
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Dialoge "X-en"

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