[gelöst] Cursor klebt

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

[gelöst] Cursor klebt

Beitrag von clag »

Hallo Kenner und Könner,

mit diesen Makro habe ich ein kleines Problem und keine Idee wo oder wie man das lösen kann.
Alles Funktioniert soweit das eintragen des Text in eine Zelle der Spalte H nach Doppelklick oder auch nicht (Abruch).
Soweit so gut.

Aber danach klebt der Cursor irgend wie an der Tabelle fest, wenn man direkt nach Ende des Dialog
zB das Tabellenblatt wechseln möchte und mit der Maus auf einen RegisterReiter klickt,
wird nicht dieser Reiter angeklickt sondern die Zelle die darunter liegt der zweite klick geht dann auf den Reiter.

Das gilt für jeden ersten Klick egal worauf man klick, man trifft nicht die Schaltfläche sondern irgend etwas in der Tabelle
beim ersten klick nach Beendigung des Dialog.

hat jemand eine Idee wie man das abstellen kann, das ist ziemlich nervig.
265464_Test_Datei_+_Dialog_flex.ods
(40.07 KiB) 111-mal heruntergeladen
Zuletzt geändert von clag am Mi, 25.03.2015 05:29, insgesamt 1-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Cursor klebt

Beitrag von balu »

Hallo clag,
der zweite klick geht dann auf den Reiter.
Nun ja, wenn das Makro an das Tabellenereignis "Doppelklick" gebunden ist, dann muss man halt doppelt klicken damit das Makro neu gestartet und neu initialisiert wird.

hat jemand eine Idee wie man das abstellen kann
Bleibt dir nix anderes übrig als das mit dem Tabellenereignis zu vergessen und stattdessen einen Listner zu programmieren. Das ist zumindest meine Empfehlung.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Cursor klebt

Beitrag von Stephan »

Ich kann das Problem nachvollziehen.

Das Verhalten des Programms ist hier wirklich ärgerlich und ich halte es für eine Programmfehler den Du melden solltest und dabei unbedingt Deine Beispieldatei anhängen.

Einen Workaround habe ich nicht. Ich hatte gehofft man könne im Makro am Ende eine Zelle explizit selektieren, das bringt aber nichts, ein nicht-modaler Dialog hilft ebenfalls nicht, vielleicht ist aber die Info von Nutzen das wen man den nicht-modalen Dialog nicht beendet man dann nebenwirkungsfrei zwischen den Tabellenblättern wechseln kann (was nun aber auch nur das Problem verschiebt, denn irgendwann muss man den Dialog beenden).

Balu hat recht mit dem Listener, nur kann ich Dir dafür 'aus dem Hut' kein Beispiel geben. Da es früher mit z.B. Selection-Change-Listener (der wegen des Doppelklicks noch nicht einmal wirklich geeignet wäre) Probleme gab bin ich bei solchen Listener-Implementierungen auf Tabellenblättern misstrauisch, weshalb ich empfehlen würde zu überlegen ob Du das Ganze nicht 'konventionell' implementieren willst, also so dass Du einen Eigebemasken-Dialog programmierst, so das jegliche Eingaben (also nicht nur Spalte H) nur in diesem Dialog erfolgen. Das wird in jedem FAll stabil laufen.
Ein sinngemäßes Beispiel ist das 'Fahrtenbuch' was Du hier unter "Beispiele" findest:
viewtopic.php?f=18&t=1553


Gruß
Stephan
mikeleb
*******
Beiträge: 1426
Registriert: Fr, 09.12.2011 16:50

Re: Cursor klebt

Beitrag von mikeleb »

Hallo,

ich kann das Verhalten ebenfalls bestätigen. Es trat bei mir übrigens auch auf, wenn ich den Dialog gar nicht ausgeführt habe.
Gruß,
mikeleb
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Cursor klebt

Beitrag von clag »

Hallo zusammen,

erst einmal Danke das ihr euch die Mühe gemacht habt das mal anzuschauen
@ Balu
ich hatte befürchtet so etwas zu lesen aber ganz kann ich deine Argumentation nicht folgen
denn der Doppelklick muss schließlich erkannt werden und in diesem Fall hätte ich erwartet,
das erst nach dem zweiten "left mouse button up" das Makro gezündet wird,
aber scheinbar geschieht das bereits nach dem zweiten "left mouse button down" und das vergessene
zweite "left mouse button up verursacht das Problem.

@ Stephan
Stephan hat geschrieben:Einen Workaround habe ich nicht.
schade ;)
und Danke für deine Hinweise.
Es war der Versuch einem anderen Fragensteller in Calc etwas zu bieten.

ich hatte an andere Stelle schon einmal das Problem, darüber bin ich dann sogar mit Karolus aneinander geraten weil
da auch der Doppelklick ein Makro starten sollte und das klemmte dann vermutlich aus dem selben Grund.


@ mikeleb
mikeleb hat geschrieben:wenn ich den Dialog gar nicht ausgeführt habe
nach welcher Aktion sonst noch?

Wenn ich auf eine nicht überwachte Zelle doppelklicke komm ich normal in den Editiermodus
nach verlassen der Zelle durch Enter oder Esc reagieren die Tabellenblattregister hier sofort?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
mikeleb
*******
Beiträge: 1426
Registriert: Fr, 09.12.2011 16:50

Re: Cursor klebt

Beitrag von mikeleb »

Hallo,

ich habe noch ein bisschen probiert:
Wenn ich die drei Code-Zeilen

Code: Alles auswählen

oDialog.Model.ControlModels(i).label = mChoices(i,0) & mChoices(i,1)

Code: Alles auswählen

iDlgOK = oDialog.Execute()

Code: Alles auswählen

oDialog.dispose()
auskommentiere, wird der Rest ausgeführt und der Cursor landet in der Zelle (klass. Doppelklick-Verhalten).
Sobald der Dialog ausgeführt wird oder auch "nur" Dialogelemente geschrieben werden (nicht beim lesen!), bleibt der Cursor (unsichtbar) im Tabellenblattbereich hängen und wird erst nach einem Klick wieder frei.
Ich hatte schon die Idee, diesen Cursorklick per Makro auszulösen, allein ich scheiterte aufgrund Unwissenheit :(
Gruß,
mikeleb
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Cursor klebt

Beitrag von clag »

hallo mikeleb,

danke das du dich noch einmal mit dem "bockigen" Cursor beschäftigt hast,
allerdings habe ich wenig Hoffnung das man das innerhalb des Makros lösen kann,
da der Doppelklick ja nicht zum Makro gehört.

Darum war ich jetzt auch bei "Bugzilla" petzen, und hoffe es wird ernst genommen.

Eventuelle Reaktionen/Lösungen werde ich hier kund tun,
oder hier Issue 126177 zum selber prüfen

wer mag kann das ja mit einem Klick auf vote etwas pushen ;)
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Cursor klebt

Beitrag von clag »

Hallo zusammen,

es gibt eine Lösung für das Problem, allerdings verstehe ich nicht wirklich wie das wirkt.
Der/die Gute hat das Makro als Funktion deklariert und eine Zeile eingefügt,
kann mir jemand erklären was hier der Unterschied zwischen Sub und Function ist?
the_solution.png
the_solution.png (20.02 KiB) 3777 mal betrachtet
der Übersicht wegen als screenshot aus einem compare zur vorher Version

und hier der korrigierte Code

Code: Alles auswählen

Function TopicsChoice(oEvent)
	odoc=thisComponent 
	iStartCol = oEvent.RangeAddress.StartColumn 
	iStartRow = oEvent.RangeAddress.StartRow 
	iStartShe = oEvent.RangeAddress.Sheet 
	if iStartCol = 7 then
		if iStartRow > 3 and iStartRow < 1000 then 
			Dim oDialog as object, oCkeckBox as object
			Dim i as integer, iDlgOK as integer, iX as Integer, iCount as Integer
			Dim	mChoices(9,1) as String 
			Dim mLongtext(9) as String
			DialogLibraries.loadLibrary( "Standard") 
			oDialogLib = DialogLibraries.getByName("Standard")
			oDialog = CreateUnoDialog(oDialogLib.getByName("Dialog1"))
			mySheet = oDoc.Sheets().getByName("Auswahl")
			iX = val(right(oDoc.sheets(iStartShe).getCellByPosition(7,3).string,1)) 
			for i=1 to 10
				mChoices(i-1,0) = mysheet.getCellByPosition(0,i).string & "   " 
				mChoices(i-1,1) = mysheet.getCellByPosition(iX,i).string
			next
			for i=0 to 9
				oDialog.Model.ControlModels(i).label = mChoices(i,0) & mChoices(i,1) 
			next
			TopicsChoice = True
			iDlgOK = oDialog.Execute() 
			if iDlgOK = 1 then 
				iCount = 0
				for i = 0 to 9
				if oDialog.Model.ControlModels(i).state = 1 then 
					mLongtext(iCount) = mChoices(i,1) 
					iCount=iCount+1
				end if
				next 
				if iCount > 0 then ReDim Preserve mLongtext(iCount-1) 
				oDoc.getCurrentSelection().string = join(mLongtext,", ") 
			end if
			oDialog.dispose()
		end if
	end if
End Function
Zuletzt geändert von clag am Mo, 23.03.2015 11:31, insgesamt 2-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Cursor klebt

Beitrag von Karolus »

Hallo
Genau das ist der Unterschied - Function's können etwas an den Aufrufer zurückgeben, so wie es in Zeile 24 gemacht wird.

Wobei mir auch nicht im konkreten Fall klar ist was|wer der Aufrufer ist.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
mikeleb
*******
Beiträge: 1426
Registriert: Fr, 09.12.2011 16:50

Re: Cursor klebt

Beitrag von mikeleb »

Hallo,

klasse, dass das gelöst ist. Interessanterweise klappt es auch als Sub:

Code: Alles auswählen

Sub TopicsChoice(oEvent) as boolean
...
	topicschoice=true
End Sub
So ein ähnliches Verhalten hatte ich auch mit einem Makro, dass bei einer Gültigkeit ausgelöst wird. Dort hatte die Belegung mit "true" die Wirkung, dass die (ungültige) Eingabe in die Zelle übernommen wurde, bei "false" wurde sie verworfen.
Gruß,
mikeleb
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Cursor klebt

Beitrag von TrueColor »

Ich hab zwar nix zum Doppelklickproblem beizutragen. Aber beim Benutzen des Abbrechen-Buttons des Dialogs werden die Änderungen auch übernommen. Weiß nicht, ob das inzwischen schon aufgefallen ist.
System:
LibO 6 + LibO 7
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Cursor klebt

Beitrag von clag »

Moin TrueColor,

danke für den Hinweis,
irgendwie war für den [ Abbrechen ] Button in den Makro-Dialog Button Eigenschaften noch die OK Funktionalität eingestellt,
dann reagiert er natürlich auch als OK, jetzt ist es korrigiert und auf Abbrechen eingestellt und tut auch so.
Macro-Dialog_Multiselection.ods
(40.97 KiB) 107-mal heruntergeladen
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten