Ну что, всем привет, продолжаем мы работу со Skype API, почему-то мне она очень понравилась. На этот раз, я хотел бы поговорить о том, как из своего приложения можно будет дозвониться своему другу, поговорить с ним и положить трубку. При всем этом, мы будем отслеживать статус звонка, то есть когда он поднял трубку, когда идет между Вами уже разговор, когда положил кто-то из Вас трубку (можно будет это отображать в виде состояния подключения). Скажу сразу, что тут ничего сложно нету, рассмотрим пару методов, ну а дальше должно все само получиться.

Ну, а начнем мы, как всегда, с нашего проекта (что необходимо нам добавить). Так как ,у нас уже есть проект - Skype API, то в него на форму добавим следующие компоненты:

  • TButton — 2 шт.
  • TTimer

Ну и теперь приступим к самому программированию

Тут, мы будем использовать, интерфейс — ICall и для определения статуса звонка тип — TCallStatus. Один TButton нам понадобится для того, чтобы сделать звонок другому пользователю, а второй TButton нам понадобится для того, чтобы положить трубку, отключиться, в общем называйте это, как хотите. Ну а сам, TTimer нам понадобится для того, чтобы каждую миллисекунду отслеживать статус данного звонка. Сам статус звонка, мы будем отображать в TStatusBar.

Давайте объявим переменные:

  • Call:ICall;
  • CallStatus:TCallStatus;
  • st:WideString;

Переменная st нам нужна для конвертации статуса звонка в текстовое значение, так как значение статуса возвращается в TOleEnum.

Ну и напоследок делаем некоторые настройки нашей программы, в свойстве TTimer - Enabled устанавливаем в False, а в свойстве Interval устанавливаем 1.

Теперь на событие кнопки OnClick, по нажатию на которую, будет происходить дозвон до другого пользователя, мы напишем следующий код:

procedure TForm2.Button6Click(Sender: TObject);
begin
   Call:=Skype.PlaceCall(ListBox1.Items[ListBox1.ItemIndex],'','','');
   Timer1.Enabled:=True;
end;

Все, теперь мы исключительно работает с Call. Здесь, мы просто указываем ник пользователя, которому необходимо дозвониться. Для того, чтобы отключиться от пользователя можно написать следующий код:

procedure TForm2.Button7Click(Sender: TObject);
begin
   if st<>'Finished' then
    Call.Finish;
end;

Да, но это не единственный способ. Так как, звонков может быть сколь угодно, а создавать для каждого звонка свой интерфейс и свой статус нету смысла, то для этого и существуют идентификаторы, по которым через класс TSkype мы сможет работать с ними.

Давайте опишем переменную id - типа integer. И на событие OnClick кнопки, по нажатию которой, происходит дозвон до другого пользователя, напишем следующий код:

procedure TForm2.Button6Click(Sender: TObject);
var
 id:integer;
begin
   Call:=Skype.PlaceCall(ListBox1.Items[ListBox1.ItemIndex],'','','');
   id:=Call.Id;
   Timer1.Enabled:=True;
end;

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

procedure TForm2.Button8Click(Sender: TObject);
begin
   Skype.Call[id].Finish;
end;

И нет необходимости для каждого звонка создавать свой статус и интерфейс.

Теперь приступим к нашему статусу. На событие TTimer - OnTimer, я написал следующий код:

procedure TForm2.Timer1Timer(Sender: TObject);
var
 i:integer;
begin
   CallStatus:=Call.Status;
   st:=Skype.Convert.CallStatusToText(CallStatus);
   StatusBar1.Panels[0].Text:=st;
end;

Как видите, то мы тут, каждую миллисекунду получаем статус звонка и сразу же его конвертируем в текстовое значение. Тут ничего сложно нету, тот же самый статус можно было получить и при отправке текстового сообщения.

Ну вот и все, как видите ничего сложного нету.

Скачать исходник проекта можно тут (Delphi 7)


Многие знают, что отопление электричеством весьма эффективно и дает такой же эффект, как от других источников тепла. Заметьте, что электричество есть в любом доме.


Метки: , , , , , , ,




К записи “Skype API. Библиотека Skype4COM. Работа со звонками” оставлено комментариев: 6.

  1. Alex:

    Таймер тут не нужен, есть событие Skype.OnCallStatus

  2. Артем:

    Подскажите пожалуйста как мне сделать звонок сразу на несколько номеров? пробовал указывать Handle контактов через запятую,вроде начинает звонить но тут же сбрасывает, а если звонить на эти же номера со скайпа то нормально дозванивается. Е еще вопросик в скайпе можно например позвонить 3-м или двум контактам удерживая вызов позвонить еще одному или что бы он присоединился к разговору, как это программно сделать?
    Буду очень признателен за ответ.

  3. matvey:

    исходник левый какойто

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

Вы можете использовать следующие теги:

*