Главная страница
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.009 c
15-1365908951
TUser
2013-04-14 07:09
2013.09.22
bormor о чиновниках


15-1365867368
О-Сознание
2013-04-13 19:36
2013.09.22
Как называется паттерн?


10-1185369660
Magedon
2007-07-25 17:21
2013.09.22
Access и экспорт


15-1365495258
alexdn
2013-04-09 12:14
2013.09.22
Похоже полетел картридж


15-1365397776
jimm_kerry
2013-04-08 09:09
2013.09.22
свой канал для кабельного ТВ гостиницы