Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


Hallo Andreas, Regina, Thomas, Robert, *,

Roberts Beschreibung ist vielleicht ohne Anschauen des Makros nicht so eindeutig: SStrg+Tab funktioniert nicht beim Spung von einem Tabellenkontrollelement in einem Formular zu einem anderen Formular (zumindest fast nie, ich habe einen Fall, wo das mal geht, den ich jedoch nicht - nicht einmal im selben Dokument - reproduzieren kann). Es funktioniert aber wohl von einem anderen Kontrollelement, also einzelnes Feld, Auswahlliste usw. aus. Und es funktioniert auch bei Tabellenkontrollelementen, wenn man das Formulardokument im Bearbeitungsmodus geöffnet hat und dann dort den Designmodus ausschaltet, aber eben nicht, wenn man das Formular direkt im Datenverwaltungsmodus geöffnet hat. Ich will da einen Bug eröffnen. Roberts Frage zum Testen bezieht sich auf eine verwandtes Thema, und das Testprogramm mit dem Springen ist eigentlich nur eine bequemes Mittel, das Phänomen zu zeigen: ich hatte versucht, den Formularwechselselbst zu programmieren, am liebsten mit Strg+Tab, aber das funktioniert nicht, weil erst die LibO-Funktion ausgeführt wird, z.B. von einemEinzelfeld aus, und dann erst das Ereignis ausgelöst wird, wobei die Source irritierenderweise *das gerade erst angesprungene Tabellenkontrollelement* ist. Dabei haben Robert und ich entdeckt, dass die Reihenfolge, in der die Elemente der Form durch ElementNames geliefert werden, unterschiedlich ist, bei (meinem) Windows 10 genauso wie im Navigator, bei Roberts Linux offenbar in umgekehrter Reihenfolge. Ich bin jetzt - weil Regina in verschiedenen Versionen von LibO unterschiedliche Ergebnisse hat - darauf gekommen, mal den Zugriff über den Index auszuprobieren, was bei mir zum gleichen Verhalten führt. Um das Programm daraufhin umzustellen, muss man nur

 * einmal in firstChild getByName(oForm.elementNames(i)) durch
   oForm.getByIndex(i) ersetzen
 * und zweimal in nextBrother getByName(oParent.ElementNames(i)) durch
   oParent.getByIndex(i)

ersetzen. Hier ist aber auch der gesamte Code zum Reinkopieren:

Sub nextForm (evt as object)

dim oCtrl as object, oForm as object, oController as object

oCtrl = evt.source.Model
oForm = oCtrl.Parent
if evt.Modifiers = com.sun.star.awt.KeyModifier.MOD2 AND evt.KeyCode = 1027 then ' = Alt ' = Nach-Rechts
    oController = ThisComponent.getCurrentController()
    firstChild(oForm, oController)
end if

end sub

sub firstChild(oForm as object, oController as object)

dim i as long, elem as object

    for i = 0 to oForm.Count - 1
        elem = oForm.getByIndex(i) 'getByName(oForm.elementNames(i))
        if elem.ServiceName = "stardiv.one.form.component.Form" then
            storeTargetForm = elem.Name
            oController.getFormController(elem).activateFirst
            exit sub
        end if
    next
'        no subform found
    nextBrother(oForm, oController)

End Sub

function nextBrother(oForm as object, oController as object)
' recursive function, looking for next brother in parent a f t e r oForm

dim oParent as object, i as long, elem as object
dim formFound as boolean

    oParent = oForm.Parent
    formFound = False
    for i = 0 to oParent.Count - 1
        elem = oParent.getByIndex(i) 'getByName(oParent.ElementNames(i))
        if elem.ServiceName = "stardiv.one.form.component.Form" then
            if formFound then
                storeTargetForm = elem.Name
                oController.getFormController(elem).activateFirst
                exit function
            end if
if oForm.Name = oParent.getByIndex(i).Name then formFound = TRUE
        end if
    next
if oParent.ServiceName = "stardiv.one.form.component.Form" then 'then the parent of this object is either a form or oDoc.Drawpage.Forms
        nextBrother(oParent, oController)
      else
'        msgbox "letzte Form erreicht"
firstChild(oParent, oController) 'activate first form on highest level
    end if

end function

Wenn Robert und Thomas das mit dem neuen Code noch mal wiederholen (evtl. Regina mit der alten Libo-Version) und, wie ich hoffe, alle das gleiche Ergebnis kriegen, dann wissen wir, dass auf ElementNames bzgl. Reihenfolge kein Verlass ist, aber dass es mit dem Index wohl konsistent auf allen BS funktioniert.

Gruß

Gerhard

Am 16.06.2017 um 16:51 schrieb Andreas Säger:
Am 13.06.2017 um 19:52 schrieb Robert Großkopf:
Hallo *,

Gerhard (Weydt) hat beim Navigieren durch ein Formular festgestellt,
dass Sprünge von einem Hauptformular zu einem Unterformular und wieder
zurück häufig über die Tastatur nicht möglich sind. Daraufhin hat er ein
Strg+Tab funktioniert bei mir immer.





--
Liste abmelden mit E-Mail an: discuss+unsubscribe@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/discuss/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.