[gelöst] Bildschirmanzeige / Bildschirmausgabe aktualisieren / neu zeichnen / refresh screen

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

Moderator: Moderatoren

rentner-jo
Beiträge: 1
Registriert: Sa, 16.10.2021 15:38
Wohnort: Kassel

[gelöst] Bildschirmanzeige / Bildschirmausgabe aktualisieren / neu zeichnen / refresh screen

Beitrag von rentner-jo »

Vorwort, kann man überspringen ...

Ich habe zuletzt ein Karteikartenprojekt mit LibreOffice Calc 6.x (1 Karteikarte im Format DIN A4 quer = 1 Calc-Tabellenblatt) erstellt, bei dem die Daten direkt in der jeweiligen Karteikarte eingegeben werden und am Monatsende die jeweils neu hinzugekommenen Karteikarten ausgedruckt (und per Hand) unterschrieben und abgeheftet werden. Damit wird eine gesetzliche Dokumentationspflicht erfüllt, die bisher vollständig von Hand erledigt wurde, was für die Mitarbeiter einer kleinen Firma eine langweilige und fehlerträchtige Arbeit (es muss auch addiert und subtrahiert werden ...) war.

Es gibt bereits kommerzielle Software für diesen Zweck, die einerseits aber nicht ganz billig und andererseits für den Inhaber der Firma nicht akzeptabel ist, da diese Software nur mit Integration in ein Warenwirtschaftssystem (noch teurer) zu haben ist und dann eine intensive Einarbeitung erfordert. Das wird abgelehnt!

Das von mir erstellte Projekt bildet einfach die bisherigen Karteikarten ab, die jetzt statt von Hand, in Calc ausgefüllt werden. Das ist erheblich einfacher, dafür habe ich mit einigen Makros und der "AutoEingabe"-Funktion von Calc gesorgt (und besser lesbar ist es auch noch ...)!

Dabei hatte ich einige Probleme zu bewältigen, die ich fast alle mit Hilfe von hier in diesem Forum bereits gelösten Fragen klären konnte, und so habe ich selber hier bisher noch keine Fragen gestellt, das Forum dennoch intensiv genutzt.

Vielen Dank dafür an alle Mitwirkende!

Ein Problem konnte ich hier aber nicht lösen, und da ich die Lösung jedoch auf einer englischsprachigen site eher durch Zufall gefunden habe (kein Forum, irgend so eine "helpme"-site, leider habe ich die url nicht mehr), möchte ich die Lösung hier hinterlassen, vielleicht hilft sie ja noch anderen:

Das Problem:

Ein von mir erstellter Button in dem Calc-Tabellenblatt startet ein Makro z.B.: "tue was", ich lasse als erste Aktion des Makros immer eine msgbox mit "Wollen Sie das wirklich tun?" "Ja/Nein" aufpoppen, damit der user bei versehentlicher Betätigung des Buttons eine Abbruchmöglichkeit hat.

Dabei werden aber die letzten Änderungen im aktuellen sheet im Hintergrund unter der msgbox nicht angezeigt, z.B. beim Ausfüllen einer neu erzeugten "Karteikarte" (sheet/Tabelle) werden die Eingaben bis zum erstmaligen Betätigen des Buttons im Hintergrund einfach nicht angezeigt! Es wird nur ein nicht ausgefülltes sheet angezeigt, offenbar wird die Bildschirmausgabe für den Hintergrund von Dialogen nicht nach jeder Eingabe/Änderung im Tabellenblatt automatisch aktualisiert! Das hat nichts mit der automatischen Aktualisierung von Berechnungen zu tun, das macht Calc wie erwartet!

Ob dies bei allen Libre/OpenOffice-Versionen so ist weiß ich nicht, jedenfalls habe ich dieses Verhalten auch unter WIN-X mit LibreOffice 7.1.X genau so festgestellt! (Ich selber arbeite unter Linux Mint 19.1 noch mit LibreOffice 6.0.7.3).

Die Funktion des angenommen Makros "tue was" ist nicht beeinträchtigt, das sieht aber dennoch sehr unschön und unprofessionell aus!

Die Lösung:

Eine einfache Function, die man am Anfang des Button-Makros ausführt und die die Bildschirmausgabe für den Hintergrund neu zeichnet:

Der Aufruf:

Code: Alles auswählen

RepaintScreen()
Die Function:

Code: Alles auswählen

function RepaintScreen()

	dim document as object
	dim dispatcher as object
	
	document = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

	dispatcher.executeDispatch(document, ".uno:Repaint", "", 0, Array())

end function
Das war nun wirklich easy, aber man muss es auch erstmal wissen!

Sicher ist das für die Cracks unter Euch ohnehin klar gewesen, für mich aber, als jahrelanger intensiver OO und LO-Nutzer, der dabei jedoch in der Regel ohne Makros unterwegs ist, war das jetzt ein Problem!

Wenn dieses Thema doch schon im Forum steht und ich es nur nicht gefunden habe, bitte ich um Nachsicht, jedenfalls habe ich in der Überschrift alle die Suchbegriffe eingegeben, mit denen ich selber gesucht und leider nichts gefunden habe!
Linux Mint 19.1 Tessa
LibreOffice 6.0.7.3 (vorinstalliert)

Geht nicht gibt's nicht!