Увидел замечательный компонент WindowsMediaPlayer, который можно использовать в своих проектах. Честно, сказать, по функциональности и простоте использования для моих задач он подходит больше всего. Я уже писал mp3 плееры на bass.dll и на TMediaPlayer. Но там везде свои ограничения. При помощи bass.dll я не смог создать компонент в Delphi (но это видимо только моя недоработка – недостаток опыта, а TMediaPlayer хорош своей простотой, но нужно возиться с дизайном, а также у него проблемы с проигрыванием mp4 файлов, которые нужны были мне для одной из задач). Словом, для коллекции, решил оформить ещё один mp3 плеер на основе компонента WindowsMediaPlayer из ActiveX.
Попробуем создать на основе него свой класс TAudioPanelWMP. Выглядеть это будет примерно так…
В тестовой программе экземпляр класса создавать будем динамически.
Инсталляция WindowsMediaPlayer
Здесь подробно останавливаться не буду, в сети масса инструкций на эту тему. Вот одна из них.
Если кратко, то Component > ImportComponent > Import ActiveX Control > Windows Media Player > далее…
Ну и далее финишируем установку с сообщением об успехе.
Пара слов о том, что компонент использует, чтобы потом корректно распространять свои программы…
Я так понимаю, чтобы плеер корректно работал нужна wmp.dll
Также на MSDN в разделе Сведения о версии указано, что требуется .NET 3.0 и выше.
Создание своего компонента на основе WindowsMediaPlayer
Код создания компонента на основе WMP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
unit uMain_TAudioPanelWMP_BPL; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.MPlayer, Vcl.OleCtrls, WMPLib_TLB, Vcl.Buttons; type TAudioPanelWMP = class(TPanel) private FpPlayerPanel:TPanel; FsbClose:TSpeedButton; procedure CloseClick(Sender:TObject); public FWMP:TWindowsMediaPlayer; FlFileName:TLabel; CONSTRUCTOR Create(AOwner:TComponent); override; published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TAudioPanelWMP]); end; { TAudioPanelWMP } constructor TAudioPanelWMP.Create(AOwner: TComponent); begin inherited Create(AOwner); //Габариты самого компонента Self.Width:=400; Self.Height:=110; //Cоздание компонентов FpPlayerPanel:=TPanel.Create(Self); FWMP:=TWindowsMediaPlayer.Create(Self); FsbClose:=TSpeedButton.Create(Self); FlFileName:=TLabel.Create(Self); //Настройка компонентов FpPlayerPanel.Parent:=Self; FWMP.Parent:=FpPlayerPanel; FsbClose.Parent:=Self; FlFileName.Parent:=Self; FpPlayerPanel.Align:=alBottom; FpPlayerPanel.Height:=80; FWMP.Align:=alClient; FsbClose.SetBounds(370,5,24,17); FsbClose.Flat:=true; FsbClose.Caption:='X'; FsbClose.Font.Size:=10; FsbClose.OnClick:=CloseClick; FlFileName.SetBounds(9,8,65,16); end; // Процедура закрытия procedure TAudioPanelWMP.CloseClick(Sender:TObject); var i:integer; begin // Фокусируем и отправляем программно нажатие / отпускание VK_DELETE Self.SetFocus; keybd_event(VK_DELETE, 0, 0, 0); keybd_event(VK_DELETE, 0, KEYEVENTF_KEYUP, 0); //А в программе, использующей TAudioPanelWMP нужно будет обработать VK_DELETE //Уничтожить и так далее end; end. |
Пример использования
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
procedure TMainForm.bOpenClick(Sender: TObject); var AudioPanelWMP:TAudioPanelWMP; ShortFileName: string; begin if OpenDialog.Execute then begin //Создаем и размещаем плеер AudioPanelWMP:=TAudioPanelWMP.Create(Self); AudioPanelWMP.Parent:=Self; AudioPanelWMP.Left:=10; AudioPanelWMP.Top:=10; //Ограничиваем длину имени файла ShortFileName:=ExtractFileName(OpenDialog.FileName); if (length(ShortFileName))>60 then begin ShortFileName:=ShortFileName.Substring(0,60); ShortFileName:=ShortFileName+'...'; end; //Выбираем файл и отображаем его AudioPanelWMP.FlFileName.Caption:=ShortFileName; AudioPanelWMP.FWMP.URL:=OpenDialog.FileName; AudioPanelWMP.FWMP.controls.play; AudioPanelWMP.FWMP.controls.stop; AudioPanelWMP.Show; end; try except on E:Exception do raise Exception.Create(E.ClassName+'Exception Raised'+E.Message); end; end; |