Subversion Repositories spacemission

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 daniel-mar 1
unit DXMidiEdit;
2
//(c)2007 Jaro Benes
3
//All Rights Reserved
4
 
5
{
6
Complex application for users of unDelphiX as component editor:
7
 
8
Supported:
9
 a) load existing midi file and store it into rersource.
10
 b) allow do play.
11
 
12
}
13
interface
14
 
15
uses
16
  Windows, SysUtils, Classes, Forms, Dialogs, Controls, StdCtrls, ExtCtrls,
17
  Buttons, ComCtrls, Graphics, DXSounds;  
18
 
19
type
20
 
21
  {  TDelphiXWaveEditForm  }
22
 
23
  TDelphiXMidiEditForm = class(TForm)
24
    Bevel2: TBevel;
25
    OKButton: TButton;
26
    CancelButton: TButton;
27
    SaveDialog: TSaveDialog;
28
    OpenDialog: TOpenDialog;
29
    ClearButton: TButton;
30
    SaveButton: TButton;
31
    LoadButton: TButton;
32
    Panel1: TPanel;
33
    LengthLabel: TLabel;
34
    SizeLabel: TLabel;
35
    filenamelabel: TLabel;
36
    SizeValueLabel: TLabel;
37
    DXSound1: TDXSound;
38
    DXMusic1: TDXMusic;
39
    btnPlay: TBitBtn;
40
    btnStop: TBitBtn;
41
    procedure btnStopClick(Sender: TObject);
42
    procedure btnPlayClick(Sender: TObject);
43
    procedure OKButtonClick(Sender: TObject);
44
    procedure CancelButtonClick(Sender: TObject);
45
    procedure LoadButtonClick(Sender: TObject);
46
    procedure SaveButtonClick(Sender: TObject);
47
    procedure ClearButtonClick(Sender: TObject);
48
    procedure FormShow(Sender: TObject);
49
    procedure FormDestroy(Sender: TObject);
50
    procedure FormCreate(Sender: TObject);
51
  private
52
    FChanged: Boolean;
53
    FMidiFileName: string;
54
    FPlaying: Boolean;
55
    T: TMusicListCollectionItem;
56
    procedure UpDateData;
57
    procedure SetPlaying(const Value: Boolean);
58
  public
59
    MidiData: string;
60
    property MidiFileName: string read FMidiFileName write FMidiFileName;
61
    property Playing: Boolean read FPlaying write SetPlaying;
62
  end;
63
 
64
var
65
  DelphiXMidiEditForm: TDelphiXMidiEditForm;
66
 
67
implementation
68
 
69
uses DXConsts;
70
 
71
{$R *.DFM}
72
 
73
procedure TDelphiXMidiEditForm.FormDestroy(Sender: TObject);
74
begin
75
  if Playing then T.Stop;
76
end;
77
 
78
procedure TDelphiXMidiEditForm.FormShow(Sender: TObject);
79
begin
80
  if Length(MidiData) <> 0 then begin
81
    T := DXMusic1.Midis.Add;
82
    T.Midi.MusicData := MidiData;
83
//    if FileExists(MidiFileName) then
84
//      T.LoadFromFile(MidiFileName);
85
  end;
86
  filenamelabel.Caption := MidiFileName;
87
  SizeValueLabel.Caption := Format('%d bytes', [Length(MidiData)]);
88
  UpDateData;
89
end;
90
 
91
procedure TDelphiXMidiEditForm.OKButtonClick(Sender: TObject);
92
begin
93
  if FChanged then
94
  begin
95
    Tag := 1;
96
  end;
97
  Close;
98
end;
99
 
100
procedure TDelphiXMidiEditForm.CancelButtonClick(Sender: TObject);
101
begin
102
  Close;
103
end;
104
 
105
procedure TDelphiXMidiEditForm.ClearButtonClick(Sender: TObject);
106
begin
107
  if Playing then Playing := False;
108
  SetLength(MidiData, 0);
109
  MidiFileName := '';
110
  filenamelabel.Caption := '';
111
  SizeValueLabel.Caption := '';
112
  DXMusic1.Midis.Clear;
113
  FChanged := True;
114
  UpdateData;
115
end;
116
 
117
procedure TDelphiXMidiEditForm.LoadButtonClick(Sender: TObject);
118
begin
119
  if OpenDialog.Execute then
120
  begin
121
    if Playing then Playing := False;
122
    MidiFileName := OpenDialog.FileName;
123
    filenamelabel.Caption := ExtractFileName(MidiFileName);
124
    T := DXMusic1.Midis.Add;
125
    T.LoadFromFile(MidiFileName);
126
    MidiData := T.Midi.MusicData;
127
    SizeValueLabel.Caption := Format('%d bytes', [T.Size]);
128
    FChanged := True;
129
    UpdateData;
130
  end;
131
end;
132
 
133
procedure TDelphiXMidiEditForm.SaveButtonClick(Sender: TObject);
134
var
135
  F: file;
136
begin
137
  if SaveDialog.Execute then
138
  begin
139
    if Playing then Playing := False;
140
    if Length(MidiData) = 0 then Exit;
141
    if FChanged then
142
    begin
143
      if AnsiCompareFileName(MidiFileName, SaveDialog.FileName)=0 then Exit;
144
    end;
145
    AssignFile(F, SaveDialog.FileName);
146
    Rewrite(F,1);
147
    try
148
      BlockWrite(F, MidiData[1], Length(MidiData));
149
    finally
150
      CloseFile(F);
151
    end;
152
  end;
153
end;
154
 
155
procedure TDelphiXMidiEditForm.UpDateData;
156
begin
157
  if Length(mididata) > 0 then begin
158
    SaveButton.Enabled := True;
159
    ClearButton.Enabled := True;
160
    btnPlay.Enabled := True;
161
  end
162
  else begin
163
    SaveButton.Enabled := False;
164
    ClearButton.Enabled := False;
165
    btnPlay.Enabled := false;
166
  end
167
end;
168
 
169
procedure TDelphiXMidiEditForm.FormCreate(Sender: TObject);
170
begin
171
  Tag := 0;
172
  FPlaying := False;
173
end;
174
 
175
procedure TDelphiXMidiEditForm.SetPlaying(const Value: Boolean);
176
begin
177
  if not Value then T.Stop;
178
  FPlaying := Value;
179
end;
180
 
181
procedure TDelphiXMidiEditForm.btnPlayClick(Sender: TObject);
182
begin
183
  FPlaying := True;
184
  T.Play;
185
end;
186
 
187
procedure TDelphiXMidiEditForm.btnStopClick(Sender: TObject);
188
begin
189
  if Playing then Playing := False;
190
end;
191
 
192
end.