Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.71 KB | None | 0 0
  1. unit FilmBase;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  7.   System.Classes, Vcl.Graphics,
  8.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, TypeList,
  9.   Feature, FilmInfo, Vcl.ExtDlgs;
  10.  
  11. type
  12.   TfrmFilmBase = class(TForm)
  13.     lvFilmTab: TListView;
  14.     btnSelect: TButton;
  15.     btnAdd: TButton;
  16.     btnEdit: TButton;
  17.     btnDelete: TButton;
  18.     btnReport: TButton;
  19.     btnSearch: TButton;
  20.     btnMenu: TButton;
  21.     SaveReport: TSaveTextFileDialog;
  22.     procedure FormCreate(Sender: TObject);
  23.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  24.     procedure btnAddClick(Sender: TObject);
  25.     procedure btnEditClick(Sender: TObject);
  26.     procedure btnSelectClick(Sender: TObject);
  27.     procedure btnDeleteClick(Sender: TObject);
  28.     procedure lvFilmTabOnClick(Sender: TObject);
  29.     procedure btnMenuClick(Sender: TObject);
  30.     procedure btnReportClick(Sender: TObject);
  31.     procedure ShowFilmInfo(Sender: TObject);
  32.     procedure lvFilmTabColumnClick(Sender: TObject; Column: TListColumn);
  33.     procedure lvFilmTabCompare(Sender: TObject; Item1, Item2: TListItem;
  34.       Data: Integer; var Compare: Integer);
  35.   public
  36.     procedure UpdateTab(List: TFilmList);
  37.     function GetSelectIndex(): Integer;
  38.   private
  39.     Descending: Boolean;
  40.     SortedColumn: Integer;
  41.   end;
  42.  
  43. var
  44.   frmFilmBase: TfrmFilmBase;
  45.   List: TFilmList;
  46.  
  47. implementation
  48.  
  49. {$R *.dfm}
  50.  
  51. uses
  52.   Menu;
  53.  
  54. procedure TfrmFilmBase.FormCreate(Sender: TObject);
  55. begin
  56.   List := TFilmList.Create;
  57.   UpdateTab(List);
  58.   frmFilmBase.btnEdit.Enabled := False;
  59.   frmFilmBase.btnDelete.Enabled := False;
  60.   frmFilmBase.btnReport.Enabled := False;
  61. end;
  62.  
  63. procedure TfrmFilmBase.FormClose(Sender: TObject; var Action: TCloseAction);
  64. begin
  65.   frmMenu.Show;
  66. end;
  67.  
  68. procedure TfrmFilmBase.UpdateTab(List: TFilmList);
  69. var
  70.   CurrNode: PFilm;
  71. begin
  72.   lvFilmTab.Clear;
  73.   CurrNode := List.Head;
  74.   while CurrNode <> nil do
  75.   begin
  76.     with lvFilmTab.Items.Add do
  77.     begin
  78.       Caption := IntToStr(CurrNode^.Item.Index);
  79.       SubItems.Add(CurrNode^.Item.Title);
  80.       SubItems.Add(IntToStr(CurrNode^.Item.Year));
  81.       SubItems.Add(CurrNode^.Item.Country);
  82.       SubItems.Add(CurrNode^.Item.Director.LastName);
  83.       SubItems.Add(frmFeatures.TabGenre(CurrNode^.Item.Genre));
  84.       SubItems.Add(IntToStr(CurrNode^.Item.Duration));;
  85.       if CurrNode^.Item.Ready then
  86.       begin
  87.         SubItems.Add(' +');
  88.         SubItems.Add(IntToStr(CurrNode^.Item.Rating));
  89.       end
  90.       else
  91.       begin
  92.         SubItems.Add('  -');
  93.         SubItems.Add(' -')
  94.       end;
  95.     end;
  96.     CurrNode := CurrNode^.Next;
  97.   end;
  98. end;
  99.  
  100. procedure TfrmFilmBase.btnSelectClick(Sender: TObject);
  101. begin
  102.  
  103.   if lvFilmTab.Checkboxes = False then
  104.   begin
  105.     lvFilmTab.Checkboxes := True;
  106.  
  107.   end
  108.   else
  109.   begin
  110.     lvFilmTab.Checkboxes := False;
  111.   end;
  112. end;
  113.  
  114. procedure TfrmFilmBase.btnAddClick(Sender: TObject);
  115. begin
  116.   frmFeatures.Tag := 1;
  117.   frmFeatures.ShowModal;
  118. end;
  119.  
  120. procedure TfrmFilmBase.btnDeleteClick(Sender: TObject);
  121. var
  122.   Index: Integer;
  123. begin
  124.   Index := GetSelectIndex + 1;
  125.   List.DeleteFilm(Index);
  126.   List.SaveList(FILE_NAME);
  127.   UpdateTab(List);
  128.   frmFilmBase.btnEdit.Enabled := lvFilmTab.ItemIndex <> -1;
  129.   frmFilmBase.btnDelete.Enabled := lvFilmTab.ItemIndex <> -1;
  130.   frmFilmBase.btnReport.Enabled := lvFilmTab.ItemIndex <> -1;
  131. end;
  132.  
  133. procedure TfrmFilmBase.btnEditClick(Sender: TObject);
  134. var
  135.   Index: Integer;
  136.   CurrNode: PFilm;
  137. begin
  138.   frmFeatures.Tag := 2;
  139.   Index := GetSelectIndex;
  140.   CurrNode := List.GetFilmByIndex(Index);
  141.  
  142.   with frmFeatures do
  143.   begin
  144.     edtTitle.Text := CurrNode.Item.Title;
  145.     edtDirectorLastName.Text := CurrNode.Item.Director.LastName;
  146.     edtDirectorName.Text := CurrNode.Item.Director.Name;
  147.     edtDirectorMiddleName.Text := CurrNode.Item.Director.MiddleName;
  148.     cmbbxGenre.ItemIndex := frmFeatures.GetGenre(CurrNode.Item);
  149.     edtCountry.Text := CurrNode.Item.Country;
  150.     edtYear.Text := IntToStr(CurrNode.Item.Year);
  151.     edtDuration.Text := IntToStr(CurrNode.Item.Duration);
  152.     edtWords.Text := CurrNode.Item.Words;
  153.     edtAwards.Text := CurrNode.Item.Awards;
  154.     edtBudget.Text := CurrNode.Item.Budget;
  155.     edtBoxOffice.Text := CurrNode.Item.BoxOffice;
  156.     chbxReady.Checked := CurrNode.Item.Ready;
  157.     if CurrNode.Item.Ready then
  158.       cmbbxRating.ItemIndex := frmFeatures.GetRating(CurrNode.Item)
  159.     else
  160.       cmbbxRating.ItemIndex := -1;
  161.   end;
  162.  
  163.   frmFilmBase.btnEdit.Enabled := lvFilmTab.ItemIndex <> -1;
  164.   frmFilmBase.btnDelete.Enabled := lvFilmTab.ItemIndex <> -1;
  165.   frmFilmBase.btnReport.Enabled := lvFilmTab.ItemIndex <> -1;
  166.   frmFeatures.ShowModal;
  167. end;
  168.  
  169. procedure TfrmFilmBase.btnMenuClick(Sender: TObject);
  170. begin
  171.   frmFilmBase.Close;
  172.   frmMenu.Show;
  173. end;
  174.  
  175. procedure TfrmFilmBase.btnReportClick(Sender: TObject);
  176. var
  177.   CurrNode: PFilm;
  178.   Index: Integer;
  179.   F: TextFile;
  180.   temp: Word;
  181. begin
  182.   Index := GetSelectIndex;
  183.   CurrNode := List.GetFilmByIndex(Index);
  184.  
  185.   if SaveReport.Execute then
  186.   begin
  187.     AssignFile(F, SaveReport.FileName { + '.txt' } );
  188.     Rewrite(F);
  189.     Write(F, CurrNode.Item.Title, ', ', CurrNode.Item.Year, ', ',
  190.       CurrNode.Item.Country, ', ', frmFeatures.TabGenre(CurrNode.Item.Genre),
  191.       ', ', CurrNode.Item.Director.Name, ' ', CurrNode.Item.Director.LastName);
  192.     CloseFile(F);
  193.     MessageBox(Handle, PChar('Отчёт успешно создан!'),
  194.       PChar('Внимание!'), MB_OK);
  195.   end;
  196. end;
  197.  
  198. function TfrmFilmBase.GetSelectIndex(): Integer;
  199. begin
  200.   Result := lvFilmTab.ItemIndex;
  201. end;
  202.  
  203. procedure TfrmFilmBase.lvFilmTabOnClick(Sender: TObject);
  204. begin
  205.   frmFilmBase.btnEdit.Enabled := lvFilmTab.ItemIndex <> -1;
  206.   frmFilmBase.btnDelete.Enabled := lvFilmTab.ItemIndex <> -1;
  207.   frmFilmBase.btnReport.Enabled := lvFilmTab.ItemIndex <> -1;
  208. end;
  209.  
  210. procedure TfrmFilmBase.ShowFilmInfo(Sender: TObject);
  211. var
  212.   Index: Integer;
  213.   CurrNode: PFilm;
  214. begin
  215.   Index := GetSelectIndex;
  216.   CurrNode := List.GetFilmByIndex(Index);
  217.   with frmFilmInfo do
  218.   begin
  219.     lblRealTitel.Caption := CurrNode.Item.Title;
  220.     lblRealDirectorLastName.Caption := CurrNode.Item.Director.LastName;
  221.     lblRealDirectorName.Caption := CurrNode.Item.Director.Name;
  222.     lblRealDirectorMiddleName.Caption := CurrNode.Item.Director.MiddleName;
  223.     lblRealGenre.Caption := frmFeatures.TabGenre(CurrNode.Item.Genre);
  224.     lblRealCountry.Caption := CurrNode.Item.Country;
  225.     lblRealYear.Caption := IntToStr(CurrNode.Item.Year);
  226.     lblRealDuration.Caption := IntToStr(CurrNode.Item.Duration);
  227.     lblRealWords.Caption := CurrNode.Item.Words;
  228.     lblRealAwards.Caption := CurrNode.Item.Awards;
  229.     lblRealBudget.Caption := CurrNode.Item.Budget;
  230.     lblRealBoxOffice.Caption := CurrNode.Item.BoxOffice;
  231.     chbxReady.Checked := CurrNode.Item.Ready;
  232.     chbxReady.Enabled := False;
  233.     if CurrNode.Item.Ready then
  234.       lblRealRating.Caption := IntToStr(CurrNode.Item.Rating)
  235.     else
  236.       lblRealRating.Caption := '';
  237.   end;
  238.   frmFilmInfo.ShowModal;
  239. end;
  240.  
  241. procedure TfrmFilmBase.lvFilmTabColumnClick(Sender: TObject;
  242.   Column: TListColumn);
  243. begin
  244.   TListView(Sender).SortType := stNone;
  245.   if Column.Index <> SortedColumn then
  246.   begin
  247.     SortedColumn := Column.Index;
  248.     Descending := False;
  249.   end
  250.   else
  251.     Descending := not Descending;
  252.   TListView(Sender).SortType := stText;
  253. end;
  254.  
  255. procedure TfrmFilmBase.lvFilmTabCompare(Sender: TObject;
  256.   Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
  257. begin
  258.   if SortedColumn = 0 then
  259.     Compare := CompareText(Item1.Caption, Item2.Caption)
  260.   else if SortedColumn <> 0 then
  261.     Compare := CompareText(Item1.SubItems[SortedColumn - 1],
  262.       Item2.SubItems[SortedColumn - 1]);
  263.   if Descending then
  264.     Compare := -Compare;
  265. end;
  266.  
  267. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement