Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизПрограмма входит в цикл и больше ни на что не реагирует Найти похожие ветки
← →
Vladik (2006-04-10 14:35) [0]Программа входит в цикл и больше ни на что не реагирует, пока цикл не закончится. А мне нужно, чтобы я, нажимая кнопку, мог менять значение переменной в этом цикле.
Благодарю
← →
Amoeba © (2006-04-10 14:39) [1]Для начала код в студию!
← →
TUser © (2006-04-10 14:46) [2]Aplication.ProcessMessages в теле цикла
или вынести этот цикл в отдельный поток, доступ к пеерменным в цикле и по нажатию кнопки синхронизировать критическими секциями.
← →
Сергей М. © (2006-04-10 14:55) [3]Application.ProcessMessages тебе на вооружение.
← →
balepa © (2006-04-10 14:58) [4]
> Amoeba © (10.04.06 14:39) [1]
> Для начала код в студию!
Зачем тут и так все ясно
← →
Vladik (2006-04-10 15:15) [5]//ПРОГА ИЗМЕРЯЕТ СЕЧЕНИЕ ТРУБЫ ПО ФОТО НА СИНЕМ ФОНЕ
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.
← →
Сергей М. © (2006-04-10 15:22) [6]
> я знаю, где сечение трубы точно 79,0 мм
Тебе - в сантехники)
← →
Vladik (2006-04-10 15:33) [7]To Сергей.М.
79.0 - диаметр трубы канала атомного реактора РБМК-1000
← →
Сергей М. © (2006-04-10 15:38) [8]
> Vladik (10.04.06 15:33) [7]
Малацца.
Продолжай.
← →
Vladik (2006-04-10 16:10) [9]Application.ProcessMessages - работает, ей Богу, работает! Всем спасибо.
← →
Сергей М. © (2006-04-10 16:20) [10]Аминь.
← →
TUser © (2006-04-10 16:44) [11]> Vladik (10.04.06 16:10) [9]
Не рванет? Хорошо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c