Showing results 1 to 10 of 10

Thread: AW: Events im Editor

  1. #1
    Join Date
    06.05.2011
    Posts
    41

    Default AW: Events im Editor

    Hallo,

    erstmal Danke für die Hinweise. Das funktioniert alles soweit, auch das mit dem Wizard. Jetzt habe ich aber noch eine Sache die ich nicht nachvollziehen kann. Mit dem folgenden Quellcode erzeuge ich 2 Kreise und 1 Rechteck, die dann in einem Symbol ("Belt_Conveyor") zusammengefasst werden. Sobald ich die Element zu einem Symbol zusammenfasse, muss ich für die Eigenschaften .Left und .Top (für alle 3 Elemente) Werte angeben die ich durch ausprobieren herausgefunden habe. Leider verstehe ich nicht warum? Gebe ich diese Werte nicht an, werden die Elemente nicht zusammenhängend im Bild platziert. Bei dem Beispiel aus der VBA-Hilfe (Programmierschnittstellen -> Object Modell -> SymbolElements) passiert das gleiche. Woran kann das liegen?

    'Übergabeparameter: Breite und Höhe des Rechtecks
    Private Function createBeltConvoyer(ByVal WIDTH_X As Integer, ByVal HEIGHT_Y As Integer)
        Dim zPIC As DynPicture
        Dim eleRec As Element
        Dim eleCir1 As Element
        Dim eleCir2 As Element
        Dim zSymbol As Element
        Const strPicture As String = "picStandardMixer1"
        Const strElement As String = "Rectangle1"
        Const STRCIR1 As String = "Circle1"
        Const STRCIR2 As String = "Circle2"
            
        'get Screen object
        Set zPIC = MyWorkspace.ActiveDocument.DynPictures.Item(strPicture)
        'if Screen object is nothing, the Screen doesn't exist...
        If zPIC Is Nothing Then Exit Function
        'get Element object
        Set eleRec = zPIC.Elements.Item(strElement)
        Set eleCir1 = zPIC.Elements.Item(STRCIR1)
        Set eleCir2 = zPIC.Elements.Item(STRCIR1)
        Set zSymbol = zPIC.Elements.Item("Belt_conveyor")
        'if element object is nothing, a new one can be created...
        If eleRec Is Nothing Then
            'create a new element (Text-Button)
            Set eleRec = zPIC.Elements.Create(strElement, tpRectangle)
            'set properties of the new element
            With eleRec
                'set size and position
                .Width = WIDTH_X
                .Height = HEIGHT_Y
                .Left = -200 + (HEIGHT_Y / 2)
                .Top = -200
                'set graphic representation
                .BackColor = vbBlue
                .ForeColor = vbBlack
            End With
        End If
    
        If eleCir1 Is Nothing Then
            'create a new element (Text-Button)
            Set eleCir1 = zPIC.Elements.Create(STRCIR1, tpCircle)
            'set properties of the new element
            With eleCir1
                'set size and position
                .Height = HEIGHT_Y
                .Width = HEIGHT_Y
                .Left = -100
                .Top = -100
                'set graphic representation
                .BackColor = vbBlue
                .ForeColor = vbBlack
            End With
        End If
        
        If eleCir2 Is Nothing Then
            'create a new element (Text-Button)
            Set eleCir2 = zPIC.Elements.Create(STRCIR2, tpCircle)
            'set properties of the new element
            With eleCir2
            'set size and position
            .Height = HEIGHT_Y
            .Width = HEIGHT_Y
            .Left = WIDTH_X
            .Top = 0
            'set graphic representation
            .BackColor = vbBlue
            .ForeColor = vbBlack
            End With
        End If
        
        If zSymbol Is Nothing Then
            'create symbol
            Set zSymbol = zPIC.Elements.Create("Belt_conveyor", tpSymbol)
            'set properties of the new symbol
            With zSymbol
                .Width = WIDTH_X + HEIGHT_Y
                .Height = HEIGHT_Y
                .Left = 100
                .Top = 100
                .Elements.Add eleRec
                .Elements.Add eleCir1
                .Elements.Add eleCir2
            End With
        End If
        
        'save picture
        zPIC.Save
    End Function

    VG

  2. #2

    Default Re: AW: Events im Editor

    Hallo,

    Habe diesen Post im VBA Forum verschoben, vielleicht hat hier jemand eine Idee.

    Hilfreich wäre eventuell auch die Information mit welche breite und höhe die Funktion aufgerufen wird.

    Ich habe es mal versucht mit 200,200, was allerdings so für mich keinen Sinn ergeben hat, was die Anordnung der Elemente im Bild betrifft (ohne jetzt mal ein Symbol zu erzeugen)

    Was auf jeden Fall beachtet werden muss für die Grösse des Symbols ist, dass alle Elemente darin platz haben. (Wenn manuell im Editor ein eingebettetes Symbol erzeugt wird, ist die Grösse vom Symbol immer so gross wie die top-left koordinaten bis bottom right koordinaten aller Elemente.

    VG
    Mark

  3. #3
    Join Date
    06.05.2011
    Posts
    41

    Default AW: Events im Editor

    Guten Morgen,

    Die Größe der Symbole wird durch die Angaben .Height und .Width so festgelegt, dass alle Elemente rein passen. Hab als Beispiel 100 Pixel breit und 20 Pixel hoch angegeben.

    Was mir noch aufgefallen ist: Die Reihenfolge wie die Elemente dem Symbol hinzugefügt werden ist entscheident. Das letzte Element (in dem Beispiel eleCir2) hat den Bezugspunkt zum Symbol oben links. Bei jedem weiteren Element wird der Bezugspunkt um die .Top und .Left des Symbols nach +x und +y verschoben, wenn ich das richtig beobachtet habe.
    Hab den Code dahingehend verändert das .Top und .Left der Elemente immer in Abhängigkeit von den Eigenschaften .Top und .Left des Symbols berechnet werden. Das funktioniert auch, aber einen Sinn kann ich dahinter nicht erkennen, dass sich die Bezugspunkte verschieben .
    Der Funktion werden dann noch die Startpunkte .Left und. Top übergeben.

    If eleRec Is Nothing Then
            'create a new element (Text-Button)
            Set eleRec = zPIC.Elements.Create(strElement, tpRectangle)
            'set properties of the new element
            With eleRec
                'set size and position
                .Width = intWidth
                .Height = intHeight
                .Left = -(2 * intLeftStart) + (intHeight / 2) '-200 + (intHeight / 2)
                .Top = -(2 * intTopStart) '200
                'set graphic representation
                .BackColor = vbBlue
                .ForeColor = vbBlack
            End With
        End If
    
        If eleCir1 Is Nothing Then
            'create a new element (Text-Button)
            Set eleCir1 = zPIC.Elements.Create(STRCIR1, tpCircle)
            'set properties of the new element
            With eleCir1
                'set size and position
                .Height = intHeight
                .Width = intHeight
                .Left = -intLeftStart '100
                .Top = -intTopStart '100
                'set graphic representation
                .BackColor = vbBlue
                .ForeColor = vbBlack
            End With
        End If
        
        If eleCir2 Is Nothing Then
            'create a new element (Text-Button)
            Set eleCir2 = zPIC.Elements.Create(STRCIR2, tpCircle)
            'set properties of the new element
            With eleCir2
            'set size and position
            .Height = intHeight
            .Width = intHeight
            .Left = intWidth
            .Top = 0
            'set graphic representation
            .BackColor = vbBlue
            .ForeColor = vbBlack
            End With
        End If
    Last edited by sniggi : 31st January 2012 at 08:07

  4. #4
    martins Gast

    Default Re: AW: Events im Editor

    hallo,

    keine Ahnung ob das Thema noch aktuell ist oder nicht, aber ich poste mal einen möglichen Hinweis dazu:

    die Positionierung von Elementen in einem Symbol hat sich vor einiger Zeit mal geändert. Vorher war es so, dass die Position absolut im Bild verwendet wurde, nun verhalten sich Elemente, die in Symbole hinzugefügt werden, relativ zum Nullpunkt des Symbols.

    In welcher Version arbeitest du?

  5. #5

    Frage Re: AW: Events im Editor

    Hi Martins,

    Da wäre es vielleicht interessant zu wissen, mit welcher Version / Service Pack / Build sich das genau geändert hat, und vl. ein Beispiel wie es früher funktioniert hat, und wie es jetzt funktioniert.

    VG
    Mark

  6. #6
    martins Gast

    Default Re: AW: Events im Editor

    hallo,

    ich werde dazu ein Beispiel posten, wenn ich etwas mehr Zeit finde ich weiß nur mehr, dass die Änderung bei den Symbolen zwischen 6.50 und 6.51 passiert sein müsste.
    Ich habe es mir inzwischen auf meine ToDo-Liste notiert

    lg

  7. #7
    Join Date
    06.05.2011
    Posts
    41

    Default AW: Events im Editor

    Hallo,

    ja das Thema ist immernoch aktuell. Bekomm auch leider vom Support seit geraumer Zeit keine Antwort mehr dazu...
    Arbeite mit V6.51 SP0 Build 4. Generell scheint der Bezugspunkt relativ zum Symbol-Nullpunkt, aber dieser verschiebt sich mit jedem hinzugefügten Element um die Startposition des Symbols

    VG
    Michael

  8. #8
    martins Gast

    Default Re: AW: Events im Editor

    hallo Michael,

    nur damit du Bescheid weißt, ich habe dich nicht vergessen und ich schaue mir die Thematik gerade an.

    Nur kurz zum Status Quo: Es scheint so, also ob man die Position eines Symboles über DynProperties("StartX") erst dann setzen kann, wenn ein Element in dem Symbol vorhanden ist. Das ist mir so nebenbei aufgefallen ich bilde mir aber ein, dass das früher nicht so gewesen ist.
    Woher der "Offset" beim Hinzufügen des Elements kommt, kann ich noch nicht sagen. Ich werde mir das ganze aber noch genau anschauen.

    Mein Code, mit dem ich das ganze teste, sieht folgendermaßen aus - falls jemand interessiert sein sollte:

            public void Macro_CreateSymbol()
            {
    
                zenOn.IElement zSymbol, zRectangle, zCircle;
                zenOn.IDynPicture zScreen;
    
                try
                {
                    if (this.ActiveDocument.DynPictures().Item("SymbolScreen") != null)
                    {
                        this.ActiveDocument.DynPictures().Delete("SymbolScreen");
                    }
                    if (this.ActiveDocument.Templates().Item("FrameForSymbolScreen") == null)
                    {
                        zenOn.ITemplate zTemplate = this.ActiveDocument.Templates().Create("FrameForSymbolScreen", true);
                    }
    
                    zScreen = this.ActiveDocument.DynPictures().Create("SymbolScreen", "FrameForSymbolScreen", zenOn.tpDynPicturesTypes.tpStandard);
                    //zScreen = this.ActiveDocument.DynPictures().Item("SymbolScreen");
                }
                catch (Exception ScreenException)
                {
                    MessageBox.Show("An error occured when trying to access the screen: " + ScreenException.Message);
                    return;
                }
                
                //set properties for rectangle
                zRectangle = zScreen.Elements().Create("Rectangle1", zenOn.tpElementTypes.tpRectangle);
                zRectangle.Width = 100;
                zRectangle.Height = 100;
                SetPosition(zRectangle, new int[] { 50, 50 });
              
                //set properties for circle
                zCircle = zScreen.Elements().Create("Circle1", zenOn.tpElementTypes.tpCircle);
                zCircle.Width = 50;
                zCircle.Height = 50;
                SetPosition(zCircle, new int[] {75, 75});
    
                zSymbol = zScreen.Elements().Create("Symbol1", zenOn.tpElementTypes.tpSymbol);
                zSymbol = zScreen.Elements().Item("Symbol1");
    
                zSymbol.Update();
                zScreen.Save();
    
                ////set position of symbol and rectangle to 0/0 and save information in array
                //int[] nResetSymbol = ResetPosition(zSymbol);
    
                int[] nResetRectangle = ResetPosition(zRectangle);
                int[] nResetCircle = ResetPosition(zCircle);
    
                //check if resetting was successful, add element and set position again
                if (nResetRectangle != null)
                {
                    zSymbol.Elements.Add(zRectangle);
                    SetPosition(zSymbol.Elements.Item("Rectangle1"), nResetRectangle);
                }
    
                zSymbol.set_DynProperties("StartX", 500);
                SetPosition(zSymbol, new int[] { 200, 100 });
    
                if (nResetCircle != null)
                {
                    zSymbol.Elements.Add(zCircle);
                    SetPosition(zSymbol.Elements.Item("Circle1"), nResetCircle);
                }
    
                zSymbol.Update();
                zScreen.Save();
            }
    
            /// 
            /// Sets position of element
            /// 
            /// Element to set position of
            /// Integer array with position info
            private void SetPosition(zenOn.IElement zElem, int[] nElemPos)
            {
                try
                {
                    zElem.set_DynProperties("StartX", nElemPos[0]);
                    zElem.set_DynProperties("StartY", nElemPos[1]);
                }
                catch (Exception SetPositionException)
                {
                    MessageBox.Show("An error occured when trying to set position: " + SetPositionException.Message);
                }        
            }
    
            /// 
            /// Resets position to 0/0 and returns array with prior position
            /// 
            /// Element to set to 0/0
            /// Int array with prior positioning
            private int[] ResetPosition(zenOn.IElement zElem)
            {
                try
                {
                    int[] nElemPos = new int[2];
                    nElemPos[0] = (int)zElem.get_DynProperties("StartX");
                    nElemPos[1] = (int)zElem.get_DynProperties("StartY");
    
                    zElem.set_DynProperties("StartX", 0);
                    zElem.set_DynProperties("StartY", 0);
    
                    return nElemPos;
                }
                catch (Exception ResetPositionException)
                {
                    MessageBox.Show("An error occured when trying to reset position: " + ResetPositionException.Message);
                    return null;
                }
            }


    Also: ich hab nicht drauf vergessen werde im Laufe der nächsten Woche noch eine Antwort hier rein schreiben, wenn ich etwas genaueres weiß.

    lg

  9. #9
    martins Gast

    Default Re: AW: Events im Editor

    hi,

    schau grade so durchs Forum und schreib jetzt mal den letzten Stand hier rein: es existiert nun ein Defect dazu in unserer Datenbank (#26640), für die Zeit bis zum Fix wird man wohl mit dem Problem leben müssen.

    Hoffe, ich konnte helfen.
    mfg,
    Martin

  10. #10
    martins Gast

    Default Re: AW: Events im Editor

    hi,

    da ich grade zufällig über diesen Forumsthread stolpere: ab 7.0 SP0 Build 15 ist das Verhalten wieder so, wie man es beispielsweise von 6.22 SP0 kannte. Selbst getestet mit 7.11 Build 14431 mit dem Code (von vor 3 Jahren )

    Public Sub CreateSymbol()
    
    Dim zSymbol, zRectangle, zCircle As Element
    Dim zScreen As DynPicture
    Set zScreen = MyWorkspace.ActiveDocument.DynPictures.Item(0)
    Set zRectangle = zScreen.Elements.Create("Rectangle1", tpRectangle)
    
    zRectangle.Width = 100
    zRectangle.Height = 100
    zRectangle.DynProperties("StartX") = 50
    zRectangle.DynProperties("StartY") = 50
     
    Set zCircle = zScreen.Elements.Create("Circle1", tpCircle)
    zCircle.Width = 50
    zCircle.Height = 50
    zCircle.DynProperties("StartX") = 75
    zCircle.DynProperties("StartY") = 75
    Set zSymbol = zScreen.Elements.Create("Symbol1", tpSymbol)
    zSymbol.Elements.Add zRectangle
    zSymbol.Elements.Add zCircle
    
    End Sub

    lg
    Martin

Similar Threads

  1. Events im Editor
    By sniggi in forum zenon Supervisor
    Replies: 1
    Last Post: 20th January 2012, 01:29
  2. Alarm events
    By sldewit in forum VSTA
    Replies: 3
    Last Post: 4th June 2010, 11:04
  3. VBA scripts by alarms events
    By captain in forum VBA
    Replies: 2
    Last Post: 14th August 2008, 09:30
  4. Circular Alarms/Events
    By consol in forum zenon Supervisor
    Replies: 1
    Last Post: 13th August 2008, 10:11
  5. Replies: 0
    Last Post: 20th August 2007, 17:04

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •