ISpeechRecoGrammar Rules property (SAPI 5.3)

Microsoft Speech API 5.3

Interface: ISpeechRecoGrammar

Rules Property

The Rules property returns the collection of grammar rules contained in the RecoGrammar.


Set: Not available.
Get: ISpeechGrammarRules = ISpeechRecoGrammar.Rules


  • ISpeechRecoGrammar
    The owning object.
  • ISpeechGrammarRules
    Set: (This property is read-only).
    Get: An ISpeechGrammarRules variable which contains the grammar's rules.


The following Visual Basic form code demonstrates the use of the Rules method, the CmdSetRuleState method and the CmdSetRuleIdState method. To run this code, create a form with the following control:

  • A command button called Command1

Paste this code into the Declarations section of the form.

The Form1_Load procedure creates a grammar and loads it with the solitaire grammar sol.xml, and uses the Rules method to create a collection of the rules contained in the grammar. The Command1_Click procedure creates an ISpeechGrammarRule object for the first rule contained in the grammar, and deactivates this rule using the CmdSetRuleState method and the rule's Name property. The procedure then creates an ISpeechGrammarRule object for the second rule, and deactivates that rule using the CmdSetRuleIdState method and the rule's Id property.

Option Explicit

Dim MyRecoContext As SpeechLib.SpSharedRecoContext
Dim MyGrammar As SpeechLib.ISpeechRecoGrammar
Dim Rule As SpeechLib.ISpeechGrammarRule
Dim Rules As SpeechLib.ISpeechGrammarRules

Private Sub Command1_Click()
    On Error GoTo EH

    'Get first rule in rules collection and set it inactive
    'Use CmdSetRuleState method and the rule NAME

    Set Rule = Rules.Item(0)
    MyGrammar.CmdSetRuleState Rule.Name, SGDSInactive

    'Get next rule in rules collection and set it inactive, too
    'Use CmdSetRuleIdState method and the rule ID

    Set Rule = Rules.Item(1)
    MyGrammar.CmdSetRuleIdState Rule.Id, SGDSInactive

    If Err.Number Then ShowErrMsg
End Sub

Private Sub Form_Load()
    On Error GoTo EH

    Set MyRecoContext = New SpSharedRecoContext
    Set MyGrammar = MyRecoContext.CreateGrammar

    'Load the Solitaire grammar dynamically so it can be changed.
    Call MyGrammar.CmdLoadFromFile("c:\sol.xml", SLODynamic)

    Set Rules = MyGrammar.Rules     'Get the collection of rules

    If Err.Number Then ShowErrMsg
End Sub

Private Sub ShowErrMsg()

    ' Declare identifier:
    Dim T As String

    T = "Desc: " & Err.Description & vbNewLine
    T = T & "Err #: " & Err.Number
    MsgBox T, vbExclamation, "Run-Time Error"

End Sub