Консультация № 182859
16.04.2011, 09:22
48.89 руб.
0 14 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
В delphi 7 мне необходимо реализовать учебник. Т.е. слева меню с главами, справа текст. Меню думаю реализовать с помощью treeview, а текст в memo. Но как переключать текст в memo при смене элемента в treeview? Или может другой компонент для этого дела посоветуете?

Обсуждение

Неизвестный
16.04.2011, 10:15
общий
Адресаты:
Посмотрите в сторону события onClick:
Цитата: http://programmersforum.ru/showthread.php?t=122473
Имеется компонент Treeview, данные берутся для него из таблицы базы.
Имеется процедура получения параметра StateIndex выбранного узла в дереве: (OnClick компоненнта TreeView1)
Код:

procedure TSwitch_streetForm.TreeView1Click(Sender: TObject);
var
sel: integer;
begin
sel:=TreeView1.Selected.StateIndex;
if sel=2 then
begin
sButton2.Enabled:=false;
sButton3.Enabled:=false;
sButton4.Enabled:=false;
sButton5.Enabled:=true;
sButton6.Enabled:=true
end
else
begin
sButton2.Enabled:=true;
sButton3.Enabled:=true;
sButton4.Enabled:=true;
sButton5.Enabled:=false;
sButton6.Enabled:=false;
end;
end;

Проблема в том, что если щелкнуть не по узлу, а, например, развернуть узел или щелкнуть по пустому месту компонента, то вылетает, естественно, ошибка на строке sel:=TreeView1.Selected.StateIndex; Как это можно исправить? Подскажите, пожалуйста. Пока в голову ничего не пришло((

Элементарно, Ватсон
Введите проверочку
Код:
if TreeView1.Selected=nil then
exit;



И вот эта тем, думаю, будет полезна:TreeView события, от клавиатуры
давно
Профессор
230118
3054
16.04.2011, 13:47
общий
Адресаты:
Используйте событие TreeView1Change. Оно наступает при смене элемента.
давно
Специалист
742
345
16.04.2011, 16:49
общий
А текст где хранить и как его менять в зависимости от элемента в treeview? (там много глав)
давно
Профессор
230118
3054
16.04.2011, 16:56
общий
Адресаты:
В файле каком-нибудь.
Неизвестный
16.04.2011, 21:23
общий
Адресаты:
Если тексты хранить в файлах, то ниже приведен пример кода:

procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.Items[0].Data:=PChar('Chapter1.txt');
TreeView1.Items[1].Data:=PChar('Chapter2.txt');
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
Memo1.Lines.LoadFromFile(PChar(Node.Data));
end;
давно
Специалист
742
345
17.04.2011, 17:25
общий
В строке
Memo1.Lines.LoadFromFile(PChar(Node.Data));
Вылазит ошибка Cannot open file (текстовые файлы в текущем каталоге с программой)
Неизвестный
17.04.2011, 18:33
общий
Адресаты:
У меня в Delphi 7 все работало.
Projects.rar (175.9 кб)
давно
Специалист
742
345
17.04.2011, 18:53
общий
Понял почему не работает. Дело в том, что у меня в treeview в item'ax есть subitem'ы - поэтому и не работает. А как с subitem'амами сделать чтобы работало?
Неизвестный
17.04.2011, 19:11
общий
Адресаты:
Не важно есть subitem'ы или нет. Важно связан ли узел с текстовыи файлом. Можно организовать проверку типа:

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if Node.Data<>nil then
if Fileexists(PChar(Node.Data) then
Memo1.Lines.LoadFromFile(PChar(Node.Data));
end;



давно
Специалист
742
345
17.04.2011, 21:14
общий
не знаю что произошло с проектом, ничего не менял(перезашёл просто), но сейчас заработало! (с проверкой и без проверки работает нормально, хотя раньше я в отладчике смотрел - Node был равен nil)
давно
Специалист
742
345
19.04.2011, 06:35
общий
Совсем забыл - у меня же ещё в тексте рисунки есть, в memo я так понимаю их не загрузить - какой компонент для этого можно использовать? (текст с рисунками в word'e)
давно
Мастер-Эксперт
425
4118
20.04.2011, 11:30
общий
Адресаты:
В каждом тексте по одной картинке или по нескольку?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Специалист
742
345
20.04.2011, 17:55
общий
Адресаты:
По-разному. Есть тексты с одной картинкой (или вообще без), а есть с несколькими.
давно
Мастер-Эксперт
425
4118
21.04.2011, 08:37
общий
Адресаты:
Тогда я Вам предлагаю немножко другой способ отображения документов. На вкладке "Internet" есть компонент TWebBrowser. Вы переводите все Ваши вордовские документы в HTML формат и открываете их с помощью этого компонента:
Код:
WebBrowser1.Navigate('file:///диск:/полный/путь/к_документу.html');

По всем основным элементам форматирования веб-документ нисколько не отличается от вордовских документов. Конечно, один-в-один с вордовским он выглядеть не будет, но жирный шрифт, подчёркивание, таблицы, заголовки, картинки, списки и т.п. там применяются и имеют тот же самый (почти ) вид. Попробуйте.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа