Servus
Ein einfacher und sehr effektiver Tip für Dich:
Nimm vor jeder Schleife, generell wenn Du weisst, dass Du das gleiche Objekt mehrfach verwenden wirst, immer den kürzesten Weg.
Code: Alles auswählen
for f = 0 to 99
oFarben.getControl("Label" & f+1).Model.backgroundcolor = FaLi(iFaPal, f)
oFarben.getControl("Label" & f+1).Model.HelpText = " " & FaLi(iFNa, f)
next f
In jedem Schleifendurchlauf wird also der Name des gewünschten Labels zusammengesetzt, dann wird das Label aus allen Controls herausgesucht, dann wird dort das Model gesucht, dann wird der HelpText/die Hintergrundfarbe gesetzt. Und das (in der ursprünglichen Form) 2 Mal.
Das ist aber unnötig.
Den Weg kannst Du abkürzen:
Code: Alles auswählen
for f = 0 to 99
oCtl = oFarben.getControl("Label" & f+1)
oCtl.Model.backgroundcolor = FaLi(iFaPal, f)
oCtl.Model.HelpText = " " & FaLi(iFNa, f)
next f
Das dürfte grob über den Daumen gepeilt schonmal 10% Geschwindigkeitszuwachs bringen, weil das zweimalige Heraussuchen des Labels entfällt.
Wie man sieht, gibt es aber noch einen kleineren gemeinsamen Nenner: .Model
Warum also nicht:
Code: Alles auswählen
for f = 0 to 99
oCtlModel = oFarben.getControl("Label" & f+1).Model
oCtlModel.backgroundcolor = FaLi(iFaPal, f)
oCtlModel.HelpText = " " & FaLi(iFNa, f)
next f
Macht nochmal grob geschätzt 10% gut.
Das nur zum Verständnis, wenn Du in Zukunft an Performance-Tuning gehst - gerade OOo Basic ist da sehr, sehr empfänglich für derlei Tuning-Massnahmen.
Das "holen" von gewünschten Objekten (Zellen, Tabellensheets, Steuerelemente etcetc) wird immer wieder so ausgeführt, als würdest Du das gewünschte Ziel das erste Mal ansprechen. Daher ist auch das
-Konstrukt im Gegensatz z.B. zu VBA, wo es in der Regel einen enormen Performance-Zuwachs bedeutet, in OOo überflüssig, zumindest was die Performance angeht.
Langer Reder, kurzer Sinn:
Was Dir weiterhilft, ist der sogenannte
Space-time-tradeoff, also der Tausch von (Speicher-)Platz gegen Zeit. Du opferst Arbeitsspeicher für Ausführzeit. Heutzutage, in dem Umfang, den normale Makros annehmen, ohne jegliches Bedenken machbar.
Du weisst von vornherein, welche Label Du ansprechen willst. Also speicher Dir die Labels respektive deren Models von vornherein im Arbeitsspeicher.
Dieses Array befüllst Du direkt nach dem Start mit den Referenzierungen auf Deine Objekte:
Code: Alles auswählen
(...)
oFarben = CreateUnoDialog(DialogLibraries.Standard.DlgFarbe)
for f = 0 to 99
aLabels(f) = oFarben.getControl("Label" & f+1).Model
next f
(...)
und sparst Dir dann in "Fuellen" sehr, sehr viel Arbeit:
Code: Alles auswählen
sub Fuellen
for f = 0 to 99
aLabels(f).backgroundcolor = FaLi(iFaPal, f)
aLabels(f).HelpText = " " & FaLi(iFNa, f)
next f
end sub
Ich kenne wenige, wenn nicht gar keine Programmiersprache, bei denen diese Methode so viel Geschwindigkeitszuwachs bringt wie bei OOo Basic.
Solange die Lesbarkeit nicht darunter leidet, empfehle ich Dir, immer diesen Weg zu gehen, sobald Du der Meinung bist, dass etwas doch ein wenig schneller laufen sollte - allerdings auch nur dann. Ansonsten nimm einfach immer den kürzesten Weg, sprich:
wenn Du ein Objekt über "eine Ecke" (oDoc.Sheets.getByName("X")) oder sogar mehrere Ecken mehr als einmal ansprechen willst/musst, nimm eine lokale Variable, in der Du Dir die Zwischenschritte ersparst (oSheets = oDoc.Sheets : oSheets.getByName("X")). Je öfter Du das Objekt ansprichst und je tiefer es liegt (ala: oFarben.getControl("Label" & f+1).Model), desto wertvoller wird diese Vorgehensweise.