![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Вот код, если он как обычная процедура то работает, если как поток то не работает!!! Нужен поток не люблю когда что нибудь тормозит!!! 
		
	
		
		
		
		
		
		
			Код: 
	procedure TCapth.execute;
var
i,x,y,l,j,iz:integer;
s:integer;
stop:Boolean;
cap:String;
proz,posx,posy,all:Integer;
begin
  inherited;
   cap:='';
 for posx := 3 to 77 do begin
 for posy := 3 to 15 do begin
 s:=0;
 iz:=3;
 repeat
    iz:=iz+1;
    all:=0;
    s:=0;
    proz:=0;
 x:=TImage(Form1.FindComponent('Image'+IntToStr(iz))).Width-1;
 y:=TImage(Form1.FindComponent('Image'+IntToStr(iz))).Height-1;
  for l := 0 to x do begin
 for j := 0 to y do begin
 if (TImage(Form1.FindComponent('Image'+IntToStr(iz))).Canvas.Pixels[l,j]<>RGB(255,255,255)) then begin
  all:=all+1;
 end;
 end;
 end;
 for l := 0 to x do begin
 for j := 0 to y do begin
if (TImage(Form1.FindComponent('Image'+IntToStr(iz))).Canvas.Pixels[l,j]=Form1.image2.Canvas.Pixels[l+posx,j+posy]) 
and   (TImage(Form1.FindComponent('Image'+IntToStr(iz))).Canvas.Pixels[l,j]<>RGB(255,255,255)) then
begin
s:=s+1;
end;
 end;
 end;
 proz:=round(s/all*100);
  if proz>60 then begin
  case iz of
  3..7:cap:=cap+'0';
  8..12:cap:=cap+'1';
  13..17:cap:=cap+'2';
  18..22:cap:=cap+'3';
  23..27:cap:=cap+'4';
  28..32:cap:=cap+'5';
  33..37:cap:=cap+'6';
  38..42:cap:=cap+'7';
  43..47:cap:=cap+'8';
  48..52:cap:=cap+'9';
  end;
  end;
     until iz=52;
 end;
 end;
   Form1.sEdit2.Text:=cap;
end;Последний раз редактировалось ProDaNTe, 24.04.2013 в 07:41.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 З.Ы. И пжлст, отформатируйте код на предмет переноса строк в рамках редактора, а то на экране он расползается за его пределы, а это не красиво. Последний раз редактировалось Alegun, 23.04.2013 в 22:37.  | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
ProDaNTe (24.04.2013)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Зачем с файла если оно и так уже в имидж загружено. Динамически создать, затем присвоить imageN.Picture:= image1.Picture а дальше как обычно, быстрее не будет, просто из потока не желательно к статике обращаться, может быть пересечение с другим/основным потоком, что чревато непредсказуемостью. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Оффтоп: З.Ы. Ещё раз прошу нижайше, пжлст, нажав на правку около первого поста, в районе 34й строки кода не соблаговолите ли вы, млстлвгсдр   ,  где-то около оператора and жимануть на ентер чтоб строчку разбить, ну правда, не красиво. | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
ProDaNTe (24.04.2013)
  | ||
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Цитата: 
	
 Спасибо заранее, хочется разобраться раз и на всегда!!! Делаю так при создании формы Код: 
	for I := 3 to 52 do
 begin
 ImageSrav[i]:=Timage.Create(Form1);
 ImageSrav[i].Parent:=Form1;
 ImageSrav[i].AutoSize:=true;
 ImageSrav[i].Visible:=false;
 ImageSrav[i].Picture:=TImage(Form1.FindComponent('Image'+IntToStr(i))).Picture;
 ImageSrav[i].Left:=TImage(Form1.FindComponent('Image'+IntToStr(i))).Left+200;
 ImageSrav[i].top:=TImage(Form1.FindComponent('Image'+IntToStr(i))).top;
 end;Последний раз редактировалось ProDaNTe, 24.04.2013 в 10:32.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Объявление потомка от 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;Код: 
	... Synchronize(ShowResult); ... А вот и сама выводная процедура Код: 
	...
procedure TCapth.ShowResult;
begin
...
// напр.
Form1.Image1{iz}.Picture:= MyImage.Picture;
...
end;
...Из всего этого такое заключение - с потоками надо правильно обращаться и тогда всё будет работать.  | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
ProDaNTe (24.04.2013)
  | ||