Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

ListBox и список значений: как соединить?   Найти похожие ветки 

 
malamba   (2005-07-01 11:15) [0]

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

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

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

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


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

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


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

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

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


 
Digitman ©   (2005-07-01 11:23) [3]

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


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

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

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


 
Digitman ©   (2005-07-01 11:46) [5]

нельзя


 
Eraser ©   (2005-07-01 11:50) [6]

malamba   (01.07.05 11:45) [4]

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


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

ListView не проще ?


 
Stakan ©   (2005-07-01 12:07) [8]

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;


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

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

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

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


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

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

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


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


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


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


 
GrayFace ©   (2005-07-01 13:10) [12]

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));


 
GrayFace ©   (2005-07-01 13:13) [13]

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


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


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

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


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

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

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

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

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


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

malamba   (01.07.05 13:57) [14]


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


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


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

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

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


 
GrayFace ©   (2005-07-02 13:23) [18]

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;


 
GrayFace ©   (2005-07-02 13:33) [19]

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



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
14-1119638837
NightStranger
2005-06-24 22:47
2005.07.18
Оцените дизайн сайта


14-1119951449
begin...end
2005-06-28 13:37
2005.07.18
Ищется компонент для выбора папок


1-1119647298
мниор
2005-06-25 01:08
2005.07.18
DLL


3-1118139074
Ярослав
2005-06-07 14:11
2005.07.18
Предача списка в качестве параметра в ХП MS SQL


14-1119507619
MacroDenS
2005-06-23 10:20
2005.07.18
Dura lex, sed lex - Закон суров, но закон!