Проект VK API в Delphi. Работа с потоками

6 минут на чтение

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

Для получения данных сессии я объявил следующий класс потока

Type
 VKThread=class(TThread)
  private
   logVK:string;
   i:integer;
  protected
   procedure Execute;override;
   procedure ShowResult;
end;

То есть Execute - основная процедура потока, а ShowResult - процедура, которая будет показывать наш результат. Давайте сделаем все красиво и даже если мы не подключены к сети Интернет, то показывать, что мы не подключены и чтобы не вылетала ошибка, я рассказывал как проверить подключении к интернет, подключим в Uses модуль wininet и дальше следующий код проверяет подключение к Интернет

Connection:=1+2+3;
    if InternetGetConnectedState(@Connection,0)=False then
     begin
      Application.MessageBox('Подключитесь к Интернет','Внимание',MB_OK+MB_ICONINFORMATION);
      exit;
     end;

И не забываем Connection у нас типа DWORD. Дальше процедура Execute нашего потока выглядит следующим образом

procedure VKThread.Execute;
var
 Connection:DWORD;
begin
  inherited;
   try
    Connection:=1+2+3;
    if InternetGetConnectedState(@Connection,0)=False then
     begin
      Application.MessageBox('Подключитесь к Интернет','Внимание',MB_OK+MB_ICONINFORMATION);
      exit;
     end;
    Form1.LabelResult.Font.Color:=clRed;
    Form1.LabelResult.Caption:='Ждите...идет получение данных';
    Form1.Timer1.Enabled:=True;
    logVK:=Form1.IdHTTP1.Get('https://vkontakte.ru/login.php?app=1918788&layout=popup&type=browser&settings=15615');
    PostVK:=TStringList.Create;
    i:=1;
    PostVK.Clear;
    PostVK.Add('act=login');
    PostVK.Add('app=1918788');
    PostVK.Add('app_hash='+Pars(logVK,'app_hash = ',';',1));
    PostVK.Add('email='+Form1.EditLogin.Text);
    PostVK.Add('pass='+Form1.EditPass.Text);
    PostVK.Add('permanent=1');
    logVK:=Form1.IdHTTP1.Post('https://login.vk.com/',PostVK);
    PostVK.Clear;
    i:=2;
    PostVK.Add('s='+Pars(logVK,'value=','/>',2));
    PostVK.Add('act=auth_result');
    PostVK.Add('m=4');
    PostVK.Add('parmanent=1');
    PostVK.Add('expire=""');
    PostVK.Add('app=1918788');
    PostVK.Add('app_hash='+Pars(logVK,'app_hash" value=','"',0));
    logVK:=Form1.IdHTTP1.Post('https://vkontakte.ru/login.php',PostVK);
    i:=3;
    PostVK.Free;
    Synchronize(ShowResult);
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

То есть все тоже самое, что мы и писали на TButton, на событие OnClick, а процедура ShowResult у нас выглядит следующим образом

procedure VKThread.ShowResult;
begin
   if (logVK<>'') and (i=3) then
    begin
     Form1.Timer1.Enabled:=False;
     Form1.LabelResult.Font.Color:=clGreen;
     Form1.LabelResult.Visible:=True;
     Form1.LabelResult.Caption:='Данные получены';
     Form1.LabelSid.Visible:=True;
     Form1.LabelMid.Visible:=True;
     Form1.LabelSecret.Visible:=True;
     Form1.LabelMid.Caption:=Pars(logVK,'mid"',',',0);
     Form1.LabelSid.Caption:=Pars(logVK,'sid":','",',0);
     Form1.LabelSecret.Caption:=Pars(logVK,'secret":','",',0);
    end;
end;

То есть просто выводим полученный результат, если такой имеется

Теперь на TButton событие OnClick создаем наш поток

procedure TForm1.ButtonGoClick(Sender: TObject);
var
 VK:VKThread;
begin
   VK:=VKThread.Create(False);
end;

Чтобы добавить мое приложение на Вашу страницу, просто открываю страницу моего приложения в браузере по  умолчанию с помощью функции ShellExecute, чтобы ее использовать необходимо в Uses подключить модуль Shellapi, далее на TButton событие OnClick написал следующий код

procedure TForm1.Button2Click(Sender: TObject);
begin
   ShellExecute(Handle,nil,'https://vkontakte.ru/login.php?app=1918788&layout=popup&type=browser&settings=15615','','',SW_SHOW);
end;

На получение информации по профилю в поток я сделал тоже самое, только с другим потоком, проект прилаживаю, так что качаем

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Здравствуйте, давненько я не писал про проект VK API в Delphi, на этот раз хочу продолжить серию статей про данный проект, тем более, что еще достаточно много не рассмотрено функций по работе с VK API. В последних статьях про VK API в Delphi мы рассмотрели фун...
Здравствуйте, вот все продолжаю мучать VK API в Delphi. На этой раз «перст пал» на расширенные методы API. К данным методам относятся работа с личными сообщениями работа со стеной пользователя работа с фотографиями и альбомами фотографий В данный момент хоте...
Вот хочу запустить проект VK API в Delphi(Вконтакте API в Delphi), в связи с тем, что сам сайт вконтакте открыл возможно обращаться к серверу API Vkontakte из Desktop-приложений. Довольно интересно, так как можно написать свой IM-клиент для контакта и общаться...