Laden...

PowerPoint (NetOffice 1.6) - SafeArrayOfPoints object Initialisierung für AddPolyline...

Erstellt von emtcho vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.758 Views
E
emtcho Themenstarter:in
16 Beiträge seit 2014
vor 10 Jahren
PowerPoint (NetOffice 1.6) - SafeArrayOfPoints object Initialisierung für AddPolyline...

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

E
emtcho Themenstarter:in
16 Beiträge seit 2014
vor 10 Jahren
Ein Glück wer noch Office 2K hat...

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

Gelöschter Account
vor 10 Jahren

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