Subversion Repositories spacemission

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. {
  2.  SXMedia  Components - Beta 1
  3.  --------------------------------
  4.  Copyright 1999 Dean Ellis
  5.  http://www.sillex.freeserve.co.uk
  6.  
  7.  This unit is part of the SXMedia Component Set. This code is
  8.  supplied as is with no guarantees and must be used at your own
  9.  risk.
  10.  
  11.  No modifications to this code must be made without the express
  12.  permission of the author. Please report any problems to
  13.  support@sillex.freeserve.co.uk
  14.  
  15.  You may use these components to create any freeware/shareware
  16.  applications that you wish. If the components are to be used in
  17.  a commercail product then credit for developement of these components
  18.  should be given.
  19.  
  20.  Credits :
  21.  
  22.  Developer : Dean Ellis
  23.  }
  24. unit main;
  25.  
  26. interface
  27.  
  28. uses
  29.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  30.   SXMovie, SXModPlayer, SXEngine, Menus, DXSounds, DXDraws, MMSystem, DIB;
  31.  
  32. type
  33.   TFrmMain = class(TForm)
  34.     MainMenu1: TMainMenu;
  35.     FileMnu: TMenuItem;
  36.     SXShowMnu: TMenuItem;
  37.     SXEngineMnu: TMenuItem;
  38.     SXModPlayerMnu: TMenuItem;
  39.     Exit1: TMenuItem;
  40.     OpenFileItem: TMenuItem;
  41.     PlayItem: TMenuItem;
  42.     StopItm: TMenuItem;
  43.     StartItem: TMenuItem;
  44.     StopItem: TMenuItem;
  45.     OpenFile1: TMenuItem;
  46.     Start1: TMenuItem;
  47.     Stop1: TMenuItem;
  48.     OpenDlg: TOpenDialog;
  49.     SXModPlayer: TSXModPlayer;
  50.     SXEngine: TSXEngine;
  51.     SXMovie: TSXMovie;
  52.     DXSound1: TDXSound;
  53.     DXDraw1: TDXDraw;
  54.     DXImageList1: TDXImageList;
  55.     procedure Exit1Click(Sender: TObject);
  56.     procedure DXDraw1Finalize(Sender: TObject);
  57.     procedure OpenFileItemClick(Sender: TObject);
  58.     procedure OpenFile1Click(Sender: TObject);
  59.     procedure PlayItemClick(Sender: TObject);
  60.     procedure Start1Click(Sender: TObject);
  61.     procedure Stop1Click(Sender: TObject);
  62.     procedure DXSound1Initialize(Sender: TObject);
  63.     procedure SXEngineRender(Sender: TObject);
  64.     procedure StartItemClick(Sender: TObject);
  65.     procedure StopItemClick(Sender: TObject);
  66.     procedure DXDraw1KeyDown(Sender: TObject; var Key: Word;
  67.       Shift: TShiftState);
  68.   private
  69.     { Private declarations }
  70.   public
  71.     { Public declarations }
  72.   end;
  73.  
  74. var
  75.   FrmMain: TFrmMain;
  76.  
  77. implementation
  78.  
  79. {$R *.DFM}
  80. procedure FreeObj(var Obj);
  81. begin
  82.   if TObject(Obj) <> nil then
  83.   begin
  84.      TObject(Obj).Free;
  85.      TObject(Obj) := nil;
  86.   end;
  87. end;
  88.  
  89. procedure ClearSurfaces;
  90. begin
  91.   FrmMain.DXDraw1.Surface.Fill(clBlack);
  92.   FrmMain.DXDraw1.Primary.Fill(clBlack);
  93. end;
  94.  
  95. procedure TFrmMain.Exit1Click(Sender: TObject);
  96. begin
  97.    if SXMovie.Playing then SXMovie.Stop;
  98.    Close;
  99. end;
  100.  
  101. procedure TFrmMain.DXDraw1Finalize(Sender: TObject);
  102. begin
  103.   if SXEngine.Enabled then SXEngine.Enabled := False;
  104. end;
  105.  
  106. procedure TFrmMain.OpenFileItemClick(Sender: TObject);
  107. begin
  108.   OpenDlg.Filter := 'All Media Files|*.avi;*.mpg;*.mov|' +
  109.                      'AVI (*.avi)|*.avi|MPG (*.mpg)|*.mpg|MOV (*.mov)|*.mov';
  110.   if OpenDlg.Execute then
  111.   begin
  112.      SXMovie.Filename := OpenDlg.FileName;
  113.   end;
  114. end;
  115.  
  116. procedure TFrmMain.OpenFile1Click(Sender: TObject);
  117. begin
  118.   OpenDlg.Filter := 'All Media Files|*.mod;*.it;*.s3m;*.xm|' +
  119.                      'Mod (*.mod)|*.mod|Impulse Tracker (*.it)|*.it|Scream Tracker (*.s3m)|*.s3m|Fast Tracker (*.xm)|*.xm';
  120.   if OpenDlg.Execute then
  121.   begin
  122.      SXModPlayer.Filename := OpenDlg.FileName;
  123.      DXSound1Initialize(Sender);
  124.      SXModPlayer.Initialize(nil);
  125.   end;
  126. end;
  127.  
  128. procedure TFrmMain.PlayItemClick(Sender: TObject);
  129. begin
  130.   if not SXMovie.Playing then
  131.   begin
  132.      if DXDraw1.CanDraw then
  133.        ClearSurfaces;
  134.      SXMovie.DisplayRect(80,60, 400, 300);
  135.      SXMovie.Play
  136.   end
  137.   else
  138.      SXMovie.Stop;
  139. end;
  140.  
  141.  
  142. procedure TFrmMain.Start1Click(Sender: TObject);
  143. begin
  144.    SXModPlayer.Play(True);
  145. end;
  146.  
  147. procedure TFrmMain.Stop1Click(Sender: TObject);
  148. begin
  149.   SXModPlayer.Stop;
  150. end;
  151.  
  152. procedure TFrmMain.DXSound1Initialize(Sender: TObject);
  153. var fmt:TWaveFormatEx;
  154. begin
  155.   with Fmt do
  156.   begin
  157.      wFormatTag := WAVE_FORMAT_PCM;
  158.      nSamplesPerSec := 44100;
  159.      nChannels := 2;
  160.      wBitsPerSample := 16;
  161.      nBlockAlign := wBitsPerSample div 8 * nChannels;
  162.      nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
  163.   end;
  164.   // must be in exclusive to set the format
  165.   DXSound1.Options := DXSound1.Options + [soExclusive];
  166.   DXSound1.Primary.SetFormat(Fmt);
  167. end;
  168.  
  169. procedure TFrmMain.SXEngineRender(Sender: TObject);
  170. var Angle: Integer;
  171. begin
  172.   Angle := 0;
  173.   if DXDraw1.CanDraw then
  174.   begin
  175.     DXDraw1.Surface.Fill(clBlack);
  176.     with DXImageList1.Items[0] do
  177.       DrawWaveX(DXDraw1.Surface,160,50,Width,Height, 0, 5, 80, Angle*4);
  178.     with DXDraw1.Surface.Canvas do
  179.     begin
  180.       try
  181.         Brush.Style := bsClear;
  182.         Font.Color := clWhite;
  183.         Font.Size := 8;
  184.         Textout(5, 5, 'Frames Per Sec  :   ' + IntToStr(SXEngine.FramesPerSecond));
  185.       finally
  186.         Release;
  187.       end;
  188.     end;
  189.     DXDraw1.Flip;
  190.     Inc(Angle);
  191.   end;
  192. end;
  193.  
  194. procedure TFrmMain.StartItemClick(Sender: TObject);
  195. begin
  196.    if DXDraw1.CanDraw then ClearSurfaces;
  197.    SXEngine.Enabled := True;
  198. end;
  199.  
  200. procedure TFrmMain.StopItemClick(Sender: TObject);
  201. begin
  202.   SXEngine.Enabled := False;
  203. end;
  204.  
  205. procedure TFrmMain.DXDraw1KeyDown(Sender: TObject; var Key: Word;
  206.   Shift: TShiftState);
  207. begin
  208.  if Key = VK_ESCAPE then Close;
  209. end;
  210.  
  211. end.
  212.