Seite 1 von 1

Basic: Aufruf per Tabellen-Ereignis "DoppelKlick", dann Auswahl einer Zelle per current controller … [gelöst]

Verfasst: So 24. Mär 2024, 09:03
von nitja
… führt dazu, dass die zuletzt (per controller) ausgewählte Zelle in unerwünschten Modus (Eingabezeile aktiviert) versetzt wird. … eben so, als hätte ich auf diese Zelle selbst doppelt geklickt (Eingabezeile über der Tabelle aktiviert).
Das stoppt den Fluss bei der manuellen Eingabe der Daten in die (weiteren) Zellen dieser Zeile.
(Wenn ich die Zelle bei der manuellen Eingabe einfach klicke, kann ich den Wert eintragen ohne die Eingabezeile über der Tabelle zu aktivieren und z.B. mit der [→]-Taste die nächste Zelle auswählen.
(Zwischen dem auslösenden Ereignis und der Auswahl der genannten Zelle ändert das Makro noch Daten an anderen Zellen, passt sie an die Änderung in der auslösenden Zelle an.)

Das Verhalten lässt sich per IDE nicht ohne weiteres beobachten/korrigieren, da an Haltepunkten die IDE aktiviert und die Tabelle deaktiviert wird. Nach anschließendem Klick auf das Tabellenfenster, befindet sich die Zelle im erwünschten Modus.

Frage: Wie kann ich das gewünschte Verhalten erreichen, ggf. die Tabelle per Makro de- & sofort wieder re-aktivieren, ohne den Fluss bei der Eingabe zu unterbrechen?

(Merkwürdig ist auch, dass das Makro "onDblClk" erst nach einigen/etlichen Läufen im Menü Tabelle»Ereignisse angezeigt wird aber vom Öffnen der enthaltenden ods.-Datei an aktivierbar ist / auf Doppelklicks reagiert.)

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick" & nachfolgend Auswahl einer (anderen) Zelle per current controller

Verfasst: So 24. Mär 2024, 10:03
von karolus
hallo
Um dir zu helfen wäre es hilfreich wenn du ein Beispiels_Dokument und das Makro postest!

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick" & nachfolgend Auswahl einer (anderen) Zelle per current controller

Verfasst: So 24. Mär 2024, 10:45
von nitja
karolus hat geschrieben:
So 24. Mär 2024, 10:03
… Dokument und das Makro postest!
Dank Dir für Deine Reaktion! … und klar, aber …
da steht schon sehr Persönliches drin, was ich nicht veröffentlichen möchte (per Mail an Einzelne wäre eher möglich).
Um eine neue .ods-Datei mit der Struktur u.s.w. zusammen zu bauen, würde ich mindestens bis morgen Mittag brauchen.

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick" & nachfolgend Auswahl einer (anderen) Zelle per current controller

Verfasst: So 24. Mär 2024, 11:00
von karolus
Hallo

Es geht eigentlich recht schnell reale Daten z.B. per Suchen&ersetzen in »xxxyyyyzzz« zu verwandeln.

Vielleicht erschliesst sich das Problem auch schon nach Ansicht des MakroCodes?

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick" & nachfolgend Auswahl einer (anderen) Zelle per current controller

Verfasst: So 24. Mär 2024, 12:02
von mikele
Hallo,
bei Doppelklick ist es das Dilemma, dass dieses Ereignis schon im System vergeben ist. Daher muss dem Makro mitgegeben werden, dass es so zu sagen anstellen des Systemereignisses fungiert. Das ist aber recht einfach, denn man muss im nur einen logischen Wert als Ergebnis mitgeben:

Code: Alles auswählen

Sub doppelklick (oevent) as boolean
	
	'dein Code
	
	doppelklick=true
End Sub


Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick" & nachfolgend Auswahl einer (anderen) Zelle per current controller

Verfasst: So 24. Mär 2024, 12:16
von nitja
oops - das folgende geht @ 'karolus' - 2 posts hier drüber

Schon klar. Ich hatte gehofft, dass hier jemand liest, der schon mal selbst über das beanstandete Verhalten gestolpert ist und (s)eine Lösung parat hat.
Jetzt muss ich den Rechner für ~ 5h verlassen. Wenn ich dann zurück bin, werde ich eine (viel) kleinere Beispiel-.ods-Datei (mit u.a. anderen Gültigkeitsbedingungen, Beschriftungen und Symbolen - mit den reinen Daten ist's nicht erledigt) aufsetzen. Dass ich's noch vor Mitternacht hier posten kann, halt' ich für eher unwahrscheinlich.
Aber morgen ist ja (vermutlich) auch noch ein Tag und da ich seit Wochen (Monaten?) mit dem Projekt kämpfe, kommt's darauf nimmer an.

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick" & nachfolgend Auswahl einer (anderen) Zelle per current controller

Verfasst: So 24. Mär 2024, 12:25
von nitja
mikele hat geschrieben:
So 24. Mär 2024, 12:02

Code: Alles auswählen

Sub doppelklick (oevent) as boolean
	
	'dein Code
	
	doppelklick=true
	
End Sub
:o Ha! :P Wenn das so einfach ist, hat sich ja meine ursprüngliche Hoffnung bestätigt.
Werde ich zw. 17 und 18h ausprobieren und mich dann wieder melden.

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick" & nachfolgend Auswahl einer (anderen) Zelle per current controller

Verfasst: So 24. Mär 2024, 18:41
von nitja
mikele hat geschrieben:
So 24. Mär 2024, 12:02
… bei Doppelklick ist es das Dilemma, dass dieses Ereignis schon im System vergeben ist …
Das hatte ich geahnt. Und dass ich dem "System" mitteilen muss, dass es erledigt ist. … konnte mich freilich nicht mehr erinnern wie.

Code: Alles auswählen

function onDblClk(oCell as object) as boolean
	dim … <lokale Variablen>
	onDblClk=true						'' Bingo! Volltreffer!
	<
	… Verarbeitungscode …
	>
	with oDataSht						'' diese Variablen sind für das Modul definiert
		oCtrlr.select(.getCellByPosition(iCol,iRow))	'' (neue) iCol, iRow werden in der "Verarbeitung" 
	end with 'oDataSht					'' berechnet
end function 'onDblClk
Funktioniert wie gewünscht. (Dass die ausgewählte Zelle anders als bei manuellem Klick grau hinterlegt ist, stört nicht weiter.)

Also super-fettes Dankeschön an 'mikele'!
… und auch lieben Dank an 'karolus' für die erste, schnelle Reaktion auf diesen Thread!

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick", dann Auswahl einer Zelle per current controller … [gelöst]

Verfasst: So 24. Mär 2024, 19:44
von mikele
Hallo,
schön, dass es funktioniert. Irgendwo habe ich auch mal eine Dokumentation/Erklärung dazu gelesen, aber die finde ich auch nicht mehr.
Um am Ende die Auswahl der Zelle zu beseitigen, gibt es den Trick ein Dummy-Zellobjekt auszuwählen:

Code: Alles auswählen

with oDataSht						'' diese Variablen sind für das Modul definiert
		oCtrlr.select(.getCellByPosition(iCol,iRow))	'' (neue) iCol, iRow werden in der "Verarbeitung" 		
	end with 'oDataSht
	REM Erzeugt einen leeren Service SheetCellRanges und wählt ihn aus.
	REM Dadurch bleibt NUR die aktive Zelle ausgewählt.
	oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
	oCtrlr.Select(oRanges)
	
siehe: Andrew Pitonyak: BASIC-Makros für OpenOffice und LibreOffice, Kapitel 15.8.1. Ausgewählte Zellen
https://makromador.wordpress.com/oome-o ... explained/

Re: Basic: Aufruf per Tabellen-Ereignis "DoppelKlick", dann Auswahl einer Zelle per current controller … [gelöst]

Verfasst: Mo 25. Mär 2024, 00:18
von nitja
👍 👏 !
Die Erweiterung macht tatsächlich die Ästhetik des Makros noch netter.
Das "Listing 478" im genannten Kapitel hatte ich für die Funktion schon angeschaut und Anregungen daraus getestet. Hat nicht funktioniert.
Auf die Idee, das anschließend  für die Kosmetik einzusetzen, bin ich ich blöder Weise nicht selbst gekommen. Erst Dein Vorschlag hat mich daran erinnert.
Also auch dafür ein fettes Dankeschön!