Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 12.05.2014, 09:15
Skleroz Skleroz вне форума
Прохожий
 
Регистрация: 12.05.2014
Сообщения: 3
Версия Delphi: XE2
Репутация: 10
По умолчанию

А поставить точку останова в 65 строке приведенных исходников и посмотреть, чему равны Checklistbox4.Items.Count и Checklistbox6.Items.Count?
Ответить с цитированием
  #17  
Старый 12.05.2014, 10:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если я правильно понял, то в разных наборах CheckListBox есть элементы соответствующие одному и тому-же строковому значению:
"Программные средства формирования и контроля полномочий доступа в AC"
"Вибродатчики (акселерометры)"
и т.д.
Тогда почему бы не воспользоваться методом AddObject и не добавить просто нужную строку? Тогда нет никакой необходимости в этой куче ифов которые по сути дублируют визуальные элементы. А вместо всего этого безобразия пробежать в цикле по всем спискам и если элемент списка отмечен вывести в мемо связанный с этим элементом текст.
Вот так это может выглядеть:
Код:
unit Unit21;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst;

type
  TForm21 = class(TForm)
    CheckListBox1: TCheckListBox;
    CheckListBox2: TCheckListBox;
    Memo1: TMemo;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end;

 TString = class
  Text: String;
  constructor Create(S: String);
 end;

var
  Form21: TForm21;

implementation

{$R *.dfm}

procedure TForm21.Button1Click(Sender: TObject);
var
  i: Integer;
begin
 for i := 0 to 5
 do if CheckListBox1.Checked[i]
    then Memo1.Lines.Add(TString(CheckListBox1.Items.Objects[i]).Text);
 for i := 0 to 5
 do if CheckListBox2.Checked[i]
    then Memo1.Lines.Add(TString(CheckListBox2.Items.Objects[i]).Text);
end;

procedure TForm21.FormCreate(Sender: TObject);
var
  i: Integer;
begin
 for i := 0 to 5
 do CheckListBox1.AddItem(IntToStr(i+1), TString.Create('This item 1.' + IntToStr(i+1)));
 for i := 0 to 5
 do CheckListBox2.AddItem(IntToStr(i+1), TString.Create('This item 2.' + IntToStr(i+1)));
end;

{ TString }

constructor TString.Create(S: String);
begin
 Text := S;
end;

end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 12.05.2014 в 10:21.
Ответить с цитированием
  #18  
Старый 12.05.2014, 12:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

В общем посмотрел я еще раз ваш исходный код. То что там у вас написано никогда работать не будет правильно т.к. идет выбор одних и тех же вариантов. Давайте всю базу знаний по которой вы это делаете, тогда что-то путное можно посоветовать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #19  
Старый 13.05.2014, 03:05
Skleroz Skleroz вне форума
Прохожий
 
Регистрация: 12.05.2014
Сообщения: 3
Версия Delphi: XE2
Репутация: 10
По умолчанию

Очевидно же, что в списках находятся какие-то модели аппаратуры, а в коде определяются группы выбранной аппаратуры.
Вариант 1 - можно сделать всё "красиво", месяц объяснять, как это будет работать.
2 - Можно поставить бряку, как я написал выше (только не на 65 строке, а в той, что выдает ошибку), увидеть причину ошибки и исправить (две минуты). А через пару лет автор сам допетрит до первого варианта.
Автор всё-таки спрашивал, где ошибка в коде, а не в архитектуре, верно?

Требуется уточнение. Закомментированое не работает? Выделенное не работает? Не работает то, что добавляете после выделенного? А что добавляется после выделенного?

Если не работает выделенное, то пуст четвертый список.

"когда выбираем только чеклистбокс 6, то только тогда и выходит эта преславутая ошибка.странно."
Для того, чтобы проверить условие, не обязательно проверять все его операнды. Так и ведет себя компилятор по-умолчанию.
Например, "A or B": если А = True, зачем проверять условие B?
Почитайте про Short-Circuit Boolean Evaluation, попробуйте поставить опцию компилятора в настройках проекта Complete Boolean Eval, посмотрите, как изменится поведение ошибки.

Последний раз редактировалось Skleroz, 13.05.2014 в 03:16.
Ответить с цитированием
  #20  
Старый 13.05.2014, 09:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Очевидно же, что в списках находятся какие-то модели аппаратуры, а в коде определяются группы выбранной аппаратуры
Вот только сведений об этих группах и деталей, которые скрыты за индексами элементов автор не дал. Я вот предполагаю, что раз такое количество элементов попадают сразу в несколько групп, значит должна быть связь между группами, которая так же должна учитываться. Вполне возможно, что автор пытается совместить несовместимое. Например:
Группа1
1. Апельсин
2. Пакет молока
3. Дыня
Группа2
1. Круглый
2. Овальный
3. Прямоугольный

Очевидно, что по отдельности элементы не дадут представление о сущности. А вот если есть связь по группам, то уже другое дело.

Так что от автора требуется база знаний.

ПС: А что качается авторского кода... Визуальные элементы служат для замены вот таких монструозных блоков кода. Как это сделать, я уже пример привел.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 13.05.2014 в 10:04.
Ответить с цитированием
  #21  
Старый 14.05.2014, 03:52
Skleroz Skleroz вне форума
Прохожий
 
Регистрация: 12.05.2014
Сообщения: 3
Версия Delphi: XE2
Репутация: 10
Радость

Мы пытаемся исправить архитектуру, сделать "по-нормальному", а автору надо найти ошибку Index Out of Bounds.
Боюсь, что "по-нормальному" не получится, надо год-два подождать, чтобы автору это нужно было, если вообще что-то будет меняться. Посмотри, как именованы контролы, например.
Поэтому считаю, что следует подсказать, как найти ошибку и пусть плывёт себе дальше.
Хотя, если время свободное есть и автору будет интересно, можно руки повыпрямлять
Ответить с цитированием
  #22  
Старый 14.05.2014, 22:31
Тролль Тролль вне форума
Заблокирован
 
Регистрация: 07.05.2014
Сообщения: 11
Версия Delphi: 7, Kylix
Репутация: -1385
По умолчанию

О чем Вы толкуете? Я уже давно нашел ошибку - автор обращается к 3 элементу массива, содержащего 2 элемента.
Автор уже не отписывается, закройте тему.
Ответить с цитированием
  #23  
Старый 15.05.2014, 00:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от Тролль
О чем Вы толкуете? Я уже давно нашел ошибку - автор обращается к 3 элементу массива, содержащего 2 элемента.
Автор уже не отписывается, закройте тему.
Да эта ошибка уже давно не актуальна. Читайте тему внимательнее. У автора уже после этого образовалось куча одинаковых условий. Об этом и толкуем, пока автора нет в студии.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter