Fehlermeldung in Listbox-Makrosammlung

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

Moderator: Moderatoren

anho1000
*
Beiträge: 13
Registriert: Sa, 23.10.2004 08:32
Wohnort: 77855 Achern
Kontaktdaten:

Fehlermeldung in Listbox-Makrosammlung

Beitrag von anho1000 »

Hi,

ich arbeite zwar schon länger mit OOo, aber habe erst jetzt mit den Makros Kontakt aufgenommen. Und wie es am Anfang so ist, gleich mal ein kleines Problem. :?

Hier der Code, um den es geht:

Code: Alles auswählen

Dim oDialog1 AS Object
Dim oListBox1 AS Object
Dim listeneintraege() AS String

Sub Main
	StartDialog
End Sub

Sub StartDialog
	GlobalScope.BasicLibraries.loadLibrary("Tools")
	oDialog1 = LoadDialog("Standard", "Testdialog")
	oListBox1 = oDialog1.GetControl("ListBox1")
	oDialog1.Execute()
end sub

Function LoadDialog(Libname as String, DialogName as String, Optional oLibContainer)
	Dim oLib as Object
	Dim oLibDialog as Object
	Dim oRuntimeDialog as Object
	If IsMissing(oLibContainer ) then
		oLibContainer = DialogLibraries
	End If
	oLibContainer.LoadLibrary(LibName)
	oLib = oLibContainer.GetByName(Libname)
	oLibDialog = oLib.GetByName(DialogName)
	oRuntimeDialog = CreateUnoDialog(oLibDialog)
	LoadDialog() = oRuntimeDialog
End Function

Sub OKPressed
	rem RemoveSelected(oListBox1)
	rem listeneintraege() = oListBox1.getSelectedItems()
	rem msgbox listeneintraege(0)
	rem oListbox1.removeitems(0,1)
end sub
Im Testdialog habe ich das Ereignis Button angeklickt mit der Sub OKPressed verbunden, was auch funktioniert.

Allerdings erhalte ich bei Ausführung der Teile RemoveSelected(oListBox1) immer die Fehlermeldung "Basic-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden".

Aber nicht innerhalb meines Codes, sondern in der Funktion RemoveSelected aus der Listbox-Makrosammlung. Markiert ist die folgende Zeile:

Code: Alles auswählen

MaxIndex = Ubound(oListbox.StringItemList())
Muss ich da irgendwas ändern oder zusätzlich laden?

Bin für alle gewinnbringenden Antworten dankbar. :D

Grüße

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

Beitrag von Toxitom »

Hallo Andreas,

aus dem Bauch heraus:

ist überhaupt "oListbox" definiert? In Deinem Code jedenfalls nicht, also müsstest du mal den Code von "RemoveSelected" mitposten.

Ansonsten gibt ein "Ubound" nur dann ein Ergebnis, wenn überhaupt ein Array vorliegt. Ist das der Fall?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
anho1000
*
Beiträge: 13
Registriert: Sa, 23.10.2004 08:32
Wohnort: 77855 Achern
Kontaktdaten:

Beitrag von anho1000 »

Hi Thomas,

hier der Code:

Code: Alles auswählen

Function RemoveSelected(oListbox as Object)
Dim MaxIndex as Integer
Dim MaxSelected as Integer
Dim n as Integer
Dim m as Integer
Dim CurIndex as Integer
Dim CurItem as String
Dim ResultArray()
	MaxIndex = Ubound(oListbox.StringItemList())
	MaxSelected = Ubound(oListbox.SelectedItems())
	Dim LocItemList(MaxIndex)
	LocItemList() = oListbox.StringItemList()
	If MaxSelected > -1 Then
		For n = 0 To MaxSelected
			CurIndex = oListbox.SelectedItems(n)
			LocItemList(CurIndex) = ""
		Next n
		If MaxIndex > 0 Then
			ReDim ResultArray(MaxIndex - MaxSelected - 1)
			m = 0
			For n = 0 To MaxIndex
				CurItem = LocItemList(n)
				If CurItem <> "" Then
					ResultArray(m) = CurItem
					m = m + 1
				End If
			Next n	
		End If
		RemoveSelected = ResultArray()	
	Else
		RemoveSelected = oListbox.StringItemList()	
	End If
End Function
Die Listbox-Makros sind so von OOo installiert worden, verändert habe ich nichts.

Grüße

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

Beitrag von Toxitom »

Hey Andreas,

wieviel Einträge hast du denn in deiner Listbox? Wenn da nix drinsteht, gibt es einen Fehler.

Ansonsten teste folgendes:

Verschiebe mal die Zeile

Code: Alles auswählen

oListBox1 = oDialog1.GetControl("ListBox1") 
in deine Sub "OKpressed" und füge als nächste Zeile folgenden Ausdruck an:

Code: Alles auswählen

msgbox ubound(oListBox1.StringListItems())
Weitere Zeilen kommentierst du aus (bis auf "end sub").
Wenn du den Fehler schon hier bekommst, dann untersuche, ob das Objekt oListBox1 erstens existiert, und zweitens die Methode "listStringItems()" überhaupt unterstützt ( am besten mit msgbox oListBox1.dbg_methods() )

Hoffe, es hilft weiter.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
anho1000
*
Beiträge: 13
Registriert: Sa, 23.10.2004 08:32
Wohnort: 77855 Achern
Kontaktdaten:

Beitrag von anho1000 »

Hi Thomas,

das geht ja schnell mit Deinen Antworten. :D

Also, ich habe drei Einträge drin, die sind permanent drin, später werden die Einträge über weitere Subs hinzugefügt.

Ich habe mal die Codezeilen verschoben und festgestellt, dass das Objekt oListBox1 tatsächlich existiert. Aber anscheinend wird StringItemList() nicht unterstützt. Dann stellt sich aber nur die Frage, weshalb OOo Makros mitliefert, die man ohne weitere Umarbeiten nicht verwenden kann. :?

Nun weiß ich aber zumindest, dass ich das Löschen der ausgewählten Einträge selbst programmieren muss.

Dank Dir für die Hilfe!

Grüße

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

Beitrag von Toxitom »

Halo Andreas,
das geht ja schnell mit Deinen Antworten.
Nicht immer :wink: Heute morgen war ich einfach noch online.
weshalb OOo Makros mitliefert, die man ohne weitere Umarbeiten nicht verwenden kann.
Das ist wohl mehr historisch bedingt. Sicher gab es mal diese Methode (bei 1.0 oder 1.1) das Objektmodell aber ist eben auch einem steten Wandel unterworfen und zur 1.1.2 gab es hier diverse Änderungen (zur 2.0 dann nochmal...) Auch wenn eine Abwärtskompatibilität angestebt wird, ist vielleicht nicht immer alles funktionstüchtig. Oft bleiben aber alte Makros noch eine ganze Weile beim Code - die werden nicht jedesmal überprüft.
Vielleicht so viel zur Erklärung. OK, das hilft dir direkt nicht, aber, du wirst eine Lösung finden :)

Gruss
Thomas[/code]
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Andreas,

hab gerade mal sebst nachgesehen: Eine Methode "stringListItems()" gibt es wirklich nicht.
Dafür gibt es eine Methode getItems(), welche ebenfalls einen Array mit den Listenwerten zurückliefert.
Es gibt dann noch den Array getSelectedItemsPos() sowie diverse Methoden, die markierten zu entfernen etc.

Du kommst also wahrscheinlich besser, "native" zu programmieren, das was du willst.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
anho1000
*
Beiträge: 13
Registriert: Sa, 23.10.2004 08:32
Wohnort: 77855 Achern
Kontaktdaten:

Beitrag von anho1000 »

Hi Thomas

Hat zwar was länger gedauert, bis ich wieder ans proggen gekommen bin, aber nun hab ich mir eine eigene Funktion geschrieben, die das tut, was ich will.

Danke für Deine Hilfe

Andreas
Antworten