Microsoft Agent. Часть II | Программирование на Delphi и не только

Реклама на сайте

web дизайн, разработка сайтов
Гидравлический инструмент - рвд рукав высокого давления. Рукава высокого давления в Москве.

Почитайте!

Нас читают

Статьи о программировании и не только

Mail.Ru

Rambler's Top100

Programming Blogs - BlogCatalog Blog Directory

Microsoft Agent. Часть II

03.12.2007 от Иван Ширко

Страница: 1 2 3 4

Если нажать на кнопку, то Джин начнёт говорить и сразу же появится сообщение. А если снять комментарии со строки waitfor(Request);, то сообщение появится только после того, как Джин закончит говорить.
А сейчас «научим» Джина вслух произносить текущее время. Для этого ему нельзя подсунуть строку типа «21 час 44 минуты 32 секунды», эту строку он произнесёт так: «двадцать один час, сорок четвёртого минуты, тридцать второго секунды». В связи с этим, Джину нужно полностью «разжевать», что именно он должен произносить. Так что будем давать ему такую строку: «21 час, 44 минуты, 30 две секунды». Т.е. число, стоящее в женском роде (32 секунды), разделяем на составляющие (30 две секунды).
Добавьте на форму очередную кнопку «Сколько времени?» и запишите следующую процедуру:

procedure TForm1.Button1Click(Sender: TObject);
var
  buf, str: string;
  Hour, Min, Sec, Msec: Word;
  Hours, Mins, Secs: string;
  hs, ms, ss: string;
  DT: TDateTime;
begin
  hs := '';
  ms := '';
  ss := '';
  //узнаём текущее время
  DT := Now;
  //разбиваем его на составляющие
  DecodeTime(DT, Hour, Min, Sec, MSec);
  //смотрим, какое окончание должно быть у слова «час»
  case hour of
    2..4, 22, 23: hs := 'а';
    0, 5..20: hs := 'ов';
  end;
  //окончание слова «минута»
  case min of
    1, 21, 31, 41, 51: ms := 'а';
    2..4, 22..24, 32..34, 42..44, 52..54: ms := 'ы';
  end;
  //окончание слова «секунда»
  case sec of
    1, 21, 31, 41, 51: ss := 'а';
    2..4, 22..24, 32..34, 42..44, 52..54: ss := 'ы';
  end;
  //часы не будем преобразовывать, т.к. слово «час» мужского рода
  hours := inttostr(hour);
  //при необходимости разбиваем минуты на слова
  mins := inttostr(min);
  if (mins[length(mins)] = '1') and (min <> 11) then
  begin
    if (min > 10) then buf := mins[1] + '0 '
    else buf:='';
    mins := buf + 'одна';
  end
  else
  begin
    if (mins[length(mins)]='2') and (min<>12) then
    begin
      if (min>10) then buf:=mins[1]+'0 '
      else buf:='';
      mins := buf + 'две';
    end
  end
;
  //при необходимости разбиваем секунды на слова
  secs := inttostr(sec);
  if (secs[length(secs)]='1') and (sec<>11) then

Страница: 1 2 3 4

Рубрики: Delphi, MsAgent |

Комментарии (2)

  1. Алексей Родионов пишет:

    Просто превосходно!

  2. Попугай пишет:

    Конкретно и понятно.

Оставить комментарий

Заметьте: Включена проверка комментариев. Нет смысла повторно отправлять комментарий.