Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » TreeView

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

IsakovAI

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Проблема с TreeView при изучении Delphi XE5 (и Дельфи вообще, то есть я чайник)
 
Поискал на форуме мою проблему по TreeView, ничего не нашёл.
Может кто поможет?
Взял пример по TreeView из: Флёнов М.Е. - Библия Delphi (3-е издание) - 2011.
В этом примере данные ветвей дерева пишутся в файл tree.dat. Файл eхе из примера работает. Запускаю проект из Флёнова по F9 из Delphi XE5 - всё работает.
Создаю свой проект ежедневника с БД Access (для изучения Дельфи).
Тематика задач, записываемых в ежедневник должна браться из дерева TreeView  
и затем писаться в соответствующее поле таблицы БД.
Кладу на ту же форму все элементы с примера Флёнова, копирую логику в код и ...
не работает. Не читает и не пишет файл tree.dat.
Отладка показывает, что процедурам TTreeViewForm.FormShow и TTreeViewForm.FormClose, (где дерево должно читаться из tree.dat и писаться в него) управление вообще не передаётся.
Где же грабли? Я ведь всё честно скопировал...

Всего записей: 10 | Зарегистр. 15-08-2009 | Отправлено: 01:12 25-03-2014
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IsakovAI
 
Ошибка в 17 строке.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 01:59 25-03-2014
IsakovAI

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нет в 17 строке всё правильно
Ночью не смог сообразить как лучше вставить код. Думал, можно прикрепить файл.
 
Код моего ежедневника
 

Код:
 
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.Grids,
  Vcl.DBGrids, Data.DB, Data.Win.ADODB, Vcl.DBCtrls, Vcl.ExtCtrls,
  Vcl.Buttons, Vcl.ImgList;
 
type
  TTreeViewForm = class(VCL.Forms.TForm)
    TreeView1: TTreeView;
    lblTree: TLabel;
    DBGrid1: TDBGrid;
    DBMemo1: TDBMemo;
    Label1: TLabel;
    cmdNewRec: TButton;
    Button3: TButton;
    cmdAbout: TButton;
    Label2: TLabel;
    MonthCalendar1: TMonthCalendar;
    Label3: TLabel;
    Button5: TButton;
    DBNavigator1: TDBNavigator;
    AddButton: TBitBtn;
    AddChildButton: TBitBtn;
    DelButton: TBitBtn;
    EditButton: TBitBtn;
    ImageList1: TImageList;
    procedure AddButtonClick(Sender: TObject);
    procedure DelButtonClick(Sender: TObject);
    procedure EditButtonClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure AddChildButtonClick(Sender: TObject);
    procedure cmdAboutClick(Sender: TObject);
    procedure cmdNewRecClick(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  TreeViewForm: TTreeViewForm;
 
implementation
 
{$R *.dfm}
 
uses Unit2, ABOUT, Unit4;
procedure TTreeViewForm.AddButtonClick(Sender: TObject);
 var
 CaptionStr:String;
 NewNode:TTreeNode;
begin
  CaptionStr:='';
  if not InputQuery('Ввод имени ветки', 'Введите заголовок ветки',CaptionStr) then exit;
  NewNode:=TreeView1.Items.Add(TreeView1.Selected, CaptionStr);
  if NewNode.Parent<>nil then
  NewNode.ImageIndex:=1;
end;
procedure TTreeViewForm.AddChildButtonClick(Sender: TObject);
var
 CaptionStr:String;
 NewNode:TTreeNode;
begin
 CaptionStr:='';
 if not InputQuery('Ввод имени веточки', 'Введите заголовок веточки',CaptionStr) then exit;
 NewNode:=TreeView1.Items.AddChild(TreeView1.Selected, CaptionStr);
 if NewNode.Parent<>nil then
  NewNode.ImageIndex:=1;
end;
procedure TTreeViewForm.cmdAboutClick(Sender: TObject);
begin
  AboutBox.Show
end;
procedure TTreeViewForm.cmdNewRecClick(Sender: TObject);
begin
Form4.Show;
end;
procedure TTreeViewForm.DelButtonClick(Sender: TObject);
begin
 if TreeView1.Selected<>nil then
  TreeView1.Items.Delete(TreeView1.Selected);
end;
procedure TTreeViewForm.EditButtonClick(Sender: TObject);
var
 CaptionStr:String;
begin
 CaptionStr:='';
 if not InputQuery('Ввод имени элемента дерева', 'Введите заголовок элемента дерева',CaptionStr) then exit;
 TreeView1.Selected.Text:=CaptionStr;
end;
procedure TTreeViewForm.FormShow(Sender: TObject);
var
 i:Integer;
begin
 if FileExists(ExtractFilePath(Application.ExeName)+'tree.txt') then
  TreeView1.LoadFromFile(ExtractFilePath(Application.ExeName)+'tree.txt');
 for i:=0 to TreeView1.Items.Count-1 do
  begin
   if TreeView1.Items[i].Parent=nil then
    TreeView1.Items[i].ImageIndex:=0
   else
    TreeView1.Items[ i].ImageIndex:=1;
  end;
end;
procedure TTreeViewForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 TreeView1.SaveToFile(ExtractFilePath(Application.ExeName)+'tree.txt');
end;
end.  

Всего записей: 10 | Зарегистр. 15-08-2009 | Отправлено: 16:59 25-03-2014
Dmitry

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Отладка показывает, что процедурам TTreeViewForm.FormShow и TTreeViewForm.FormClose, (где дерево должно читаться из tree.dat и писаться в него) управление вообще не передаётся.  

 
А у самой формы эти обработчики событий назначены?

Всего записей: 81 | Зарегистр. 24-09-2003 | Отправлено: 17:06 27-03-2014
IsakovAI

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо Dmitry!
Вот я идиот. Правильно, "ура, заработало!" (с) Кот Матроскин

Всего записей: 10 | Зарегистр. 15-08-2009 | Отправлено: 00:07 28-03-2014
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IsakovAI
Ну расскажи тогда, если не сложно, как код обработчиков событий появился в твоей программе?

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 01:25 28-03-2014
Dmitry

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ну расскажи тогда, если не сложно, как код обработчиков событий появился в твоей программе?

Копипаст?

Всего записей: 81 | Зарегистр. 24-09-2003 | Отправлено: 08:26 28-03-2014
IsakovAI

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Конечно, ctrl+c, ctrl+v.  
Не увидел, что нет обработчиков, какое-то затмение на меня нашло, ведь просто перещёлкнуть на вкладку Events и ВНИМАТЕЛЬНО посмотреть. Это у меня происходит переход с VBA на Дельфи.

Всего записей: 10 | Зарегистр. 15-08-2009 | Отправлено: 21:09 28-03-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » TreeView


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru