Seite 1 von 1
Calc: Cursor in Zelle
Verfasst: Fr, 24.07.2015 11:15
von urbarobe
Hallo,
wie kann ich feststellen, dass sich der Cursor in einer Zelle befindet (Cursor blinkt)?
Gruß
Robert
Re: Calc: Cursor in Zelle
Verfasst: Fr, 24.07.2015 17:11
von komma4
Ist mir in meiner Karriere als Programmierer noch nicht untergekommen, dass dieser Fall genutzt werden kann (oder: muss).
Wozu brauchst Du das?
Re: Calc: Cursor in Zelle
Verfasst: Fr, 24.07.2015 20:50
von Stephan
ich finde hier:
https://forum.openoffice.org/en/forum/v ... 18#p340196
einen Code der sich augenscheinlich eignet die gewünschte Info zu bekommen, mir ist das aber zu kompliziert das weiter zu verfolgen ehe nicht klar ist wofür das überhaupt benötigt wird.
Gruß
Stephan
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 09:44
von urbarobe
Hallo,
ich habe einen Button in meiner Symbolleiste, der dazu führt, dass ein Makro ausgeführt wird, in dem Änderungen
nur gespeichert werden, wenn auch Änderungen an der Tabelle vorhanden sind. Solange aber die Eingabe in der
Zelle ist, gibt es keine Änderung (Flag isModified ist nicht gesetzt). Ich möchte verhindern, dass der Button gedrückt
werden kann, solange die Eingabe in der Zelle ist.
Die Anwendung gibt es auch in MS Excel. Wenn ich mich hier in der Zelle befinde und auf den Button drücke, dann
wird das Makro nicht ausgeführt solange sich die Eingabe in der Zelle befindet. Das musste ich nicht programmieren.
Gruß
Robert
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 10:17
von Stephan
ich habe einen Button in meiner Symbolleiste [...]
[...]
Ich möchte verhindern, dass der Button gedrückt
werden kann, solange die Eingabe in der Zelle ist.
kann ich leider nicht weiterhelfen.
Die Anwendung gibt es auch in MS Excel. Wenn ich mich hier in der Zelle befinde und auf den Button drücke, dann
wird das Makro nicht ausgeführt
Was aber ein Unterschied (=Button gedrückt aber Makro wird nicht ausgeführt) zur obigen Frage (=Button darf nicht gedrückt werden können) ist.
Da es hier nur darauf ankäme das Makro (bzw. einen relevanten Teil des Makros) nicht auszuführen könnte man u.U. indirekt auf den Zustand des Cursors schließen weil der Zelleditmodus meiner Ansicht nach nur über Doppelklick oder Taste F2 erreichbar ist und Beides könnte man detektieren.
Gruß
Stephan
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 14:28
von komma4
urbarobe hat geschrieben:dass ein Makro ausgeführt wird, in dem Änderungen
nur gespeichert werden, wenn auch Änderungen an der Tabelle vorhanden sind
Dann verstehe ich wohl den Sinn der Eigenschaft
ThisComponent.Modified wohl nicht.
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 14:53
von urbarobe
@komma4
Meinst Du das Flag manuell setzen, um das Speichern auszulösen?
Nützt nichts. Solange der Cursor noch in der Zelle ist, gibt es die Änderung an der Tabelle nicht.
Gruß
Robert
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 15:22
von komma4
urbarobe hat geschrieben:Solange der Cursor noch in der Zelle ist, gibt es die Änderung an der Tabelle nicht.
Wenn es keine Änderung ist, dann gibt es auch nichts zu speichern (eine event. Eingabe/Änderung kann durch
ESC ja verworfen werden.
Wurde die Zelle durch den gleichen Inhalt "überschrieben" ist das
flag gesetzt.
Um diesen Fall abzufangen musst Du gegen eine Kopie vergleichen.
Mir ist der Anwendungsfall noch immer nicht klar.
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 15:30
von Stephan
Meinst Du das Flag manuell setzen, um das Speichern auszulösen?
mutmaßlich doch wohl nein, da dieses Flag zum Speichern per Makro ganz ohne Bedeutung ist.
Nützt nichts. Solange der Cursor noch in der Zelle ist, gibt es die Änderung an der Tabelle nicht.
?
DU SELBST schreibst ein Makro zu dem Du sagst:
"dass ein Makro ausgeführt wird, in dem Änderungen
nur gespeichert werden, wenn auch Änderungen an der Tabelle vorhanden sind"
Wenn das nicht so sein soll, dann schreibe das Makro eben so das auch gespeichert wird wenn es keine Änderungen gibt.
Nö, ich weiß nicht ob das Sinn macht ich weiß nur das Du es augenscheinlich so haben willst, denn sonst würdest Du hier nicht die Eigenschaft "isModified " auswerten sondern ganz einfach speichern wenn Du denn speichern willst (oder nicht speichern wenn Du nicht speichern wilst).
Gruß
Stephan
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 15:36
von urbarobe
Anwendungsfall:
1. Anwender öffnet eine Tabelle
2. Anwender ändert den Wert einer Zelle und schließt dies nicht mit ENTER ab
3. Anwender drückt Button
4. Dialog zum Drucken und Speichern/Schließen der Tabelle erscheint
5. Dokument wird gedruckt und geschlossen
--> Ausdruck ohne Änderung, Tabelle ohne Änderung gespeichert
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 15:59
von Stephan
z.b. das Folgende tut die relevanten Schritte, Drucken ohne Änderungen und Schliessen, die Tatsache das eine Zelle im Edit-Modus ist wird dabei ignoriert, also auch keine Änderung am Zellinhalt gedruckt:
Code: Alles auswählen
sub Main
Dim printProp(0) as New com.sun.star.beans.PropertyValue
printProp(0).Name = "Wait"
printProp(0).Value = true
ThisComponent.Print(printProp())
ThisComponent.Close(True)
end sub
Gruß
Stephan
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 16:03
von clag
Hallo urbarobe,
irgendwie kann ich dein Vorhaben nicht vestehen bringt es doch einige Gefahren mit sich,
(wenn die User nicht in der lage sind Enter zu drücken, weiß man wohl auch nicht vorher ob die Eingaben und somit das Ergebnis korrekt ist)
mit so unsicheren Daten die mehr oder weniger zufällig entstehen würde ich nicht arbeiten wollen oder sinnlos Papier bedrucken.
Erziehe den/die User dazu auf Enter zu drücken, dann kann das Ergeniss geprüft und ggf korrigiert werden.
PS
es kann sich ja nur um einen Zelleninhalt handeln da gibt es doch andere Wege eine korrekte
und vollständige Eingabe in die Tabelle zu übernehmen, zB über Gültigkeit oder einen Dialog!?
Re: Calc: Cursor in Zelle
Verfasst: Mo, 27.07.2015 20:22
von F3K Total
Hallo zusammen,
ich könnte mir vorstellen, dass
urbarobe genau dass Gegenteil meint, dass eben der eingetippte Wert, wenn vergessen wird, die Eingabetaste zu drücken, trotzdem mit ausgedruckt werden soll.
Das geht, indem man den Cursor z.B. in Zelle A1 zwingt:
Code: Alles auswählen
Sub Drucken
oSheet = thiscomponent.CurrentController.activeSheet
oCell = oSheet.getcellbyposition(0,0)
thiscomponent.CurrentController.select(ocell)
Dim printProp(0) as New com.sun.star.beans.PropertyValue
printProp(0).Name = "Wait"
printProp(0).Value = true
ThisComponent.Print(printProp())
End Sub
EDIT
Oder besser, zunächst in die Nachbarzelle und dann zurück in die ursprüngliche Zelle:
Code: Alles auswählen
Sub Drucken
oSheet = thiscomponent.CurrentController.activeSheet
osel = Thiscomponent.currentselection
oController = thiscomponent.CurrentController
if osel.supportsservice("com.sun.star.sheet.SheetCell") then
nrow = osel.CellAddress.Row
nColumn = osel.CellAddress.Column
oCell = oSheet.getcellbyposition(nrow,nColumn + 1)
oController.select(ocell)
oController.select(osel)
endif
Dim printProp(0) as New com.sun.star.beans.PropertyValue
printProp(0).Name = "Wait"
printProp(0).Value = true
ThisComponent.Print(printProp())
End Sub
Gruß R
Re: Calc: Cursor in Zelle
Verfasst: Di, 28.07.2015 02:35
von Karolus
Hallo
...genau dass Gegenteil meint...
das könnte ich mir auch vorstellen, als Lösung reicht dann die Aufzeichnung des Tastendrucks auf
F9
Code: Alles auswählen
....
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())
....
Re: Calc: Cursor in Zelle
Verfasst: Di, 28.07.2015 08:33
von urbarobe
Hallo,
es soll das gedruckt und gespeichert werden, was der Anwender sieht. Der Idealfall wäre gewesen, dass er den Button zwar drücken kann, aber nichts passiert, solange er die Eingabe nicht abgeschlossen hat.
Mittlerweile bin ich auch auf die Commands gestoßen. Hier hatte ich es mit "Deselect" probiert. War aber nicht das Richtige. Der Anwender hat im Druckdialog unter anderem die Möglichkeit, nur die Auswahl zu drucken.
Aber das hier ist der Command, den ich gesucht hatte:
Karolus hat geschrieben:Code: Alles auswählen
dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())
Danke an alle Beteiligten für die Vorschläge und Denkanstöße

.
Gruß
Robert