Цитата:
Сообщение от 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;
...
т.е. так обновиться рисунок имиджа на основной форме.
Из всего этого такое заключение - с потоками надо правильно обращаться и тогда всё будет работать.