Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.024 c
9-1111140209
qwe
2005-03-18 13:03
2005.07.18
3D-город (GlScene)


1-1119952704
SergZ
2005-06-28 13:58
2005.07.18
DevExpress


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


3-1118065913
Андрей (гость)
2005-06-06 17:51
2005.07.18
Создание отчета из DBGrid а


1-1120119358
mRodion
2005-06-30 12:15
2005.07.18
Прораммно менять фокусс ввода в форме




   Наверх