![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программа входит в цикл и больше ни на что не реагирует [D6, XP]
Vladik © (2006-04-10 14:35:00)Программа входит в цикл и больше ни на что не реагирует, пока цикл не закончится. А мне нужно, чтобы я, нажимая кнопку, мог менять значение переменной в этом цикле.
Благодарю
TUser (2006-04-10 16:44:00) [1]> Vladik (10.04.06 16:10) [9]
Не рванет? Хорошо.
Сергей М. (2006-04-10 16:20:00) [2]Аминь.
Vladik (2006-04-10 16:10:00) [3]Application.ProcessMessages - работает, ей Богу, работает! Всем спасибо.
Сергей М. (2006-04-10 15:38:00) [4]
> Vladik (10.04.06 15:33) [7]
Малацца.
Продолжай.
Vladik (2006-04-10 15:33:00) [5]To Сергей.М.
79.0 - диаметр трубы канала атомного реактора РБМК-1000
Сергей М. (2006-04-10 15:22:00) [6]
> я знаю, где сечение трубы точно 79,0 мм
Тебе - в сантехники)
Vladik (2006-04-10 15:15:00) [7]//ПРОГА ИЗМЕРЯЕТ СЕЧЕНИЕ ТРУБЫ ПО ФОТО НА СИНЕМ ФОНЕ
var
Form1: TForm1;
bm:TBitMap;
arr:TBitMap;
L:integer; //цвет пикселя
k:real; //коэфф. перевода пиксель/мм
m:integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);//загружеем картинки
begin
bm:=TBitMap.Create;
bm.LoadFromFile('c:\OTVS.bmp'); //тут - труба переменного сечения на синем фоне
Form1.Canvas.Draw(0,0,bm);
arr:=TBitMap.Create;
arr.LoadFromFile('c:\arrow.bmp'); // тут - стрелка, указывающая место измерения
end;
procedure TForm1.Button2Click(Sender: TObject);
var
gor,ver:integer;
m1:integer;
begin
for ver:=1 to 500 do //сканируем фото слева направо и сверху вниз
begin
m1:=m;//максимальное сечение трубы на предыдущей строке
StaticText1.Caption:=IntToStr(m1);
m:=0;
for gor:=1 to 600 do
begin
L := ColorToRGB(Form1.Canvas.Pixels[gor,ver]); //определяю цвет каждого пикселя
Canvas.Brush.Color:=L;
Canvas.Pen.Color:= L;
Form1.Canvas.Pixels[gor,ver]:=L;
if L <> 16711680 then m:=m+1;//если пиксел не синий начинаем отсчёт поперечного сечения трубы на этой высоте
Form1.Canvas.Draw(640,ver-10,arr);//стрелка опускается вниз по правой сторене фото трубы указывая, где проводится измерение
Label1.Caption:=FloatToStr(m/k); //переконвертируем пиксели в мм
end;
end;
end;
procedure TForm1.Button79Click(Sender: TObject);
begin
k:=m/79;//я знаю, где сечение трубы точно 79,0 мм
//нажав эту кнопку в этом месте хочу начинать пересчёт диаметра пикселей в мм, но кнопка не откликается
end;
end.
balepa (2006-04-10 14:58:00) [8]
> Amoeba © (10.04.06 14:39) [1]
> Для начала код в студию!
Зачем тут и так все ясно
Сергей М. (2006-04-10 14:55:00) [9]Application.ProcessMessages тебе на вооружение.
TUser (2006-04-10 14:46:00) [10]Aplication.ProcessMessages в теле цикла
или вынести этот цикл в отдельный поток, доступ к пеерменным в цикле и по нажатию кнопки синхронизировать критическими секциями.
Amoeba (2006-04-10 14:39:00) [11]Для начала код в студию!