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. |