Place Text through VBA

Hi all,

Trying to work out how to place a predefined text string onto the drawing, without bring up any menus or options.

Have tried

    CadInputQueue.SendKeyin "place text"
CadInputQueue.SendKeyin sText

But the keyin window appears and i cant work out how to close it.

Also have tried
    CadInputQueue.SendKeyin "place dialogtext icon"
CadInputQueue.SendMessageToApplication "WORDPROC", sText

Which brings up the word processor but doesn't input the text.

Ideally i'd like to simple click a button on a form and the text appears on the drawing at the cursor ready for the user to select the location.

Cheers,

Rob

Parents
  • Unknown said:
    CadInputQueue.SendKeyin "place text"
    CadInputQueue.SendKeyin sText

    In general, if you queue a user key-in using VBA then the result is the same as if you performed that task manually.  In other words, MicroStation can't distinguish between you typing place dialogtext icon and VBA queueing place dialogtext icon.

    If a key-in causes MicroStation to pop a dialog, then it will pop that dialog.

    If you want to avoid the consequents of a user key-in, then use VBA to create objects directly, in the way that others have suggested.  Search VBA help for examples.  Searching for CreateTextElement1 reveals an example under topic Elements and Levels.

     
    Regards, Jon Summers
    LA Solutions

    Answer Verified By: Rob Golding 

  • Thanks for the replies. Has basically got what i wanted.

    The only thing is that i would like the user to place the text where they would like, is there a way i can put the new text element to the cursor and have the user select the point? rather than define the point?

  • Unknown said:
    The only thing is that i would like the user to place the text where they would like, is there a way Ii can put the new text element to the cursor and have the user select the point?

    Write a class that Implements IPrimitiveCommandEvents.  Read about Interface Oriented Programming in VBA help.  Start that class from your form and pass it the string to be created.

    Sub PlaceTextInteractive (s As String)
      Dim oTextPlacer As New clsGolding
      oTextPlacer.Text = s
      CommandState.StartPrimitive oTextPlacer
    End Sub

    Create a class module named clsGolding.  Put the following in that class...

    Implements IPrimitiveCommandEvents

    Private m_strText As String

    [Edit] ' wrong: Public Property Set Text (s As String)
    Public Property Let Text (s As String)


      m_strText = s

    End Property

    '  Add all the subroutines required by IPrimitiveCommandEvents

    Sub IPrimitiveCommandEvents_Datapoint (point As Point3d, oView As View)
      Dim oText As TextElement
      Set oText = CreateTextElement1 (Nothing, m_strText, point, Matrix3dIdentity)
      ActiveModelReference.AddElement oText
    End Sub

     
    Regards, Jon Summers
    LA Solutions

Reply
  • Unknown said:
    The only thing is that i would like the user to place the text where they would like, is there a way Ii can put the new text element to the cursor and have the user select the point?

    Write a class that Implements IPrimitiveCommandEvents.  Read about Interface Oriented Programming in VBA help.  Start that class from your form and pass it the string to be created.

    Sub PlaceTextInteractive (s As String)
      Dim oTextPlacer As New clsGolding
      oTextPlacer.Text = s
      CommandState.StartPrimitive oTextPlacer
    End Sub

    Create a class module named clsGolding.  Put the following in that class...

    Implements IPrimitiveCommandEvents

    Private m_strText As String

    [Edit] ' wrong: Public Property Set Text (s As String)
    Public Property Let Text (s As String)


      m_strText = s

    End Property

    '  Add all the subroutines required by IPrimitiveCommandEvents

    Sub IPrimitiveCommandEvents_Datapoint (point As Point3d, oView As View)
      Dim oText As TextElement
      Set oText = CreateTextElement1 (Nothing, m_strText, point, Matrix3dIdentity)
      ActiveModelReference.AddElement oText
    End Sub

     
    Regards, Jon Summers
    LA Solutions

Children