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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.10.2019, 10:54
____jarik____ ____jarik____ вне форума
Прохожий
 
Регистрация: 06.10.2019
Сообщения: 10
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию list index out of bounds (0)

Здравствуйте!
ошибка list index out of bounds (0)
подскажите в чем ошибка?

Код:
procedure TForm2.Button5Click(Sender: TObject);
begin


    for i := 0 to Form2.ListBox1.Count-1  do

     if (Form2.ListBox1.Items[i] = 'Лиття під тиском')then
      if (Form2.ListBox1.Items[i] = 'Виконати лиття') then

     begin
      a1:=50000; {вартість станка}
      a2:= 8; {кількість годин на добу}
      a3:= 250; {Робочих днів на рік}
      a4:= 1.15; {витратин на обслуговування}
      a5:= 5; {термін окупності}
      a6:= 1.05; {витрати на інструмент}
      a7:=0.75; {потужність станка}
      a8:= 2.13; {тариф за електроенегрію}
      a9:= 500; {зарплата робітника за 1 зміну}
      a10:= 2; {ваговий коефіціент(податкиі зарплата)}
      a11:= 2; {ваговий коефіціент (статистичнйи показник)}
      a12:= 4; {ваговий коефіціент (статистичний показник)}
      a13:= 0.4; {час роботи станка)}

      a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*(1+(a14/100)))/a15;

       end;
Админ: Пользуемся тегами при оформлении кода!


Спасибо!

Последний раз редактировалось Admin, 06.10.2019 в 17:07.
Ответить с цитированием
  #2  
Старый 06.10.2019, 12:13
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

В приведенном коде ошибку "list index out of bounds (0)" ничего не вызывает. А сама ошибка говорит о том, что индекс списка к которому идет обращение лежит в не границ. Другими словами, обращение идет к несуществующему индексу списка.
А вот здесь у меня вопрос.
Код:
if (Form2.ListBox1.Items[i] = 'Лиття під тиском')then
if (Form2.ListBox1.Items[i] = 'Виконати лиття') then
Как один и тоже элемент списка может равняться двум различным значениям? Или где-то опечатка?

P.S.: заверните свой код в тег, или же получите предупреждение.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 06.10.2019, 12:25
____jarik____ ____jarik____ вне форума
Прохожий
 
Регистрация: 06.10.2019
Сообщения: 10
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

да, но ошибка появляется при нажатии на эту кнопку.

по поводу этих 2-х строчек, мне необходимо чтобы проверялось 2 условия
эсли в списку есть первое слово и второе слово тогда выполняется формула.

Последний раз редактировалось ____jarik____, 06.10.2019 в 12:39.
Ответить с цитированием
  #4  
Старый 06.10.2019, 12:30
____jarik____ ____jarik____ вне форума
Прохожий
 
Регистрация: 06.10.2019
Сообщения: 10
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

вот полный текст программы, но она еще недописанная до конца.

Код:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    ListBox1: TListBox;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Edit3: TEdit;
    Button3: TButton;
    Edit4: TEdit;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  a,b:Double;
  i:integer;
  a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15:Double;
implementation

{$R *.dfm}

uses Unit5;




procedure TForm2.Button1Click(Sender: TObject);
begin


   if (Edit1.Text = 'Лиття під тиском') or (Edit1.Text = 'Віброабразивна')
   or (Edit1.Text = 'Слюсарна') or (Edit1.Text = 'Фрезерна')
   or (Edit1.Text = 'Свердлильна') or (Edit1.Text = 'Хімічне окислення')
   or (Edit1.Text = 'Маркування') or (Edit1.Text = 'Контроль') then
   ListBox1.Items.Add(Edit1.Text)
   else ShowMessage('Не правильна назва операції');
   Edit1.Clear
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
     if (Edit2.Text = 'Виконати лиття') or (Edit2.Text = 'Виконати обробку заготовок')
     or (Edit2.Text = 'Встановити, закріпити, зняти') or (Edit2.Text = 'Запилити і розчистити місце роз’єму')
     or (Edit2.Text = 'Фрезерувати пов.21, 22') or (Edit2.Text = 'Зняти задирки')
     or (Edit2.Text = 'Фрезерувати пов.6, 3,16 Попередньо ') or (Edit2.Text = 'Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто')
     or (Edit2.Text = 'Фрезерувати пов.23') or (Edit2.Text = 'Свердлити отв. 12 під різьбу М3-6Н')
     or (Edit2.Text = 'Свердлити отв.5, 8 під різьбу М2-6Н') or (Edit2.Text = 'Перевстановити')
     or (Edit2.Text = 'Свердлити отв.20') or (Edit2.Text = 'Свердлити отв.9 під різьбу М2-6Н')
     or (Edit2.Text = 'Розточити отв.7') or (Edit2.Text = 'Розточити отв.6')
     or (Edit2.Text = 'Розточити отв.16')  or (Edit2.Text = 'Нарізати різьбу М2-6Н в 2 отв. Поз.9 ')
     or (Edit2.Text = 'Нарізати різьбу М2-6Н в 4 отв. Поз.5') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 3 отв. Поз.8')
     or (Edit2.Text = 'Змінити інструмент') or (Edit2.Text = 'Нарізати різьбу М3-6Н в 1 отв. Поз.12')
     or (Edit2.Text = 'Нанести хімічне покриття') or (Edit2.Text = 'Маркувати умовний порядковий номер')
     or (Edit2.Text = 'Контролювати паралельність поверхонь') then

   ListBox1.Items.Add(Edit2.Text)

   else ShowMessage('Не правильна назва переходу');
   Edit2.Clear
end;

procedure TForm2.Button3Click(Sender: TObject);

begin
  a14:=StrToInt(Edit3.Text);
  Edit3.Clear
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
  a15:=StrToInt(Edit4.Text);
  Edit4.Clear
end;

procedure TForm2.Button5Click(Sender: TObject);
begin

    for i:=0 to ListBox1.Count-1  do

     if (Form2.ListBox1.Items[i] = 'Лиття під тиском') and
      (Form2.ListBox1.Items[i] = 'Виконати лиття') then

     begin
      a1:=50000; {вартість станка}
      a2:= 8; {кількість годин на добу}
      a3:= 250; {Робочих днів на рік}
      a4:= 1.15; {витратин на обслуговування}
      a5:= 5; {термін окупності}
      a6:= 1.05; {витрати на інструмент}
      a7:=0.75; {потужність станка}
      a8:= 2.13; {тариф за електроенегрію}
      a9:= 500; {зарплата робітника за 1 зміну}
      a10:= 2; {ваговий коефіціент(податкиі зарплата)}
      a11:= 2; {ваговий коефіціент (статистичнйи показник)}
      a12:= 4; {ваговий коефіціент (статистичний показник)}
      a13:= 0.4; {час роботи станка)}

      a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*(1+(a14/100)))/a15;

       end;

       if (Form2.ListBox1.Items[i] = 'Віброабразивна')then
        if Form2.ListBox1.Items[i] = 'Виконати обробку заготовок' then

     begin
      a1:=50000; {вартість станка}
      a2:= 8; {кількість годин на добу}
      a3:= 250; {Робочих днів на рік}
      a4:= 1.15; {витратин на обслуговування}
      a5:= 5; {термін окупності}
      a6:= 1.05; {витрати на інструмент}
      a7:=0.75; {потужність станка}
      a8:= 2.13; {тариф за електроенегрію}
      a9:= 500; {зарплата робітника за 1 зміну}
      a10:= 2; {ваговий коефіціент(податкиі зарплата)}
      a11:= 2; {ваговий коефіціент (статистичнйи показник)}
      a12:= 4; {ваговий коефіціент (статистичний показник)}
      a13:= 0.4; {час роботи станка)}

      a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*a14)/a15;

       end ;

       Form5.Label1.Caption:='a' ;
       Form5.Show


end;

end.
Админ: Пользуемся тегами при оформлении кода!

Последний раз редактировалось Admin, 06.10.2019 в 17:08.
Ответить с цитированием
  #5  
Старый 06.10.2019, 12:59
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

А вот это
Код:
if (Edit1.Text = 'Лиття під тиском') or (Edit1.Text = 'Віброабразивна')
or (Edit1.Text = 'Слюсарна') or (Edit1.Text = 'Фрезерна')
or (Edit1.Text = 'Свердлильна') or (Edit1.Text = 'Хімічне окислення')
or (Edit1.Text = 'Маркування') or (Edit1.Text = 'Контроль')
и вот это
Код:
if (Edit2.Text = 'Виконати лиття') or (Edit2.Text = 'Виконати обробку заготовок')
or (Edit2.Text = 'Встановити, закріпити, зняти') or (Edit2.Text = 'Запилити і розчистити місце роз’єму')
or (Edit2.Text = 'Фрезерувати пов.21, 22') or (Edit2.Text = 'Зняти задирки')
or (Edit2.Text = 'Фрезерувати пов.6, 3,16 Попередньо ') or (Edit2.Text = 'Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто')
or (Edit2.Text = 'Фрезерувати пов.23') or (Edit2.Text = 'Свердлити отв. 12 під різьбу М3-6Н')
or (Edit2.Text = 'Свердлити отв.5, 8 під різьбу М2-6Н') or (Edit2.Text = 'Перевстановити')
or (Edit2.Text = 'Свердлити отв.20') or (Edit2.Text = 'Свердлити отв.9 під різьбу М2-6Н')
or (Edit2.Text = 'Розточити отв.7') or (Edit2.Text = 'Розточити отв.6')
or (Edit2.Text = 'Розточити отв.16') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 2 отв. Поз.9 ')
or (Edit2.Text = 'Нарізати різьбу М2-6Н в 4 отв. Поз.5') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 3 отв. Поз.8')
or (Edit2.Text = 'Змінити інструмент') or (Edit2.Text = 'Нарізати різьбу М3-6Н в 1 отв. Поз.12')
or (Edit2.Text = 'Нанести хімічне покриття') or (Edit2.Text = 'Маркувати умовний порядковий номер')
or (Edit2.Text = 'Контролювати паралельність поверхонь')
не лучше сделать в ComboBox'e для того, чтобы просто выбироать из списка готовых значений. Так можно избавиться от опечаток пользователя и независить от регистра.

Далее...
Как это по Вашему должно сработать?
Код:
for i:=0 to ListBox1.Count-1 do

if (Form2.ListBox1.Items[i] = 'Лиття під тиском') and
(Form2.ListBox1.Items[i] = 'Виконати лиття') then
ListBox это ведь список строк, а Вы хотите чтобы она, строка из списка, равнялась и "Лиття під тиском" и "Виконати лиття" одновременно. Это как?
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
Этот пользователь сказал Спасибо Kailon за это полезное сообщение:
____jarik____ (06.10.2019)
  #6  
Старый 06.10.2019, 13:22
____jarik____ ____jarik____ вне форума
Прохожий
 
Регистрация: 06.10.2019
Сообщения: 10
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

это моя первая программа, не знаком с " ComboBox'e ",

Задача следующая:
у меня есть тех. процесс производства детали
мне необходимо его ввести в программу, название операции и название перехода.
и оценить стоимость каждого перехода по формуле.
в некоторых операциях есть одинаковые названия переходов (например установка) , мне необходимо чтобы программа понимала что это относится к разным операциям и у этих переходов разная стоимость.

Большое спасибо!
Ответить с цитированием
  #7  
Старый 06.10.2019, 13:25
____jarik____ ____jarik____ вне форума
Прохожий
 
Регистрация: 06.10.2019
Сообщения: 10
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

"ListBox это ведь список строк, а Вы хотите чтобы она, строка из списка, равнялась и "Лиття під тиском" и "Виконати лиття" одновременно. Это как?"

хотел задать условие чтобы в списке была строка "Лиття під тиском" и строка "Виконати лиття".
не одна и также строка, а просто чтобы в списке били эти 2 строки.
Ответить с цитированием
  #8  
Старый 06.10.2019, 13:58
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Вот набросал на скорую руку. Разбирайся, спрашивай.
Вложения
Тип файла: zip Stanok.zip (111.1 Кбайт, 1 просмотров)
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
Этот пользователь сказал Спасибо Kailon за это полезное сообщение:
____jarik____ (06.10.2019)
  #9  
Старый 06.10.2019, 14:23
____jarik____ ____jarik____ вне форума
Прохожий
 
Регистрация: 06.10.2019
Сообщения: 10
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

Спасибо, большое!
но есть несколько вопросов, если можно?

как сделать так чтобы при выборе первого условия второе условие менялось?
например чтобы когда я выбрал в 1 условии "Лиття під тиском" то во втором не мог выбрать "Фрезерувати пов.21, 22".

как сделать чтобы в листбоксе отображался весь тех процесс который был задан.

и сумма была по переходам, а потом общая сумма всего процесса.

тех процесс.

005 Лиття під тиском
Виконати лиття
010 Віброабразивна
Виконати обробку заготовок
015Слюсарна
Встановити, закріпити, зняти
Запилити і розчистити місце роз’єму
020 Фрезерна
Встановити, закріпити, зняти
Фрезерувати пов.21, 22
020 Слюсарна
Зняти задирки
030 Фрезерна
Встановити, закріпити, зняти
Фрезерувати пов.6, 3,16 Попередньо
Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто
Фрезерувати пов.23
035 Слюсарна
Зняти задирки
040 Свердлильна
Встановити, закріпити, зняти
Свердлити отв. 12 під різьбу М3-6Н
Свердлити отв.5, 8 під різьбу М2-6Н
Перевстановити
Свердлити отв.20
Перевстановити
Свердлити отв.9 під різьбу М2-6Н
Перевстановити
Розточити отв.7
Розточити отв.6
Розточити отв.16
045 Слюсарна
Зняти задирки
050 Слюсарна
Встановити, закріпити, зняти
Нарізати різьбу М2-6Н в 2 отв. Поз.9
Нарізати різьбу М2-6Н в 4 отв. Поз.5
Нарізати різьбу М2-6Н в 3 отв. Поз.8
Змінити інструмент
Нарізати різьбу М3-6Н в 1 отв. Поз.12
055 Хімічне окислення
Нанести хімічне покриття
060 Маркування
Встановити, закріпити, зняти
Маркувати умовний порядковий номер
065 Контроль
Встановити, закріпити, зняти
Контролювати паралельність поверхонь

Спасибо!
Ответить с цитированием
  #10  
Старый 06.10.2019, 14:43
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
Сообщение от ____jarik____
как сделать так чтобы при выборе первого условия второе условие менялось? например чтобы когда я выбрал в 1 условии "Лиття під тиском" то во втором не мог выбрать "Фрезерувати пов.21, 22".
В зависимости от выбора первого условия фильтровать второе. Или же при выборе второго условия проверять возможно ли его использовать с первым условием. И если же нет, то сообщать пользователю.

Цитата:
Сообщение от ____jarik____
как сделать чтобы в листбоксе отображался весь тех процесс который был задан.

и сумма была по переходам, а потом общая сумма всего процесса.
Собирать из всех полей ввода, объединять, считать и добавлять в список.

Цитата:
Сообщение от ____jarik____
005 Лиття під тиском
Виконати лиття
010 Віброабразивна
...
Что за цифры?

А вообще для этой задачи подойдет база данных. Тут и фильтрация и суммы и справочники и прочее...
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #11  
Старый 06.10.2019, 14:59
____jarik____ ____jarik____ вне форума
Прохожий
 
Регистрация: 06.10.2019
Сообщения: 10
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

подскажите где должно быть условие?
и как правильно его записать if...?

case cbCondition_1.ItemIndex of
0:
(условие?)
case cbCondition_2.ItemIndex of
здесь?

что обозначают "0:", "1:"?

большое спасибо за то что потратили и так много времени на меня)
и еще, можно у вас купить такую программу?
или подскажите кто может помочь сделать за деньги.
Просто времени мало осталось, а разбираться мне еще много в программе (
Ответить с цитированием
  #12  
Старый 07.10.2019, 14:06
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
Сообщение от ____jarik____
можно у вас купить такую программу?
или подскажите кто может помочь сделать за деньги.
Просто времени мало осталось, а разбираться мне еще много в программе
За готовым решением в этот раздел выкладывайте подробное задание.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #13  
Старый 07.10.2019, 17:51
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Но локализацию скорее всего придется делать самому ибо украинскую мову не каждый разумеет.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter