Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программа входит в цикл и больше ни на что не реагирует [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]

Для начала код в студию!


Наверх

Титульная страница Поиск, карта сайта Написать письмо