Ну что, всем привет, продолжаем мы работу со 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;
Как видите, то мы тут, каждую миллисекунду получаем статус звонка и сразу же его конвертируем в текстовое значение. Тут ничего сложно нету, тот же самый статус можно было получить и при отправке текстового сообщения.
Ну вот и все, как видите ничего сложного нету.