![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Новые переменные [D6, Win95/98]
Ramzes © (2002-11-03 18:06:00)Как не создавая новой компоненты, добавить в старую новые переменные:
Например, мне нужно добавить переменную Size пита Longint в ListView1.Items.Item[1], чтобы получилось ListView1.Items.Item[1].Size
Заранее спасибо за ответ.
Юрий Зотов (2002-11-03 22:13:00) [1]> Ramzes
Без переделки или написания наследника - никак. Используйте свойство Data, он специально для того и сделано.
TTCustomDelphiMaster (2002-11-03 21:48:00) [2]Тут для TreeView. Но для ListView тоже самое будет
_Александр_ (09.08.02 04:58)
Думаю,одним integer-ом дело не обойдётся :)...
Так, что сразу такой ответик:
1. Создаёшь новый тип
type
...
TMyRec = record
SomeInt : integer;
SomeByte : byte;
SomeString : string[50];
SomeFloat : real;
end;
TPMyRec = ^TMyRec;
...
2. Запись в Data (а быть точнее - создаём переменную нужного нам типа и передаём её адрес полю Data):
var
P : TPMyRec;
begin
...
New(P);
P^.SomeInt := 123;
P^.SomeByte := 255;
P^.SomeString := "abceklmn";
P^.SomeFloat := 3.14;
Твой_3Ноде.Data := P;
...
end;
3. Раз переменные создавал - нужно их и прибивать:
В событии OnDeletion TreeView-а:
if TTreeNode.Data <> nil then
Dispose(TPMyRec(TTreeNode.Data));
4. Чтение/запись значений
MyInt := TPMyRec(ListView1.Items[0].Data)^.SomeInt;
TPMyRec(ListView1.Items[0].Data)^.SomeByte := NewByte;
Ramzes (2002-11-03 21:20:00) [3]Что-то я не очень понимаю.
А если, например, мне нужно добавить переменную Attr типа Byte и Name типа String в ListView1.Items.Item[1], чтобы получилось ListView1.Items.Item[1].Attr?
Как это получить?
TTCustomDelphiMaster (2002-11-03 21:06:00) [4]ListView1.Items.Item[0].Data := Pointer(i);
i := LongInt(ListView1.Items.Item[0].Data);
Сатир (2002-11-03 20:49:00) [5]TSizeListBox = class (TListBox)
function GetSize (const AIndex:integer):longint;
public
property Size[const AIndex: integer]:longint
read Getsize ;default;
end;
implementation
function TSizeListBox.GetSize(const AIndex:integer):longint;
begin
if assigned(self.items.item[AIndex]) then
Result:= sizeof(self.items.item[AIndex])
else raise Exeception.Create("the value isn""t assigned!")
end;
end.
add: директива default позволяет обращаться к свойству таким макаром:
SizeListBox[1]
или
SizeListBox.size[1]
Ramzes (2002-11-03 20:05:00) [6]Или способ как получить новую переменную ListView1.Items.Item[1].Size типа Longint
Ramzes (2002-11-03 20:04:00) [7]А пример можно?
TTCustomDelphiMaster (2002-11-03 18:55:00) [8]У TListItem есть замечательное свойство Data. С помощью него можно добавить все что угодно.
BOA_KAA (2002-11-03 18:14:00) [9]Я бы не советовал этого делать, но если нужно, то через New Component вызываешь исходник, переделываешь и вперед