Advertisement
Egor_Vakar

Курсач(1 курс) AddPlaylistSongsUnit

May 12th, 2022
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 9.67 KB | None | 0 0
  1. unit AddPlaylistSongsUnit;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Buttons;
  8.  
  9. type
  10.   TAddPlaylistSongsForm = class(TForm)
  11.     PlaylistImage: TImage;
  12.     PlaylistName: TLabel;
  13.     SongsCountLabel: TLabel;
  14.     CounterLabel: TLabel;
  15.     MusicListBox: TListBox;
  16.     AskLabel: TLabel;
  17.     Panel: TPanel;
  18.     AddTrackLabel: TLabel;
  19.     AddMusicDialog: TOpenDialog;
  20.     CloseBtn: TButton;
  21.     DeleteTrackBtn: TBitBtn;
  22.     AddTrackBtn: TBitBtn;
  23.     procedure AddTrackLabelMouseMove(Sender: TObject; Shift: TShiftState; X,
  24.       Y: Integer);
  25.     procedure AddTrackLabelMouseLeave(Sender: TObject);
  26.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  27.     procedure AddTrackLabelClick(Sender: TObject);
  28.     procedure AddNode(Name: String);
  29.     procedure CloseBtnClick(Sender: TObject);
  30.     procedure FormCreate(Sender: TObject);
  31.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  32.     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  33.     procedure CloseBtnKeyDown(Sender: TObject; var Key: Word;
  34.       Shift: TShiftState);
  35.     procedure AddTrackBtnKeyDown(Sender: TObject; var Key: Word;
  36.       Shift: TShiftState);
  37.     procedure DeleteTrackBtnKeyDown(Sender: TObject; var Key: Word;
  38.       Shift: TShiftState);
  39.     procedure AddTrackBtnClick(Sender: TObject);
  40.     procedure DeleteTrackBtnClick(Sender: TObject);
  41.     procedure SetLang(Lang: String);
  42.     procedure FormActivate(Sender: TObject);
  43.  
  44.   private
  45.     { Private declarations }
  46.   public
  47.     { Public declarations }
  48.   end;
  49.  
  50. var
  51.   AddPlaylistSongsForm: TAddPlaylistSongsForm;
  52.  
  53. implementation
  54.  
  55. {$R *.dfm}
  56. uses
  57.     AddPlaylistUnit, PlaySoundUnit, ToolsUnit;
  58.  
  59. type
  60.     TNode =^ Node;
  61.     Node = Record
  62.       pName: String;
  63.       pNext: TNode;
  64.       pPrev: TNode;
  65.     End;
  66. var
  67.     Head: TNode;
  68.     Tail: TNode;
  69.     Size: Integer;
  70.  
  71. procedure TAddPlaylistSongsForm.AddNode(Name: String);
  72. var
  73.     Temp, Curr: Tnode;
  74. begin
  75.     New(Temp);
  76.     Temp.pName := Name;
  77.     if Size = 0 then
  78.     begin
  79.         Head := Temp;
  80.     end
  81.     else
  82.         if Size = 1 then
  83.         begin
  84.             Head^.pNext := Temp;
  85.             Tail := Temp;
  86.             Tail^.pPrev := Head;
  87.         end
  88.         else
  89.         begin
  90.             Tail^.pNext := Temp;
  91.             Temp^.pPrev := Tail;
  92.             Tail := Temp;
  93.         end;
  94.     Inc(Size);
  95.     if Size > 0 then
  96.         Panel.Visible := False;
  97.     CounterLabel.Caption := IntToStr(Size);
  98. end;
  99.  
  100. procedure TAddPlaylistSongsForm.AddTrackBtnClick(Sender: TObject);
  101. var
  102.     Name: string;
  103.     Counter, i: Integer;
  104.     IsNotFound: Boolean;
  105. begin
  106.     if AddMusicDialog.Execute then
  107.     begin
  108.         Name := Tools.TakeName(AddMusicDialog.FileName);
  109.         Delete(Name, Length(Name) - 3, 4);
  110.         i := 0;
  111.         IsNotFound := True;
  112.         While (IsNotFound and (i < MusicListBox.Count)) do
  113.         begin
  114.             if MusicListBox.Items[i] = Name  then
  115.                 IsNotFound := False;
  116.             inc(i);
  117.         end;
  118.         if IsNotFound then
  119.         begin
  120.             AddNode(AddMusicDialog.FileName);
  121.             MusicListBox.Items.Add(Name);
  122.         end
  123.         else
  124.         if PlaySoundUnit.Lang = 'RUS' then
  125.             MessageBox(Handle, PChar('Трек уже добавлен'), PChar('Ошибка'), MB_OK + MB_ICONERROR)
  126.         else
  127.             MessageBox(Handle, PChar('Track has been already added'), PChar('Error'), MB_OK + MB_ICONERROR);
  128.  
  129.     end;
  130. end;
  131.  
  132. procedure TAddPlaylistSongsForm.AddTrackBtnKeyDown(Sender: TObject;
  133.   var Key: Word; Shift: TShiftState);
  134. begin
  135.     if Key = Vk_Return then
  136.         CloseBtn.Click;
  137. end;
  138.  
  139. procedure TAddPlaylistSongsForm.AddTrackLabelClick(Sender: TObject);
  140. begin
  141.     AddTrackBtn.Click;
  142. end;
  143.  
  144. procedure TAddPlaylistSongsForm.AddTrackLabelMouseLeave(Sender: TObject);
  145. begin
  146.     AddTrackLabel.Font.Color := clWindowText;
  147. end;
  148.  
  149. procedure TAddPlaylistSongsForm.AddTrackLabelMouseMove(Sender: TObject;
  150.   Shift: TShiftState; X, Y: Integer);
  151. begin
  152.     AddTrackLabel.Font.Color := clRed;
  153. end;
  154.  
  155.  
  156.  
  157. procedure TAddPlaylistSongsForm.CloseBtnClick(Sender: TObject);
  158. var
  159.     I: Integer;
  160.     NewPlaylistPath: string;
  161.     Prev, Temp: TNode;
  162. begin
  163.     NewPlaylistPath := FileDirectory + 'Playlists\' + PlaylistName.Caption;
  164.     CreateDir(NewPlaylistPath);
  165.     if Length(AddPlaylistForm.ImagePathLabel.Caption) <> 0 then
  166.     begin
  167.         CopyFile(PChar(AddPlaylistForm.ImagePathLabel.Caption), PChar(NewPlaylistPath + '\image' + Copy(AddPlaylistForm.ImagePathLabel.Caption, Length(AddPlaylistForm.ImagePathLabel.Caption) - 3, 4)), True);
  168.     end;
  169.     if Size <> 0 then
  170.     begin
  171.         Temp := Head;
  172.         for i := 1 to Size - 1 do
  173.         begin
  174.             CopyFile(PChar(Temp.pName), PChar(NewPlaylistPath + '\' + Tools.TakeName(Temp.pName)), True);
  175.             Prev := Temp;
  176.             Temp := Temp.pNext;
  177.             Temp.pPrev := nil;
  178.             Dispose(Prev);
  179.         end;
  180.         CopyFile(PChar(Temp.pName), PChar(NewPlaylistPath + '\' + Tools.TakeName(Temp.pName)), True);
  181.         Dispose(Temp);
  182.     end;
  183.     Size := 0;
  184.     CounterLabel.Caption := IntToStr(Size);
  185.     PlaySoundForm.LoadPlaylists;
  186.     Panel.Visible := True;
  187.     AddPlaylistForm.Close;
  188.     AddPlaylistSongsForm.Close;
  189. end;
  190.  
  191. procedure TAddPlaylistSongsForm.CloseBtnKeyDown(Sender: TObject; var Key: Word;
  192.   Shift: TShiftState);
  193. begin
  194.     if Key = Vk_Return then
  195.         CloseBtn.Click;
  196. end;
  197.  
  198. procedure TAddPlaylistSongsForm.DeleteTrackBtnKeyDown(Sender: TObject;
  199.   var Key: Word; Shift: TShiftState);
  200. begin
  201.     if Key = Vk_Return then
  202.         CloseBtn.Click;
  203. end;
  204.  
  205. procedure TAddPlaylistSongsForm.DeleteTrackBtnClick(Sender: TObject);
  206. var
  207.     isDeleted: Boolean;
  208.     Index, Counter, i: Integer;
  209.     DeletedNode, Temp, List: TNode;
  210. begin
  211.     if MusicListBox.ItemIndex <> -1 then
  212.     begin
  213.         isDeleted := False;
  214.         Index := MusicListBox.ItemIndex + 1;
  215.         if (Index = 1) then
  216.         begin
  217.             if Size <> 1 then
  218.             begin
  219.                 DeletedNode := Head;
  220.                 Head := Head^.pNext;
  221.                 Head^.pPrev := nil;
  222.             end
  223.             else
  224.                 DeletedNode := Head;
  225.             IsDeleted := True;
  226.         end
  227.         else
  228.             if (Index = Size) then
  229.             begin
  230.                 DeletedNode := Tail;
  231.                 Tail := Tail^.pPrev;
  232.                 Tail^.pNext := nil;
  233.                 IsDeleted := True;
  234.             end;
  235.         if (not IsDeleted) then
  236.         begin
  237.             if (Index <= Size - Index) then
  238.             begin
  239.                 temp := head;
  240.                 counter := 1;
  241.                 while (counter <> Index) do
  242.                 begin
  243.                     Temp := Temp^.pNext;
  244.                     Inc(Counter);
  245.                 end;
  246.             end
  247.             else
  248.             begin
  249.                 Temp := Tail;
  250.                 Counter := Size;
  251.                 while (Counter <> Index) do
  252.                 begin
  253.                     Temp := Temp^.pPrev;
  254.                     Dec(Counter);
  255.                 end;
  256.             end;
  257.             DeletedNode := Temp;
  258.             Temp^.pPrev^.pNext := Temp^.pNext;
  259.             Temp^.pNext^.pPrev := Temp^.pPrev;
  260.         end;
  261.         Dispose(DeletedNode);
  262.         Dec(Size);
  263.         MusicListBox.DeleteSelected;
  264.         if Size = 0 then
  265.             Panel.Visible := True;
  266.         CounterLabel.Caption := IntToStr(Size);
  267.     end
  268.     else
  269.         if PlaySoundUnit.Lang = 'RUS' then
  270.             MessageBox(Handle, PChar('Трек для удаления не выбран'), PChar('Ошибка'), MB_OK + MB_ICONERROR)
  271.         else
  272.             MessageBox(Handle, PChar('Track to delete isn''t selected'), PChar('Error'), MB_OK + MB_ICONERROR)
  273. end;
  274.  
  275. procedure TAddPlaylistSongsForm.FormActivate(Sender: TObject);
  276. begin
  277.     SetLang(PlaySoundUnit.Lang);
  278. end;
  279.  
  280. procedure TAddPlaylistSongsForm.FormClose(Sender: TObject;
  281.   var Action: TCloseAction);
  282. begin
  283.     CloseBtn.Click;
  284. end;
  285.  
  286. procedure TAddPlaylistSongsForm.FormCreate(Sender: TObject);
  287. begin
  288.     Size := 0;
  289.     CounterLabel.Caption := IntToStr(Size);
  290.     SetLang(PlaySoundUnit.Lang);
  291. end;
  292.  
  293. procedure TAddPlaylistSongsForm.FormKeyDown(Sender: TObject; var Key: Word;
  294.   Shift: TShiftState);
  295. begin
  296.     if Key = Vk_Return then
  297.         CloseBtn.Click;
  298. end;
  299.  
  300. procedure TAddPlaylistSongsForm.FormKeyPress(Sender: TObject; var Key: Char);
  301. begin
  302.     if Key = #13 then
  303.         CloseBtn.Click;
  304.  
  305.     if Key = #27 then
  306.         AddPlaylistSongsForm.Close;
  307. end;
  308.  
  309. procedure TAddPlaylistSongsForm.SetLang(Lang: String);
  310. begin
  311.     if Lang = 'RUS' then
  312.     begin
  313.         Caption := 'Добавление треков';
  314.         SongsCountLabel.Caption := 'Треков:';
  315.         AskLabel.Caption := 'Что за плейлист без треков?';
  316.         AskLabel.Left := 69;
  317.         AddTrackLabel.Caption := 'Добавить трек';
  318.         AddTrackLabel.Left := 133;
  319.         AddTrackBtn.Hint := PlaySoundForm.AddTrackBtn.Hint;
  320.         DeleteTrackBtn.Hint := PlaySoundForm.DeleteTrackBtn.Hint;
  321.         CloseBtn.Caption := 'Закончить';
  322.     end
  323.     else
  324.     begin
  325.         Caption := 'Tracks adding';
  326.         SongsCountLabel.Caption := 'Tracks:';
  327.         AskLabel.Caption := 'What is a playlist without tracks?';
  328.         AskLabel.Left := 45;
  329.         AddTrackLabel.Caption := 'Add track';
  330.         AddTrackLabel.Left := 149;
  331.         AddTrackBtn.Hint := PlaySoundForm.AddTrackBtn.Hint;
  332.         DeleteTrackBtn.Hint := PlaySoundForm.DeleteTrackBtn.Hint;
  333.         CloseBtn.Caption := 'Finish';
  334.     end;
  335. end;
  336.  
  337. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement