Вот решил немного привести в порядок наш проект, решил добавить обработчик добавления моего приложения на вашу страницу, а также решил добавить потоки в обработку нашей информации, а точнее в получении нашей информации, а пока информация получается, то мы можем выполнять с нашим приложением другие функции и форма в это время не зависает так что вполне неплохо, если мы добавим пару потоков. Про потоки мы с Вами уже много раз говорили, так что вполне спокойно можем применить их и в нашем проекте, к сожалению в модуль пока что не добавил функцию, которая получает результат с 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;
На получение информации по профилю в поток я сделал тоже самое, только с другим потоком, проект прилаживаю, так что качаем