Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 393
от 22.02.2006, 10:57

Администратор:Калашников О.А.
В рассылке:Подписчиков: 258, Экспертов: 63
В номере:Вопросов: 1, Ответов: 2


Вопрос № 35568: Здравствуйте, уважаемые. В свете последних 2 лет не имею возможности посвящать время чтению рассылок/ответам на вопросы, к сожалению, поэтому перехожу из армии экспертов в армию читателей/любопытных. Итак, дело в следующем. Так как ...

Вопрос № 35.568
Здравствуйте, уважаемые.

В свете последних 2 лет не имею возможности посвящать время чтению рассылок/ответам на вопросы, к сожалению, поэтому перехожу из армии экспертов в армию читателей/любопытных.

Итак, дело в следующем. Так как программирование на Delphi -- моё хобби, то пишу я не мало (хотя и не много). Но, видимо, из-за того, что я -- самоучка, я пропустил что-то важное в азах программирования. Конкретная проблема -- добавление свойства к имеющемуся компоненту.
Нужно к TTreeView.Item[]: TTreeNode добавить некое свойство FileData:TSearchRec, либо 3 свойства типа integer, и переписать 2 процедуры LoadFromFile и SaveToFile (дабы записывать свойства файла и использовать TReeView в качестве дерева файловой системы). Но Вся фишка в том, что TCustomTreeView.FTreeNodes: TTreeNodes находится в разделе private. Надо ли мне для осуществления задуманного переписывать сам модуль, или же есть другой способ добавить свойство ?
До этого экспериментировал с дублированием данных дерева в TListView, TStrings с записью уже туда всех свойств, но это несколько неудобно, хотя и облегчает навигацию и поиск.
Есть, конечно, альтернативный более простой способ, например, в свойство Item.Text дописывать через разделитель данные файла, а при выводе переписать процедуру OnCustomDraw "обрезав" вывод последних. Таким образом, кстати, решится проблема сохранения/загрузки дерева, но это не то, что я хочу получить.
И еще. Есть у этих Item[] свойство Data: Pointer. Так и не понял, к чему оно. Может через него можно всё это провернуть ?
Ещё можно конвертировать 3 целых числа (Size, Time, Attr из TSearchRec) в одно и присвоить его свойству StateImages, которым я не пользуюсь. Но это тоже беспонтово.
Вот такие вот дела. Ну, в общем, поможите, чем сумеете. Спешить некуда, меньше буду писать - больше курсовиков к зачёту сделаю.
Заранее благодарю.
Отправлен: 16.02.2006, 18:45
Вопрос задал: Полховский Александр Владимирович (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Полховский Александр Владимирович!

свойство Items.Data - это указатель на структуру данных, которую придумываете сами
Как с ней работать в приложении (выдержка из статьи)
Однако я стараюсь этим не пользоваться
Учитывая то что картинки замедляют вывод дерева, то я выключаю отображение картинок и использую Node.ImageIndex, Node.OverleyIndex, Node.StatusIndex как параметры типа Integer своему усмотрению

Приложение:

Ответ отправил: Архангельский Андрей Германович (статус: Студент)
Отправлен: 16.02.2006, 19:03
Оценка за ответ: 5
Комментарий оценки:
Спасибо за объяснение о .Data и за статью. Действительно, я совсем забыл об .OverlayIndex, таким образом, в моём распоряжении уже 2 переменные integer. Думаю, проблем конвертации 2 переменых integer в одну у меня не будет. Ещё раз благодарю. В том числе и за оперативность.

Отвечает: sir henry
Здравствуйте, Полховский Александр Владимирович!
Все что начинается в компоненте на букву F трогать нельзя. Эти поля не зря находятся в секции Private. Дело в том, что занесение данных в эти поля зачастую связаны с дополнительными действиями. Поэтому Вы можете видеть, что свойство, которое связано с полем Fxxxxx, имеет отдельную функцию read и отдельную write.
Если Вам нужно добавить не заморачиваясь какие-то дополнительные свойства, Вы можете создать объект-потомок от TTreeView и добавить к нему нужные Вам свойства.
Можно действительно воспользоваться свойством Data. Поскольку это Pointer, то Вы можете создать свою дополнительную структуру FileData и присвоить указатель на него этому свойству Data.
Type
PSearchRec = ^TSearchRec;
var
FileData: PSearchRec;
Begin
...
New(FileData); {Выделяем память}
TreeView1.Items[1].Date:=FileData; {Присваиваем выделеную память указателю Data}
TreeView1.Items[1].Date^.Size:=11;
TreeView1.Items[1].Date^.Time:=10;
TreeView1.Items[1].Date^.Attr:=8;
...
End;
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.02.2006, 20:19


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.14 (бета) от 09.02.2006
Яндекс Rambler's Top100

В избранное