main.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:8k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit main;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, Menus, DSPack, StdCtrls, ComCtrls, dsutil, Buttons, ToolWin,
  6.   ImgList, SelectURL, ExtCtrls, DirectShow9;
  7.   
  8. type
  9.   TFormPlayWin = class(TForm)
  10.     FilterGraph: TFilterGraph;
  11.     VideoWindow: TVideoWindow;
  12.     MainMenu: TMainMenu;
  13.     OpenDialog: TOpenDialog;
  14.     FileMenu: TMenuItem;
  15.     OpenMenu: TMenuItem;
  16.     OpenURLMenu: TMenuItem;
  17.     ExitMenu: TMenuItem;
  18.     TrackBar: TDSTrackBar;
  19.     ImageList: TImageList;
  20.     StatusBar: TStatusBar;
  21.     ToolBar: TToolBar;
  22.     btPlay: TToolButton;
  23.     btPause: TToolButton;
  24.     btStop: TToolButton;
  25.     ToolButton1: TToolButton;
  26.     SoundLevel: TTrackBar;
  27.     btFullScreen: TToolButton;
  28.     PopupMenu: TPopupMenu;
  29.     Play1: TMenuItem;
  30.     Pause1: TMenuItem;
  31.     Stop1: TMenuItem;
  32.     FullScreen1: TMenuItem;
  33.     log: TMemo;
  34.     ToolButton2: TToolButton;
  35.     VideoControl: TPanel;
  36.     Brightness: TTrackBar;
  37.     Contrast: TTrackBar;
  38.     Hue: TTrackBar;
  39.     Saturation: TTrackBar;
  40.     Label1: TLabel;
  41.     Label2: TLabel;
  42.     Label3: TLabel;
  43.     Label4: TLabel;
  44.     PositionX: TTrackBar;
  45.     PositionY: TTrackBar;
  46.     SizeX: TTrackBar;
  47.     SizeY: TTrackBar;
  48.     Label5: TLabel;
  49.     Label6: TLabel;
  50.     Label7: TLabel;
  51.     Label8: TLabel;
  52.     AspectRatio: TCheckBox;
  53.     procedure OpenMenuClick(Sender: TObject);
  54.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  55.     procedure btPlayClick(Sender: TObject);
  56.     procedure btPauseClick(Sender: TObject);
  57.     procedure btStopClick(Sender: TObject);
  58.     procedure TrackBarTimer(sender: TObject; CurrentPos,
  59.       StopPos: Cardinal);
  60.     procedure SoundLevelChange(Sender: TObject);
  61.     procedure ExitMenuClick(Sender: TObject);
  62.     procedure OpenURLMenuClick(Sender: TObject);
  63.     procedure btFullScreenClick(Sender: TObject);
  64.     procedure FilterGraphDSEvent(sender: TComponent; Event, Param1,
  65.       Param2: Integer);
  66.     procedure AspectRatioClick(Sender: TObject);
  67.     procedure BrightnessChange(Sender: TObject);
  68.     procedure ContrastChange(Sender: TObject);
  69.     procedure HueChange(Sender: TObject);
  70.     procedure SaturationChange(Sender: TObject);
  71.     procedure PositionChange(Sender: TObject);
  72.   private
  73.     { D閏larations priv閑s }
  74.   public
  75.     { D閏larations publiques }
  76.     procedure ReadStreamProperties;
  77.   end;
  78. var
  79.   FormPlayWin: TFormPlayWin;
  80.   ProcAmpControl: TVMR9ProcAmpControl;
  81.   NormalizedRect: TVMR9NormalizedRect;
  82. implementation
  83. {$R *.dfm}
  84. procedure TFormPlayWin.OpenMenuClick(Sender: TObject);
  85. begin
  86.   if OpenDialog.Execute then
  87.   begin
  88.     if not FilterGraph.Active then FilterGraph.Active := true;
  89.     FilterGraph.ClearGraph;
  90.     FilterGraph.RenderFile(OpenDialog.FileName);
  91.     VideoWindow.PopupMenu := PopupMenu;
  92.     SoundLevel.Position := FilterGraph.Volume;
  93.     FilterGraph.Play;
  94.     ReadStreamProperties;
  95.   end;
  96. end;
  97. procedure TFormPlayWin.FormCloseQuery(Sender: TObject;
  98.   var CanClose: Boolean);
  99. begin
  100.   // Important
  101.   FilterGraph.ClearGraph;
  102. end;
  103. procedure TFormPlayWin.btPlayClick(Sender: TObject);
  104. begin
  105.   if not FilterGraph.Active then OpenMenuClick(nil)
  106.                             else FilterGraph.play;
  107. end;
  108. procedure TFormPlayWin.btPauseClick(Sender: TObject);
  109. begin
  110.   FilterGraph.Pause;
  111. end;
  112. procedure TFormPlayWin.btStopClick(Sender: TObject);
  113. begin
  114.   FilterGraph.Stop;
  115. end;
  116. procedure TFormPlayWin.TrackBarTimer(sender: TObject; CurrentPos,
  117.   StopPos: Cardinal);
  118. begin
  119.   StatusBar.SimpleText := format('Position: %s Duration: %s',
  120.     [TimeToStr(CurrentPos / MiliSecPerDay), TimeToStr(StopPos / MiliSecPerDay)])
  121. end;
  122. procedure TFormPlayWin.SoundLevelChange(Sender: TObject);
  123. begin
  124.   FilterGraph.Volume := SoundLevel.Position;
  125. end;
  126. procedure TFormPlayWin.ExitMenuClick(Sender: TObject);
  127. begin
  128.   FormPlayWin.Close;
  129. end;
  130. procedure TFormPlayWin.OpenURLMenuClick(Sender: TObject);
  131. begin
  132.   FormSelectURL:= TFormSelectURL.Create(nil);
  133.   if FormSelectURL.ShowModal = mrOK then
  134.   begin
  135.     if not FilterGraph.Active then FilterGraph.Active := true;
  136.     FilterGraph.ClearGraph;
  137.     FilterGraph.RenderFile(FormSelectURL.URL.Text);
  138.     VideoWindow.PopupMenu := PopupMenu;
  139.     SoundLevel.Position := FilterGraph.Volume;
  140.     FilterGraph.Play;
  141.   end;
  142.   FormSelectURL.Free;
  143. end;
  144. procedure TFormPlayWin.btFullScreenClick(Sender: TObject);
  145. begin
  146.   VideoWindow.FullScreen := not VideoWindow.FullScreen;
  147.   btFullScreen.Down := VideoWindow.FullScreen;
  148. end;
  149. procedure TFormPlayWin.FilterGraphDSEvent(sender: TComponent; Event,
  150.   Param1, Param2: Integer);
  151. begin
  152.   log.Lines.Add(GetEventCodeDef(event))
  153. end;
  154. procedure TFormPlayWin.AspectRatioClick(Sender: TObject);
  155. begin
  156.   VideoWindow.VMROptions.KeepAspectRatio := AspectRatio.Checked;
  157. end;
  158. procedure TFormPlayWin.ReadStreamProperties;
  159. var ProcAmpControlRange: TVMR9ProcAmpControlRange;
  160.   procedure Configure(TrackBar: TTrackBar; Prop: DWord);
  161.   begin
  162.     with (VideoWindow as IVMRMixerControl9) do
  163.     begin
  164.       ZeroMemory(@ProcAmpControlRange, SizeOf(ProcAmpControlRange));
  165.       ProcAmpControlRange.dwSize := SizeOf(ProcAmpControlRange);
  166.       ProcAmpControlRange.dwProperty := Prop;
  167.       if Succeeded(GetProcAmpControlRange(0, @ProcAmpControlRange)) then
  168.       begin
  169.         TrackBar.Min := Trunc(ProcAmpControlRange.MinValue);
  170.         TrackBar.Max := Trunc(ProcAmpControlRange.MaxValue);
  171.         if TrackBar.Min = TrackBar.Max then
  172.           TrackBar.Enabled := False else
  173.           begin
  174.            TrackBar.Position := Trunc(ProcAmpControlRange.DefaultValue);
  175.            TrackBar.Frequency := Trunc(ProcAmpControlRange.StepSize);
  176.            TrackBar.Enabled := True;
  177.           end;
  178.       end else
  179.       begin
  180.         TrackBar.Min := 0;
  181.         TrackBar.Max := 0;
  182.         TrackBar.Position := 0;
  183.         TrackBar.Frequency := 0;
  184.         TrackBar.Enabled := False;
  185.       end;
  186.     end;
  187.   end;
  188. begin
  189.   Configure(Contrast, ProcAmpControl9_Contrast);
  190.   Configure(Brightness, ProcAmpControl9_Brightness);
  191.   Configure(Hue, ProcAmpControl9_Hue);
  192.   Configure(Saturation, ProcAmpControl9_Saturation);
  193.   with (VideoWindow as IVMRMixerControl9) do
  194.   begin
  195.     if succeeded(GetOutputRect(0, @NormalizedRect)) then
  196.     begin
  197.       PositionX.Enabled := True;
  198.       PositionY.Enabled := True;
  199.       SizeX.Enabled := True;
  200.       SizeY.Enabled := True;
  201.     end else
  202.     begin
  203.       PositionX.Enabled := False;
  204.       PositionY.Enabled := False;
  205.       SizeX.Enabled := False;
  206.       SizeY.Enabled := False;
  207.     end;
  208.   end;
  209. end;
  210. procedure TFormPlayWin.BrightnessChange(Sender: TObject);
  211. begin
  212.   ProcAmpControl.dwSize := sizeof(ProcAmpControl);
  213.   ProcAmpControl.Brightness := Brightness.Position;
  214.   ProcAmpControl.dwFlags := ProcAmpControl9_Brightness;
  215.   with (VideoWindow as IVMRMixerControl9) do
  216.     SetProcAmpControl(0, @ProcAmpControl);
  217. end;
  218. procedure TFormPlayWin.ContrastChange(Sender: TObject);
  219. begin
  220.   ProcAmpControl.dwSize := sizeof(ProcAmpControl);
  221.   ProcAmpControl.Contrast := Contrast.Position;
  222.   ProcAmpControl.dwFlags := ProcAmpControl9_Contrast;
  223.   with (VideoWindow as IVMRMixerControl9) do
  224.     SetProcAmpControl(0, @ProcAmpControl);
  225. end;
  226. procedure TFormPlayWin.HueChange(Sender: TObject);
  227. begin
  228.   ProcAmpControl.dwSize := sizeof(ProcAmpControl);
  229.   ProcAmpControl.Hue := Hue.Position;
  230.   ProcAmpControl.dwFlags := ProcAmpControl9_Hue;
  231.   with (VideoWindow as IVMRMixerControl9) do
  232.     SetProcAmpControl(0, @ProcAmpControl);
  233. end;
  234. procedure TFormPlayWin.SaturationChange(Sender: TObject);
  235. begin
  236.   ProcAmpControl.dwSize := sizeof(ProcAmpControl);
  237.   ProcAmpControl.Saturation := Saturation.Position;
  238.   ProcAmpControl.dwFlags := ProcAmpControl9_Saturation;
  239.   with (VideoWindow as IVMRMixerControl9) do
  240.     SetProcAmpControl(0, @ProcAmpControl);
  241. end;
  242. procedure TFormPlayWin.PositionChange(Sender: TObject);
  243. begin
  244.   NormalizedRect.left   := PositionX.Position / 100;
  245.   NormalizedRect.right  := (PositionX.Position + SizeX.Position) / 100;
  246.   NormalizedRect.Top    := PositionY.Position / 100;
  247.   NormalizedRect.Bottom := (PositionY.Position + SizeY.Position) / 100;
  248.   with (VideoWindow as IVMRMixerControl9) do
  249.     SetOutputRect(0, @NormalizedRect);
  250. end;
  251. end.