![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
добавление в ComboBox
AstonMartin © (2013-01-10 12:03:00)Почему кидает ошибку - 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;
O'ShinW (2013-01-11 08:59:00) [1]наверное тут
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, но вызывающий думает, что не нашлось ничего
KilkennyCat (2013-01-11 02:50:00) [2]В XE2 не вызовет List index out of bounds.
Внук (2013-01-10 17:47:00) [3]>> Смысл в том, чтобы понять, почему нельзя передавать в Object значение -1
Не всегда. В некоторые контролы можно. Но тут нельзя. Нужно просто принять это как данность :)
RWolf (2013-01-10 13:27:00) [4]
> почему нельзя передавать в 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;
AstonMartin (2013-01-10 13:04:00) [5]
> Какой смысл в выше приведенной процедуре?
> Только не ври, что сократил свой громадный код до того огрызка
> с проблемой, ибо вышеприведенная процедура работает.
Это тестовый пример. Смысл в том, чтобы понять, почему нельзя передавать в Object значение -1. В D7 не работает. В ComboBox.Items.Objects у меня должны храниться индексы на item'ы другого TStringList'а или значение -1.
Медвежонок Пятачок (2013-01-10 12:48:00) [6]Это так и должно быть когда приводят минус один к TObject
KilkennyCat (2013-01-10 12:30:00) [7]Какой смысл в выше приведенной процедуре?
Только не ври, что сократил свой громадный код до того огрызка с проблемой, ибо вышеприведенная процедура работает.
AstonMartin (2013-01-10 12:06:00) [8]такой прикол почему-то только когда добавляю -1, с -2, например, все нормально