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

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

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

Студворк — интернет-сервис помощи студентам
в общем есть поле с динамически созданными 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;


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

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

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

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

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

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

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

Добавлено через 4 минуты
хотя нет.. проблема осталось но только для 10ой строки.. для каждой ячейки строки ошибка
Code
1
Access violation at address 005E3D4D in module 'Project1.exe'. Read of address 0000000C.
Добавлено через 25 минут
всё разобрался.. сборная солянка с путаницей индексов колонок и строк, в целом ошибка выход за пределы массива
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
22.03.2016, 08:32
Цитата Сообщение от CheshireesCat Посмотреть сообщение
setlength(image_array,20);
Это ты устанавливаешь первую размерность.
А массив двумерный.
Где установка второй размерности ?
0
 Аватар для CheshireesCat
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 09:11  [ТС]
Цитата Сообщение от 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
5988 / 4563 / 1096
Регистрация: 29.08.2013
Сообщений: 28,203
Записей в блоге: 3
22.03.2016, 09:13
и что это будет?
0
 Аватар для CheshireesCat
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 09:46  [ТС]
Цитата Сообщение от 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
5988 / 4563 / 1096
Регистрация: 29.08.2013
Сообщений: 28,203
Записей в блоге: 3
22.03.2016, 09:47
о программе
0
 Аватар для CheshireesCat
88 / 84 / 43
Регистрация: 02.05.2015
Сообщений: 766
22.03.2016, 09:49  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
о программе
игра "Семечки"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2016, 09:49
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru