Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit uMain;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
- System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
- Vcl.StdCtrls, Vcl.Menus, Vcl.ComCtrls, uAlgo;
- type
- TMainForm = class(TForm)
- tvTree: TTreeView;
- mmMainMenu: TMainMenu;
- miHelp: TMenuItem;
- miAbout: TMenuItem;
- eKey: TEdit;
- bCreate: TButton;
- bAdd: TButton;
- bRemove: TButton;
- bLength: TButton;
- pmPopupMenu: TPopupMenu;
- laAnswer: TLabel;
- bClear: TButton;
- procedure DisplayTree(TreeNode: TTreeNode; Node: PNode);
- procedure bCreateClick(Sender: TObject);
- procedure eKeyChange(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure bAddClick(Sender: TObject);
- procedure bRemoveClick(Sender: TObject);
- procedure bLengthClick(Sender: TObject);
- procedure miHelpClick(Sender: TObject);
- procedure miAboutClick(Sender: TObject);
- procedure bClearClick(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- Root: PNode;
- implementation
- {$R *.dfm}
- procedure TMainForm.DisplayTree(TreeNode: TTreeNode; Node: PNode);
- var
- NewNode: TTreeNode;
- begin
- if Node <> nil then
- begin
- NewNode := tvTree.Items.AddChild(TreeNode, IntToStr(Node.Key));
- DisplayTree(NewNode, Node.Right);
- DisplayTree(NewNode, Node.Left);
- end;
- end;
- procedure TMainForm.bClearClick(Sender: TObject);
- begin
- DeleteAll(Root);
- Root := nil;
- tvTree.Items.Clear;
- bClear.Enabled := False;
- bLength.Enabled := False;
- laAnswer.Caption := '';
- end;
- procedure TMainForm.bCreateClick(Sender: TObject);
- begin
- New(Root);
- Root.Left := nil;
- Root.Right := nil;
- Root.Key := StrToInt(eKey.Text);
- tvTree.Items.Clear;
- DisplayTree(nil, Root);
- tvTree.FullExpand;
- bLength.Enabled := True;
- bClear.Enabled := True;
- eKey.Text := '';
- eKey.SetFocus;
- end;
- procedure TMainForm.bLengthClick(Sender: TObject);
- var
- Length: Byte;
- begin
- Length := MaxDepth(Root.Left) + MaxDepth(Root.Right);
- if Length <> 0 then
- Dec(Length);
- laAnswer.Caption := 'Max length between nodes with different amount of сhilds: '
- + IntToStr(Length);
- laAnswer.Width := 150;
- bLength.Enabled := False;
- end;
- procedure TMainForm.bAddClick(Sender: TObject);
- begin
- if not Exists(Root, StrToInt(eKey.Text)) then
- begin
- Root := Add(Root, StrToInt(eKey.Text));
- laAnswer.Caption := '';
- bLength.Enabled := True;
- bClear.Enabled := True;
- end
- else
- MessageDlg('This element already exists.',
- mtError, [mbOK], 0);
- tvTree.Items.Clear;
- DisplayTree(nil, Root);
- tvTree.FullExpand;
- eKey.Text := '';
- eKey.SetFocus;
- end;
- procedure TMainForm.bRemoveClick(Sender: TObject);
- begin
- if Exists(Root, StrToInt(eKey.Text)) then
- begin
- Root := Remove(Root, StrToInt(eKey.Text));
- laAnswer.Caption := '';
- if Root = nil then
- begin
- bLength.Enabled := False;
- bClear.Enabled := False;
- end
- else
- bLength.Enabled := True;
- end
- else
- MessageDlg('There are no such elements in the tree.',
- mtError, [mbOK], 0);
- tvTree.Items.Clear;
- DisplayTree(nil, Root);
- tvTree.FullExpand;
- eKey.Text := '';
- eKey.SetFocus;
- end;
- procedure TMainForm.eKeyChange(Sender: TObject);
- begin
- if Length(eKey.Text) > 0 then
- if Root = nil then
- bCreate.Enabled := True
- else
- begin
- bAdd.Enabled := True;
- bRemove.Enabled := True;
- end
- else
- begin
- bCreate.Enabled := False;
- bAdd.Enabled := False;
- bRemove.Enabled := False;
- end;
- end;
- procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- if MessageDlg('Are you sure to close the program?', mtConfirmation,
- mbYesNo, 0) = mrYes then
- CanClose := True
- else
- CanClose := False;
- end;
- procedure TMainForm.FormCreate(Sender: TObject);
- begin
- Root := nil;
- end;
- procedure TMainForm.miAboutClick(Sender: TObject);
- begin
- ShowMessage('Zhenya Yakubovich, 851001');
- end;
- procedure TMainForm.miHelpClick(Sender: TObject);
- begin
- ShowMessage('This program allows you to:' + #13#10 +
- ' - view tree;' + #13#10 +
- ' - build an empty tree;' + #13#10 +
- ' - add new items;' + #13#10 +
- ' - delete specified items;' + #13#10 +
- ' - find max length of path between items' + #13#10 +
- ' with different amount of childs.');
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement