Перейти к содержанию
Fire Monkey от А до Я
  • 0

3 строчки рушат апликацию на старте


chaplin.u@gmail.com

Вопрос

Столкнулся с разницей в нумерации индексов ( в Вин32 начинается с 0 а в Анроиде с 1 ). Решил при запуске программы находить минимальный индекс.

Поставил на каждый TListBoxItem  Tag > 0 ( 1,2...) . Написал функцию а она рушит апликацию на старте. Не могу понять что ей не нравится.

Capture.PNG

 Imin определил как глобальную переменную  - int Imin = 0;

если убираю эту функцию - программа стартует нормально.

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
35 минут назад, chaplin.u@gmail.com сказал:

Столкнулся с разницей в нумерации индексов ( в Вин32 начинается с 0 а в Анроиде с 1 ). Решил при запуске программы находить минимальный индекс.

Поставил на каждый TListBoxItem  Tag > 0 ( 1,2...) . Написал функцию а она рушит апликацию на старте. Не могу понять что ей не нравится.

Capture.PNG

 Imin определил как глобальную переменную  - int Imin = 0;

если убираю эту функцию - программа стартует нормально.

 

 

эм, шо?

все cписки и массивы начинаются с 0, всегда!

разница есть только в строках (windows - 1, остальные - 0)

Ссылка на комментарий
  • 0

Не понял ничего про индексы...:wacko:

По коду путаешь индексы и количество.

Попробуй так 

for (int i = 0; i < (ListBox1->Items->Count-1); i++)
Изменено пользователем Labian
Поправил код
Ссылка на комментарий
  • 0
  • Администраторы
6 минут назад, Labian сказал:

Не понял ничего про индексы...:wacko:

По коду путаешь индексы и количество.

Попробуй так 


for (int i = 0; i < (ListBox1->Items->Count-1); i++)

Там строгий знак неравенства. Так что вычитать единицу не нужно.

Ссылка на комментарий
  • 0

Видимо картинка не чёткая и люди не видят кода. Вот может так будет понятнее :

-------------------------------------------------------------------

void  __fastcall TForm1::SetMinIndex(void)
{
    TListBoxItem *CurListBoxItem;

    for (int i = 0; i < ListBox1->Items->Count; i++)
    {
        CurListBoxItem =  ListBox1->ItemByIndex(i);

        if(CurListBoxItem->Tag > 0)
        {
             Imin = i;
             return;
        }
    }

    Memo1->Lines->Add("Imin"+ IntToStr(Imin));
}

-------------------------------------------------------------------

Как видите количество задаётся  ListBox1->Items->Count  а индекс ListBox1->ItemByIndex(i).

А вопрос был почему этот код делает ошибку ? Вроде всё по учебнику.

 

 

Ссылка на комментарий
  • 0

Вопрос снялся сам. взял предыдущую версию и сделал те же коректировки и всё ОК. Есть версия что в циклах вместо английской "к" я написал русскую к.

Отсюда мораль - не пользоваться похожими символами.

Изменено пользователем chaplin.u@gmail.com
Ссылка на комментарий
  • 0
14 часов назад, chaplin.u@gmail.com сказал:

Есть версия что в циклах вместо английской "к" я написал русскую к.

Это можно легко проверить скопировав эту букву, например, в редактор FAR - он покажет код символа и станет ясно русская или английская.

 

Ссылка на комментарий
  • 0
8 минут назад, Rusland сказал:

Это можно легко проверить скопировав эту букву

Для этого надо сперва догадаться, что проблема именно в этой букве :)

Вот чем мне не нравятся плюсы - так это слишком большой вольностью...

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...