Shape drehen

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

Moderator: Moderatoren

toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Shape drehen

Beitrag von toni »

Hallo zusammen,

ich möchte ein markiertes Rechteck per Button drehen.
Mit

Code: Alles auswählen

Sub RechteckZeichnen
    oPage = ThisComponent.drawPages(0)
    
    mark1 = 1000
    mark2 = 2000
    
    For i = 1 to 2
    oRechteck = ThisComponent.createInstance("com.sun.star.drawing.RectangleShape")    
    oPage.add(oRechteck)    
        With oRechteck
         .Position = erzeugePunkt(mark1,mark2)
         .Size     = erzeugeSize(1800, 4400)
         .FillColor= RGB(255,255,255)
         .String   = "Hallo" & Chr(10) & "BAK "
         .CharHeight = 7
         .Name     = "Rechteck" & i
        End With
        mark1 = mark1 + 200
        mark2 = mark2 + 200
   Next  
End Sub
erzeuge ich zwei Rechtecke.

Wenn ich nun eines von beiden markiere, möchte ich diese Rechteck über einen Button drehen (bei jedem Klick um 45 Grad).

Ich habe etwas mit .CurrentSelection versucht um das markierte Rechteck zu erhalten, aber das bringt mich nicht weiter.

Code: Alles auswählen

gebaeude = ThisComponent.CurrentSelection
If gebaeude.SupportsService("com.sun.star.drawing.ShapeCollection") then
		If oRechteck.name = "Rechteck1" Then
			oRechteck.RotateAngle = 4500
		ElseIf oRechteck.name = "Rechteck2" Then
			oRechteck.RotateAngle = 4500
		End If
	End if
So kann ich das markierte Rechteck nicht ansprechen.

In VBA ging es einfach mit 'ActiveShape'.

Wie müsste ich es an stellen?

Gruss

Thomas
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Thomas,

die Idee ist ja schon mal gar nicht so schlecht. Aber: Wenn du ein Shape markierst, so erhälst du mit oDoc.currentSelection immer eine Gruppe von Shapes als Objekt zurück (es könnten ja mehrere Objekte markiert sein!

Ist es nur ein, so hat dieses den Index 0, und du kannst es direkt drehen :-)

Also, der folgende Code dreht das markiert Shape um 45°, ist die Kurzfassung, den Rest musst du halt anpassen.

Code: Alles auswählen

sub Shape_drehen
oDoc = thisComponent
	oSel = oDoc.getcurrentSelection()
	oShape = oSel.getByIndex(0)
	oShape.rotateAngle = 4500
end sub
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Beitrag von toni »

Moin Thomas,

das klappt ja prima!!!

Jetzt kann ich mit

Code: Alles auswählen

oShape.rotateAngle = oShape.rotateAngle + 4500
per Klick das Rechteck 45 Grad weiter drehen.

Vielen Dank!

Gruss

Thomas
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Thomas,

ja, aber vergiss nicht dennoch die Fehlerkontrolle etc. (so, wei in deinem ersten Code dargestellt - das war schon gut) Und bei Mehrfachauswahl (oSel.count > 1) solltest du auch entsprechende Routinen einbauen!

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten