Форум: "Начинающим";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Вниз2 поля данных в ListBox Найти похожие ветки
← →
dmitry83-nv © (2009-09-14 13:51) [0]Доброго времени суток!
У меня такой вопрос:
Стандартный ListBox имеет 1 поле для хранения идентификаторов, а мне нужно 2.
for i:=1 to ADOTableWashServices.RecordCount do
Begin ListBox_WashServices.Items.AddObject(ADOTableWashServices.FieldByName("Name").As String, TObject(ADOTableWashServices.FieldByName("Id_Service").AsInteger));
ADOTableWashServices.Next;
end;
Таким образом я заполняю ListBox и в поле данных записываю Id, а мне нужно хранить еще колличество. Хотелось бы вариант без всяких дополнительных динамических массив, хэш таблиц и т.д. Может кто сталкивался, подскажите красивый вариант!
Заранее благодарен.
← →
DimaBr © (2009-09-14 14:34) [1]Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.
← →
DimaBr © (2009-09-14 14:35) [2]Используйте ListView
← →
Медвежонок Пятачок © (2009-09-14 14:40) [3]рекорд с нужным количеством полей.
и указатель на него, приведенный к TObject в качестве второго аргумента AddObject
← →
clickmaker © (2009-09-14 14:59) [4]кривой вариант, но, может, для данного случая подойдет.
интежер - 4 байта. Если и ид. и кол-во всегда влезут в 2 байта, то...
но лично я не советую. будущее может наступить быстрее, чем ожидается
← →
Медвежонок Пятачок © (2009-09-14 15:11) [5]Даже ежели будущее наступит завтра, то все равно TObject и указатель на рекорд будут занимать одинаковое количество байт
← →
Nutz (2009-09-14 15:20) [6]если задача позволяет, то можно так:
function CombineIDAndCount(ID, Count: Integer): TObject;
begin
with TSmallPoint(Result) do
begin
X := ID;
Y := COunt;
end;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.AddObject("A", CombineIDAndCount(1, 100));
ListBox1.Items.AddObject("B", CombineIDAndCount(2, 200));
end;
← →
Nutz (2009-09-14 15:21) [7]или же, как вариант:
{ TCustomItem }
PCustomItem = ^TCustomItem;
TCustomItem = packed record
ID, Count: Integer;
end;
{ TItem }
TItem = class
private
FItem: TCustomItem;
public
constructor Create(AID, ACount: Integer);
{ properties }
property Item: TCustomItem read FItem write FItem;
end;
{ TItem }
constructor TItem.Create(AID, ACount: Integer);
begin
with FItem do
begin
ID := AID;
Count := ACount;
end;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.AddObject("A", CombineIDAndCount(1, 100));
ListBox1.Items.AddObject("B", CombineIDAndCount(2, 200));
end;
← →
dmitry83-nv © (2009-09-14 16:24) [8]Спасибо за быструю помощь! Почему-то мне в голову не пришло использовать Record. Хороший вариант, можно сколько угодно полей привязать. В моем случае нужно 2 и в силу особенностей реальзации, а также того, что мне лень переделывать, мнре вполне подойдет вариант с комбинированием "CombineIDAndCount". Особое спасибо авторам этих двух вариантов.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c