Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
1

Не могу понять причину ошибки

22.03.2016, 04:34. Показов 662. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в общем есть поле с динамически созданными TImage
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
procedure TForm1.btn3Click(Sender: TObject);
var
  rect:TRect;
begin
  form1.ClientWidth:=555;
 
  scrlbx1.Align:=alTop;
  setlength(image_array,20);
  for i:=0 to length(image_array)-1 do
    for j:=0 to CountRowElement-1 do
      begin
        image_array[i,j]:=TImage.Create(scrlbx1);
        image_array[i,j].Parent:=scrlbx1;
        image_array[i,j].Name:='Row'+inttostr(i)+'_Col'+inttostr(j);
        image_array[i,j].Left:=j*(size_+5)+5;
        image_array[i,j].Top:=i*(size_+5)+5;
        image_array[i,j].Canvas.Brush.Color:=clRed;
        image_array[i,j].Canvas.FillRect(Rect);
        image_array[i,j].Visible:=true;
        image_array[i,j].Height:=size_;
        image_array[i,j].Width:=size_;
        image_array[i,j].Tag:=Randomrange(1,10);
        image_array[i,j].Canvas.Brush.Color:=RGB($d8,$b9,$64);
        image_array[i,j].Canvas.Rectangle(0,0,size_,size_);
        il1.Draw(image_array[i,j].Canvas,0,0,image_array[i,j].Tag);
        il1.Draw(image_array[i,j].Canvas,0,0,0);
        image_array[i,j].Transparent:=true;
        image_array[i,j].OnClick:=img1Click;
      end;
 
    //рамка для выделеного елемента
    begin
      imgselect_:=false;
      imgSelect:=Timage.Create(scrlbx1);
      imgSelect.Parent:=scrlbx1;
      imgselect.Visible:=false;
      imgselect.Height:=size_;
      imgselect.Width:=size_;
      il1.Draw(imgSelect.Canvas,0,0,20);
      imgSelect.OnClick:=img1Click;
    end
 
end;

внизу скрин как оно выглядит
собственно процедура клика по имаджу
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
procedure TForm1.img1Click(Sender: TObject);
var
  s:string;
  ACol,ARow:integer;//Array
  TCol,TRow:integer;//Temp
begin
    if (sender as TImage).Canvas.Pixels[0,0]<>337321 then
      begin
        imgselect_:=true;
        s:=(sender as TImage).Name;
        ACol:=StrToInt(s[Pos('l',s)+1]);
        ARow:=StrToInt(s[Pos('w',s)+1]);
        imgSelect.Left:=(sender as Timage).Left;
        imgSelect.Top:=(sender as TImage).Top;
        imgselect.Canvas.Pen.Color:=RGB($d8,$b9,$64);
        imgSelect.Canvas.Brush.Color:=RGB($d8,$b9,$64);
        imgSelect.Canvas.Rectangle(3,3,(sender as TImage).Width-3,(sender as TImage).Height-3);
        il1.Draw(imgSelect.Canvas,0,0,(sender as TImage).Tag+20);
        imgSelect.Visible:=true;
      end
        else
          begin
//            showmessage((sender as TImage).Name[Pos('Col'+4)]);
            imgselect_:=False;
            imgSelect.Visible:=false;
            imgselect.Canvas.Pen.Color:=RGB($d8,$b9,$64);
            imgSelect.Canvas.Brush.Color:=RGB($d8,$b9,$64);
            imgSelect.Canvas.Rectangle(3,3,(sender as TImage).Width-3,(sender as TImage).Height-3);
          end;
 
//  TCol:=ACol;
//  TRow:=ARow;
//  while True do
//    begin
//      if TCol<10 then
//        begin
//          if image_array[ACol,ARow].Tag=image_array[ACol+1,ARow].Tag then
//            begin
//              image_array[i,j].Canvas.Brush.Color:=RGB($d8,$b9,$64);
//              image_array[i,j].Canvas.Rectangle(0,0,size_,size_);
//              il1.Draw(image_array[i,j].Canvas,0,0,image_array[i,j].Tag);
//
//            end;
//
//        end
//          else
//            begin
//              inc(TRow);
//              TCol:=0;
//            end;
//    end;
 
//  showmessage('Row:'+IntToStr(ARow+1)+#10#13+'Col:'+IntToStr(Acol+1));
 
end;


но на клике в некоторых позициях получаю ошибку,при разных запусках программы ошибка возникает в разных позициях но ошибка по факту одна и та же, адреса разные, позиции разные..
Код
Access violation at address 005E3D4D in module 'Project1.exe'. Read of address 0000000C.
Код
Access violation at address 0054D2D0 in module 'Project1.exe'. Read of address FF01FDC3.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2016, 04:34
Ответы с готовыми решениями:

Показывает ошибку, не могу понять причину
Показывает такую ошибку Project2.dpr(16): Illegal type in Write/Writeln statement в 16 строке ...

Не могу найти причину ошибки
данная программа при за пуске вываливается с ошибкой &quot;Floating point overflow&quot; пересмотрел весь...

Понять причину задержки таймера в потоке
if pos('wait_30_sec',list.Text)&gt;0 then begin addtxt(1,'Ждем '+Inttostr(strtoint(pars('u0437:...

Не могу понять причину ошибки
Добрый день всем, мое изучение ruby on rails встало на такой вот ноте, не могу сдвинуться с мертвой...

8
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 04:38  [ТС] 2
собственно скрины
поле / поле с выбранной ячейкой / ошибка
Миниатюры
Не могу понять причину ошибки   Не могу понять причину ошибки   Не могу понять причину ошибки  

0
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 05:17  [ТС] 3
так ну я знаю что ошибка возникает в обработке нажатия на имадж и знаю что она возникает в том куске что закомментирован

Добавлено через 7 минут
всё разобрался, причина в индексах я там i,j вместо ACol,ARow писал

Добавлено через 4 минуты
хотя нет.. проблема осталось но только для 10ой строки.. для каждой ячейки строки ошибка
Код
Access violation at address 005E3D4D in module 'Project1.exe'. Read of address 0000000C.
Добавлено через 25 минут
всё разобрался.. сборная солянка с путаницей индексов колонок и строк, в целом ошибка выход за пределы массива
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
22.03.2016, 08:32 4
Цитата Сообщение от CheshireesCat Посмотреть сообщение
setlength(image_array,20);
Это ты устанавливаешь первую размерность.
А массив двумерный.
Где установка второй размерности ?
0
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 09:11  [ТС] 5
Цитата Сообщение от mss Посмотреть сообщение
Где установка второй размерности ?
вторая в описание массива
Delphi
1
image_array:array of array[0..9] of TImage;
mss, спасибо что откликнулся но как я писал чуть выше я уже разобрался :3

Добавлено через 4 минуты
там конкретно ошибка в условии
Delphi
1
2
3
if TCol<10 then
  begin
    if image_array[ACol,ARow].Tag=image_array[ACol+1,ARow].Tag then
получается у меня всего 9 элементов в строке а там условие ACol+1 срабатывает даже на 9ом элементе и вот он выхот за границу
более того уменьшить условие с 10 до 9 тоже мало, потому что элементов то 9 но счёт с нуля, в обще, разобрался я с этим

Добавлено через 4 минуты
ну а как только разобрался понял что идея мягко говоря г***о и я стёр этот цикл
сделал отдельные процедуры
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function GetCoord(Sender:TObject):TPoint; //Получаем координаты поля
var subs:string;
begin
  subs:=(sender as TImage).Name;
  GetCoord.X:=StrToInt(subs[Pos('l',subs)+1]);  //записываем выраную ячейку  Col
  GetCoord.Y:=StrToInt(subs[Pos('w',subs)+1]);  //записываем выраную ячейку  Row
end;
 
procedure ClearSelected(Sender:TObject);  //Очищаем выделение
begin
  imgselect_:=False;                      //Флаг выделения
  imgSelect.Visible:=false;
  imgselect.Canvas.Pen.Color:=RGB($d8,$b9,$64);
  imgSelect.Canvas.Brush.Color:=RGB($d8,$b9,$64);
  imgSelect.Canvas.Rectangle(3,3,size_-3,size_-3);
end;
 
procedure SelectObj(Sender:TObject);      //Отрисоваваем выделеную ячейку
var s:string;
begin
  imgselect_:=true;
  ArPoint:=GetCoord(Sender as TImage);
  imgSelect.Left:=(sender as Timage).Left;
  imgSelect.Top:=(sender as TImage).Top;
  imgselect.Canvas.Pen.Color:=RGB($d8,$b9,$64);
  imgSelect.Canvas.Brush.Color:=RGB($d8,$b9,$64);
  imgSelect.Canvas.Rectangle(3,3,size_-3,size_-3);
  form1.il1.Draw(imgSelect.Canvas,0,0,(sender as TImage).Tag+20);
  imgSelect.Visible:=true;
end;

и ещё две пока на стадии описания, надо их заполнить
Delphi
1
2
  function CheckHorz(StartPoint:TPoint; FinishPoint:TPoint):boolean;
  function CheckVert(StartPoint:TPoint; FinishPoint:TPoint):boolean;
ну и то страшное условие с циклом стало куда проще
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        if imgselect_ then  //если поле уже выбрано
          begin //запускаем проверку
            TmpPoint:=ArPoint;
            ArPoint:=GetCoord(Sender as TImage);
            if CheckHorz(TmpPoint,ArPoint) then  //Горизонталь
              begin
 
              end
            else
              if CheckVert(TmpPoint,ArPoint) then//Вертикаль
                begin
 
                end
              else         //иначе перекрашиваем выделение
                  begin
                    selectobj(Sender as TImage);
                  end;
          end
            else
              begin //если поле не выбрано
                SelectObj(Sender as TImage);
              end;

вот как то так..

Добавлено через 3 минуты
мм, кстати, mss, так же можно делать:
Цитата Сообщение от CheshireesCat Посмотреть сообщение
TmpPoint:=ArPoint;
TmpPoint,ArPoint:TPoint;
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
22.03.2016, 09:13 6
и что это будет?
0
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 09:46  [ТС] 7
Цитата Сообщение от qwertehok Посмотреть сообщение
и что это будет?
ты про мой вопрос о
Цитата Сообщение от CheshireesCat Посмотреть сообщение
TmpPoint:=ArPoint;
или о программе?

Добавлено через 11 секунд
qwertehok, уточняй._.

Добавлено через 3 минуты
Delphi
1
2
3
4
5
6
7
procedure TForm1.FormCreate(Sender: TObject);
var a,b:TPoint;
begin
  a.x:=1;a.Y:=2;
  b:=a;
  showmessage('x:'+inttostr(b.x)+' y:'+inttostr(b.y));
end;
собственно проверил, работает..
значицо вопрос к программе
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
22.03.2016, 09:47 8
о программе
0
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 09:49  [ТС] 9
Цитата Сообщение от qwertehok Посмотреть сообщение
о программе
игра "Семечки"
0
22.03.2016, 09:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2016, 09:49
Помогаю со студенческими работами здесь

Не могу понять причину ошибки программы
Здравствуйте! Задание дано было такое: Заполнить матрицу из 7 строк и 7 столбцов случайными...

Не могу понять причину 109 ошибки
Доброго дня. Дома старенький пк трудился и не беспокоил, но начал уходить в синий экран...

Не могу понять причину ошибки (связано с выделением динамической памяти под двумерный массив и ее удаление)
Я студент 1 курса , и выполняя задание столкнулся с проблемой. Вот само задание: Ввести оценки N...

Не могу понять причину
&lt;script type=&quot;text/JavaScript&quot; src=&quot; {% static 'js/cloud-carousel.1.0.5.js' %}&quot;&gt;&lt;/script&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru