🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

LO Calc, Annotations mit automatischer Fenstergröße

Alles zur Programmierung im LibreOffice.
Luftschraube
Beiträge: 39
Registriert: So 5. Mai 2019, 09:20

LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von Luftschraube » Di 23. Jul 2019, 22:20

Hallo

Bin in der Umschulung von Excel auf LO.
Habe die letzten Tage in meiner kleinen Anwendung ein Makro eingebaut, dass der Textinhalt diverser Zellen in weiter entfernten Zellen als Notiz eingetragen wird. Funktioniert auch, aber die Notizmeldungen haben alle eine einheitliche Größe, quasi hochkant Portraiformat, aber für meinen übergebenen Text zu schmal sodass automatisch ein Zeilenumbruch stattfindet wo noch gar kein Umbruch stattfinden soll.
In Excel gibts dafür den Parameter autosize, bzgl. LO find ich einfach nichts.
Hat bitte jemand einen Tip für mich !?
vielen Dank

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von craig » Mi 24. Jul 2019, 14:15

Hallo,

ein Autosize habe ich in der API nicht gefunden.
Allerdings gibt es ein paar Eigenschaften die man setzen kann.
Siehe hier:

Code: Alles auswählen

REM  *****  BASIC  *****
Sub ManipulateAnnotations
  Dim doc As Object
  Dim aSheet As Object
  Dim aCell As Object
  Dim annotations As Object
  Dim myAnnotation As Object
  
  doc = ThisComponent
  aSheet = doc.sheets.getByIndex(0)
  
  'Fügt einen neuen Kommentar ein.
  aCell = aSheet.getCellByPosition(0, 0)
  annotations = aSheet.annotations
  annotations.insertNew(aCell.cellAddress, "Textinhalt")
  
  'Ändert einen vorhandenen Kommentar.
  'Die Pseudo-Eigenschaft "annotation" der Zelle kann nur gelesen werden.
  myAnnotation = getAnnotationByCell(aCell)
  myAnnotation.isVisible = true
  myAnnotation.annotationShape.fillColor = rgb(250, 250,0)
  myAnnotation.annotationShape.charFontName = "Tahoma"
  myAnnotation.annotationShape.charHeight = 12

' Es wird ein neues Objekt deklariert 
dim sAnnoSize as new com.sun.star.awt.Size
sAnnoSize.Height= 2500						' Höhe
sAnnoSize.Width= 3500						' Breite
myAnnotation.annotationShape.size=sAnnoSize			' Zuweisung der Objekteigenschaft an das Shape
' xray sAnnoSize
	
' Beschreibung der möglichen Konstanten, wie sich der Text, bsz. das Kommentarfeld verhält.
' https://www.openoffice.org/api/docs/common/ref/com/sun/star/drawing/TextFitToSizeType.html
' NONE 			the text size is only defined by the font properties  
' PROPORTIONAL 	if the shape is scaled, the text character size is scaled proportional  
' ALLLINES 		like PROPORTIONAL, but the width of each text row is also scaled proportional.  
' RESIZEATTR 	if the shape is scaled, the font attributes are scaled and hard set on the text

' Standardmäßig wird die Konstante NONE zugewiesen
' Hier eine Zuweisung mit der Konstanten PROPORTIONAL
' passt Text an Rechteck an    
  myAnnotation.annotationShape.TextFitToSize = com.sun.star.drawing.TextFitToSizeType.PROPORTIONAL 

' Listet die Eigenschaften/ Methoden/ Schnittstellen, etc. des Shapes auf  
' xray myAnnotation
' xray myAnnotation.annotationShape
End Sub
Function getAnnotationByCell(aCell As Object) As Object
  Dim result As Object
  Dim annotations As Object
  Dim annotationIndex As Long
  Dim anAnnotation As Object
    Dim isFound As Boolean
  
  annotations = aCell.spreadSheet.annotations
  While ((annotationIndex < annotations.count) and (not isFound))
          anAnnotation = annotations.getByIndex(annotationIndex)
          isFound = ((anAnnotation.position.row = aCell.cellAddress.row) and _
(anAnnotation.position.column = aCell.cellAddress.column))
    If (isFound) Then
      result = anAnnotation
    End If
    annotationIndex = annotationIndex + 1
  Wend
  getAnnotationByCell = result
End Function
Lade Dir zur Code-Inspection das Tool XRAY herunter.
http://berma.pagesperso-orange.fr/Files ... l60_de.odt
Ab Seite 7 ist beschrieben wie Du Xray Automatisch laden kannst, damit es Dir jederzeit zur Verfügung steht.
Wenn Du nach der Installation mit dieser Anweisung im o.g. Code ausführst, dann werden Dir alle
Eigenschaften/ Methoden/ Schnittstellen, usw. in einem Fenster angezeigt.

Code: Alles auswählen

xray myAnnotation
Suche unter Register "Eigenschaften" --> annotationShape
Mit einem Doppelklick darauf, schaltet Xray um auf die Ebene "annotationShape"
Jetzt werden Die zu diesem Objekt alle Eigenschaften/ Methoden/ Schnittstellen, usw. angezeigt.
Dort findest Du meine eingebauten Objekte
  • Size
  • TextFitToSize
Wie diese nun verwenden werden habe ich Dir im Code aufgezeigt und kommentiert.

Lade Dir diese Doku herunter: OOME_3_0.pdf
Ab Seite 444 steht der obige Code, habe diesen nur um das Structure "Size" und die Konstanten erweitert.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Luftschraube
Beiträge: 39
Registriert: So 5. Mai 2019, 09:20

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von Luftschraube » Do 25. Jul 2019, 18:40

Hallo,

Hab versucht deine Hilfestellung in meinen bescheidenen Code einzubauen, hat auch nach mehrmaligem Lesen und ein paar Fehlermeldungen hin gehauen.
Ich verwende nur mal dein myAnnotation.annotationShape.size=sAnnoSize, habe auf passende Höhe+Breite eingestellt, funktioniert sehr gut.
Das, wenn ich es richtig verstehe, zusätzliche myAnnotation.annotationShape.TextFitToSize hab ich weggelassen, hatte zur Folge dass der Text entweder zu klein oder zu stark komprimiert wurde.

vielen herzlichen Dank
Luftschraube

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von craig » Do 25. Jul 2019, 20:32

Hallo,
Das, wenn ich es richtig verstehe, zusätzliche myAnnotation.annotationShape.TextFitToSize hab ich weggelassen, hatte zur Folge dass der Text entweder zu klein oder zu stark komprimiert wurde.
Bei weglassen dieser Angabe steh die Konstante auf NONE.
Siehe Beschreibung weiter unten.

Code: Alles auswählen

' Beschreibung der möglichen Konstanten, wie sich der Text, bsz. das Kommentarfeld verhält.
' https://www.openoffice.org/api/docs/common/ref/com/sun/star/drawing/TextFitToSizeType.html
' NONE 			the text size is only defined by the font properties  
' PROPORTIONAL 	if the shape is scaled, the text character size is scaled proportional  
' ALLLINES 		like PROPORTIONAL, but the width of each text row is also scaled proportional.  
' RESIZEATTR 	if the shape is scaled, the font attributes are scaled and hard set on the text

' Standardmäßig wird die Konstante NONE zugewiesen
' Hier eine Zuweisung mit der Konstanten PROPORTIONAL
' passt Text an Rechteck an    
  myAnnotation.annotationShape.TextFitToSize = com.sun.star.drawing.TextFitToSizeType.PROPORTIONAL 
Diese Codepassage steuert das Verhalten des Textes im Kommentarfeld.
Um Unterschiede festzustellen, muss die Konstante ausgetauscht werden
  • myAnnotation.annotationShape.TextFitToSize = com.sun.star.drawing.TextFitToSizeType.NONE
    --> Die Textgröße wird nur durch die Schrifteigenschaften festgelegt
  • myAnnotation.annotationShape.TextFitToSize = com.sun.star.drawing.TextFitToSizeType.PROPORTIONAL
    --> Wenn die Form skaliert ist, wird die Textzeichengröße proportional skaliert
  • myAnnotation.annotationShape.TextFitToSize = com.sun.star.drawing.TextFitToSizeType.ALLLINES
    --> Wie PROPORTIONAL, aber die Breite jeder Textzeile ist proportional skaliert.
  • myAnnotation.annotationShape.TextFitToSize = com.sun.star.drawing.TextFitToSizeType.RESIZEATTR
    --> Wenn die Form skaliert ist, werden die Schriftattribute skaliert und für den Text festgelegt
Es kann immer nur eine Konstante verwendet werden und sie muss in Großbuchstaben geschrieben werden!
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Luftschraube
Beiträge: 39
Registriert: So 5. Mai 2019, 09:20

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von Luftschraube » Fr 26. Jul 2019, 15:41

Hallo

Ja, das hatte ich schon verstanden mit den groß zu schreibenden Attributen und habe auch gedacht ich hätte alle 4 nacheinander ausprobiert. RESIZEATTR hatte ich aber wohl übersehen, beim ausprobieren von RESIZEATTR stürzt das Prg ab.
Wollte lt. Beschreibung Xray installieren zum nachschauen wg RESIZEATTR, wurde auch prompt eingebunden soweit ich das glaube zu verstehen, Einbindung erfolgte allerdings nicht im Ordner 'Meine Makros', trotzdem ausprobiert, beim Aufruf von Xray+Parameter im Code immer Fehlermeldung.
Nochmal alles zum Thema Xray rausgelöscht, erneut etliche Male Neuinstallation lt. Beschreibung, aber keine Einbindung von Xray, funktioniert seit dem leider gar nicht mehr !
Das ganze DateiSpeichermanagement ist noch etwas verwirrend für mich, benötige wohl einfach noch mehr Übung und Gewöhnung in LO.
grüsse
Luftschraube
Dateianhänge
Bildschirmfoto vom 2019-07-26 15-37-29.png
Bildschirmfoto vom 2019-07-26 15-37-29.png (13.68 KiB) 4115 mal betrachtet
Bildschirmfoto vom 2019-07-26 14-14-39.png
Bildschirmfoto vom 2019-07-26 14-14-39.png (24.17 KiB) 4115 mal betrachtet

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von craig » Fr 26. Jul 2019, 16:42

Hallo,

nach der INstallation von XRAY, muss die XRAY-Bibliothek muss erst geladen werden.
Idealerweise gleich bei Start von Libreoffice.
Dazu lese Seite 7 des XRAY-Dokuments, hier ist alles genau beschrieben.

Wenn Du meinen hier geposteten Code zum Laden der Bibliothek verwendest,
statt des Codes in der XRAY-Anleitung, dann wird gleichzeigt die Bibliothek "Tools" geladen.
Diese ist sehr nützlich, da sich in dieser Bibliothek vorgefertigte Funktionen und Makros befinden.
Ist für Dich im Augenblick sicherlich noch nicht so interessant,
aber wenn weiter übst wirst Du dankbar für diese Tools sein.

Code: Alles auswählen

REM Bibliotheken bei LibreOffice-Start laden
Sub LoadingLibraries

	' Hier in der Basic-IDE -> Objektkatalog
	' LibreOffice Makros & Dialoge -> Tools
'	Globalscope.BasicLibraries.LoadLibrary ( "Tools")
	' load TOOLS library with helper function
	If NOT GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) Then
	   GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
	End If
			' https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial
			'http://berma.pagesperso-orange.fr/Files_en/XrayTool60_de.odt
			GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
End Sub
Laden der XRAY-Bibliothek
Kurzbeschreibung mit meinen Worten:
  1. Menü Extras → Makros → Makros verwalten → LibreOffice Basic...
  2. Auf den Button "Verwalten" klicken
  3. Register "Module"
  4. Wähle die Bibliothek: "Meine Makros → Standard"
  5. Klicke auf den Button "NEU"
  6. Es wird ein Modulblatt eingefügt "Modul1"
  7. Kopiere in diese Modulblatt o.g. Code
  8. Schließe die Makrofenster.
  9. Öffne nun: Menü Extras → Anpassen...
  10. Register "Ereignisse"
  11. Am unteren Rand des Fenster befindet sich ein Dropdown-Menü. Wähle hier auf jedenfall "LibreOffice"
    Dieses, damit die Bibliothek bei jedem Start von LibreOffice geladen wird. So kannst Du XRAY in jeder LibO Applikation nutzen.
  12. Jetzt markiere im selben Fenster den Eintrag "Programmstart". Oben links unter der Kopfzeile "Ereignis"
  13. Klicke auf den Button "Makro"
  14. Es öffnet sich ein Fenster. Auf der rechten Seite unter der Rubrik "Bibliotheken" wählst Du wie folgt:
  15. Meine Makros → Standard (per Doppelklick auf den Namen oder auf das Pluszeichen klicken, damit die Pfade sichtbar werden)
  16. Nun hängt es von Deiner jetzigen Konfiguration ab, was Du zu suchen hast. Ich vermute das sich in der Bibliothek "Standard" ein
    Modul, mit dem Namen "Modul1" befindet. Markiere es. Es muss nun auf jeden Fall im rechten Teil des Fenster der Name der SUB-Routine (LoadingLibraries) stehen. Wenn dies bei Modul1 nicht der Fall ist, klicke auf das nächste Modul. Wiederhole dies bist Du "LoadingLibraries"
    gefunden hast.
  17. Falls noch nicht geschehen, markiere "LoadingLibraries"
  18. Bestätige mit "OK"
  19. Nun sollte unter der Kopfzeile ""Zugewiesene Aktion" so etwas stehen:
    Standard.Modul1.LoadingLibraries
  20. Wenn dies so ist, dann kannst Du das Fenster mit Klick auf "OK" schließen.
  21. Jetzt muss LibO neugestartet werden und der Nutzung von XRAY steht nichts mehr im Wege.
Hier noch ein paar Links zu Handbüchern, etc.
Einige sind schon älter und für AOO gedacht, funktionieren in der Regel immernoch.
Aber nicht wundern, wenn es doch mal hapert, der Grund hierfür liegt daran, dass sich AOO und Libo etwas von einander entfernt haben.

Der Makrorekorder zeichnet ausschließlich Dispatch Commands auf.
Dies sind im wesentlichen nur die Maus- und Tastaturbefehle welche Du nacheinander eingibst.
Dieses hat mit programmieren wenig zu tun.
Dispatch Commands

Wenn Du Dich mit der Thematik des Programmierens auseinandersetzen möchtest, kann
ich Dir folgende Seiten und Dokus zur Basic-Programmierung empfehlen.

OOME deutsch
pitonyak
Dannenhöfer
Libreoffice Handbücher:
Ganz unten auf der Seite befindet sich auch ein Handbuch zur Makro-Programmierung.
Doku
Um dies noch zu erwähnen:
Man kann zur Programmierung unter Aoo und LO auch die Sprachen C++, Java, Python benutzen.

Hiernoch ein älteres Buch von Oracle, ist zwar schon ein wenig betagt, aber hilfreich:
oracle
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Luftschraube
Beiträge: 39
Registriert: So 5. Mai 2019, 09:20

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von Luftschraube » Fr 26. Jul 2019, 20:28

Hallo, vielen Dank

Ich hatte mich bei meinen Versuchen nach der Beschreibung gerichtet auf Seite 7 => "Dazu lese Seite 7 des XRAY-Dokuments, hier ist alles genau beschrieben."
Habs jetzt nochmal nach deiner Beschreibung gemacht, Punkt 1-21, bekomme Fehlermeldung, siehe anbei...ist mir leider zu hoch :roll:

gruss Luftschraube
Dateianhänge
Bildschirmfoto vom 2019-07-26 20-18-46.png
Bildschirmfoto vom 2019-07-26 20-18-46.png (104.21 KiB) 4104 mal betrachtet

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von craig » Fr 26. Jul 2019, 21:50

Hallo,

Dein Screenshot zeigt eindeutig, dass XRAY nicht installiert ist.
Der Screenshot zeigt die BASIC-IDE.
Auf der linken Seite befindet sich der Objektkatalog, dies ist eine Art Dateimanager/ Explorer für Dialoge, Makros und Funktionen.
An oberster Stelle steht "Meine Makros und Dialoge"
Dies ist quasi Dein Hauptverzeichnis, welches Bibliothek genannt wird.
Dann kommt ein Unterverzeichnis, bzw. eine untergeordnete Bibliothek namens "Standard"
Hier ist das "Modul 1" zusehen, welches meinen Code enthält
EIn Modul muss nicht zwingend "Modul1" benannt sein, man kann hier zur besseren Übersicht auch den Namen ändern,. bzw.
beim Anlegen eines Modul einen von Dir gewünschten Namen angeben z.B. "modCopy"
Sonderzeichen und Umlaute sind bei der Namensvergabe nicht erlaubt!

Auch sollte weder für das Modul, noch für eine SUB-Routine/ Funktion ein Name vergeben werden, welcher ggf. einen Makrobefehl gleichkommt.

z.B.
Modul = Paste --> :twisted:
und die Routine --> Sub Paste --> :twisted:
BESSER
modPaste--> :D
und
Sub xPaste --> :D

Wo soll sich XRAY befinden?
Wäre XRAY installiert, dann würdest Du in Deiner Hauptbibliothek "Meine Makros und Dialoge", unterhalb von "Standard", eine Biblithek mit dem Namen "XRAY" sehen.
Unterhalb, weil sich der Objektkatalog automatisch alphabetisch sortiert.
Die Bibliothek "XRAY" ist in Deinem Screenshot nicht vorhanden!

also wie folgt...
  1. Die Makrosicherheit muss auf MITTEL eingestellt sein:
    Menü Extras --> Optionen --> LibreOffice --> Sicherheit
  2. Rechts auf den Button "Makrosicherheit" klicken und im öffnenden Fenster den Optionsbutton "MITTEL" anwählen.
  3. LibO neu starten.
  4. Die XRAY-Anleitung öffnen
  5. Da Siocherheit = MITTEL, kommt nun eine Frage, ob die Makros in der Anleitung aktiviert werden sollen.
    Dies MUSS mit "Makros aktivieren" bestätigt werden,
    • sonst keine Installation!
    • Bevor Du mit dem nächsten Punkt weiter verfährst, solltest Du noch prüfen,
      ob der "Entwurfsmodus" aktiviert ist.
      Dies hätte zu Folge, dass die Commandbutton in der Anleitung nicht funktionieren.
      Menü Formular -->> Entwurfsmodus
  6. und auf Seite 5 den Button "XRAY installieren" drücken.
  7. LibO neu starten
Jetzt sollte alles funktionieren und XRAY sollte auch im Objektkatalog zu sehen sein.

Sollte es noch Probleme geben, einfach melden.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Luftschraube
Beiträge: 39
Registriert: So 5. Mai 2019, 09:20

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von Luftschraube » Sa 27. Jul 2019, 09:21

Hallo

Funktioniert !
Meine Makrosicherheit war auf höchste Stufe eingestellt(von mir selber als ich vor Monaten damit anfing :roll: :roll:
Mit Entwurfsmodus meinst du vermutlich den Menuepunkt in Writer Formulare/Im Entwurfsmodus öffnen oder ??

gruss
Luftschraube

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: LO Calc, Annotations mit automatischer Fenstergröße

Beitrag von craig » Sa 27. Jul 2019, 15:03

Hallo,
Luftschraube hat geschrieben:Funktioniert !
Na dann, viel Vergnügen...
Luftschraube hat geschrieben:Mit Entwurfsmodus meinst du vermutlich den Menuepunkt in Writer Formulare/Im Entwurfsmodus öffnen oder ??
Ja.
Alternativ kannst Du folgende Symbolleisten einschalten:
Menü Ansicht → Symbolleisten → Formular-Entwurf
Menü Ansicht → Symbolleisten → Formular-Steuerelemente

Über das Symbol "Entwurfsmodus" ist aus/ einschalten möglich:
Formular Entwurfsmodus.jpg
Formular Entwurfsmodus.jpg (1.22 KiB) 4067 mal betrachtet
Im Entwurfsmodus kann man Steuerelemente, wie eine Schaltfläche/ Commandbutton formatieren.
Größe, Schrift, etc.
In diesem Modus funktioneren aber dann keine mit dem Steuerelement verbundenen Befehle/ Makros.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten