Показать сообщение отдельно
  #6  
Старый 24.04.2013, 10:39
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от ProDaNTe
...А это что не будет обращение к картинке или под обращением понимается запрос от нёё информации типа как .Canvas.Pixels? Хотя когда я присваиваю к динамическому созданному объекту imageN.Picture:= image1.Picture, то я же тоже обращаюсь к статике или нет? Или надо создавать объекты в не потока?
Спасибо заранее, хочется разобраться раз и на всегда!!!...
Ну тогда с самого начала о потоках.


Объявление потомка от TThread
Код:
...

type

TCapth = class(TThread)

private

   MyImage: TImage;

protected

    procedure Execute; override; // Выполняется в потоке

    procedure ShowResult; // Выводная процедура из потока
//   Если в основной поток нужно вернуть разные рисунки, то тогда
//   ShowResult задаётся с параметрами
//  procedure ShowResult(img: TImage); 


end;

...
Начало работы потока

Picture:= Picture это всёравно что a:= b, т.е. передается лишь копия изображения, его Canvas.Pixels не зависят от оригинала и делай с ним что хошь...
Код:
procedure TCapth.Execute;

begin

MyImage.Picture:= Form1.Image1{iz} .Picture;

 x:= MyImage.Width -1;
 y:= MyImage.Height-1;
...

// ну и так далее
...

end;
Из Execute всё же возможен вывод результатов, если что-то надо в основной поток программы вернуть прям во время исполнения потока, то в её тело добавляется строчка
Код:
...

Synchronize(ShowResult);

...

А вот и сама выводная процедура
Код:
...

procedure TCapth.ShowResult;

begin
...

// напр.
Form1.Image1{iz}.Picture:= MyImage.Picture;
...
end;

...
т.е. так обновиться рисунок имиджа на основной форме.

Из всего этого такое заключение - с потоками надо правильно обращаться и тогда всё будет работать.
Ответить с цитированием