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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2010, 22:03   #11
YYYYY
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 28
По умолчанию

Я имел ввиду убрать while Suspended do Resume;. Какой СМЫСЛ в этой конструкции?
Прямо перед Suspend; делайте запрос капчи и вывод в Image:
Get(запрос капчи);
Ваш код вывода капчи в Image;
Suspend;
Post(отправка капчи на сервер);
Итог: капча в Image, поток на паузе.
Вводиnt капчу в TEdit;
Как только кликните на кнопку(в OnClick должно быть имя_потока.Resume, поток запустится и отправит Post-запрос с данными из TEdit.

Последний раз редактировалось mihali4; 18.11.2010 в 12:09.
YYYYY вне форума Ответить с цитированием
Старый 18.11.2010, 10:00   #12
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Сделал так
Код:
type
  BOT = class(TThread)
Url_Pay:String;
Login:String;
Password:String;
     private
HTTP_BOT:TIdHTTP;
IdCookieManager1_Pay: TIdCookieManager;
     { Private declarations }
  protected
constructor Create(CreateSuspended: Boolean; aUrl, aLog, aPass: String);
procedure Execute; override;
      procedure capcha;
  public
  end;

procedure BUX.Execute;
var
img: TMemoryStream;
png: TPNGObject;
s:TStringStream;
inf:TStringList;
  begin
  s:=TStringStream.Create;
 inf:=tstringlist.create;
  http_BUX:= TIdHTTP.Create;
  IdCookieManager1_Pay:= TIdCookieManager.Create;
begin
///
begin
HTTP_BOT.get('http://' + Url_Pay + 'login.php?r=',s);
If pos('image.php?', s.datastring)>0 then
begin
 img:=TMemoryStream.Create;
 HTTP_1.get(сайт + 'image.php?',img);
 img.Position:=0;
 png:= TPNGObject.Create;
 png.LoadFromStream(img);
 Form2.Image1.Picture.Assign(png);
png.Free;
img.Free;
Form2.Edit1.Text:= '';
try
inf.Add('username=' +Login);
inf.Add('password=' +Pass);
inf.Add('code=' + Form9.Edit1.Text);
finally
inf.Free;
Synchronize(capcha);
end
else
///
end;
end;
end;
  end;

procedure BOT.capcha;
begin
Form2.show;
suspend;
end;
и на форме в кнопке прописал
Код:
type
  TForm2 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  PAY: BOT;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
PAY.Resume;
end;
Но всё равно вылазиит ошибки и не указывает где, отладчик тока по деборям водит, думал что капча перепроверил, оказалось нет что не так в моём коде? Подскажите.
bulldog5293 вне форума Ответить с цитированием
Старый 18.11.2010, 11:29   #13
Bug2000
Пользователь
 
Регистрация: 18.11.2010
Сообщений: 12
По умолчанию

И что - никто не видит, что procedure BOT.capcha; выполняется в основном потоке?
и если продолжить надо после ввода кода и закрытия формы2 то достаточно ShowModal
Код:
type
  TForm2 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    class function GetCapcha(png: TPNGObject): string;
  end;

implementation

{$R *.dfm}

{ TForm2 }

procedure TForm2.Button1Click(Sender: TObject);
begin
  ModalResult := mrOk;
end;

class function TForm2.GetCapcha(png: TPNGObject): string;
var
  form: TForm2;
begin
  form := TForm2.Create(nil);
  try
    form.Image1.Picture.Assign(png);
    form.ShowModal; // когда закроется будет продолжено
    Result := form.Edit1.Text;
  finally
    form.Free;
  end;
end;
Код:
type
  BOT = class(TThread)
    Url_Pay: String;
    Login: String;
    Password: String;
  private
    HTTP_BOT: TIdHTTP;
    IdCookieManager1_Pay: TIdCookieManager;
    png: TPNGObject;
    code: string;
    { Private declarations }
  protected
    constructor Create(CreateSuspended: Boolean; aUrl, aLog, aPass: String);
    procedure Execute; override;
    procedure capcha;
  public
  end;

procedure BUX.Execute;
var
  img: TMemoryStream;

  s: TStringStream;
  inf: TStringList;

begin
  s := TStringStream.Create;
  inf := TStringList.Create;
  try
    http_BUX := TIdHTTP.Create;
    IdCookieManager1_Pay := TIdCookieManager.Create;
    begin
      ///
      begin
        HTTP_BOT.get('http://' + Url_Pay + 'login.php?r=', s);
        inf.Add('username=' + Login);
        inf.Add('password=' + Pass);
        If pos('image.php?', s.datastring) > 0 then
        begin
          img := TMemoryStream.Create;
          png := TPNGObject.Create;
          try
            HTTP_1.get(сайт + 'image.php?', img);
            img.Position := 0;
            png.LoadFromStream(img);
            code := '';
            Synchronize(capcha);
            if code <> '' then
              inf.Add('code=' + code);
          finally
            png.Free;
            png := nil;
            img.Free;
          end;
        end;// If pos('image.php?', s.datastring) > 0 then
        // конектимся к сайту с капчей или без
      end;
    end;
  finally
    inf.Free;
    s.Free;
  end;

end;

procedure BOT.capcha;
begin
  code := TForm2.GetCapcha(png);
end;
А для правильного "подождать" надо использовать средства синхронизации ( например TEvent ), а не останавливать самому себя.
Bug2000 вне форума Ответить с цитированием
Старый 18.11.2010, 15:44   #14
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

к сайту с капчей
bulldog5293 вне форума Ответить с цитированием
Старый 18.11.2010, 17:34   #15
Bug2000
Пользователь
 
Регистрация: 18.11.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от bulldog5293 Посмотреть сообщение
к сайту с капчей
это Вы к чему???
Bug2000 вне форума Ответить с цитированием
Старый 18.11.2010, 17:41   #16
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Код:
// If pos('image.php?', s.datastring) > 0 then
        // конектимся к сайту с капчей или без
проеали
bulldog5293 вне форума Ответить с цитированием
Старый 18.11.2010, 17:57   #17
Bug2000
Пользователь
 
Регистрация: 18.11.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от bulldog5293 Посмотреть сообщение
Код:
// If pos('image.php?', s.datastring) > 0 then
        // конектимся к сайту с капчей или без
проеали
Ага
Код:
        If pos('image.php?', s.datastring) > 0 then
        begin
// обрабатываем капчу
        end;// If pos('image.php?', s.datastring) > 0 then
        // конектимся к сайту с капчей или без
________________
Бывает и хуже с русским языком
( хотя ты тестовый проект не выкладывал и я полностью его не проверял )
Bug2000 вне форума Ответить с цитированием
Старый 18.11.2010, 17:58   #18
Bug2000
Пользователь
 
Регистрация: 18.11.2010
Сообщений: 12
По умолчанию

"//" - это коментарии в Delph
В данном случае
Код:
end;// If pos('image.php?', s.datastring) > 0 then
чтобы end-ы не перепутать, а то там begin-ов ...
В общем ладно - спасибо за пожалуйста. Раз не помогло, могли бы и объяснить чем.

Последний раз редактировалось Bug2000; 18.11.2010 в 18:36.
Bug2000 вне форума Ответить с цитированием
Старый 19.11.2010, 16:27   #19
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Да всё помогло, ты просто меня не понял, вопрос снят
bulldog5293 вне форума Ответить с цитированием
Старый 19.11.2010, 18:37   #20
OUTLAW2009
 
Регистрация: 15.01.2010
Сообщений: 5
По умолчанию

// не выспался не заметил второй страницы просьба к модеру удалить
OUTLAW2009 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приостановка\продолжение потока bulldog5293 Общие вопросы Delphi 6 20.09.2010 21:47
приостановка программы Medwedxxx Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.07.2010 10:42
[Idhttp] Приостановка get-запроса EaRLL Работа с сетью в Delphi 3 27.09.2009 18:43
приостановка выполнения процедуры BESS Общие вопросы Delphi 5 15.09.2008 00:53
Приостановка программы Hintman Общие вопросы Delphi 6 14.04.2007 23:38