Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 21:58   #1
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию Ввод каптчи

Добрый день всем от лошка в программировании (меня). . У меня возникла некая проблема, знаю что все должно быть относительно просто, только не знаю как реализовать. Суть проблемы:
Есть некоторое событие. Я должен получать каптчу, вводить и отправлять POST запрос. Проблема в следующем. При формировании POST запроса я должен ждать пока будет введена каптча и нажата кнопка. ТО есть основное событие должно останавливаться и ждать ввода каптчи. Как это можно сделать? Подскажите.
kardinal94 вне форума Ответить с цитированием
Старый 01.10.2010, 19:30   #2
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Если основное событие должно останавливаться и ждать ответа, то создаем дополнительный поток.
В нем:

Код:
// просим пользователя ввести капчу
stop:=true;
while stop do sleep(1000);
// отправляем запрос дальше
На кнопке, которая нажимается после ввода капчи:

Код:
stop:=false;
Voody вне форума Ответить с цитированием
Старый 02.10.2010, 19:29   #3
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Можно подробнее о выделении в отдельный поток? У меня например сейчас так:
Код:
var udach, CapB,CapEnd, pos1, posex1:integer;
POstData:TstringList;
Captcha:TMemoryStream;
Otvet, CapUrl, stat1:string;
CapPic:TPngImage;

begin
PostData:=TstringList.Create;
{Выполняю операцию с первым сайтом в списке}
if CheckListBox1.Checked[0]=true then
  Begin
   PostData.Clear;
   PostData.Add('nick='+login.Text);
   PostData.Add('email=');
   PostData.Add('title='+title.Text);
   PostData.Add('body='+stat.Text);
   PostData.Add('url='+link.Text);
   PostData.Add('url_name='+title.Text);
   PostData.Add('url_pic=');
   PostData.Add('OK=OK');
   Otvet:=IdHttp1.Post('http://www.art.nnov.ru/en/conf.php?moda=conf', Postdata);
   If pos(title.Text, otvet)<>0 then showmessage('Успешно!') else showmessage('Неа, Не то');;
   End;
{//Выполняю операцию с первым сайтом в списке}
{Выполняю операцию со вторым сайтом в списке}
{//Выполняю операцию с первым сайтом в списке}
{Выполняю операцию с третим сайтом в списке}
if CheCklistBox1.Checked[2]=true then
  Begin
   POstData.Clear;
   {Получаю Каптчу}
     Otvet:=IdHTTP1.Get('http://www.classifields.ru/post.html?category=34');
     CapB:=pos('http://www.classifields.ru/image.php?ct=',otvet);
     CapEnd:=PosEx('>',otvet,CapB);
     ShowMessage(IntToStr(CapB)+'  '+IntToStr(CapEnd));
     CapUrl:=copy(Otvet,capB,CapEnd-CapB);
     ShowMessage(CapUrl);
     Captcha:=TMemoryStream.Create;
     IdHTTP1.Get(capUrl,Captcha);
     Captcha.Position:=0;
     CapPic:= TPNGImage.Create;
     CapPic.LoadFromStream(Captcha);
     Image1.Picture.Assign(CapPic);
      {Формирую POST-запрос}
        Delete(CapUrl,1,40);
        PostData.Add(ansitoutf8('act=add'));
        PostData.Add(ansitoutf8('ct='+CapUrl));
        PostData.Add(ansitoutf8('category=34'));
        PostData.Add(ansitoutf8('cel=1'));
        PostData.Add(ansitoutf8('name='+Title.Text));
        PostData.Add(ansitoutf8('description='+stat.Text));
        PostData.Add(ansitoutf8('author='+Login.Text));
        PostData.Add(ansitoutf8('url='+Link.Text));
        PostData.Add(ansitoutf8('email='+mail.Text));
        PostData.Add(ansitoutf8('phone='));
        PostData.Add(ansitoutf8('city=Moscow'));
        PostData.Add(ansitoutf8('cost=1'));
        While Capt.Tag=0 do sleep(1);
        PostData.Add(ansitoutf8('number='+code.Text));
        Capt.Tag:=0;
        Image1.Free;
        PostData.Add(ansitoutf8('rules=on'));
   //    ShowMessage(utf8toansi(PostData.Text));
   Otvet:=Idhttp1.Post('http://www.classifields.ru/index.php', PostData);
   Resultm.Text:=(otvet);
 //  ResultM.Lines.SaveToFile('111.txt');
    End;
Все делается в основном потоке. Не подскажете как сделать еще в одном потоке???

Последний раз редактировалось mihali4; 26.11.2010 в 18:55.
kardinal94 вне форума Ответить с цитированием
Старый 02.10.2010, 23:52   #4
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Посмотрите видео и исходники: http://avtuh.ru/2010/04/09/delphi-do...programme.html
Voody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ввод данных Screame Microsoft Office Excel 4 10.10.2009 00:03
Ввод Paul_AG Общие вопросы C/C++ 2 05.06.2009 00:02
ВВод данных в БД Марьяна БД в Delphi 5 25.02.2009 23:17
Пример исходник распознавания каптчи WebSQLNeeder Свободное общение 8 01.07.2008 12:35
Получение каптчи. Метод POST и еще... Denager Работа с сетью в Delphi 13 03.02.2008 19:44