Advertisement
Guest User

Untitled

a guest
May 21st, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.68 KB | None | 0 0
  1. unit uMain;
  2.  
  3. interface
  4.  
  5. uses
  6.    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  7.    System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  8.    Vcl.StdCtrls, Vcl.Menus, Vcl.ComCtrls, uAlgo;
  9.  
  10. type
  11.    TMainForm = class(TForm)
  12.     tvTree: TTreeView;
  13.     mmMainMenu: TMainMenu;
  14.     miHelp: TMenuItem;
  15.     miAbout: TMenuItem;
  16.     eKey: TEdit;
  17.     bCreate: TButton;
  18.     bAdd: TButton;
  19.     bRemove: TButton;
  20.     bLength: TButton;
  21.     pmPopupMenu: TPopupMenu;
  22.     laAnswer: TLabel;
  23.     bClear: TButton;
  24.     procedure DisplayTree(TreeNode: TTreeNode; Node: PNode);
  25.     procedure bCreateClick(Sender: TObject);
  26.     procedure eKeyChange(Sender: TObject);
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure bAddClick(Sender: TObject);
  29.     procedure bRemoveClick(Sender: TObject);
  30.     procedure bLengthClick(Sender: TObject);
  31.     procedure miHelpClick(Sender: TObject);
  32.     procedure miAboutClick(Sender: TObject);
  33.     procedure bClearClick(Sender: TObject);
  34.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  35.    private
  36.     { Private declarations }
  37.    public
  38.     { Public declarations }
  39.    end;
  40.  
  41. var
  42.    MainForm: TMainForm;
  43.    Root: PNode;
  44.  
  45. implementation
  46.  
  47. {$R *.dfm}
  48.  
  49. procedure TMainForm.DisplayTree(TreeNode: TTreeNode; Node: PNode);
  50. var
  51.    NewNode: TTreeNode;
  52. begin
  53.    if Node <> nil then
  54.    begin
  55.       NewNode := tvTree.Items.AddChild(TreeNode, IntToStr(Node.Key));
  56.       DisplayTree(NewNode, Node.Right);
  57.       DisplayTree(NewNode, Node.Left);
  58.    end;
  59. end;
  60.  
  61. procedure TMainForm.bClearClick(Sender: TObject);
  62. begin
  63.    DeleteAll(Root);
  64.    Root := nil;
  65.    tvTree.Items.Clear;
  66.    bClear.Enabled := False;
  67.    bLength.Enabled := False;
  68.    laAnswer.Caption := '';
  69. end;
  70.  
  71. procedure TMainForm.bCreateClick(Sender: TObject);
  72. begin
  73.    New(Root);
  74.    Root.Left := nil;
  75.    Root.Right := nil;
  76.    Root.Key := StrToInt(eKey.Text);
  77.    tvTree.Items.Clear;
  78.    DisplayTree(nil, Root);
  79.    tvTree.FullExpand;
  80.    bLength.Enabled := True;
  81.    bClear.Enabled := True;
  82.    eKey.Text := '';
  83.    eKey.SetFocus;
  84. end;
  85.  
  86. procedure TMainForm.bLengthClick(Sender: TObject);
  87. var
  88.    Length: Byte;
  89. begin
  90.    Length := MaxDepth(Root.Left) + MaxDepth(Root.Right);
  91.    if Length <> 0 then
  92.       Dec(Length);
  93.    laAnswer.Caption := 'Max length between nodes with different amount of сhilds: '
  94.      + IntToStr(Length);
  95.    laAnswer.Width := 150;
  96.    bLength.Enabled := False;
  97. end;
  98.  
  99. procedure TMainForm.bAddClick(Sender: TObject);
  100. begin
  101.    if not Exists(Root, StrToInt(eKey.Text)) then
  102.    begin
  103.       Root := Add(Root, StrToInt(eKey.Text));
  104.       laAnswer.Caption := '';
  105.       bLength.Enabled := True;
  106.       bClear.Enabled := True;
  107.    end
  108.    else
  109.       MessageDlg('This element already exists.',
  110.         mtError, [mbOK], 0);
  111.    tvTree.Items.Clear;
  112.    DisplayTree(nil, Root);
  113.    tvTree.FullExpand;
  114.    eKey.Text := '';
  115.    eKey.SetFocus;
  116. end;
  117.  
  118. procedure TMainForm.bRemoveClick(Sender: TObject);
  119. begin
  120.    if Exists(Root, StrToInt(eKey.Text)) then
  121.    begin
  122.       Root := Remove(Root, StrToInt(eKey.Text));
  123.       laAnswer.Caption := '';
  124.       if Root = nil then
  125.       begin
  126.          bLength.Enabled := False;
  127.          bClear.Enabled := False;
  128.       end
  129.       else
  130.          bLength.Enabled := True;
  131.    end
  132.    else
  133.       MessageDlg('There are no such elements in the tree.',
  134.         mtError, [mbOK], 0);
  135.    tvTree.Items.Clear;
  136.    DisplayTree(nil, Root);
  137.    tvTree.FullExpand;
  138.    eKey.Text := '';
  139.    eKey.SetFocus;
  140. end;
  141.  
  142. procedure TMainForm.eKeyChange(Sender: TObject);
  143. begin
  144.    if Length(eKey.Text) > 0 then
  145.       if Root = nil then
  146.          bCreate.Enabled := True
  147.       else
  148.       begin
  149.          bAdd.Enabled := True;
  150.          bRemove.Enabled := True;
  151.       end
  152.    else
  153.    begin
  154.       bCreate.Enabled := False;
  155.       bAdd.Enabled := False;
  156.       bRemove.Enabled := False;
  157.    end;
  158. end;
  159.  
  160. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  161. begin
  162.    if MessageDlg('Are you sure to close the program?', mtConfirmation,
  163.      mbYesNo, 0) = mrYes then
  164.       CanClose := True
  165.    else
  166.       CanClose := False;
  167. end;
  168.  
  169. procedure TMainForm.FormCreate(Sender: TObject);
  170. begin
  171.    Root := nil;
  172. end;
  173.  
  174. procedure TMainForm.miAboutClick(Sender: TObject);
  175. begin
  176.    ShowMessage('Zhenya Yakubovich, 851001');
  177. end;
  178.  
  179. procedure TMainForm.miHelpClick(Sender: TObject);
  180. begin
  181.    ShowMessage('This program allows you to:' + #13#10 +
  182.      '   - view tree;' + #13#10 +
  183.      '   - build an empty tree;' + #13#10 +
  184.      '   - add new items;' + #13#10 +
  185.      '   - delete specified items;' + #13#10 +
  186.      '   - find max length of path between items' + #13#10 +
  187.      '     with different amount of childs.');
  188. end;
  189.  
  190. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement