Beziehungen zwischen Kontrollelementen in Dialog

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

Moderator: Moderatoren

CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Hallo -ich bins mal wieder :)

Meine ersten Geh-Versuche mit den lieben Makros haben zwar schon Früchte getragen jedoch konnte ich bisher immer nur kleine einzelne Aufgaben per Makro erledigen. Der Aufbau von etwas komplexerem wie dem Dialog der mir momentan vorschwebt übersteigt aber noch meinen Horizont. Daher bitte ich darum mich mal sanft in die richtige Richtung zu schubsen:

Zur Situation:
Ich habe ein Formular aus dem mittels einer Schaltfläche ein Makro aufgerufen wird. Dieses soll einen Dialog aufrufen/erstellen der 3 Kontrollelemente besitzt. Zwei Schaltflächen und ein Listenfeld.

Das Ganze soll ungefähr so aussehen:

Bild


Auf der oberen Schaltfläche wird einfach ein "Datei auswählen" Dialog aufgerufen.

Das Listenfeld darunter stellt zwei Auswahlmöglichkeiten zur Verfügung.

Die untere Schaltfläche beendet den Dialog


Ich hätte gerne das das Listenfeld erst freigegeben wird wenn eine Datei gewählt wured und der OK Button wiederum erst wenn auch noch eine der Auswahl Möglichkeiten im Listenfeld gewählt wurde.
Mit Betätigen des Ok buttons soll dann der Pfad der gewählten Datei sowie die Auswahl des Listenfelds zurückgegeben werden um mit diesen Variablen weiterzuarbeiten.

Ich habe momentan nur eine grobe Vorstellung des Aufbaus dieses Makros. Die einzelnen Funktionen kann ich schreiben jedoch weiss ich nicht genau wie ich den Ablauf anordnen muss damit die Variablen an den richtigen Stellen sichtbar sind und vor Allem wie die Bedingungen zwischen den Kontrollelementen realisiert werden können :shock:
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Code: Alles auswählen

public oCSVDialog as object

'Anfang
Sub Main

	call Dialog
	oCSVDialog.execute()


End Sub



'Prozedur zur Dialog Erstellung
Sub Dialog

	DialogLibraries.LoadLibrary("Test")										'Dialog Datenbank laden
	oCSVDialog = CreateUnoDialog(DialogLibraries.Test.ImportDia)			'Pfad zum CSV Dialog
	
	KontrolleListe = Kontrolle (oCSVDialog, "ListBox1")	
	KontrolleDateiButton = Kontrolle (oCSVDialog, "DateiButton")
	KontrolleOKButton = Kontrolle (oCSVDialog, "OKButton")	
		
	dim Alternativen(1)													'Array mit Listenfeldinhalt erstellen
	Alternativen(0)="Volksbank"											'Feld 1
	Alternativen(1)="Sparkasse"											'Feld 2
	
	KontrolleListe.Model.Readonly = False								'Listenfeld "einschalten"
	KontrolleListe.addItems(Alternativen(),1)							'Array mit Auswahlmöglichkeiten an Listenfeld geben
	

End Sub

Function Kontrolle ( oCSVDialog as object, KElement as String) as Object
	Kontrolle = oCSVDialog.getControl(KElement)
End Function
Sowas hab ich bisher zusammengeschrieben - sieht das vernünftig aus? Ich weis bisher nicht auf welcher Ebene quasi die Schleifen stehen müsse die prüfen ob die oben genannten Bedingungen erfüllt wurden. Für das Listen Feld wäre das ja z.B

Code: Alles auswählen

While KontrolleListe.selectedItem < -1 
          Anweisunge OKbutton sperren
wend
Wo gehört das in Bezug zum

Code: Alles auswählen

oCSVDialog.execute()
hin? Versteht mich einer? :?
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von turtle47 »

Hi Captain,

ich sehe Du ruderst ganz schön, kommst aber nicht richtig von der Stelle mit Deinem Kahn. Oder?

Du denkst viel zu kompliziert.

Versuche es mal so:

Code: Alles auswählen

Public oDlg as Object
Public Ctl_LB as Object
Public Ctl_BU as Object
Public Ctl_Inhalt as String
Public Auswahl as String

Sub OpenDialog
	Dialoglibraries.Loadlibrary("Standard")
	oDlg = CreateUnoDialog(Dialoglibraries.Standard.Dialog1)
	oDlg.Title = "Dateiimport"
	Ctl_LB = oDlg.getControl("ListBox1")
	dim Alternativen(1)  
	Alternativen(0)="Volksbank"
	Alternativen(1)="Sparkasse"   
	Ctl_LB.addItems(Alternativen(),2)	
	Ctl_LB.Enable =(False)
	Ctl_BU = oDlg.getControl("ButtonStart")
	Ctl_BU.Enable =(False)
	oDlg.execute()
end Sub

Sub FileDialog 'Button "Datei wählen" > Ereignis > Beim Auslösen
   DialogOpen=createunoservice("com.sun.star.ui.dialogs.FilePicker")
   DialogOpen.title = "Datei auswählen"
   DialogOpen.displaydirectory = "c:\"
   Ausgabe = DialogOpen.execute
   if Ausgabe = 0 Then
   msgbox "Es wurde keine Datei ausgewählt!"
   oDlg.endexecute()
   Exit sub
   End if
   Auswahl=DialogOpen.Files(0)
   Ctl_LB.Enable =(True)   
End Sub

Sub Inhalt_LB 'Listbox > Ereignis > Status geändert
	Ctl_Inhalt = Ctl_LB.SelectedItem
	Ctl_BU.Enable =(True)
End Sub

Sub ButtonStart 'Button "OK" > Ereignis > Beim Auslösen
	oDlg.endexecute()
	msgbox "Datei > " & Auswahl & CHR(13) & "Bank > " &  Ctl_inhalt
End Sub
Schönen Abend noch.

Jürgen
Zuletzt geändert von turtle47 am So, 05.04.2009 07:31, insgesamt 1-mal geändert.
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Hi Jürgen,

ja die richtige Programmier-Denkweise fällt mir noch recht schwer. Viel aufgeschnappt in den letzten Tagen aber das richtig zusammenzufügen ist schon nen hartes Stück Arbeit. Mühsam ernährt sich das Eichhörnchen :lol: Momentan macht es mir zum Glück noch Spass - wird schon irgendwie!

Danke für deine Antwort. Ich werde es nun studieren 8)

CaptainCannabis
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Habs mir mal gerade angeschaut. Verstehe ich das richtig das die drei Prozeduren einfach von oben nach unten abgearbeitet werden? Dann kann ich das ja einfach als eine Funktion von der Main aus aufrufen ---> Dateipfad + Auswahl d. Listenfelds werden an diese zurückgegeben --> Main ruft mit diesen Variablen Funktion zum kopieren auf.

Hab ich hier gerade die nächste Hürde genommen? Ich hab ein gutes Gefühl - vielen Dank Jürgen!

Das meinte ich mit " In die richtige Richtung schubsen" :D

EDIT: Ne jetzt raff ichs - du meinst ich soll die Sub "Inhalt=LB" dem Ereignis im Dialog zuweisen was? dkjn man das nicht auch per Makro machen. Also den Button kann ich ja per Makro mit allen Eigenschaften setzen (Position,Farbe etc). Kann man nicht auch iregndwie so auf die Ereignisse zugreifen? Oder ist das wieder total um die Ecke gedacht?
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von turtle47 »

Moin Captain,
CaptainCannabis hat geschrieben:Verstehe ich das richtig das die drei Prozeduren einfach von oben nach unten abgearbeitet werden?
Genau so ist es.
CaptainCannabis hat geschrieben:Ne jetzt raff ichs - du meinst ich soll die Sub "Inhalt=LB" dem Ereignis im Dialog zuweisen was?
Ja, der Listbox direkt, aber manuell.
CaptainCannabis hat geschrieben:dkjn man das nicht auch per Makro machen. ...
Kann man nicht auch iregndwie so auf die Ereignisse zugreifen?
Nein, das geht nicht. Warum auch?
CaptainCannabis hat geschrieben:Oder ist das wieder total um die Ecke gedacht?
Genau.

Sorry, hatte da noch einen Fehler in den Kommentaren.
Bei den Schaltflächen muss es heissen "Ereignis > Beim Auslösen"

Schau Dir mal das Beispiel an.

Schönes Restwochenende.

Jürgen
Dateianhänge
Dialog_Datei_kopieren.ods
(10.77 KiB) 821-mal heruntergeladen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von Stephan »

Nein, das geht nicht. Warum auch?
Entschuldigung, nur das muß ich korrigieren zumal es hier um relativ häufig benötigte Programmiertechniken geht:
Es ist möglich Makros zur Laufzeit an Steuerelemente zu binden (also per Code zu bestimmen welches Makro ein Steuerelement ausführen soll) und nötig ist das bei der Erzeugung dynamischer Dialoge.
Ein Beispiel dafür ist die Extension "mottco" ( http://www.calc-info.de/makros.htm#mottco ), hier ist nicht eines der Makros, welche über die Oberfläche von mottco gestartet werden können, statisch dem entsprechenden Steuerelement zugewiesen, sondern alle Zuweisungen erfolgen erst mittels Makro zur Laufzeit.


Gruß
Stephan
CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Das hört sich krass an - es lässt sich also irgendwie bewerkstelligen das ein Makro den Dialog vollständig erstellt - mit Angabe der Fenstergröße, Breite etc - ohne das man diesen vorher "zeichnen" muss?

Das ist ja quasi die Champions League der Makros :lol:

Na ich bedanke mich auch jeden Fall ersteinmal bei euch, vor allem bei Jürgen für die super Vorlage! Finde ich wohl unter dynamische Dialoge mehr zu dem Thema? Reizt mich ja schon das jetzt so zu machen 8)


Schönen Sonntag euch!

CaptainCannabis
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Code: Alles auswählen

oDialog1Mod = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
oDialog1Mod.setPropertyValue("Width",  343) '343
oDialog1Mod.setPropertyValue("Height", 53)
oDialog1Mod.SetPropertyValue("Title","Bedingte Formatierung")

'OK-Button
oModbut1 = oDialog1Mod.createInstance("com.sun.star.awt.UnoControlButtonModel")
oModbut1.setPropertyValue("Name", "ok_but")
oModbut1.setPropertyValue("PositionX", 243)
oModbut1.setPropertyValue("PositionY", 33)
oModbut1.setPropertyValue("Width",  45)
oModbut1.setPropertyValue("Height", 15)
oModbut1.setPropertyValue("Label", "OK")
oModbut1.setPropertyValue("HelpText", "Formatierung übernehmen")

oDialog1Mod.insertByName("ok_but", oModbut1)

Habe gerade mal in das gelinkte Makro geschaut. ( "mottco" )

Die zitierte Stelle ist doch genau was du meinst oder? Es wird ein Button mit seinen Eigenschaften erstellt. Etwas weiter unten dann folgendes:

Code: Alles auswählen

oListwork =  createUnoListener("worklist_","com.sun.star.awt.XActionListener")
oDialog1.getControl("ok_but").addActionListener(oListwork)
Dem Button wird ein ActionListener-Service zugeordnet!? Dieser checkt ob der Button betätigt wurde und kann dann gegebenenfalls auf andere Makros bzw. Prozeduren verweisen oder wie?


In diesem Thread viewtopic.php?f=18&t=18938&p=79862&hili ... ner#p79862 wird für ein Listenfeld auch ein "ItemListener" benutzt. Wo kann ich mehr über die Listener-dinger erfahren. Hier im Forum gibts da nicht allzu viel - scheint ein wenig speziell zu sein :?
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von Stephan »

Das ist ja quasi die Champions League der Makros


Dialoge über GUI zu zeichnen ist eigentlich allgemein das fortgeschrittenere Verfahren, Dialoge ohne GUI-Unterstützung nur mittels Code zu erzeugen das Ältere
Dieser checkt ob der Button betätigt wurde und kann dann gegebenenfalls auf andere Makros bzw. Prozeduren verweisen oder wie?
Der Zusammenhang wird über den 'Namensvorsatz' aus:

oListwork = createUnoListener("worklist_","com.sun.star.awt.XActionListener")

hergestellt, hier also "worklist_". Es ist ein Makro mit Namen <Namensvorsatz> plus anzusprechende Methode des Listeners zu erstellen, der Inhalt dieses Makros wird bei Auslösen des Listeners dann ausgeführt. Für einen XActionListener existiert nur eine Methode, nämlich actionPerformed:
http://api.openoffice.org/docs/common/r ... nPerformed

der Makroname muß also lauten Sub worklist_actionPerformed(oEvent) und genauso steht es auch in mottco.
Der Parameter oEvent wird von OOo automatisch übergeben und stellt den Bezug auf das konkret auslösende Objekt bzw. Event dar. Dieser Parameter kann bei Notwendigkeit ausgewertet werden, was hier nicht nötig ist, da das konkrete Objekt (nämlich die Schaltfläche) feststeht, im Falle das ein Listener jedoch z.B. für alle Zellen eines Tabellenblattes registriert wäre ließe sich mit oEvent die einzelne, konkret ereignisauslösende Zelle ermitteln.
Wo kann ich mehr über die Listener-dinger erfahren.
Alle Listener sind in der IDL-Referenz:
http://api.openoffice.org/docs/common/r ... le-ix.html

vermerkt.
Codebeispiele finden sich u.a. im internationalen Forum:
http://www.oooforum.org



Gruß
Stephan
CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Alle Listener sind in der IDL-Referenz:
http://api.openoffice.org/docs/common/r ... le-ix.html
Wo genau da? z.B. der "addActionListener"? Ich raff nicht wie das aufgeteilt ist...
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von Stephan »

Wo genau da? z.B. der "addActionListener"?
genau dort wo ich ihn extra detailliert als Link angegeben hatte:

http://api.openoffice.org/docs/common/r ... nPerformed


Gruß
Stephan
CaptainCannabis
**
Beiträge: 37
Registriert: Mo, 30.03.2009 13:17

Re: Beziehungen zwischen Kontrollelementen in Dialog

Beitrag von CaptainCannabis »

Ah habs geschnallt... sorry...der Aufbau war mir erst nicht ganz klar :?
WIN XP 32BIT SP3 / WIN 7 64 BIT mit OO V3.1.1
AMD Athlon X2 5000+
Geforce 8800 GT 1024MB
2GB RAM + 1TB Platte
Antworten