Subversion Repositories spacemission

Compare Revisions

Regard whitespace Rev 3 → Rev 4

/VCL_DELPHIX_D6/DXMidiEdit.pas
0,0 → 1,192
unit DXMidiEdit;
//(c)2007 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) load existing midi file and store it into rersource.
b) allow do play.
 
}
interface
uses
Windows, SysUtils, Classes, Forms, Dialogs, Controls, StdCtrls, ExtCtrls,
Buttons, ComCtrls, Graphics, DXSounds;
 
type
 
{ TDelphiXWaveEditForm }
 
TDelphiXMidiEditForm = class(TForm)
Bevel2: TBevel;
OKButton: TButton;
CancelButton: TButton;
SaveDialog: TSaveDialog;
OpenDialog: TOpenDialog;
ClearButton: TButton;
SaveButton: TButton;
LoadButton: TButton;
Panel1: TPanel;
LengthLabel: TLabel;
SizeLabel: TLabel;
filenamelabel: TLabel;
SizeValueLabel: TLabel;
DXSound1: TDXSound;
DXMusic1: TDXMusic;
btnPlay: TBitBtn;
btnStop: TBitBtn;
procedure btnStopClick(Sender: TObject);
procedure btnPlayClick(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
procedure LoadButtonClick(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure ClearButtonClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FChanged: Boolean;
FMidiFileName: string;
FPlaying: Boolean;
T: TMusicListCollectionItem;
procedure UpDateData;
procedure SetPlaying(const Value: Boolean);
public
MidiData: string;
property MidiFileName: string read FMidiFileName write FMidiFileName;
property Playing: Boolean read FPlaying write SetPlaying;
end;
 
var
DelphiXMidiEditForm: TDelphiXMidiEditForm;
 
implementation
 
uses DXConsts;
 
{$R *.DFM}
 
procedure TDelphiXMidiEditForm.FormDestroy(Sender: TObject);
begin
if Playing then T.Stop;
end;
 
procedure TDelphiXMidiEditForm.FormShow(Sender: TObject);
begin
if Length(MidiData) <> 0 then begin
T := DXMusic1.Midis.Add;
T.Midi.MusicData := MidiData;
// if FileExists(MidiFileName) then
// T.LoadFromFile(MidiFileName);
end;
filenamelabel.Caption := MidiFileName;
SizeValueLabel.Caption := Format('%d bytes', [Length(MidiData)]);
UpDateData;
end;
 
procedure TDelphiXMidiEditForm.OKButtonClick(Sender: TObject);
begin
if FChanged then
begin
Tag := 1;
end;
Close;
end;
 
procedure TDelphiXMidiEditForm.CancelButtonClick(Sender: TObject);
begin
Close;
end;
 
procedure TDelphiXMidiEditForm.ClearButtonClick(Sender: TObject);
begin
if Playing then Playing := False;
SetLength(MidiData, 0);
MidiFileName := '';
filenamelabel.Caption := '';
SizeValueLabel.Caption := '';
DXMusic1.Midis.Clear;
FChanged := True;
UpdateData;
end;
 
procedure TDelphiXMidiEditForm.LoadButtonClick(Sender: TObject);
begin
if OpenDialog.Execute then
begin
if Playing then Playing := False;
MidiFileName := OpenDialog.FileName;
filenamelabel.Caption := ExtractFileName(MidiFileName);
T := DXMusic1.Midis.Add;
T.LoadFromFile(MidiFileName);
MidiData := T.Midi.MusicData;
SizeValueLabel.Caption := Format('%d bytes', [T.Size]);
FChanged := True;
UpdateData;
end;
end;
 
procedure TDelphiXMidiEditForm.SaveButtonClick(Sender: TObject);
var
F: file;
begin
if SaveDialog.Execute then
begin
if Playing then Playing := False;
if Length(MidiData) = 0 then Exit;
if FChanged then
begin
if AnsiCompareFileName(MidiFileName, SaveDialog.FileName)=0 then Exit;
end;
AssignFile(F, SaveDialog.FileName);
Rewrite(F,1);
try
BlockWrite(F, MidiData[1], Length(MidiData));
finally
CloseFile(F);
end;
end;
end;
 
procedure TDelphiXMidiEditForm.UpDateData;
begin
if Length(mididata) > 0 then begin
SaveButton.Enabled := True;
ClearButton.Enabled := True;
btnPlay.Enabled := True;
end
else begin
SaveButton.Enabled := False;
ClearButton.Enabled := False;
btnPlay.Enabled := false;
end
end;
 
procedure TDelphiXMidiEditForm.FormCreate(Sender: TObject);
begin
Tag := 0;
FPlaying := False;
end;
 
procedure TDelphiXMidiEditForm.SetPlaying(const Value: Boolean);
begin
if not Value then T.Stop;
FPlaying := Value;
end;
 
procedure TDelphiXMidiEditForm.btnPlayClick(Sender: TObject);
begin
FPlaying := True;
T.Play;
end;
 
procedure TDelphiXMidiEditForm.btnStopClick(Sender: TObject);
begin
if Playing then Playing := False;
end;
 
end.