Auswahl in Listbox merken

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

Moderator: Moderatoren

ghostwriter
**
Beiträge: 35
Registriert: Mo, 17.09.2007 14:48

Auswahl in Listbox merken

Beitrag von ghostwriter »

Hallo Zusammen,

mit folgendem Code weise ich einem Label mit einer Listbox, deren Einträge manuell eingefügt sind, einen Text zu:

Code: Alles auswählen

sub Change_Text
	dim ibereich1 as Variant
 	ibereich1()= array( "Hund","Katze,"Maus) ' Texte für Label
	inhalt = Dialog1.GetControl("ListBox1")
	Text_LB = inhalt.selecteditempos
	Dialog1.getControl("Label1").Text = ibereich1(Text_LB)
End Sub
Die Standardauswahl der LB steht auf 1 = (Tier1), also wird in dem Label bei starten des Dialoges "Hund" angezeigt.

Jetzt kommt es aber. Wenn ich z.B. "Tier 3 " in der LB ausgewählt habe, den Dialog schliesse und dann wieder öffne,
möchte ich, dass dann in dem Label direkt wieder "Hund" steht, also die jeweils letzte Auswahl , in diesem Fall "Tier3".

Ich habe mir schon mal die Tolls für die Listbox in OO.o angesehen, aber irgendwie steige ich da nicht so richtig durch.:cry:

Wer weis Rat.

Jakob
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Auswahl in Listbox merken

Beitrag von Toxitom »

Hey Jacob,

da musst du schon selbst für Sorge tragen. Also im Klartext:
Speichern, welcher Eintrag ausgewählt wurde - und ebim Wiederstart der LB eben genau diesen Eintrag auswählen. Dafür gibt es die Methoden "selectItemPos()" - für die Position oder "SelectItem()" für den String.
Ohne weitere Kenntnisse deines Codes und der Anwendung kann ich dir aber wenig weiterhelfen. Evt. musst du die Daten in einer Konfigurationsdatei zwischenspeichern, soll der zuletzt gewählte Ausdruck auch beim nächsten Öffnen der Datei wieder verfügbar sein. Sonst reicht meist das Speichern in einer globalen Variablen.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
ghostwriter
**
Beiträge: 35
Registriert: Mo, 17.09.2007 14:48

Re: Auswahl in Listbox merken

Beitrag von ghostwriter »

Hallo Thomas,

schon mal Danke für die Hinweise.
Toxitom hat geschrieben:Sonst reicht meist das Speichern in einer globalen Variablen.
Das funktioniert auch schon wunderbar und die Variable ist auch nach erneutem öffnen des Dialogs noch vorhanden. :lol:
Da hatte ich überhaupt nicht dran gedacht. Aber gut das wir darüber gesprochen haben.

Ich habe das als Beispiel jetzt mal folgendermaßen gemacht:

Code: Alles auswählen

Global My_Selection
Sub Change_Text as integer
	dim ibereich1 as Variant
 	ibereich1()= array( "Hund", "Katze","Maus")
 	inhalt = Dialog1.GetControl("ListBox1")
	Text_LB = inhalt.selecteditempos
	Dialog1.getControl("Label1").Text = ibereich1(Text_LB)
End Sub

Sub Read_Selection
	inhalt = Dialog1.GetControl("ListBox1")
	My_Selection = inhalt.getSelectedItemPos ()'SelectedItemPos
End Sub

Sub Last_Selektion
	position = Dialog1.GetControl("ListBox1")
	position.SelectItemPos(My_Selection, True)
End Sub
Jetzt hatte ich mir überlegt ein neues Modul mittels Makro zu erzeugen und dort die Variablen abzuspeichern.
Wenn das Makro innerhalb eines Dokumentes gespeichert ist habe ich das auch hinbekommen.

Das Makro ist aber nicht im Dokument gespeichert sondern liegt unter Meine Makros & Dialoge.
Da ist es mir aber leider nicht gelungen die entsprechende Library anzusprechen und das Modul zu erzeugen.

Hier erst mal der Code um Das Modul zu erzeugen:

Code: Alles auswählen

Dim ContainerLocationName as String
Sub Create_Modul()
	Dim oLib     
	Dim oLibs
	Dim s$
	Dim sL_Name$
	Dim sM_Name$
	sL_Name = "Library1"
	sM_Name = "Save_Variable"
	oLibs = BasicLibraries
	oLibs.loadLibrary(sL_Name)
	oDoc = ThisComponent
	oLibs = oDoc.BasicLibraries
	oLib = oLibs.Getbyname(sL_Name)
	s = "Option Explicit" & CHR$(10) & _
      	"Sub My_Variables()" & CHR$(10) & _
      	"MsgBox """&"Meine Variable 1"&"""" & CHR$(10) & _
      	"End Sub"
	oLib.insertByName(sM_Name,s)
End Sub
Die Library1 ist natürlich unter Meine Makros und Dialoge vorhanden kann aber nicht "beschrieben" werden. :?

Wenn man

Code: Alles auswählen

sL_Name = "Library1"
durch

Code: Alles auswählen

sL_Name = "Standard"
ersetzt wird das neue Modul direkt in die Standardbibliothek des zu dem Zeitpunk geöffneten Dokumentes gespeichert. Das ist aber ja nicht der Sinn der Sache.

Wie bekomme ich den Zugriff auf "Meine Makros und Dialoge" und die Library1 um dort das Modul zu erzeugen?

Bringt mich das hier weiter:

Code: Alles auswählen

com.sun.star.comp.sfx2.ScriptLibraryContainer
???
Toxitom hat geschrieben:Ohne weitere Kenntnisse deines Codes und der Anwendung kann ich dir aber wenig weiterhelfen
Welche weiteren Informationen brauchst Du?

Nochmals Danke für die Hilfe.

Jakob
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Auswahl in Listbox merken

Beitrag von Toxitom »

Hey Jacob,

was soll das ganze denn werden? Warum willst du aus einem Dokumentenmakro eine Routine in das System schreiben?
Nein, das geht so sicher nicht - wäre ja sonst eine riesige Sicherheitslücke- wenn ein Dokument direkt Code ins system schreiben könnte...

Wie gesagt - was willst du denn erreichen? Wenn ich das richtig sehe, möchtest du die Selektion zentral speichern - woarum? Sollen andere Dateien auch darauf zugreifen können? Dann kannst du das nur in einer extra Datei machen - einer einfachen Textdatei zum Beispiel.

Wie gesagt, mir ist noch nicht ganz klar, was du erreichen willst.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
ghostwriter
**
Beiträge: 35
Registriert: Mo, 17.09.2007 14:48

Re: Auswahl in Listbox merken

Beitrag von ghostwriter »

Hi Thomas,

vielen Dank für Deine Geduld.
Toxitom hat geschrieben:Nein, das geht so sicher nicht - wäre ja sonst eine riesige Sicherheitslücke- wenn ein Dokument direkt Code ins system schreiben könnte...
Sind Makros das nicht immer?
Toxitom hat geschrieben:möchtest du die Selektion zentral speichern
Ja.
Toxitom hat geschrieben:Sollen andere Dateien auch darauf zugreifen können
Nein.
Toxitom hat geschrieben: Wie gesagt, mir ist noch nicht ganz klar, was du erreichen willst.
Das Makro wird über eine oxt-Datei verteilt. In diesem Makro gibt es einem Dialog mit drei Listboxen, die jede bis zu 100 Einträge enthält. Der User braucht zu ca. 80% den gleichen Eintrag in der Listbox, den ich vorher aber nicht weis und einstellen kann.
Der User soll die Möglichkeit haben seinen, sagen wir mal "Favoriten" abzuspeichern um diesen nicht immer aus der Liste neu auswählen zu müssen.
Toxitom hat geschrieben:Dann kannst du das nur in einer extra Datei machen - einer einfachen Textdatei zum Beispiel.
... und da habe ich keinen blassen Schimmer wie das geht.
Normalerweise gebe ich so schnell nicht auf, aber ich glaube ich werde es bei der globalen Variablen belassen.
Das Ganze wird mir zu kompliziert. Im Internet habe ich auch noch nicht das richtige gefunden.
Es bleiben derzeit halt zu viele Fragen für mich offen. :(
Aber man wächst ja mit seine Aufgaben.

Viel Grüsse

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

Re: Auswahl in Listbox merken

Beitrag von komma4 »

Ja: Code kann dynamisch erstellt und ausgewertet werden, das ist eine Sicherheitslücke, wenn mensch solchen Code (seine Ausführung) zulässt. Beispiel? Xray macht das mit seinen Konfigurationsdateien.

ghostwriter hat geschrieben:
Toxitom hat geschrieben:Dann kannst du das nur in einer extra Datei machen - einer einfachen Textdatei zum Beispiel.
... und da habe ich keinen blassen Schimmer wie das geht.
Normalerweise gebe ich so schnell nicht auf, aber ich glaube ich werde es bei der globalen Variablen belassen.
Du nimmst die Favoriten Deines Benutzers aus der Liste und schreibst den/die Werte in eine Textdatei (bspw. im OOo-Benutzerverzeichnis). Ist diese Datei vorhanden, dann liesst Du sie aus und bestückst Deine Listbox damit.
Schreiben und Lesen mit Line Input und Write Anweisungen; Beispiele in der Online-Hilfe oder im Code von Füllwort-Liste. Schimmert's nun?

Nite'
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)
ghostwriter
**
Beiträge: 35
Registriert: Mo, 17.09.2007 14:48

Re: Auswahl in Listbox merken

Beitrag von ghostwriter »

Hallo Winfried und natürlich Thomas,

danke für den Downloadlink für die Fülliste. Ich werde das am Wochenende mal versuchen.
Wenn ich das richtig sehe muss der Anwender aber noch Hand anlegen in Bezug auf den Speicherort.

Ich weis, ich komme jetzt von Stöckchen auf´s Hölzchen aber hast es selber angesprochen mit:
komma4 hat geschrieben:Xray macht das mit seinen Konfigurationsdateien
Genau, Xray speichert ja auch irgendwo den Pfad zum Browser und zum SKD.
Mir geht es zum einen darum wo die Dateien liegen und wie Xray die Informationen darin
abspeichert um diese später wieder abzurufen. Denn die Pfade werden ja nur einmalig ausgewählt
und sind präsent wenn Xray gestartet wird. Ich bin nur zu doof herauszufinden wie Xray das macht.

Danke für die Hilfe.

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

Re: Auswahl in Listbox merken

Beitrag von komma4 »

Du kannst mit Basic das Benutzerverzeichnis von OOo ermitteln, oder das home-Verzeichnis oder eine andere Environment-Variable auslesen und dort speichern.

Code: Alles auswählen

Sub x_OSversion
' Operating System
' Betriebssystem anhand des verwendeten Fenster-Managers ermitteln

l_OS_Index = GetGUIType()

Select Case l_OS_Index
	Case 1
		s_OS = "Windows"
		s_rechnername = Environ("COMPUTERNAME")
		s_benutzername = Environ("USERNAME")
		s_benutzerdomain = Environ("USERDOMAIN")

	Case 3
		s_OS = "MacOS"
	
	Case 4
		s_OS = "Linux"
		s_benutzerhome = Environ("HOME")
 		msgbox s_benutzerhome
....

Xray legt mit der Installation eine Bibliothek XrayDyn an und ändert dessen Inhalt dynamisch durch die vorgenommenen Änderungen im Konfigurationsdialog.
Ist für Deinen Bedarf zu aufwändig :-)
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)
ghostwriter
**
Beiträge: 35
Registriert: Mo, 17.09.2007 14:48

Re: Auswahl in Listbox merken

Beitrag von ghostwriter »

Hallo Winfried,
komma4 hat geschrieben:Schimmert's nun?
Und ob.

Ich möchte mich für Deine ausführliche Hilfe hiermit bedanken.
Es funktioniert jetzt alles wie gewünscht. :D

Schöne Grüße.

Jakob
Antworten