Moin,
ich bin seit 2 Tagen auf der Suche nach eine Beschreibung des SafeArrayOfPoints-Objects für NetOffice (Powerpoint), genauer gesagt für Slide.Shapes.AddPolyline...
Codebeispiel:
PowerPoint.Application powerApplication = new PowerPoint.Application();
// add a new presentation with one new slide.
PowerPoint.Presentation presentation = powerApplication.Presentations.Add(MsoTriState.msoTrue);
PowerPoint.Slide sld = presentation.Slides.Add(1, PpSlideLayout.ppLayoutBlank);
// add shape.
object safeArrayOfPoints;
// object safeArrayOfPoints wird als "erwartet" vom IntelliSense angegeben
// also HIER safeArrayOfPoints definieren. ABER WIE...?
sld.Shapes.AddPolyline(safeArrayOfPoints);
Vielen Dank im Voraus!
emtcho
Moin wieder,
zum Glück hatte ich noch ein Office 2000 erworben noch als Student... (schlummerte in eine virtuelle Machine...)
Im PowerPoint 2000 ist die Makro-Aufzeichnung noch aktiv...!
Hat folgendes zutage gefordert...
With ActiveWindow.Selection.SlideRange.Shapes.BuildFreeform(msoEditingAuto, 132#, 228#)
.AddNodes msoSegmentCurve, msoEditingAuto, 276#, 168#
.AddNodes msoSegmentCurve, msoEditingAuto, 366#, 192#
.AddNodes msoSegmentCurve, msoEditingAuto, 432#, 156#
.AddNodes msoSegmentCurve, msoEditingAuto, 492#, 186#
'...
.ConvertToShape.Select
End With
Daraus habe ich dann:
using (PowerPoint.FreeformBuilder ffb = sld.Shapes.BuildFreeform(MsoEditingType.msoEditingAuto, 100, 100))
{
ffb.AddNodes(MsoSegmentType.msoSegmentCurve, MsoEditingType.msoEditingAuto, 150, 150);
ffb.AddNodes(MsoSegmentType.msoSegmentCurve, MsoEditingType.msoEditingAuto, 200, 250);
ffb.AddNodes(MsoSegmentType.msoSegmentCurve, MsoEditingType.msoEditingAuto, 250, 350);
ffb.AddNodes(MsoSegmentType.msoSegmentCurve, MsoEditingType.msoEditingAuto, 100, 100);
ffb.AddNodes(MsoSegmentType.msoSegmentCurve, MsoEditingType.msoEditingAuto, 350, 350);
PowerPoint.Shape shp = sld.Shapes.AddLine(0, 0, 0, 0); // NUR PLATZHALTER...
shp = ffb.ConvertToShape();
}
Funktioniert!
Frage an die NetOffice Gurus: ist das so OK oder gibt es einen anderen kürzeren/besseren Weg?
Vielen Dank!
emtcho
Hallo,
Vorab, dein Code geht okay so. (Du gehst jetzt eben den manuellen Step-By-Step Weg statt alles auf einmal zuzuweisen, das kostet dich ein paar millisekunden Performance)
Variant Arrays sind in COM leider recht kompliziert. Das ist dadurch bedingt das die Speichergrösse bei Variants zur Laufzeit unbekannt ist, schliesslich kann ein Variant so ziemlich alles sein und sich auch jederzeit ändern. Bei Variant Arrays wirds dann nochmal komplizierter. Idealerweise sollte man Variant Arrays unter .NET vermeiden.
Ich arbeite dieszbgl. an einer besseren Unterstützung in NO 1.7 für Variant Arrays, da es von Community Seite schon länger nachgefragt wird, ganz besonders von der Excel Communty der Finance Developer die RTD(Real-Time-Data) Server intuitiver nutzen wollen