BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Grafische Linien wieder entfernen

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

Grafische Linien wieder entfernen

Beitrag von Luftschraube » Mo 21. Okt 2019, 14:32

Guten Tag

Ich möchte für die Zeilen meiner Anwendung extra Linien farbig und in verschiedener Stärke erzeugen mit einem Makromodul, habe dazu bei Lenhardt ein ListingNr. 300 gefunden und damit experimentiert bis ich merkte dass das nicht das ist was ich eigentlich wollte.
Dieses Listing 300 Seite 321 handelt wenn ich das richtig sehe von grafisch erzeugten Linien, also keine Zellenlinien(links, rechts, oben, unten).
Hab mittlerweile das richtige gefunden, muss aber erst mal die grafischen Linien aus meinem Spalten/Zeilenbereich entfernen und weiss nicht wie ?? Hab schon in der API versucht was zu finden, hab leider noch nicht kapiert wie ich hier was finden soll !?
In dem von mir verwendeten obigen Listing werden die Linien erzeugt mit dem Befehl .getDrawPage.add(Linie). Wenn man in der API oder sonst wo die Funktion .getDrawPage() finden würde müsste neben .add doch aufgelistet sein welche Attribute hier noch angelegt sind, also z.B. .delete oder .purge o.ä.
Weiss bitte jemand Rat ?

vielen Dank
Dateianhänge
Listing 300 grafische Linien entfernen.odt
(13.58 KiB) 235-mal heruntergeladen

musikai
Beiträge: 262
Registriert: Do 14. Mai 2015, 17:53

Re: Grafische Linien wieder entfernen

Beitrag von musikai » Di 22. Okt 2019, 13:48

Nächstes Mal vielleicht ein Backup machen.

Code: Alles auswählen

sub delete_all_lineshapes_from_all_sheets
for i=0 to thiscomponent.getsheets().count-1
Tabelle = thiscomponent.getsheets().getbyindex(i)

oDrawpage=Tabelle.getdrawpage
k=oDrawpage.count-1
	for k=oDrawpage.count-1 to 0 step -1
	oGraphic=oDrawpage.getbyindex(k)
	if oGraphic.supportsService("com.sun.star.drawing.LineShape") then oDrawpage.remove(oGraphic)
	next k
next i
end sub
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: Grafische Linien wieder entfernen

Beitrag von balu » Di 22. Okt 2019, 16:48

Hallo Luftschraube,

viele Wege führen nach Rom. Die auch unterschiedliche Charakteristiken haben.

Du willst eine Linie löschen. Okay! Aber können sich auch noch andere "Grafische Elemente" auf der Drawpage in Calc befinden die Du vielleicht auch noch löschen willst?

Bei expilziet nur einer einzigen Linie könntest Du dem Beispiel von musikai folgen. Wobei man das auch anders angehen kann.

Wenn Du aber verschiedene Elemente zum löschen hast, dann muss ein anderes Verfahren her und das schon bei der Erstellung des Grafischen Elements.

Die Sache mit den "Grafischen Elementen" muss man wissen und auch berücksichtigen. Denn da steckt nämlich eine Stolperfalle drin, die für Anfänger nicht sofort ersichtlich und erkennbar ist.
Kreise, Qudrate oder sonstiges die Du mit der Zeichenfunktion zeichnen kannst, sind klar und eindeutig Grafische Elemente. Da denkt eigentlich jeder daran.
Aber!
Wenn Du dir nur mal so als ein Beispiel dir einen Button zeichnest;
-> Ansicht
-> Symbolleisten
---> Formular Steuerlement
(oder wie auch immer der Weg in deiner LO-Version lautet)
so ist dieser Button auch ein Grafisches Element.

Und was noch schlimmer ist, da sehr leicht zu übersehen ist, eine Notiz/Kommentar die an eine Zelle eingefügt wird, ist auch ein Grafisches Element. Wenn die Notiz nicht dauerhaft eingeschaltet ist, sieht man nicht immer sofort das kleine Rote Quadrat in der Zellecke.

Also auf der Drawpage können sich die unterschiedlichsten Elemente befinden. Aber eins haben sie gemeinsam, sie sind halt AUF der Drawpage und AUF der Zelle. Und das muss man immer bedenken.


Was ich als blödsinn halte ist, das Du deinen Code in ein Writer-Dokumen einfügst, und diese Writer-Datei hier anhängst. Um z.B. einen Code zu Posten gibt es extra dafür vorgesehene Tags, wenn man einen Beitrag erstellt. Also mach das bitte schön zukünftig. Denn so macht das helfen keinen großen Spaß, und es nervt gewaltig.

Eine sichere Methode nur das zu löschen was man auch wirklich löschen will ist, dem erstelltem Zeichenobjekt (Grafisches Element) einen Namen zu vergeben. Denn dann kann man beim löschen einfach den Namen suchen und vergleichen und bei Übereinstimmung das Objekt löschen.

Im Anhang ist eine leicht modifizierte Version von deinem gefundenen Code.
-> Drück den Button "Zeichnen" und es wird eine Linie mit Pfeilen gezeichnet.
-> Drück den Button "Löschen" und es wird nur die Linie gelöscht, die Buttons, Notiz so wie das Schwarze Rechteck bleiben aber unberührt.
-> Schau dir die beiden BASIC-Module in der Datei an.

Ach was solls!
Hier meine Löschroutine die nur die Linie löscht. Sie funktioniert nur im Zusammenhang mit dem Code im Module1.

Code: Alles auswählen

sub ZeichnungLoeschen
	oPage=ThisComponent.drawpages(0)
	for ip = 0 to oPage.count
    	oGrafik=opage.getbyindex(ip)
		if oGrafik.getName() = "xxx_Pfeile" then
    	oPage.remove(oGrafik)
		exit for
		end if		
	next ip 
end sub


Gruß
balu
Dateianhänge
zeichnen und löschen calc makro_1.ods
(13.55 KiB) 227-mal heruntergeladen

musikai
Beiträge: 262
Registriert: Do 14. Mai 2015, 17:53

Re: Grafische Linien wieder entfernen

Beitrag von musikai » Di 22. Okt 2019, 19:55

balu hat geschrieben:
Di 22. Okt 2019, 16:48
Bei expilziet nur einer einzigen Linie könntest Du dem Beispiel von musikai folgen. Wobei man das auch anders angehen kann.
Mein Code löscht alle Linien.

balu hat geschrieben:
Di 22. Okt 2019, 16:48
Eine sichere Methode nur das zu löschen was man auch wirklich löschen will ist, dem erstelltem Zeichenobjekt (Grafisches Element) einen Namen zu vergeben.
Das ist auf jeden Fall eine gute Idee!!!
balu hat geschrieben:
Di 22. Okt 2019, 16:48

Code: Alles auswählen

sub ZeichnungLoeschen
	oPage=ThisComponent.drawpages(0)
	for ip = 0 to oPage.count
    	oGrafik=opage.getbyindex(ip)
		if oGrafik.getName() = "xxx_Pfeile" then
    	oPage.remove(oGrafik)
		exit for
		end if		
	next ip 
end sub
Cool, wußte nicht, dass man auch direkt auf die drawpages zugreifen kann.
Beim Löschen von Objekten per getbyindex sollte man immer rückwärts vorgehen und als Maximum nur bis count-1 gehen, dann gibt's auch keinen Fehler, wenn man den löschen Button einmal zu oft drückt.

Code: Alles auswählen

sub ZeichnungLoeschen
	oPage=ThisComponent.drawpages(0)
	for ip = oPage.count-1 to 0 step -1
    	oGrafik=opage.getbyindex(ip)
		if oGrafik.getName() = "xxx_Pfeile" then
    	oPage.remove(oGrafik)
		exit for
		end if		
	next ip 
end sub
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: Grafische Linien wieder entfernen

Beitrag von balu » Mi 23. Okt 2019, 12:18

Mahlzeit musikai,
dann gibt's auch keinen Fehler, wenn man den löschen Button einmal zu oft drückt.
Stimmt! Da geb ich dir recht. Getestet, und funktioniert.

Ich hatte den Code vor ein paar Wochen erst selbst zusammengeschustert, und da war er für eine einfachere Sache. Aber so haben wir beide was dazu gelernt, und das ist doch voll in Ordnung :-)



Gruß
nalu

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

Re: Grafische Linien wieder entfernen

Beitrag von Luftschraube » Do 24. Okt 2019, 12:17

Hallo,

vielen Dank für die umfassende Antwort.
Mit sub delete_all_lineshapes... von musikai konnte ich die grafischen Elemente auf Anhieb löschen nachdem die Variablen angelegt waren, vielen Dank.
Das Notizen auch grafische Elemente sind und man grafischen Elementen auch einen Namen geben kann("xxx_Pfeile") ist allerdings sehr interessant !!
Dass ich meinen code in Writer beigefügt habe finde ich selber sehr umständlich, weiss blos nicht wie's anders geht. Vermute mal über das Icon '<> code anzeigen' , beim nächsten mal ausprobieren !?

gruss Luftschraube :)

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

Re: Grafische Linien wieder entfernen

Beitrag von Luftschraube » Fr 8. Nov 2019, 15:26

Hallo
Grafischen Elementen einen Namen geben kann man ja auch wenn man das Element mit der rechten Maustaste anklickt und im sich öffnenden Menue den Punkt 'Namen' anwählt !

ThemenEnde

gruss Luftschraube

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten