Ну что, всем привет, продолжаем мы работу со 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)
Многие знают, что отопление электричеством весьма эффективно и дает такой же эффект, как от других источников тепла. Заметьте, что электричество есть в любом доме.
Метки: API, Call Skype, Icall, Icall Skype, Skype, Skype API, Skype API в Delphi, Skype4COM
Таймер тут не нужен, есть событие Skype.OnCallStatus
ооо, спасибо, не знал!
Подскажите пожалуйста как мне сделать звонок сразу на несколько номеров? пробовал указывать Handle контактов через запятую,вроде начинает звонить но тут же сбрасывает, а если звонить на эти же номера со скайпа то нормально дозванивается. Е еще вопросик в скайпе можно например позвонить 3-м или двум контактам удерживая вызов позвонить еще одному или что бы он присоединился к разговору, как это программно сделать?
Буду очень признателен за ответ.
исходник левый какойто
поясните
Исходник не на ту программу!