[abgebrochen] lästige Performance-Einbusse mit Controls

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

Moderator: Moderatoren

Benutzeravatar
Steppenwolf
*
Beiträge: 19
Registriert: Mi, 03.03.2010 23:15

[abgebrochen] lästige Performance-Einbusse mit Controls

Beitrag von Steppenwolf »

Hallo alle miteinander,
ich arbeite im Moment an einem Makro für ein OO XML-Formular. Dieses enthält mehrere Schaltflächen und Eingabefelder, die das Makro ab- und auch wieder einschalten können soll.
Allerdings sollen nur die Elemente geschaltet werden, die auch sichtbar sind (da es einige versteckte Felder für Verweise und dergleichen in dem Formular gibt).

Mein Ansatz ist, dass ich mir alle Elemente angucke und über das Control des Formulares in Erfahrung bringe, ob das Element Sichtbar ist oder nicht. Daraufhin nehm ich mir das Element vor und setze Enabled auf den gewünschten Wert.

Code: Alles auswählen

'@param bLock FALSE for locking, TRUE for unlock
Function lock_func(bLock As Boolean)

	BasicLibraries.loadLibrary("OpenOfficeAPI")
'	GlobalScope.BasicLibraries.Loadlibrary("XrayTool")
'	msgbox "Xray geladen / Xray loaded"


	Dim Doc As Object
	Dim DrawPage As Object
			
	Doc = ThisComponent
	DrawPage = Doc.DrawPage
	Form = DrawPage.Forms.GetByIndex(0)
	
	Dim Temp
	Dim TempName As String
	Dim TempView
	Dim oControl
	oControl = ThisComponent.getCurrentController()
	Dim I
	For I = 0 To Form.Count-1
		Temp = Form.getbyIndex(I)
		TempName = Temp.getName
		If TempName <> "IT-Investnr" Then                                           'Hier wird ein Feld zusätzlich ausgeschlossen
			TempView = oControl.getControl(Temp)
			If (TempView.isVisible) Then
				Temp.Enabled = bLock
			End If
		End If
	Next I
	
End Function
PROBLEM :
Im Grunde funktioniert diese Methode auch relativ gut, allerdings hängt sich das Makro auf und OO stürzt ab, wenn man das Formular gerade frisch geöffnet hat und sofort das Makro ausführt. Das ist natürlich nicht Sinn der Sache. :(

Vermutung :
Meine Befürchtung ist nun, dass das Abfragen nach der Sichtbarkeit bei einem gerade geladenem/teilweise geladenem Formular nicht effizient ist und ich mir eine andere Eigenschaft der Felder suchen muss, nach der ich sie schalte.

Ich hoffe jemand weiß Rat, oder weiß eine bessere Vorgehensweise als die meine. Meine OO-Version: 3.2.1
Zuletzt geändert von Steppenwolf am Mi, 22.09.2010 18:13, insgesamt 1-mal geändert.
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: lästige Performance-Einbusse mit Controls

Beitrag von Stephan »

Ich erkenne keinen besonderen Grund warum das Makro abstürzt. Du solltest vielleicht zunächst testen wo es abstürzt, also bei Ausführung welcher Zeile, ggf. ergibt diese Information dann einen weiteren Ansatzpunkt.
Zum Testen würde ich, unter den beschrieben Umständen, auf gut Glück eine MsgBox ins Makro einbauen und schrittweise soweit nach hinten verlegen bis ihre Ausgabe nicht mehr erscheint, weil das Makro vorher abstürzt - da ich annehme das eine schrittweise Ausführung des Codes, zwecks debuggens ansonsten nicht das gleiche Absturzverhalten zeigt.


Hilfreich wäre auch die ZUrverfügungstellung eiuner kompletten Beispieldatei, denn weil DEin Problem nicht offensichtlich ist macht sich sonst wohl kaum jemand die Mühe etwas herauszufinden, weil eine ziemliche Chance besteht das es an der konkreten Datei liegt und ansonsten garnicht nachstellbatr ist.




Gruß
Stephan
Benutzeravatar
Steppenwolf
*
Beiträge: 19
Registriert: Mi, 03.03.2010 23:15

Re: lästige Performance-Einbusse mit Controls

Beitrag von Steppenwolf »

Hallo ^^
Danle erstmal für die Antwort. Das mit dem Beispiel hochladen wird leider nicht so einfach gehen. Das mit msgBox ist natürlich eine Möglichkeit allerdings bringt diese nicht viel, da das Makro nicht einfach iwo aufhört, sondern wirklich einfach nur die ganze Zeit über mega langsam läuft. Es nimmt den ganzen OO-Prozess in beschlag und mein PC brauch locker ne viertel Stunde um ein bereits geöffnetes anderes OO Fenster in den Vordergrund zu holen. Das Makro selbst läuft dann länger als 2Stunden bei etwas größeren Formularen, macht aber eigentlich dann das was es soll. nur leider nicht Performant genug :-(

Nun habe ich einfach eine Kompromiss Lösung verwendet, ich habe über die Feld-Namen die sichtbaren Felder gefiltert und so "abgeschlossen". Das geht auf jeden Fall schneller auch wenn ich so an die 25 Überprüfungen der Namen in einem Iterations-Schritt habe. Also Pro Feld bis zu 25 Tests.
Man sollte ja meinen das wäre wesentlch langsamer, aber das Control über Sichtbarkeiten auszufragen ist leider sehr viel langsamer...

Da ich nun leider immer noch nicht weiß ob ich anfangs einfach nur nen Fehler gemacht habe und ob meinen Arbeitgebern mein Kompromiss gefällt ^^ lasse ich den Beitrag vorerst ungelöst
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: lästige Performance-Einbusse mit Controls

Beitrag von Stephan »

Das mit msgBox ist natürlich eine Möglichkeit allerdings bringt diese nicht viel, da das Makro nicht einfach iwo aufhört, sondern wirklich einfach nur die ganze Zeit über mega langsam läuft. Es nimmt den ganzen OO-Prozess in beschlag und mein PC brauch locker ne viertel Stunde um ein bereits geöffnetes anderes OO Fenster in den Vordergrund zu holen. Das Makro selbst läuft dann länger als 2Stunden bei etwas größeren Formularen, macht aber eigentlich dann das was es soll. nur leider nicht Performant genug
dann verstehe ich beim besten Willen nicht warum Du davon sprichst das sich OOo aufhängt und/oder abstürzt:
Im Grunde funktioniert diese Methode auch relativ gut, allerdings hängt sich das Makro auf und OO stürzt ab, wenn man das Formular gerade frisch geöffnet hat und sofort das Makro ausführt
.
Da ich nun leider immer noch nicht weiß ob ich anfangs einfach nur nen Fehler gemacht habe und ob meinen Arbeitgebern mein Kompromiss gefällt ^^ lasse ich den Beitrag vorerst ungelöst
und mit welchem Ziel, ohne weitere Infos sehe ich jedenfalls nicht wie man eine Lösung finden können sollte, denn niemand hier im Forum hat DEin Problem vor Augen und so ist jedrer dringend auf Informationen angewiesen um irgendwie die Problemsituation nachstellen zu können und nach Lösungen zu suchen.



Gruß
Stephan
Benutzeravatar
Steppenwolf
*
Beiträge: 19
Registriert: Mi, 03.03.2010 23:15

Re: lästige Performance-Einbusse mit Controls

Beitrag von Steppenwolf »

Das mit msgBox ist natürlich eine Möglichkeit allerdings bringt diese nicht viel, da das Makro nicht einfach iwo aufhört, sondern wirklich einfach nur die ganze Zeit über mega langsam läuft. Es nimmt den ganzen OO-Prozess in beschlag und mein PC brauch locker ne viertel Stunde um ein bereits geöffnetes anderes OO Fenster in den Vordergrund zu holen. Das Makro selbst läuft dann länger als 2Stunden bei etwas größeren Formularen, macht aber eigentlich dann das was es soll. nur leider nicht Performant genug
SRY wenn da was falsch rübergekommen ist. Dadurch das das Makro länger als 2 Stunden läuft und sich nichts bei OO tut, egal was man anklickt oder drückt, ist bei mir anfangs der Eindruck entstanden, das es sich aufhängt.

Habe versucht das Problem selber nochmal zu reproduzieren, mit einem Formular mit über 200 Radiobuttons auf 5 Seiten verteilt. "Leider" hat dasselbe Makro einwandfrei funktioniert ^^ Es muss auf alle Fälle mit dem Control zusammenhängen, da es ohne ja funktioniert. Das Formular mit dem Fehler kann ich nun nicht hochladen und da der Teufel dort offensichtlich im Detail liegt, macht es wohl tatsächlich keinen Sinn diesen Eintrag weiter zu führen. Wäre ja möglich gewesen das jemand diese Problematik schon mal gehabt hat.

trotzdem Danke für die Mühe ^^

Gruß
Steppenwolf
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
Antworten