Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.22;
Скачать: CL | DM;

Вниз

добавление в ComboBox   Найти похожие ветки 

 
AstonMartin   (2013-01-10 12:03) [0]

Почему кидает ошибку - List index out of bounds (0)?

procedure TForm1.Button1Click(Sender: TObject);
begin
 ComboBox1.Items.AddObject("", TObject(-1));
 ShowMessage(IntToStr(Integer(ComboBox1.Items.Objects[0])));
end;


 
AstonMartin   (2013-01-10 12:06) [1]

такой прикол почему-то только когда добавляю -1, с -2, например, все нормально


 
KilkennyCat ©   (2013-01-10 12:30) [2]

Какой смысл в выше приведенной процедуре?
Только не ври, что сократил свой громадный код до того огрызка с проблемой, ибо вышеприведенная процедура работает.


 
Медвежонок Пятачок ©   (2013-01-10 12:48) [3]

Это так и должно быть когда приводят минус один к TObject


 
AstonMartin   (2013-01-10 13:04) [4]


> Какой смысл в выше приведенной процедуре?
> Только не ври, что сократил свой громадный код до того огрызка
> с проблемой, ибо вышеприведенная процедура работает.


Это тестовый пример. Смысл в том, чтобы понять, почему нельзя передавать в Object значение -1. В D7 не работает. В ComboBox.Items.Objects у меня должны храниться индексы на item"ы другого TStringList"а или значение -1.


 
RWolf ©   (2013-01-10 13:27) [5]


> почему нельзя передавать в Object значение -1.

потому что значение -1 зарезервировано под ошибку.


function TCustomComboBoxStrings.GetObject(Index: Integer): TObject;
begin
 Result := TObject(SendMessage(ComboBox.Handle, CB_GETITEMDATA, Index, 0));
 if Longint(Result) = CB_ERR then
   Error(SListIndexError, Index);
end;


 
Внук ©   (2013-01-10 17:47) [6]

>> Смысл в том, чтобы понять, почему нельзя передавать в Object значение -1
 Не всегда. В некоторые контролы можно. Но тут нельзя. Нужно просто принять это как данность :)


 
KilkennyCat ©   (2013-01-11 02:50) [7]

В XE2 не вызовет List index out of bounds.


 
O'ShinW ©   (2013-01-11 08:59) [8]

наверное тут

function TStrings.IndexOfObject(AObject: TObject): Integer;
begin
 for Result := 0 to GetCount - 1 do
   if GetObject(Result) = AObject then Exit;
 Result := -1;
end;

т.е. если не находит ничего, то -1
у нас находит именно -1, но вызывающий думает, что не нашлось ничего



Страницы: 1 вся ветка

Текущий архив: 2013.09.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1365495258
alexdn
2013-04-09 12:14
2013.09.22
Похоже полетел картридж


2-1357505005
Mixasnt
2013-01-07 00:43
2013.09.22
не могу обработать одномерный массив введённый в едит.


8-1232828242
Vemer
2009-01-24 23:17
2013.09.22
Как быстро нарисовать точки из массива в Canvas/DC?


2-1357671425
hansa
2013-01-08 22:57
2013.09.22
Собственник визуальных компонент


1-1314366462
denkop
2011-08-26 17:47
2013.09.22
Как правильно вызвать метод класса из CallBack функции