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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2014, 21:50   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
Вопрос Пропустить запись

Доброго времени суток!
Есть два массива. Первый по длине больше второго.
Код:
var
  i: Integer;
begin
  for i := 0 to Length(Test) - 1 do // Тут 4 ячейки (False;True;False;True)
  begin
    if Test[i].AlarmIgnore then Continue;
    TabControl1.Alarm[i] := Test[i].Alarm; // Тут 2 ячейки
  end;
end;
Получается, что в TabControl1.Alarm попадают False;True;
На деле должно быть True;True;
Shouldercannon вне форума Ответить с цитированием
Старый 22.12.2014, 22:20   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Получается, что в TabControl1.Alarm попадают False;True;
На деле должно быть True;True;
Что-то такое не от мира сего. Что нужно то?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.12.2014, 22:22   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

(False;True;False;True) это от какого из свойств?
Alarm или AlarmIgnore?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.12.2014, 06:28   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Что-то такое не от мира сего. Что нужно то?
В цикле пробежаться по Test[i].AlarmIgnore и добавить в TabControl1.Alarm[i] только Test[i].Alarm со значением True.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
(False;True;False;True) это от какого из свойств?
Alarm или AlarmIgnore?
AlarmIgnore
Shouldercannon вне форума Ответить с цитированием
Старый 23.12.2014, 07:49   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если добавлять только истинный Test[i].Alarm, то почему проверять на истинность Test[i].AlarmIgnore?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.12.2014, 08:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Получается, что в TabControl1.Alarm попадают False;True;
А почему Вы одну и ту же переменную используете и для прохода по массиву из 4-х элементов (который Test) и для добавляемого массива из 2-х элементов (который TabControl1.Alarm) ?!

не знаю, что Вы пытаетесь построить, но, на мой взгляд, более подходящим будет код примерно такого вида:
Код:
var
  i,k: Integer;
begin
  k := 0;
  for i := 0 to Length(Test) - 1 do // Тут 4 ячейки (False;True;False;True)
    if Not Test[i].AlarmIgnore then begin
       TabControl1.Alarm[k] := Test[i].Alarm; // Тут 2 ячейки
       inc(k);
    end;
end;
ну и что будет, если в Test будет 3 или 4 элемента с AlarmIgnore = false, как Вы их в массив из двух элементов запихнёте?!

Последний раз редактировалось Serge_Bliznykov; 23.12.2014 в 08:23.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2014, 16:02   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну и что будет, если в Test будет 3 или 4 элемента с AlarmIgnore = false, как Вы их в массив из двух элементов запихнёте?!
Всё рассчитано
Shouldercannon вне форума Ответить с цитированием
Старый 24.12.2014, 11:20   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

А при таком раскладе
Код:
// Отладка
procedure TFormPrivate.RefreshAlarms;
  function FindTabIndex(UserID: Integer): Integer;
  var
    i: Integer;
  begin
    for i := 0 to TabControl1.Tabs.Count - 1 do
    begin
      if Integer(TabControl1.Tabs.Objects[i]) = UserID then
      begin
        Result := i;
        Break;
      end
      else Result := -1;
    end;
  end;

  function BoolToInt(B: Boolean): Integer;
  begin
    if B then Result := 1 else Result := 0;
  end;
var
  i: Integer;
begin
  Memo1.Clear;

  for i := 0 to Length(TabUsers) - 1 do
  begin
    TabControl1.Alarm[FindTabIndex(TabUsers[i].UserID)] := TabUsers[i].Alarm;
    Memo1.Lines.Add(Format('Записали в %d: %d', [FindTabIndex(TabUsers[i].UserID), BoolToInt(TabUsers[i].Alarm)]));
  end;
end;
5 вкладок и 5 записей в массиве
Записали в 0: 0
Записали в 1: 0
Записали в 2: 0
Записали в 3: 0
Записали в 4: 0

2 вкладки и 5 записей в массиве
Записали в -1: 0
Записали в -1: 0
Записали в -1: 0
Записали в 0: 0
Записали в 1: 0

Ошибок нет. Во что это может вылиться в дальнейшем?

Последний раз редактировалось Shouldercannon; 24.12.2014 в 14:32.
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропустить ошибки agregator Microsoft Office Excel 2 20.04.2013 17:42
Цикл for. Пропустить первую строку webber9989 Общие вопросы Delphi 13 03.12.2012 12:20
Пропустить ошибку agregator Microsoft Office Excel 3 22.07.2012 08:10
Пропустить визуализацию devf Microsoft Office Excel 2 09.03.2012 17:15
пропустить значение в цикле Bape}l{ka Microsoft Office Excel 5 18.07.2011 17:34