|
Вопрос # 2 812/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
На форме имеются компоненты: TreeView, Image1 и Memo.
В TreeView уже существует дерево каталогов с объектами при нажатии на которые в Memo выводится текст из файлов (*dec), а в Image соответствующее изображение изображение (*jpg).
Мне необходимо организовать возможность добавления в TreeView новые объекты и для них добавлять текстовые файлы и изображения.
Фрагмент кода как реализовано отображение текста и картинок представлен ниже. (Буду благодарен за способ по его упрощению).
Помогите пожалуйста уважаемые эксперты.
Приложение: Переключить в обычный режим- procedure TForm2.TreeView1Click(Sender: TObject);
- begin
-
- if
- treeview1.Items.Item[1].Selected=true
- then
- begin
- Memo1.lines.LoadFromFile('Data1-1.dec');
- Image1.Picture.LoadFromFile('ImageSamsung1.jpg');
- end;
-
- if
- treeview1.Items.Item[2].Selected=true
- then
- begin
- Memo1.lines.LoadFromFile('Data1-2.dec');
- Image1.Picture.LoadFromFile('ImageSamsung2.jpg');
- end;
-
-
 |
Вопрос задал: Romanov (статус: Посетитель)
Вопрос отправлен: 19 мая 2009, 13:48
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Чтобы не заморачиваться со свойством Data, можно написать свой класс-наследник от TTreeNode, в котором будут соответствующие свойства.
type
TMyNode = class(TTreeNode)
private
FTextFile: string;
FImageFile: string;
public
property TextFile: string read FTextFile write FTextFile;
property ImageFile: string read FImageFile write FImageFile;
end;
На событие TreeView.OnCreateNodeClass подставлять этот класс.
procedure TForm2.TreeViewCreateNodeClass(Sender: TCustomTreeView;
var NodeClass: TTreeNodeClass);
begin
NodeClass:= TMyNode;
end;
Затем, создание нового Node:
function TForm2.CreateNewNode(AParentNode: TTreeNode;
const ACaption, ATextFile, AImageFile: string): TMyNode;
begin
Result:= TMyNode(TreeView.Items.AddChild(AParentNode, ACaption));
Result.TextFile:= ATextFile;
Result.ImageFile:= AImageFile;
end;
Далее вся работа с такими нодами будет через приведение типов
procedure TForm2.TreeView1Click(Sender: TObject);
begin
if Assigned(TreeView.Selected)
then begin
Memo1.Lines.LoadFromFile(TMyNode(TreeView.Selected).TextFile);
Image1.Picture.LoadFromFile(TMyNode(TreeView.Selected).ImageFile);
// Ахтунг! Здесь нет отлова ошибок ввода/вывода!
end;
end;
Ну вот, типа как-то так.
Ахтунг! Код не отлаживал, писал прямо в браузере!
Прежде чем копипастить к себе в прогу, пойми, как тут что работает.
А то тут один товарищ не понял... :))
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 19 мая 2009, 14:55
|
Мини-форум вопроса
Всего сообщений: 35; последнее сообщение — 20 мая 2009, 18:23; участников в обсуждении: 3.
Страницы: [« Предыдущая] [1] [2]
|
Вадим К (статус: Академик), 20 мая 2009, 15:29 [#21]:
Мне кажеться, что Вам должно быть более понятно, что должно происходить. Задача то Ваша.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 20 мая 2009, 15:29 [#22]:
Цитата:
но поясни что должно происходить при клике на TreeView ?
Ну ёпрст! Посмотри ответ на вопрос-то!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Romanov (статус: Посетитель), 20 мая 2009, 16:27 [#23]:
Но при клике ничего не происходит! Разве что можно изменить название каталога или объекта. Где должны храниться файлы (тексты и изображения)?
По идеи нужно кликом (или кнопкой) добавлять новый объект в TreeView и присвоить к нему файлы которые будут выводиться на Memo и Image.
|
|
Вадим К (статус: Академик), 20 мая 2009, 16:32 [#24]:
Что бы что то где то появилось, надо вначале его туда положить...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Romanov (статус: Посетитель), 20 мая 2009, 16:39 [#25]:
Так я и спрашиваю где должны хорониться файлы для вывода?
|
|
Вадим К (статус: Академик), 20 мая 2009, 17:01 [#26]:
файлы не надо хоронить.
а вот хранить - там где удобно, главное путь к ним правильно указать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 20 мая 2009, 17:11 [#27]:
Цитата:
Но при клике ничего не происходит!
При клике на чём?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Romanov (статус: Посетитель), 20 мая 2009, 17:13 [#28]:
А можно как нибудь при при создании (во время работы приложения) объекта в дереве указывать эти пути к файлам?
З.Ы. Пардон за "хоронить"
|
|
Romanov (статус: Посетитель), 20 мая 2009, 17:14 [#29]:
min@y™
На TreeView
|
|
min@y™ (статус: Доктор наук), 20 мая 2009, 17:34 [#30]:
Цитата:
На TreeView
Ээээ, так не пойдёт! А кто говорил:
Цитата:
В TreeView уже существует дерево каталогов с объектами при нажатии на которые в Memo выводится текст из файлов (*dec), а в Image соответствующее изображение изображение (*jpg).
Стало быть, при клике на TreeView нужно показывать информацию (текст и картинку) выделенного узла дерева, а отнюдь не добавлять новый узел.
Предлагаю добавление новых узлов сделать по кнопке "Добавить".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Romanov (статус: Посетитель), 20 мая 2009, 17:55 [#31]:
Да все правильно. Изначально существовало дерево с узлами(с привязаными к ним текстом и изображениями) В вопросе представлен кусочек кода как это было реализовано. Но так как Вадим К. заверил что с таким подходом далеко не уйдешь пришлось отказаться от него. Но если есть идеи как сохранить прежнюю структуру... Кнопочка "Добавить" звучит славно
|
|
Вадим К (статус: Академик), 20 мая 2009, 17:57 [#32]:
кто то тут недавно задавал вопрос, как сохранять/загружать информацию с TreeView...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 20 мая 2009, 18:04 [#33]:
Цитата:
Но так как Вадим К. заверил что с таким подходом далеко не уйдешь пришлось отказаться от него.
Ты чего, мой ответ не читал? Или я чего-то не догоняю?
В ответе же есть реакция на клик и добавление нового узла.
Осталось только сделать реакцию на клик по кнопке "Добавить", т.е. запихнуть в этот обработчик вызов метода TForm2.CreateNewNode().
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 20 мая 2009, 18:06 [#34]:
Наверно проблема в том, что TreeView уже был заполнент в дизайнтайме....
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 20 мая 2009, 18:23 [#35]:
Цитата:
Наверно проблема в том, что TreeView уже был заполнент в дизайнтайме....
Да, ты прав. Его надо в дизантайме очистить и заполнять только в рантайме.
Если честно, мне этот флейм на 4 страницы уже надоел.
Чую, надо просто написать аффтару готовую программу, иначе не отстанет. ))
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|