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
- Re: [de-discuss] Navigationsproblem in Formulare - Tester gesucht (continued)
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.