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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2014, 05:33   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Загрузка html-странички в потоке

Доброго времени суток!
Как правильно загрузить html-страничку в WebBrowser в потоке
Данный пример явно некорректный
Код:
unit Unit1;

...

type
  TWeb_Thread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure SyncProc;
  public
  end;

var
  Form1: TForm1;
  Web_Thread: TWeb_Thread;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Web_Thread := TWeb_Thread.Create(True);
  Web_Thread.FreeOnTerminate := True;
  Web_Thread.Resume;
end;

procedure TWeb_Thread.Execute;
begin
  Form1.WebBrowser1.Navigate('http://localhost/sic/request.htm'); или Form1.WebBrowser1.Refresh; // Нельзя так делать
  Synchronize(SyncProc);
  Terminate;
end;

procedure TWeb_Thread.SyncProc;
begin
  //!//
end;

end.
Код:
Form1.WebBrowser1.Refresh;
100% делать только в процедуре синхронизации иначе ошибки неизбежны

Последний раз редактировалось Shouldercannon; 06.03.2014 в 06:30.
Shouldercannon вне форума Ответить с цитированием
Старый 08.03.2014, 20:47   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос

Столкнулся с другой проблемой.
Код:
type
  TLogin_Thread = class(TThread)
  private
    { Private declarations }
    Mode: Integer;
  protected
    procedure Execute; override;
    procedure SyncProc;
  public
  end;

var
  Form2: TForm2;
  Login_Thread: TLogin_Thread;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('http://localhost/sic/request.htm');
end;

procedure TForm2.MyProc(Mode: Integer);
begin
  Login_Thread := TLogin_Thread.Create(True);
  Login_Thread.Mode := Mode;
  Login_Thread.FreeOnTerminate := True;
  Login_Thread.Resume;
end;

procedure TLogin_Thread.Execute;
begin
  Synchronize(SyncProc);
  Terminate;
end;

procedure TLogin_Thread.SyncProc;
begin
  case Mode of
  0: begin
    Form2.ClientHeight := 100;
    Form2.ClientWidth := 200;
    Form2.Memo1.Visible := True;
    Form2.WebBrowser1.Visible := False;
    Form2.Memo1.Text := '478957893475347583475893475';
  end;
  1: begin
    Form2.ClientHeight := 200;
    Form2.ClientWidth := 500;
    Form2.Memo1.Visible := False;
    Form2.WebBrowser1.Visible := True;
    Form2.WebBrowser1.Refresh;
  end;
  end;

  Form2.Position := poScreenCenter;
  Form2.WindowState := wsNormal;
  Form2.Show;
end;
При первом показе Form2 в WebBrowser есть данные, при втором уже ничего нет, а при третьем ошибка и компилятор указывает на
Код:
Form2.Position := poScreenCenter;
Что не так делаю?
Изображения
Тип файла: jpg Безымянный.jpg (11.2 Кб, 114 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 08.03.2014, 21:28   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нельзя так делать
Не понял, почему нельзя?
Какие ошибки?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.03.2014, 21:33   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

На сколько я знаю, в теле потока нельзя напрямую обращаться к контролам формы только через синхронизацию иначе могут быть непредвиденные последствия.
Shouldercannon вне форума Ответить с цитированием
Старый 08.03.2014, 22:42   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно. Если осторожно. Если к контролам не будет обращаться несколько потоков то ниче не случится. Там не в том костыли.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
html страничка в html странички Людмила_И HTML и CSS 4 04.06.2013 06:19
загрузка TWebBrowser в потоке xrob Общие вопросы Delphi 4 23.02.2012 08:47
Загрузка в отдельном потоке Crystallon Общие вопросы Delphi 4 05.10.2010 15:15
Загрузка данных в отдельном потоке Dj_smart Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 18.01.2010 23:29
Текст html-странички в поле Memo Delpinist Win Api 5 18.12.2006 14:57