Форум: "Начинающим";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];
ВнизComboBox1.AddItem( item ,Pointer(-1)); Найти похожие ветки
← →
AndB © (2006-03-22 16:52) [0]никогда бы не подумал... с [0..n] порходило всегда... а с < 0
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Clear;
ComboBox1.AddItem("item",Pointer(-1));
ShowMessage("? = "+IntToStr(Integer(ComboBox1.Items.Objects[0])));
end;
вместо "? = -1" получаю EStringListError "List index out of bounds (0)"
а как же отрицательные использовать? %\
← →
Stakan © (2006-03-22 17:00) [1]
SomeVar := -1;
ComboBox1.AddItem("item",Pointer(SomeVar));
← →
Рамиль © (2006-03-22 17:01) [2]Моя не понимать. Ты чего вместо ссылки на объект вставить пытаешься?!.
← →
Рамиль © (2006-03-22 17:03) [3]procedure AddItem(Item: String; AObject: TObject);
Description
Call AddItem to add a string, with an associated object, to the drop-down list.
Item is the string to add to the drop-down list.
AObject is an object associated with that string. It can be accessed using the Objects property of the TStrings object that implements the Items property.
← →
AndB © (2006-03-22 17:05) [4]to Рамиль
но ведь с положительными проходит?
← →
Stakan © (2006-03-22 17:08) [5]Виноват, нужно так
I := -1;
ComboBox1.Clear;
ComboBox1.AddItem("item",@I);
ShowMessage("? = "+IntToStr(PInteger(ComboBox1.Items.Objects[0])^));
← →
AndB © (2006-03-22 17:17) [6]охохо... уже веревку искать, что-ли?
Stakan, но ведь не один итем мне добавить надо. Что ж мне, для каждого переменную рожать?
Сюжет таков: акцессная база.. долгих лет ее создателю :)
поле счетчика с новыми значениями = случайные... т.е. и отрицательные в т.ч.
пытаюсь прикрутить форму для групповых операций. В комбобоксы надо поместить справочники... для единичных записей они лукапные.. а тут "оторвать" надо... Или как?
← →
Stakan © (2006-03-22 17:22) [7]AndB © (22.03.06 17:17) [6]
Я ответил на вопрос в [0], так что претензии не принимаются.
По поводу
> Сюжет таков: акцессная база.. долгих лет ее создателю
>:)
> поле счетчика с новыми значениями = случайные... т.е.
>и отрицательные в т.ч.
> пытаюсь прикрутить форму для групповых операций. В
> комбобоксы надо поместить справочники... для единичных
> записей они лукапные.. а тут "оторвать" надо... Или
> как?
ничего не понял.
← →
Leonid Troyanovsky © (2006-03-22 17:25) [8]
> AndB © (22.03.06 17:17) [6]
> охохо... уже веревку искать, что-ли?
А чего ты расстраиваешься?
Просто -1 = CB_ERR, означающий ошибку при GetItemData.
Т.е., такое число только одно.
А выходов, по-крайней мере, два:
- использовать настоящие объекты
- использовать вместо -1 какое-нибудь специальное число.
--
Regards, LVT.
← →
AndB © (2006-03-22 17:30) [9]to Stakan [7]
да претензии и не выдвигаются.. :) в оригинале это выглядит так:while not valTab.Eof do begin
при чем valTab.Fields[0].AsInteger может быть < 0
cb.AddItem(valTab.Fields[1].AsString, Pointer(valTab.Fields[0].AsInteger));
valTab.Next;
end;
а ты предлагаешь:i := -1; ComboBox1.AddItem("item1", @i);
или еще лучше? )) :
i := -2; ComboBox1.AddItem("item2", @i);
i := -3; ComboBox1.AddItem("item3", @i);a := -1; ComboBox1.AddItem("item1", @a);
b := -2; ComboBox1.AddItem("item2", @b);
c := -3; ComboBox1.AddItem("item3", @c);
хотя так, оно, конечно, работает
← →
AndB © (2006-03-22 17:32) [10]sorry, код криво
← →
Leonid Troyanovsky © (2006-03-22 17:38) [11]
> AndB © (22.03.06 17:30) [9]
> а ты предлагаешь:
Не, не так.
Заводишь dynamic array в него складываешь свои имена и Longint.
В combo пользуешься индексами, причем сделать его ownerdraw,
чтобы в двух местах не хранить данные.
--
Regards, LVT.
← →
AndB © (2006-03-22 17:44) [12][11] вот-вот.. массив, то, другое, пятое.. 10-е
нее.. выход, конечно, есть и другой.. сделать пустой дубликат таблицы и точно так же использовать LookupComboBox.. и не постить ее... Но как-то это.. не так ))
(* в любом случае пора домой *)
← →
Leonid Troyanovsky © (2006-03-22 17:50) [13]
> AndB © (22.03.06 17:44) [12]
> [11] вот-вот.. массив, то, другое, пятое.. 10-е
Без труда не выловишь рыбку.
--
Regards, LVT.
← →
Stakan © (2006-03-22 17:56) [14]AndB © (22.03.06 17:44) [12]
Можно сделать тупо в лобif valTab.Fields[0].AsInteger = CB_ERR then
как у меня
else
как обычно
Потому как
> Т.е., такое число только одно.
← →
Рамиль © (2006-03-22 18:00) [15]
> Можно сделать тупо в лоб
> if valTab.Fields[0].AsInteger = CB_ERR then
> как у меня
> else
> как обычно
А обратно? Как узнать, указатель там или просто число?
← →
Stakan © (2006-03-22 18:07) [16]Рамиль © (22.03.06 18:00) [15]
Вопрос конечно интересный :)
Опять придётся приседать. Многое зависит от конкретных условий задачи
← →
Leonid Troyanovsky © (2006-03-22 19:47) [17]
> Stakan © (22.03.06 17:56) [14]
> Можно сделать тупо в лоб
> if valTab.Fields[0].AsInteger = CB_ERR then
Не, не совсем так, т.е. выберем число, которое будет
означать -1, скажем, $7FFFFFFF и будем сохранять его
вместо -1. Ну и, соо-сно, читая - преобразовывать в -1.
Понятно, что среди данных 7FFFFFFF быть не должно.
--
Regards, LVT.
← →
AndB © (2006-03-23 08:11) [18]to [17]
в том и дело, что число не одно.. )) а,, скажем,... каждое любое.. Список (напр) из 10 пунктов.. из них два/пять/семь/n < 0.. Каждому "псевдоним" придумывать? Или массивы или лукапные... коли по простому (но почему?) не получается.. (сорри за up)
← →
Leonid Troyanovsky © (2006-03-23 08:43) [19]
> AndB © (23.03.06 08:11) [18]
> в том и дело, что число не одно.. )) а,, скажем,... каждое
> любое.. Список (напр) из 10 пунктов.. из них два/пять/семь/n
> < 0.. Каждому "псевдоним" придумывать? Или массивы или лукапные.
> .. коли по простому (но почему?) не получается..
Всем - не надо. В кодировании нуждается только одно число: -1.
А, вообще-то, за время взаимной переписки можно было бы
сделать не один, а несколько owner draw combobox с кучей
дополнительной функциональности или, скажем, data aware.
--
Regards, LVT.
← →
Lexer © (2006-03-23 10:03) [20]В свое время при переходе с D4 на D7 сталкнулся с такой же проблемой, решил так:
{Fix error for D7 - ComboBox.Item.Objects[i] = -1}
function GetComboBoxValue(Sender: TComboBox): Integer;
begin
Result := iUnAssignedItem;
with Sender do
if ItemIndex <> iUnAssignedItem then
Result := Perform(CB_GETITEMDATA, ItemIndex, 0);
end;
function GetComboBoxValueByIndex(Sender: TComboBox; ItemIndex: Integer): Integer;
begin
Result := iUnAssignedItem;
if ItemIndex <> iUnAssignedItem then
Result := Sender.Perform(CB_GETITEMDATA, ItemIndex, 0);
end;
Хотя в последствии отказался от этого и спользовал вместо -1, не используемое в моих задачах число.
← →
Рамиль © (2006-03-23 10:32) [21]Да можно банально создать дополнительно TStringList и все. Если сортировка не нужна, будет нормально.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c