Прежде чем задавать вопрос - поищите его в поиске!
0 голосов
75 просмотров
Вспомнил сегодня твой урок про авторизащию. Решил улучьшить код и сделал его многопоточным. Что ты об этом думаешь?

Первая честь проги:

unit Unit3;

interface

uses
  System.Classes, SysUtils,Syncobjs, VCL.Dialogs;

type
  Posting = class(TThread)
  private
 procedure auto;
  protected
    procedure Execute; override;
  end;
var
event:TEvent;
implementation

{
  Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure Posting.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end;
    
    or
    
    Synchronize(
      procedure
      begin
        Form1.Caption := 'Updated in thread via an anonymous method'
      end
      )
    );
    
  where an anonymous method is passed.

  Similarly, the developer can call the Queue method with similar parameters as
  above, instead passing another TThread class as the first parameter, putting
  the calling thread in a queue with the other thread.
    
}

uses Unit2;

{ Posting }

procedure Posting.auto;
begin
form2.wb.Navigate('https://mail.yandex.ru/?uid=330233280&login=cudinov-pasha2016#inbox');
end;

procedure Posting.Execute;
begin
repeat
Synchronize(auto);
event.WaitFor(250);
until terminated;
event.Free;
end;

end.

Вторая часть с формой:

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleCtrls, SHDocVw, SyncObjs;

type
  TForm2 = class(TForm)
    wb: TWebBrowser;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
event:TEvent;
implementation

{$R *.dfm}

uses Unit3;

procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
tag:variant;
begin
event.SetEvent;
tag:=wb.OleObject.document.forms.item(0).elements;
for I := 0 to (tag.length-1) do
begin
if tag.item(i).name='login' then
tag.item(i).value:=edit1.Text;
if tag.item(i).name='passwd' then
tag.item(i).value:=edit2.Text;
end;
event.ResetEvent;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
event:=TEvent.Create(nil, true, false, 'Event');
with Posting.Create(true) do
begin
priority:=tpLowest;
FreeOnTerminate:=true;
start;
end;
end;

end.
спросил 22 Авг, 15 от Павел в категории Мастер Delphi | 75 просмотров

1 Ответ

0 голосов
Лучший ответ
Если Вы пытаетесь сделать бот - то сойдет)
ответил 22 Авг, 15 от krotovroman Мастер (131,190 баллов)
выбран 10 Сен, 15 от krotovroman

Похожие вопросы

0 голосов
1 ответ
0 голосов
1 ответ
спросил 12 Апр, 14 от аноним в категории Мастер Delphi | 43 просмотров
513 вопросов
694 ответов
433 пользователей