Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как переключать программно PageControl страницы 
:(
    Опции темы
mauar
Дата 2.10.2007, 19:05 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.9.2007

Репутация: нет
Всего: нет



 Есть форма, на форме расположен PageControl , прописана одна команда, с несколькими действиями,   вот такого типа:
 
Код

If Cmd.Name = 'Экскурсия' Then                                                   // Действие 1
Chars.MoveTo(360,150,1);

If Cmd.Name = 'Экскурсия' Then                                                  // Действия 2
Chars.Play('Explain');
 
If Cmd.Name = 'Экскурсия' Then                             [color=red]// После окончания действия 2, происходит переключения на страницу PageControl с индексом 4[/color]
PageControl1.ActivePage:= TabSheet4;

If Cmd.Name = 'Экскурсия' Then                                                 // Действия  3
Chars.Speak('\Chr="Normal"\
\Ctx="Unknown"\\Spd=130\\Pit=88\Текст такой то  ...','');

If Cmd.Name = 'Экскурсия' Then                                                 // Действия 4 
Chars.Play('GestureRight');

If Cmd.Name = 'Экскурсия' Then                            [color=red]// После окончания действия 4, происходит переключения на страницу PageControl с индексом 1[/color]
PageControl1.ActivePage:= TabSheet1;


В итоге при запуске программы, программа автоматически выполняет последнюю команду ПэйджКонтрол 4-ю страницу,  мне нужно чтобы, при загрузке программы открывался индекс 4 и после окончания действия 4 открывался индекс 1  у  "PageControl'a" как сделать, цепочку  действий команды прерывать нельзя, прописываю переменную не получается, помогите,  пожалуйсто обьясните, жэелательно на примере, как грамотно произвести автоматическое  переключения страниц  по  ходу действий списка команды. Помогите, не могу с этой бедой справиться.
 

Это сообщение отредактировал(а) Alexeis - 2.10.2007, 20:17
PM MAIL   Вверх
Alix
Дата 2.10.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Честно говоря, не понял сути вопроса. Как я понял, у тебя выполняется некий код, который в том числе выполняет переключение закладок у PageControl'a.

Цитата
прописана одна команда, с несколькими действиями

что понимается под командой? в каком месте прописана?

Если это все одна команда, почему не делаешь код типа:
Код
if cmd.name = 'Экскурсия' then begin
  Chars.MoveTo(360,150,1);
  Chars.Play('Explain');
  PageControl1.ActivePage:= TabSheet4;
  ...
end;
?


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
mauar
Дата 2.10.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.9.2007

Репутация: нет
Всего: нет



Команда  нажатия на кнопку из списка выпадающего меню:
Код

Chars.Commands.Add('Test', '&Test', 1, 1, True);


Прописывается при появлении формы ShowForm

Самое интересное, там без разницы, есть Begin перед Then или нет.

пробовал делать даже так:

Код


Begin
If Cmd.Name = 'Экскурсия' Then Begin                                         // Действие 1
Chars.MoveTo(360,150,1);
end;  
end;

Begin
If Cmd.Name = 'Экскурсия' Then Begin                                        // Действия 2
Chars.Play('Explain');
 end;  
end;

Begin
If Cmd.Name = 'Экскурсия' Then Begin                                       // После окончания действия 2, происходит переключения на страницу PageControl с индексом 4
PageControl1.ActivePage:= TabSheet4;
end;  
end;

Begin
If Cmd.Name = 'Экскурсия' Then  Begin                                     // Действия  3
Chars.Speak('\Chr="Normal"\
\Ctx="Unknown"\\Spd=130\\Pit=88\Текст такой то  ...','');
end;  
end;

Begin
If Cmd.Name = 'Экскурсия' Then  Begin                                    // Действия 4 
Chars.Play('GestureRight');
end;  
end;

Begin
If Cmd.Name = 'Экскурсия' Then  Begin                                   // После окончания действия 4, происходит переключения на страницу PageControl с индексом 1
PageControl1.ActivePage:= TabSheet1;
end;  
end;


 Все равно у меня после выполнении этого кода (действия 2 (смотрите на код)) , вкладка переключается на TabSheet 1, хотя должна переключиться на TabSheet 4 , а только после выполнения в коде действия 4  должна переключиться на TabSheet 1 . В чем прикол? Кстати если бы не переключения ТабШит'ов я бы не вообще не стал исползовать команду Begin , она и так прописана в FormShow для цепочки с действиями этой команды, и, так все прекрастно работает, по крайней мере, код не засоряется лишними командами.
 Простой вопрос: как мне сделать так, чтобы после выполнения из кода  действия 2 открылся TabSheet 4  , а после выполнения действия 4 открылся TabSheet 1. 
PM MAIL   Вверх
Alix
Дата 3.10.2007, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Вообще я не так написал. Ну да ладно уж.
Если TabSheet4 это 4 вкладка, то все должно работать. Могу также порекомендовать использовать не ActivePage, а ActivePageIndex (0..PageCount-1). 
Теперь самое главное, мне кажется что у тебя код выполняется так быстро, что после действия 2 происходит переключение на 4 закладку, а потом остаток кода так быстро выполняется, что после действия 4 сразу происходит переключение на 1 закладку и ты просто не успеваешь заметить переключения на 4ю. Убери все действия после перекючения на 4ю вкладку, на нее по прежнему не переключается?


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
mauar
Дата 3.10.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.9.2007

Репутация: нет
Всего: нет



Хочу тебя обрадовать, после переключения на 4-ю вкладку код заканчивается  smile Там и так ни чего не было,  причем прикол в том что все действия между двумя переключениями вкладок работают  прекрастно, код может и выполняется быстро, дейсвий много идут они все друг за другом отлично и быстро (пока по твоему совету Begin не прописал),  но...  вкладка почему то переключается, хотя должна была переключиться в конце кода. 
Подожди, обьясни подробнее что это за Коунт в активпэйдже такой - ActivePageIndex (0..PageCount-1)?. Я пробовал прописывать: ActivePageIndex:=1; 
Все то же самое. Может переменную какую обьявить ? И на неё ссылаться, хотя то же самое будет :((

Люди помогите пожалуйсто, иначе выкину нафиг эту программу, и заброшу писать программы :(
PM MAIL   Вверх
Alix
Дата 3.10.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Цитата
пока по твоему совету Begin не прописал

во-первых, ты его ужасно прописал, а во-вторых, он никак не замедлит выполнение программы

Вот тебе небольшой пример. Кинь на форму PageControl, Edit и Button. В обработчике Button.OnClick напиши:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  idx : integer;

begin
  try
    idx := strToInt(Edit1.Text);
  except
    showmessage('Invalid number');
    exit;
  end;

  if (idx < 1) or (idx > PageControl1.PageCount) then begin
    showmessage('Index out of ranges');
    exit;
  end;

  PageControl1.ActivePageIndex := idx - 1;
end;

Вводишь в edit номер вкладки, жмякаешь по кнопке и происходит переключение. Ну или одна из ловимых ошибок.

А вообще сложно сказать что у тебя там не работает. Выложи весь код программы. И плиз, более доходчиво напиши, чего ты хочешь от программы.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
DonPager
Дата 3.10.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



mauar, Я так понял тебе надо вот что:
1)Сделать что-то
2)Переключиться на вкладку 4
3)Сделать что-то
4)Переключиться на вкладку 1
Так?
А у тебя получается, что переключается на вкладку 1 и всё ?так?
Если так, то после переключения на вкладку 4 обнови состояние табшитов (рефреш или репайн или типа того),
а то происходит оптимизация - в итоге одно переключение

Это сообщение отредактировал(а) DonPager - 3.10.2007, 13:33


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
mauar
Дата 3.10.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.9.2007

Репутация: нет
Всего: нет



в принципе нашел небольшое решенние это прописать перед переключением вкладки 4 задержку sleep (5000); но ... мне кажется лучше было бы 
код переключался после определенного выполнения а не при задержке. 
Может прописать команду wait и в ней указать чтобы он ждал выполнения предпоследнего действия переключения TabSheet.

Цитата(Alix @  3.10.2007,  11:42 Найти цитируемый пост)
 Выложи весь код программы. И плиз, более доходчиво напиши, чего ты хочешь от программы. 


К форме подключен MS Agent  Джин, Мерлин,  Собачка, Скрепка и т.д. Может помнишь раньше автоматически с советами и диалогами вылазил 
в MS Office 97  при загрузке ворда или экселя!?

 Так -вот,  этот агент ходит по моей форме и проводит виртуалную экскурсию, показывая возможности программы, на форме установлен PageControl с 4-мя вкладками. Агент, вернее код  должен по окончания рассказывания агента переключить на следующую вкладку.
 
Код private , кстати тут по моему тоже ошибка в прописывании комманды персонажа, 
при прописывании комманды Chars компилятор выдает ошибку, я написал Char  smile  но вроде все работает нормально.
Код

private
{ Private declarations }
Req: IAgentCtlRequest;{Будет хранить текущее действие персонажа}
Chars: IAgentCtlCharacterEx;{Хранит сам персонаж для обращения к нему}
Char:  IAgentCtlCommandsEx; {Хранит комманды персонажа}


Код FormShow формы:
Код

procedure TBase.FormShow(Sender: TObject);
begin
Application.OnHint:=ShowHint;
{----------------------------Загружаем агента---------------------------------------}
Agent1.Characters.Load('MyAgent', 'Genie.acs');
Chars:= Agent1.Characters.Character('MyAgent') as IAgentCtlCharacterEx;
{-----------------------------------------------------------------------------------}
 Chars.Set_LanguageID($419);   // Выбираем язык агента - Русский

{----------------Сюда задаем команды меню советника ---------------------------------}

 Chars.Commands.Add('Test', '&Test', 1, 1, True);
 Chars.Commands.Add('Экскурсия', '&Экскурсия', 4, 1, True);
  Chars.Commands.Add('Выход из программы', '&Выход из программы', 1, 1, True);

{--------------------При загрузке формы агент появляется и произносит вступительную речь---------------------------------------------------------------}

Req:=Chars.MoveTo(1150,620,1); 
 Req:=Chars.Show(0);
 Chars.Play('RestPose');     // кстати, пытаюсь тут прописать "Reg:=" возникает ошибка, скорее всего я не правильно прописал Private :( 
 Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=86\ что то говорит','');
 Chars.Play('Blink');
 Chars.Play('Blink');
 Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=86\ опять что то говорит' ,'')
 Chars.Play('Greet');
 Chars.Speak ('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=86\Благодарю Вас, за внимание. '+
 ' Жду Ваших приказаний...!!!', '');
 Chars.Stop(Req);
 end;


{----------------------------действия при ннажатии Экскурсия-----------------------------------------}

 begin
 If Cmd.Name = 'Экскурсия' Then begin
Chars.MoveTo(400,550,1);
end; end;

 begin
If Cmd.Name = 'Экскурсия' Then begin
 PageControl1.ActivePage:= TabSheet2 ;    // Вот тут должно ити на вкладку 2, в конце прописан такой же код, но с переходом на вкладку 4
end; end;                                                            // он вместо этой команды переходит на последнюю вкладку и выполняет все следующие действия
                                                                          
 begin
If Cmd.Name = 'Экскурсия' Then begin     // переидя на TabSheet 4, вместо верхней команды TabSheet2 
 Chars.Stop(Req);                                           // он начинает выполнять это и все ниже следующие действия :)
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\что то сказал','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Play('GestureRight');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\опять что то сказал','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.MoveTo(340,550,1);
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Play('GestureLeft');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\сказал','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.MoveTo(360,150,1);
end;  end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Play('Explain');
end;  end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\сказал','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Play('GestureRight');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\сказал','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Play('GestureLeft');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\сказал..','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then  begin 
Chars.MoveTo(800,150,1);
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then  begin
Chars.Play('GestureLeft');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin 
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\сказал','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.MoveTo(300,45,1);
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Play('GestureRight');
 end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin 
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\ говорит','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.MoveTo(300,45,1);
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then  begin 
Chars.Play('GestureLeft');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then  begin 
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\говорит','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then  begin 
Chars.MoveTo(500,45,1);
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin 
Chars.Play('GestureLeft');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\говорит','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.MoveTo(500,45,1);
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin 
Chars.Play('GestureLeft');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin 
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\говорит','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Play('Greet');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin 
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\ '+
 ' К которой и относится Ваш покорный слуга "Джин"  ...','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin
Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\ '+
 ' А сейчас,  я, переиду, к следующей под программе"  ...','');
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin                                          // тут он спускается к вкладке
Chars.MoveTo(300,670,1);
end; end;

Begin
If Cmd.Name = 'Экскурсия' Then begin                                        // тыкает рукой, делая вид что переключает вкладку
Chars.Play('GestureRight');
end; end;

// в принципе если в этом месте прописать sleep (5000) то он будет делать все верхние действия, а переключиться только через 5000 мл.сек.
// может в этом месте прописать команду white и указать в ней ожидания выполнения пред последней команды (верхней команды от этого текста)?

Begin
If Cmd.Name = 'Экскурсия' Then begin                                     // вот она эта роковая команда переключающая вкладку 4
PageControl1.ActivePage:= TabSheet4;                                    // которая переключается в самом начале
end; end;

end;
end.


Добавлено через 2 минуты и 32 секунды
Цитата(DonPager @  3.10.2007,  13:31 Найти цитируемый пост)
Если так, то после переключения на вкладку 4 обнови состояние табшитов (рефреш или репайн или типа того),
а то происходит оптимизация - в итоге одно переключение

Дружище, как именно это сделать? Ты имеешь ввиду обновить во время выполнения программы, или как?
PM MAIL   Вверх
EvilsInterrupt
Дата 3.10.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



mauar, А что если TEvent заместо Sleep ?
PM MAIL WWW ICQ Jabber   Вверх
DonPager
Дата 3.10.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



Цитата(mauar @  3.10.2007,  07:14 Найти цитируемый пост)
Дружище, как именно это сделать? Ты имеешь ввиду обновить во время выполнения программы, или как? 

кхе вызывая своего чара ты запускаешь поток (действие это достаточно быстрое) и переходишь к выполнению следующей комманды. Следовательно вкладки переключаются очень быстро, что ты и наблюдаешь, а отсюда вывод:
Цитата(mauar @  3.10.2007,  07:14 Найти цитируемый пост)
// может в этом месте прописать команду white и указать в ней ожидания выполнения пред последней команды (верхней команды от этого текста)?

smile сам до всего дошёл

Добавлено через 2 минуты и 58 секунд
ПС
А зачем по 2 раза begin/end ?


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
mauar
Дата 3.10.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.9.2007

Репутация: нет
Всего: нет



Дружище, опиши как задать команду  Wait для этого дела, странно у меня не получается, ошибку пишет!

Цитата(DonPager @  3.10.2007,  17:23 Найти цитируемый пост)

 сам до всего дошёл
Добавлено через 2 минуты и 58 секунд
ПС
А зачем по 2 раза begin/end ? 


 Уже убрал лишнии бегины, просто от без исходности решил прописать бегин энд,  типа эксперимент для пущей правильности smile)
Кстати Refresh или Repaint для этого метода вроде не работает.

Это сообщение отредактировал(а) mauar - 3.10.2007, 20:31
PM MAIL   Вверх
mauar
Дата 4.10.2007, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.9.2007

Репутация: нет
Всего: нет



 А в ответ, тишина  ...  !!! 
Люди помогите пожалуйсто, как в моем коде реализовать метод ожидания окончания действия:
 
функцией  WaitForSingleObject.

Допустим в разделе:  " Var "  прописываю переменную:   PCTS1 :  PagContTabSheet1;

между действиями переключения вкладки PageControl'a  прописываю ожидания :  WaitForSingleObject (PCTS1.hProcess,10000);
Далее: 

finally
If Cmd.Name = 'Экскурсия' Then begin
PageControl1.ActivePage:= TabSheet4;
end;

Не работает :(
Как  переменную PCTS1 прописать в предыдущей строке перед выполнением переключения вкладок?

Что не так делаю? До 4-х часов ночи с этой ерундой просидел  smile   , помогите мне реализовать метод ожидания окончания действия в моем коде :( 
ПОЖАЛУЙСТО   smile 

Это сообщение отредактировал(а) mauar - 4.10.2007, 02:49
PM MAIL   Вверх
Alix
Дата 4.10.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



В общем опробовал тут кодик, вот так:
Код
  Req:=Chars.MoveTo(StrToInt(PosX.Text), StrToInt(PosY.Text), 1);
  // ключевой момент:
  while (req.Status = 4) or (req.status = 2) do begin
    label2.caption := 'moving';
    Application.ProcessMessages;  // чтобы форма не зависала, а вообще можно добавить и условие выхода
  end;
  label2.Caption := 'moved';

Пока команда выполняется, мы крутимся в цикле. Команда закончила выполняться - переходим к следующему что там у тебя есть. Т.е. оформляй свой код примерно так:
Код
If Cmd.Name = 'Экскурсия' Then begin
  req := Chars.MoveTo(400,550,1);
  while (req.status = 4) or (req.status = 2) do
    application.processmessages;

  PageControl1.ActivePage:= TabSheet2;

  Chars.Stop(Req);                                           // он начинает выполнять это и все ниже следующие действия :)
  Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\что то сказал','');
  Chars.Play('GestureRight');
  Chars.Speak('\Chr="Normal"\\Ctx="Unknown"\\Spd=130\\Pit=88\опять что то сказал','');

  //... и т.д. ...

  req := Chars.Play('GestureRight');
  while (req.status = 4) or (req.status = 2) do
    application.processmessages;

  PageControl1.ActivePage:= TabSheet4;                                    // которая переключается в самом начале
end; // if cmd.name = 'Экскурсия'

Req.status:
  •     0 - успешно выполнено
  •     1 - аварийно завершено
  •     2 - не закончено
  •     3 - прервано
  •     4 - выполняется
Читал http://subritto.h1.ru/msagent/msagent1.php, там же есть описание проблемы с агентом и D7 (у меня как раз такой) и способ ее решения. Где-то тут тоже видел статью про агента.

Добавлено через 12 минут и 56 секунд
Просмотрел здешнюю статью, я думаю, тебя может заинтересовать этот момент:
Цитата

Использование «закладок»
Microsoft Agent поддерживает механизм «закладок», с помощью которого можно вставить в выводимый текст указание на необходимость активизации какой-либо команды. Для этого задаем «закладку»:
Код
procedure TForm1.Button2Click(Sender: TObject);
begin
   Char.Speak('Пример использования \mrk=255\ закладки', '');
end;
а затем в обработчике события OnBookmark выполняем необходимые действия:
Код
procedure TForm1.Agent1Bookmark(Sender: TObject; BookmarkID: Integer);
begin
  If BookmarkID = 255 Then
  ShowMessage('Закладка!'); // а ты можешь здесь сделать переключение вкладок page control'a
end;



Это сообщение отредактировал(а) Alix - 4.10.2007, 15:06


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
mauar
Дата 4.10.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.9.2007

Репутация: нет
Всего: нет



Цитата(Alix @  4.10.2007,  14:59 Найти цитируемый пост)

 Дружище, спасибо тебе болшое, ты меня от смерти спас....!!! 
 Я про сайт:  http://subritto.h1.ru/ знаю прекрастно, от туда еще начинал, а тут просто пэксперементировать решил с ним.
У меня дальше по списку идет, задания команды голосом smile так что мне еще ломать и ломать голову, кстати я еще только учусь на программера, но...
все же успехи есть.
 Спасибо тебе еще раз огромное....!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.