BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Ereignisbehandlung für Eingabetaste

Alles zur Programmierung im OpenOffice.org
kodela
Beiträge: 107
Registriert: Di 22. Jul 2014, 20:08

Ereignisbehandlung für Eingabetaste

Beitrag von kodela » Mo 4. Mai 2015, 00:19

Hallo,

kann mir jemand sagen, ob es unter Calc möglich ist, die Betätigung der Eingabetaste (oder auch der Tab-Taste) abzufangen, damit über ein Makro der Fokus auf die erste Zelle der nächsten Zeile gelegt werden kann.

Hintergrund: In einer Zeile sind für die Zellen von Spalte A bis zur Spalte E Eintragungen zu machen. Nach dem Eintrag in Spalte E soll die Eingabe in Spalte A der Folgezeile fortgesetzt werden.

Mit den Defaulteinstellungen erhält bei Betätigung der Eingabetaste die darunter liegende und für die Tab-Taste die nächste Zelle rechts den Fokus.

Danke schon einmal im Voraus für jedes Nachdenken.

MfG, kodela

kodela
Beiträge: 107
Registriert: Di 22. Jul 2014, 20:08

Re: Ereignisbehandlung für Eingabetaste

Beitrag von kodela » Mo 4. Mai 2015, 12:43

nikki hat geschrieben:Wenn ich in Zeile 1 die Spalten A1 bis E1 benutze und ich drücke nach der Eingabe in E1 die Eingabetaste, wird der Cursor auf die Zeile 2 in die Zelle A2 gesetzt und dies mit der folgenden Einstellung:
...
Entspricht also exakt Deiner Vorstellung.
Hallo nikki,

erst einmal vielen Dank für Deine Antwort. Leider ist das bei mir nicht so wie bei Dir. Mit genau dieser Einstellung wird bei mir der Cursor nicht auf die Zelle A2 sondern auf E2 gesetzt. Es muss also noch irgend eine andere Einstellung geben, die Einfluss auf das Verhalten der Eingabetaste hat und die bei mir nicht so ist, wie bei Dir. Anders kann ich mir das nicht erklären.

MfG, kodela

kodela
Beiträge: 107
Registriert: Di 22. Jul 2014, 20:08

Re: Ereignisbehandlung für Eingabetaste

Beitrag von kodela » Mo 4. Mai 2015, 13:30

Hallo nikki,

Ursache für das unterschiedliche Verhalten bei Dir und mir ist die unterschiedliche Vorgehensweise für die Eingabe der Werte. Wenn man (vermutlich wie Du) mit der Zelle Ax beginnt und nach jedem Eintrag mit der Tab-Taste zur jeweils nächsten Zelle wechselt und in der Zelle Ex mit der Eingabetaste abschließt, dann wird der Fokus so wie von Dir beschrieben auf die erste Zelle der nächsten Zeile gesetzt.

Bei mir werden allerdings die Werte für die beiden ersten Zellen (Ax und Bx) über ein Makro gesetzt. Anschließend hat die Zelle Cx den Fokus und ich trage den Wert über die Tastatur ein. Danach kann ich nicht über die Tab-Taste nach Dx wechseln. Calc reagiert auf die Tab-Taste überhaupt nicht. Das liegt vermutlich an der Art und Weise, wie ich über das Makro den Fokus auf die Zelle Cx setze.

Ich kann jedoch mit der Pfeiltaste-Rechts zu Dx wechseln. Im Anschluss daran reagiert die Tab-Taste wieder, aber ich gehe weiter über die Pfeiltaste bis zu Ex und beende dann mit der Eingabetaste.

Gehe ich ab der Zelle Dx mit der Tab-Taste zu Ex und beende dort mit der Eingabetaste, dann bekommt die Zelle Dy den Fokus. Also selbst wenn ich es hinbekommen würde, dass vom Makro der Fokus in anderer Weise auf Cx gesetzt würde und ich sofort von dort aus mit der Tab-Taste weiter machen könnte, würde ich damit nichts gewinnen.

Vielleicht ist es möglich, das Makro so zu gestalten, dass Calc vorgegaukelt wird, jeder Zellwechsel von Ax bis Ex ist über die Tab-Taste ausgeführt worden.

Jetzt kannst Du Dir sicher auch vorstellen, warum ich nach einer Ereignisbehandlung für die Eingabetaste gefragt habe.

Im Anhang ist eine Testdatei, damit man das Verhalten ausprobieren kann.

MfG, kodela
Dateianhänge
Eingabetaste.ods
Testdatei für das Verhalten der Eingabetaste
(16.2 KiB) 340-mal heruntergeladen

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Ereignisbehandlung für Eingabetaste

Beitrag von mikele » Do 7. Mai 2015, 15:11

Hallo,

füge in deinem Quelltext nach der Zeile
oDoc.CurrentController.Select(oZelle)
die Zeilen
oDummy = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
oDoc.CurrentController.Select(oDummy)
ein. Dadurch bleibt die aktive Zelle aktiv, aber nicht mehr im "Status" ausgewählt. Dann klappt es auch mit der Tabulatortaste.
Gruß,
mikele

kodela
Beiträge: 107
Registriert: Di 22. Jul 2014, 20:08

Re: Ereignisbehandlung für Eingabetaste

Beitrag von kodela » Do 7. Mai 2015, 17:27

Hallo mikele,

danke für Deinen Hinweis. Leider habe ich damit nur einen Teilerfolg. Die Tab-Taste funktioniert und auf die Eingabe-Taste geht der Fokus auf die darunter liegende Zeile, jedoch nicht nach An+1 sonder auf Cn+1, also unter die Zelle, ab der ich die manuellen Eintragungen vorgenommen habe.

Mein Makro beginnt für einen Datensatz jedoch mit der automatischen Eintragung von Datum (in An) und aktuelle Uhrzeit (in Bn), setzt dann zum Schluss den Fokus auf Cn. Von dort aus sind manuell in drei Eintragungen zu machen, die letzte in En. Nach der Eintragung in En sollte die Eingabe über die Eingabe-Taste beendet werden und die Zelle An+1 den Fokus bekommen.

Das Makro müsste sich also die Zelle "merken", ab der die erste Eintragung vorgenommen wird, also die Zelle An, in der das Datum eingetragen wird. Ich habe das mit Deinen Codezeilen versucht, aber leider bisher erfolglos.

Gut, die Sache ist nicht von großer Bedeutung. Mir geht es eigentlich nur um das Prinzip. Und wenn man das Ereignis "Eingabe-Taste gedrückt" abfangen hätte können, dann hätte ich dies auch auswerten können. Hast Du eine Ahnung, ob man so etwas wie einen eigenen Event-Handler setzen kann?

MfG kodela

karolus
Beiträge: 651
Registriert: Di 23. Feb 2010, 12:07

Re: Ereignisbehandlung für Eingabetaste

Beitrag von karolus » Do 7. Mai 2015, 18:28

Hallo

Calc erledigt eigentlich diese ganze "Ereignisbehandlung" schon wenn du:

a. den gewünschten Bereich vor Eingabe-start explizit markierst.

oder

b. das Tabellenblatt vorkonfigurierst mit mit entsprechenden ungeschützten und geschützten Bereichen, und das Tabellenblatt schützt( →Extras→Dokument schützen→[x]Tabelle

kodela
Beiträge: 107
Registriert: Di 22. Jul 2014, 20:08

Re: Ereignisbehandlung für Eingabetaste

Beitrag von kodela » Fr 8. Mai 2015, 01:18

Hallo karolus,

danke für Deine Hinweise, zu denen ich noch Fragen hätte. Es wäre sehr nett von Dir, wenn Du mir zu einem besseren Verständnis helfen könntest. Du schreibst:
Calc erledigt eigentlich diese ganze "Ereignisbehandlung" schon wenn du:
a. den gewünschten Bereich vor Eingabe-start explizit markierst.
Was habe ich unter "gewünschten Bereich" zu verstehen?

Das Makro hat lediglich die Aufgabe, in der markierten Zelle ein Datum und in der Zelle rechts davon eine Uhrzeit einzutragen. Dabei prüft es, ob die selektierte Zelle in der Spalte A liegt und in der Zelle über ihr ein Datum eingetragen ist. Ist dieses Datum nicht vom Vortag, dann wird das Datum für den nächsten Tag und in der Zelle rechts davon als Uhrzeit 12:00 eingetragen. In den nächsten drei Zellen dieser Zeile werden die Mittelwerte aller darüber liegenden Wert der jeweiligen Spalte eingetragen. Dies wird so lange fortgesetzt, bis das eingetragene Datum dem Vortag des aktuellen Datums entspricht.

Ist das Datum in der letzten belegten Zelle der Spalte A vom Vortag, wird nur das aktuelle Datum und die Uhrzeit eingetragen, die Zelle in der Spalte C selektiert und das Makro beendet. Es folgt das manuelle Ausfüllen der drei Zellen in den Spalten C, D und E. Nach dem letzten Eintrag wird Eingabe über die Eingabe-Taste abgeschlossen. Damit sollte der Fokus auf die erste Zelle (Spalte A) der nächsten Zeile gesetzt werden.

Ich kann mir nicht vorstellen, welchen Bereich, den ich explizit markieren soll, Du meinst.

Ähnlich geht es mir mit der von Dir aufgezeigten Alternative b. Was soll ich hier schützen und was nicht, damit nach Beendigung der Eingabe der Fokus auf die Zelle der Spalte A in der ersten freien Zeile gesetzt wird?

MfG, kodela

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Ereignisbehandlung für Eingabetaste

Beitrag von mikele » Fr 8. Mai 2015, 13:18

Hallo,

anbei die Variante mit geschützten Bereichen (Spalten A-C sind ungeschützt). Jetzt kannst du mit der Tabulatortaste von Zelle zu Zelle gehen (z. B. nach C10 springt der Focus auf A11).
Dateianhänge
Eingabetaste.ods
(39.86 KiB) 273-mal heruntergeladen
Gruß,
mikele

kodela
Beiträge: 107
Registriert: Di 22. Jul 2014, 20:08

Re: Ereignisbehandlung für Eingabetaste

Beitrag von kodela » Fr 8. Mai 2015, 23:44

Hallo mikele,

Danke für die Mühe, die Du Dir mit mir gemacht hast. Es funktioniert zwar noch nicht ganz so, wie ich es mir vorgestellt habe, aber nach etwas Verwirrung, warum Du nur die Spalten A-C ungeschützt hast, habe ich dann aber doch festgestellt, dass die Spalten A-E ungeschützt sind. Ja, und damit kommt man mit der Tab-Taste von E10 nach A11. Mit der Eingabetaste kommt man allerdings von E10 nicht nach A11 sondern nach C11.

Wie ich schon in einem meiner Beiträge erwähnt habe, geht es mir hier nicht um dieses Beispiel, es ging mir eigentlich um die grundsätzliche Frage, wie man das durch eine Macroeintragung gestörte Standardverhalten von Calc "reparieren" kann.

Wenn man zum Beispiel in D7 eine Eintragung vornimmt und mit der Tab-Taste zu D15 geht, unterwegs Eintragungen macht oder auch nicht und jetzt in D15 die Eingabetaste drückt, springt der Fokus von standardmäßig von D15 auf D8, vorausgesetzt für die Option Eingabebestätigung setzt die Selektion nach ist der Parameter unten eingestellt.

Das funktioniert offensichtlich nicht mehr, wenn die Selektion (Fokus) über ein Makro oder eine der Pfeiltasten erfolgt ist.

Nochmals vielen Dank für Deine Hilfe.

MfG, kodela

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Ereignisbehandlung für Eingabetaste

Beitrag von mikele » Sa 9. Mai 2015, 14:22

Hallo,

das unterschiedliche Verhalten ist mir jetzt erst bewusst aufgefallen.
Wenn man z. B.
a) von C3 mit Tab nach D3 und dann dann nach E3 geht, führt ein Enter zum Sprung nach C4
b) das Ganze in C3 beginnt springt Enter von E3 nach A4
c) das Ganze nicht mit der Tabulatortaste, sondern mit den Pfeiltasten macht, springt Enter nach E4
Irgendwie (?) und irgendwo (?) merkt sich Calc, wo man die EIngaben mit Tabulatortaste beendet und führt dann den entsprechenden Sprung in die nächste Zeile aus. Calc "erkennt" also ein Eingabeschema - an sich ein sinnvolles Verhalten, aber ich habe gegenwärtig keine Ahnung wo und wie man das (per Makro) beeinflussen kann. Mal sehen ob ich noch fündig werde ...

Ich glaube, dass es dein eigentliches Ziel ist, dass beim Aufruf deines Makros die nächste leere Zeile benutzt wird. Dazu habe ich dein Makro mal abgewandelt.
Dateianhänge
Eingabetaste_2.ods
(40.6 KiB) 304-mal heruntergeladen
Gruß,
mikele

Antworten