Subversion Repositories spacemission

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 daniel-mar 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.