Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ListBox и список значений: как соединить? [D6, D7, Win2k, WinXP]


malamba ©   (2005-07-01 11:15:00) 

Наверное, каждый сталкивался в своей работе со списками значений (например:
Лена - 1 руб
Света - 15 руб
Вася - 2 руб
и т.д.)

Хотелось бы занести этот список в ListBox.
Так, чтобы в LIstBox был список Лена, Света, Вася...
А при выборе какого-нибудь значения можно было бы получить и остальное.
Выбрали Лену, узнали про 1 руб и т.д.

Можно было идти со стороны, противоложной гландам, вводить доп. массив или стринглист и соединять их вместе.
Но хотелось бы это сделать средствами самого ListBox-а.

Подскажите, может кто похоже уже делал?


GrayFace   (2005-07-02 13:33:00) [1]

UniqueString(s), возможно, не нужен.


GrayFace   (2005-07-02 13:23:00) [2]

malamba   (01.07.05 14:03) [15]
и затем еще FreeMem, Delete, когда просто
ListBoxPreparat.Items.Delete(i); вместе с объектом.

А вот тут будет утечка памяти.
Если пихать в ListBox строки, то надо примерно так:

Засовывание (строки s):
 UniqueString(s);
 ListBox1.AddItem('Маша',TObject(s));
 pointer(s):=nil;

Удаление:
var s:string;
begin
  pointer(s):=ListBox1.Items.Objects[0];
  s:='';
  ListBox1.Items.Delete(0);
end;


Dimous   (2005-07-01 15:10:00) [3]

malamba   (01.07.05 14:03) [15]
> Это уже извращение:
> три строчки  ( выделить память, заполнить, передать ) против одной доавить
> ListBox1.Items.AddObject('Лена', TObject('и не отдаст'));

Это не извращение, это правильно. Кроме того "TObject('и не отдаст')" - это не объект, а даже если бы и был объетом, то при удалении итема связанный с ним объект автоматически не освобождается...


Игорь Шевченко   (2005-07-01 14:55:00) [4]

malamba   (01.07.05 13:57) [14]


> У столбца в ListView нет свойства Visible.


Так можно завести те столбцы, значения которых надо показывать. А остальные значения не показывать.


malamba   (2005-07-01 14:03:00) [5]

GrayFace, не успел прочитать Ваш ответ.

Это уже извращение:
три строчки  ( выделить память, заполнить, передать ) против одной доавить
ListBox1.Items.AddObject('Лена', TObject('и не отдаст'));

и затем еще FreeMem, Delete, когда просто
ListBoxPreparat.Items.Delete(i); вместе с объектом.

Но за идею спасибо.


malamba   (2005-07-01 13:57:00) [6]

А как не показывать? У столбца в ListView нет свойства Visible.


GrayFace   (2005-07-01 13:13:00) [7]

Случайно нажал на отправить.
Добавляем:
p:=GetMemory(length(s));
CopyMemory(p,pointer(s),length(s));
ListBox1.Items.AddObject('Лена', TObject(p));


Убиваем:
FreeMem(ListBox1.Items.Objects[Index]);
Delete...


GrayFace   (2005-07-01 13:10:00) [8]

malamba   (01.07.05 11:15)
Лена - 1 руб
Света - 15 руб

Хорошо звучит :)
Digitman ©   (01.07.05 11:23) [3]
TObject(Pointer(1));

Почему же не TObject(1) ?
malamba   (01.07.05 11:45) [4]
С объектом понятно, а если второй значение - строковое, то можно ли так:

ListBox1.Items.AddObject('Лена', TObject('и ведь не отдала'));

Можно, например, так:
Добавление:
p:=GetMemory(length(s));
CopyMemory(p,pointer(s),length(s));


Игорь Шевченко   (2005-07-01 12:47:00) [9]


> там дальше служебные данные, которые не нужно показывать


Не показывай.


malamba   (2005-07-01 12:43:00) [10]

Запоздало: Игорь Шевченко ListView не проще ?

Нет, там дальше служебные данные, которые не нужно показывать.
Значение ключевого поля таблицы, если быть точным.
При выборе значения в ListBoxe сразу получаю без всяких заморочек ключ.


malamba   (2005-07-01 12:27:00) [11]

Да, с этим понятно, если второе значение integer, то можно так использовать.
Чудненько...

А никто не пробовал возиться с
ListBox.Items.Value; и
ListBox.Items.ValueFromIndex;

Они используются для отображения именно списков параметр = значение ( как в ini файлах), однако я нигде не встречал способов занесения таких данных в listbox.


Stakan   (2005-07-01 12:07:00) [12]

procedure TForm1.Button1Click(Sender: TObject);
begin
 ListBox1.Items.AddObject('Лена', TObject(PChar('И ведь не отдала')));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 ShowMessage(PChar(ListBox1.Items.Objects[0]));
end;


Игорь Шевченко   (2005-07-01 12:06:00) [13]

ListView не проще ?


Eraser   (2005-07-01 11:50:00) [14]

malamba   (01.07.05 11:45) [4]

Прийдётся объект создавать... или указатель на ShortString.


Digitman   (2005-07-01 11:46:00) [15]

нельзя


malamba   (2005-07-01 11:45:00) [16]

С объектом понятно, а если второй значение - строковое, то можно ли так:

ListBox1.Items.AddObject('Лена', TObject('и ведь не отдала'));


Digitman   (2005-07-01 11:23:00) [17]

with ListBox do
begin
 AddItem('Лена', TObject(Pointer(1));
 AddItem('Света', TObject(Pointer(15));
 AddItem('Вася', TObject(Pointer(2));
end;


Dimous   (2005-07-01 11:21:00) [18]

ListBox1.Items.AddObject('Лена', TObject(1));

Integer(ListBox1.Items.Objects[0]);


KilkennyCat   (2005-07-01 11:19:00) [19]

разделить визуально: ширина листбокса должна позволить вместить отображение только имен. :))


Наверх

Титульная страница Поиск, карта сайта Написать письмо