![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]разделить визуально: ширина листбокса должна позволить вместить отображение только имен. :))