Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2011, 10:26   #1
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию Цикл For ..to..

Добрый день!
Никак не могу разобраться с циклами
Код:
for r := 1 to image1.Height do begin
  for c := 1 to image1.Width do begin
    if GetPixel(hdc1,c,r)<15000000 then
      begin
        Image_massiv[c,r]:=1; stroka:=stroka+1;
      end;
  end;
  memo1.Lines.Add(inttostr(r)+':'+inttostr(stroka));
  stroka:=0;
end;
в результате stroka всегда равен 0.
но если убрать стору memo1.Lines.Add(inttostr(r)+':'+int tostr(stroka)); то все сразу работает...
может я где точку с запятой пропустил?
maksim_serg вне форума Ответить с цитированием
Старый 02.01.2011, 10:55   #2
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

я не знаю что за GetPixel конечно но у него примерно такое правописание:
Цитата:
GetPixel(Image1.Picture.Bitmap.Canv as,40+i,40+j);
Цитата:
for r:= 1 to image1.Height do begin
for c:= 1 to image1.Width do begin
if GetPixel(hdc1,c,r)<15000000 then
begin
Image_massiv[c,r]:=1;
stroka:=stroka+1;
end;
end;
memo1.Lines.Add(inttostr(r)+':'+int tostr(stroka));
stroka:=0;
end;
Твоя строка memo1.Lines.Add(inttostr(r)+':'+int tostr(stroka)); не как не влияет на работоспособность ибо она является проверкой - переменная stroka больше или равна нулю. Значит скорее всего ты не правельно задаешь условие в GetPixel.
А вообще есть дебаггер встроенный создавая поинты - но лудше следующее:
Код:
var a:integer;

for r:= 1 to image1.Height do begin
  for c:= 1 to image1.Width do begin
    if GetPixel(hdc1,c,r)<15000000 then
      begin
        Inc(a);
        Memo1.Add('GetPixel '+inttostr(a));
        Image_massiv[c,r]:=1; 
        stroka:=stroka+1;
        Memo1.Add('------');
        Memo1.Add(inttostr(stroka));
        Memo1.Add('------');
      end;
  end;
  memo1.Lines.Add(inttostr(r)+':'+inttostr(stroka));
  stroka:=0;
end;
Пойми когда и что ставиться и с какими раздилителями выписывается в memo1 и запусти и увидишь что и где выплнилось и сколько раз
kakawkin вне форума Ответить с цитированием
Старый 02.01.2011, 11:16   #3
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

тоже самое:

memo1:

Код:
1:0
2:0
3:0
4:0
5:0
6:0
7:0
8:0
9:0
10:0
11:0
12:0
13:0
...
maksim_serg вне форума Ответить с цитированием
Старый 02.01.2011, 11:16   #4
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

тоже самое и получается. всмысле переменная stroka равно 0!
maksim_serg вне форума Ответить с цитированием
Старый 02.01.2011, 11:19   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Так Вы же сами при выходе из цикла задаете
Код:
 stroka:=0;
Поэтому
Цитата:
в результате stroka всегда равен 0.
Я не прав?
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 02.01.2011, 11:26   #6
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

наверно, нет
вставил по совету строку в цикл:
Код:
hdc1:=image1.Canvas.Handle;
memo1.Lines.Add(inttostr(GetPixel(hdc1,c,r)));
выдает какой то странный результат, одинаковый для всех пикселей. Думаю проблема здесь.
maksim_serg вне форума Ответить с цитированием
Старый 02.01.2011, 11:47   #7
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

заменил:
Код:
hdc1:=image1.Canvas.Handle;
memo1.Lines.Add(inttostr(GetPixel(hdc1,c,r)));
на:
Код:
memo1.Lines.Add(inttostr(GetPixel(image1.Canvas.Handle,c,r)));
и все заработало...
maksim_serg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
цикл while roxya. Общие вопросы C/C++ 6 05.11.2009 21:35
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34