出来一个Merlin,对我说'hello'。对它叫一声'Hi',他说一声“HI”,叫一声'Fuck you',他说"Fuck you too"
还请告诉我languageID怎么设定?我这里老是出现连接错误请具体教来

解决方案 »

  1.   


    if tmp='hello' then
      tmp:='Hi';这种方法不行吗?如果多的话,用一个表保存对应关系不就行了.
      

  2.   

    MyAgent.Characters.Load(MerlinID,MerlinACS);
     MerlinID := MyAgent.Characters.Character(MerlinID);
      

  3.   

    自动对话是太夸张了,俺不会,不过使用MsAgent倒会一点. 请自己把下面代码中的路径修改掉.-------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, OleCtrls, AgentObjects_TLB;type
      TForm1 = class(TForm)
        Agent1: TAgent;
        btnSpeak: TButton;
        Edit1: TEdit;
        btnPlayVoice: TButton;
        ListBox: TListBox;
        btnLoadActionList: TButton;
        btnStop: TButton;
        Button1: TButton;
        procedure btnSpeakClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure btnPlayVoiceClick(Sender: TObject);
        procedure btnLoadActionListClick(Sender: TObject);
        procedure ListBoxDblClick(Sender: TObject);
        procedure btnStopClick(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Agent1Command(Sender: TObject; const UserInput: IDispatch);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    const
      {$EXTERNALSYM IID_IEnumVariant}
      IID_IEnumVariant: TGUID = (D1:$00020404;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));var
      Form1: TForm1;implementationuses ActiveX;
    {$R *.dfm}var
      Genie: IAgentCtlCharacterEx;
      Request1,Request2: IAgentCtlRequest;
    procedure TForm1.btnSpeakClick(Sender: TObject);
    begin
      Genie.Speak(Edit1.Text,EmptyParam);
      //Genie.Hide(1);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Request1:= Agent1.Characters.Load('Genie1','c:\windows\msagent\chars\merlin.acs');
      Genie:= IAgentCtlCharacterEx(Agent1.Characters.Character('Genie1'));
      Genie.LanguageID:= $0804;
      Edit1.Text:= 'Hello world';
      Genie.Show(0);
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Genie.Hide(1);
      Agent1.Characters.Unload('Genie1');
      Action:= caFree;
    end;procedure TForm1.btnPlayVoiceClick(Sender: TObject);
    begin
      Request1:= Genie.Speak('hi','c:\temp\2.wav');
    end;procedure TForm1.btnLoadActionListClick(Sender: TObject);
    var
      AnimationNames:IAgentCtlAnimationNames;
      AnimName:OleVariant;
      dwRetrieved:DWORD;
      AEnum:IEnumVariant;
    begin
      //Genie.ShowPopupMenu(200,200);
      AnimationNames:=Genie.AnimationNames;
      AnimationNames.Enum.QueryInterface(IID_IEnumVariant,AEnum);
      ListBox.Clear;
      while AEnum.Next(1,AnimName,dwRetrieved)=0 do
        ListBox.Items.Add(AnimName);
    end;procedure TForm1.ListBoxDblClick(Sender: TObject);
    begin
      Request2:= Genie.Play(ListBox.Items[ListBox.ItemIndex]);
    //    ShowMessage(IntToStr(Request2.ID));
    end;procedure TForm1.btnStopClick(Sender: TObject);
    begin
      if Request2.ID <> 0 then Genie.Stop(Request2);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Genie.Commands.Add('1', 'Yes', '', True, True);
      Genie.Commands.Add('2', 'No', '', True, True);
    end;procedure TForm1.Agent1Command(Sender: TObject;
      const UserInput: IDispatch);
    begin
      if IAgentCtlUserInput(UserInput).Name = '1' then begin
        ShowMessage('Yes');
      end
      else if IAgentCtlUserInput(UserInput).Name = '2' then begin
        ShowMessage('No');
      end
    end;end.
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, AgentObjects_TLB;type
      TForm1 = class(TForm)
        Agent1: TAgent;
        procedure FormCreate(Sender: TObject);
        procedure onPaint(Sender: TObject);  private    { Private declarations }
      public
        { Public declarations }
      end;const
      {$EXTERNALSYM IID_IEnumVariant}
      IID_IEnumVariant: TGUID = (D1:$00020404;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));var
      Form1: TForm1;
    implementationuses ActiveX;
    {$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      num: Integer;
      Merlin: IagentCtlCharacterEx;
      Request1: IagentCtlRequest;
    begin
      Request1:= Agent1.Characters.Load('Merlin','c:\windows\msagent\chars\merlin.acs');
      Merlin:= IAgentCtlCharacterEx(Agent1.Characters.Character('Merlin'));
      Merlin.LanguageID:=$0804;
      Merlin.Show(0);
      Merlin.MoveTo(Screen.Width-250,Screen.Height-250,2);
      Merlin.Speak('Welcome to Windows!','');
      Merlin.Play('Pleased');
      Merlin.Speak('I am Windows Helper, Merlin.','');
      Merlin.Play('Greet');
      Merlin.Speak('Call me whenever you need.','');
      Merlin.Play('Blink');
    end;procedure TForm1.onPaint(Sender: TObject);
    begin
      ShowWindow(Form1.Handle,SW_HIDE);
      ShowWindow(Application.Handle,SW_HIDE);
    end;end.
    /////////////////////////////////////////我就这么写的,LanguageID那一段有的话就会出现Access Violation的警告框!是怎么回事?
      

  5.   

    我的OS是XP,是不是有关系啊?