Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1253022950
kostyl_kostyl
2009-09-15 17:55
2009.11.01
Не пойму почему ошибка при SetLetngth


15-1252159778
Ruzzz
2009-09-05 18:09
2009.11.01
Turbo Delphi не хочет компилировать .rc


15-1251105928
pasha_golub
2009-08-24 13:25
2009.11.01
Unit tests. Советы требуются


1-1222137558
Vitaliy_____
2008-09-23 06:39
2009.11.01
Установка приоритета процесса


15-1251664207
Юрий
2009-08-31 00:30
2009.11.01
С днем рождения ! 31 августа 2009 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский