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

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

Новые переменные [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 вызываешь исходник, переделываешь и вперед


Наверх

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