Listener und folge Macro zu lahm ?

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

Moderator: Moderatoren

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

Listener und folge Macro zu lahm ?

Beitrag von clag »

Hallo liebe StarBasic Fans :)

habe mich heute erstmalig intensiv mit Starbasic befasst um ein Macro zu estellen welches lange Textinhalte von Zellen temporär besser lesbar darstellt und dann wieder in der Zelle versenkt.
das funktioniert sogar ganz gut, auf Basis eines Listener von turtle47 habe ich folgendes zusammen gebaut
show_text_Listener.ods
(15.36 KiB) 32-mal heruntergeladen
nur ist irgend etwas zu langsam bei der Werte übermittlung Listener > Macro > ausführung
und wenn man den Cusor über die Listener Zellen jagt kommt das Makro aus dem Takt :?

könnte man das Ansprechen des Listener um 500m sek verzögern könnte wäre sicherlich alles bestens
aber da versteh ich noch nix von, das im Listener eingebaute Wait scheint etwas anderes zu bewirken ?

ich hoffe ihr könnt mir da helfen
LG
clag

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

Re: Listener und folge Macro zu lahm ?

Beitrag von clag »

Hi

mir ist gerade etwas aufgefallen was helfen könnte eine Lösung zu finden
und zwar wenn ich aus der Listener Spalte jede zweite "Info" entferne scheint es problemlos zu funktionieren
also wenn der Cursor nicht direkt von Listener eine andere Listener Zelle rutscht sondern dazwischen eine leere Zelle ist
dann kann man auch den Cursor mit voller Geschwindigkeit drüberlaufen lassen ohne Aussetzer oder Fehler !
es ist dann auch etwas langsamer möglicher weise wirkt dann auch die wait bremse !?

Irgend wie braucht der Listener scheinbar einen wechsel von true auf false :?
LG
clag

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

Re: Listener und folge Macro zu lahm ?

Beitrag von Karolus »

Hallo
Funktionierts in der Form:

Code: Alles auswählen

Sub ShowText3
		oCalc = ThisComponent
		oSheet = oCalc.Sheets(0)
		oCelle=oCalc.getCurrentSelection().getCellAddress()
		oRow=oCelle.Row
		ocol = ocelle.column
	if aktiv_chk = emty then 
		aktiv_chk = -1
	end if

	if oRow =0 then 
		MsgBox " falsche Zeile "  
		goto ende:
	end if


	if aktiv_chk = oRow then 
		oSheet.Rows(aktiv_chk).Height = 10000
		oSheet.Rows(aktiv_chk).CellBackColor = &Hffffaa
		aktiv_chk = -1
	Else
		oSheet.Rows(oRow).Height = 500
		oSheet.Rows(oRow).CellBackColor = -1
		aktiv_chk = oRow
	End If

ende:
End Sub  
Funktional hab ich nur Höhe und Hintergrund im letzten 'if..else' ausgetauscht.
Darüberhinaus ist es sinnvoll nicht mehr benötigten Code und überflüssig gewordene Kommentare gleich rauszuschmeissen,
und konseqent mit der Tab-taste zu strukturieren (siehe oben).

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Listener und folge Macro zu lahm ?

Beitrag von clag »

Hi Karo

da wars wohl schon a bisserl zu spät für's optimieren :P

so wie der code in deiner Antwort steht hat das Makro keine sinnige Funktion mehr :(
der letzte Teil fehlt ganz der sorgte aber dafür, dass wenn der Cusor irgend wohin
wechselte trotzdem die vorhergehende Zelle wieder zurück gesetzt wurde

ich werde aber mal alles was scheinbar überflüssig ist hier raustun ....
dann ist schluß für heute

also bis Morgen :)
LG
clag

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

Re: Listener und folge Macro zu lahm ?

Beitrag von clag »

Moin liebe Leutz

lässt mir ja keine Ruhe

also folgendes ist mir auch noch aufgefallen

es gibt ein sehr unterschiedliches Verhalten des Listeners je nach dem wie eine vom Listener überwachte Zelle fokussiert wird

1. schiebt man den Cursor aus einer nicht überwachten Zelle mit drücken einer Pfeiltaste auf eine überwachte Zelle wird umgehend das Makro sauber ausgeführt
2. schiebt man den Cursor aus einer überwachten Zelle mit drücken einer Pfeiltaste auf eine anderer überwachte Zelle wird ebenfalls umgehend das Makro sauber ausgeführt
3. verschiebt man den Cursor aus einer überwachten Zelle innerhalb der Zeile passiert nichts (soll auch so sein damit man in der Zeile wandern kann)
4. schiebt man den Cursor nun wieder aus einer nicht überwachten Zelle mit einer Pfeiltaste auf eine überwachte Zelle wird umgehend das Makro sauber ausgeführt
(in der vorherigen Zeile das Format zurücksetzen, falls neue Zeile angewählt dort Formatierung anwenden)


bei Mausklicks verhält sich das ganz anders
da gibt es so eine Art prellen bei dem ersten Klick auf eine überwachte Zelle die nicht von Cursor fokussiert ist
dh das Makro wird offensichtlich zweimal ausgeführt dem drücken und beim loslassen der Maustaste
ist die Zelle bereits fokussiert reagiert der Listener bei Mauklick nur einmal und zwar auf das loslassen


und wenn man nun in der überwachten Spalte den Cursor durch halten der Pfeil-rauf oder Pfeil-runter Taste durch srollt
dann kommt der Listener nach ein paar Zeilen aus dem Takt

hmmm ...

also ich bin mir ziemlich sicher das Problem hängt mit dem unterschiedlichen Verhalten vom Listener zusammen :?

irgendwo hatte ich gelesen das es verschiedene Arten von Listener gibt vielleicht wäre ein Anderer besser geeignet
aber da habe ich leider noch überhaupt keinem Durchblick

ich hoffe jemand von euch hat den und kann mir weiterhelfen :)
LG
clag

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

Re: Listener und folge Macro zu lahm ?

Beitrag von clag »

Hallo

hier noch der bereinigte Code für das aufgerufene Makro

Code: Alles auswählen

Sub ShowText3
      oCalc = ThisComponent
      oSheet = oCalc.Sheets(0)
      oCelle=oCalc.getCurrentSelection().getCellAddress()
      oRow=oCelle.Row
      ocol = ocelle.column
  
   if aktiv_chk = emty then
      aktiv_chk = -1
   end if

   if oRow =0 then
'      MsgBox " falsche Zeile
   goto ende:
   end if

   if aktiv_chk = oRow then
      oSheet.Rows(aktiv_chk).Height = 500
      oSheet.Rows(aktiv_chk).CellBackColor = -1
      aktiv_chk = -1
   Else
      oSheet.Rows(aktiv_chk).Height = 500
      oSheet.Rows(aktiv_chk).CellBackColor = -1
      oSheet.Rows(oRow).Height = 10000
      oSheet.Rows(oRow).CellBackColor = &Hffffaa
      aktiv_chk = oRow
   End If

ende:
End Sub 
aber daran sollte es nicht liegen, funktioniert prima :lol: (ach, wat bin isch ne cooler coder) :lol:
könnten aber gern etwas weinger "if" sein

ich denke irgendwie klemm die Komunikation von "klick - focus - Listener - Makro"
LG
clag

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

Re: Listener und folge Macro zu lahm ?

Beitrag von clag »

Hallo Leutz

ich stand vorm Abgrund nun bin ich einen Schritt weiter ..............
und auch schon wieder zurück :lol:

die Fehlerquelle ist ganz klar die Übergabe/ Übernahme der aktuellen Positionsdaten vom Curser

möglicherweise konnten einige das von mir beschriebene Verhalten überhaupt nicht nachvollziehen
nämlich dann, wenn unter Windows in den Tastatureinstellungen die Key Wiederholrate nicht über die Mitte hinaus erhöht hat
erst wenn der Schieber noch weiter nach rechts gezogen wird, beginnen die Probleme
am rechten Anschlag so wie ich es eingestellt hatte sind die dann natürlich besonders häufig !!!

aber das ist ja nicht die Lösung den Schieber nach links zu ziehen um die Wiederholrate zu reduzieren
es muss auch in der max Einstellung funktionieren

aber die Ursache ist nun klar
nur habe ich immer noch keine Idee wie man das abstellen kann
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten