0,0 → 1,353 |
// akMediaAdmin v. 1.1 |
// Copyright (c) 1999-2000 Anatoli Klassen |
|
// Main Unit |
unit MainUnit; |
|
interface |
|
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
ExtCtrls, ComCtrls, StdCtrls, ImgList, ToolWin, MPlayer, ShellAPI, LoadUnit; |
|
type |
TMainForm = class(TForm) |
FilesBox: TListBox; |
StatusBar: TStatusBar; |
ToolBar: TToolBar; |
AddButton: TToolButton; |
ToolHotImages: TImageList; |
AboutButton: TToolButton; |
ToolImages: TImageList; |
ToolDisabledImages: TImageList; |
ToolSeparator1: TToolButton; |
MPlayer: TMediaPlayer; |
OpenDialog: TOpenDialog; |
PlayBar: TProgressBar; |
ToolSeparator2: TToolButton; |
PlayButton: TToolButton; |
StopButton: TToolButton; |
ToolSeparator3: TToolButton; |
PlayTimer: TTimer; |
ClearButton: TToolButton; |
HelpButton: TToolButton; |
procedure FilesBoxDrawItem(Control: TWinControl; Index: Integer; |
Rect: TRect; State: TOwnerDrawState); |
procedure AddButtonClick(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
procedure FilesBoxClick(Sender: TObject); |
procedure FilesBoxKeyPress(Sender: TObject; var Key: Char); |
procedure AboutButtonClick(Sender: TObject); |
procedure FormResize(Sender: TObject); |
procedure PlayButtonClick(Sender: TObject); |
procedure StopButtonClick(Sender: TObject); |
procedure PlayTimerTimer(Sender: TObject); |
procedure ClearButtonClick(Sender: TObject); |
procedure FormDestroy(Sender: TObject); |
procedure FilesBoxKeyDown(Sender: TObject; var Key: Word; |
Shift: TShiftState); |
procedure HelpButtonClick(Sender: TObject); |
procedure FormShow(Sender: TObject); |
procedure PlayBarMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
private |
function CalcTimes : longint; |
procedure CalcSelectedTimes; |
procedure Load(Files : TStrings); |
procedure ClearList; |
procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES; |
procedure PlayerStart; |
procedure PlayerStop; |
procedure UpdatePlayerState; |
public |
end; |
|
var |
MainForm: TMainForm; |
|
implementation |
|
uses AboutUnit, UtilsUnit, FileCtrl, WaitUnit; |
|
{$R *.DFM} |
|
procedure TMainForm.FormCreate(Sender: TObject); |
begin |
Application.HelpFile := |
AddSlash(ExtractFileDir(Application.ExeName)) + 'akmadmin.hlp'; |
DragAcceptFiles(Handle, True); |
UpdatePlayerState; |
end; |
|
procedure TMainForm.FormShow(Sender: TObject); |
var |
i : longint; |
S : TStringList; |
|
begin |
// load files from command line |
S := TStringList.Create; |
for i := 1 to ParamCount do |
S.Add(ParamStr(i)); |
Load(S); |
S.Free; |
end; |
|
procedure TMainForm.FormDestroy(Sender: TObject); |
begin |
ClearList; |
end; |
|
procedure TMainForm.AddButtonClick(Sender: TObject); |
begin |
if OpenDialog.Execute then |
Load(OpenDialog.Files); |
end; |
|
procedure TMainForm.HelpButtonClick(Sender: TObject); |
begin |
Application.HelpJump('main'); |
end; |
|
procedure TMainForm.AboutButtonClick(Sender: TObject); |
begin |
AboutBox.ShowModal; |
end; |
|
procedure TMainForm.FilesBoxClick(Sender: TObject); |
begin |
CalcSelectedTimes; |
UpdatePlayerState; |
end; |
|
procedure TMainForm.FilesBoxKeyPress(Sender: TObject; var Key: Char); |
begin |
CalcSelectedTimes; |
UpdatePlayerState; |
end; |
|
procedure TMainForm.PlayButtonClick(Sender: TObject); |
begin |
PlayerStart; |
end; |
|
procedure TMainForm.StopButtonClick(Sender: TObject); |
begin |
PlayerStop; |
end; |
|
procedure TMainForm.ClearButtonClick(Sender: TObject); |
begin |
ClearList; |
StatusBar.Panels[1].Text := 'Total: 0; time: ' + ShowTime(0); |
UpdatePlayerState; |
ClearButton.Enabled := False; |
end; |
|
procedure TMainForm.FilesBoxDrawItem(Control: TWinControl; Index: Integer; |
Rect: TRect; State: TOwnerDrawState); |
var |
R : TRect; |
FI : TFileInfo; |
|
begin |
with FilesBox.Canvas do begin |
FI := TFileInfo(FilesBox.Items.Objects[Index]); |
TextRect(Rect, Rect.Left, Rect.Top, FI.Name); |
R := Rect; |
R.Left := R.Right - TextWidth(FI.TimeString) - 2; |
TextRect(R, R.Left, R.Top, FI.TimeString); |
end; |
end; |
|
procedure TMainForm.FilesBoxKeyDown(Sender: TObject; var Key: Word; |
Shift: TShiftState); |
begin |
if Key = VK_DELETE then begin // if 'delete' key was pressed |
// delete corresponded TFileInfo for current item |
if FilesBox.Items.Objects[FilesBox.ItemIndex] <> nil then |
FilesBox.Items.Objects[FilesBox.ItemIndex].Free; |
FilesBox.Items.Objects[FilesBox.ItemIndex] := nil; |
FilesBox.Items.Delete(FilesBox.ItemIndex); |
|
StatusBar.Panels[1].Text := 'Total: ' + IntToStr(FilesBox.Items.Count) |
+ '; time: ' + ShowTime(CalcTimes); |
ClearButton.Enabled := (FilesBox.Items.Count > 0); |
UpdatePlayerState; |
end; |
end; |
|
function TMainForm.CalcTimes : longint; |
var |
i : longint; |
|
begin |
Result := 0; |
for i := 0 to FilesBox.Items.Count - 1 do |
Result := Result + TFileInfo(FilesBox.Items.Objects[i]).Time; |
end; |
|
procedure TMainForm.CalcSelectedTimes; |
var |
i, t : longint; |
|
begin |
t := 0; |
for i := 0 to FilesBox.Items.Count - 1 do |
if FilesBox.Selected[i] then begin |
t := t + TFileInfo(FilesBox.Items.Objects[i]).Time; |
end; |
StatusBar.Panels[0].Text := 'Selected: ' + IntToStr(FilesBox.SelCount) |
+ '; time: ' + ShowTime(t); |
end; |
|
// Handle Windows message for drop files |
procedure TMainForm.WMDropFiles; |
var |
FileName : array[0 .. 256] of Char; |
Count, i : integer; |
S : TStringList; |
|
begin |
Count := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0); |
|
S := TStringList.Create; |
for i := 0 to Count-1 do begin |
DragQueryFile(Msg.WParam, i, FileName, SizeOf(FileName)); |
S.Add(String(FileName)); |
end; |
Load(S); |
S.Free; |
|
DragFinish(Msg.WParam); |
end; |
|
procedure TMainForm.FormResize(Sender: TObject); |
begin |
FilesBox.Repaint; // the TListBox does not repaint itself correctly |
StatusBar.Panels[0].Width := StatusBar.Width div 2; |
end; |
|
procedure TMainForm.PlayerStart; |
begin |
if MPlayer.FileName <> '' then begin |
MPlayer.Play; |
PlayTimer.Enabled := True; |
PlayButton.Enabled := False; |
StopButton.Enabled := True; |
end |
else begin |
PlayButton.Enabled := False; |
StopButton.Enabled := False; |
end; |
end; |
|
procedure TMainForm.PlayerStop; |
begin |
PlayTimer.Enabled := False; |
if MPlayer.FileName <> '' then begin |
MPlayer.Stop; |
PlayButton.Enabled := True; |
StopButton.Enabled := False; |
end |
else begin |
PlayButton.Enabled := False; |
StopButton.Enabled := False; |
end; |
end; |
|
procedure TMainForm.UpdatePlayerState; |
begin |
MPlayer.Close; |
PlayBar.Position := 0; |
PlayTimer.Enabled := False; |
PlayButton.Enabled := False; |
StopButton.Enabled := False; |
|
if (FilesBox.ItemIndex < 0) or (FilesBox.Items.Count = 0) then |
MPlayer.FileName := '' |
else begin |
if FileExists(TFileInfo(FilesBox.Items.Objects[FilesBox.ItemIndex]).FileName) |
then |
try |
MPlayer.FileName := |
TFileInfo(FilesBox.Items.Objects[FilesBox.ItemIndex]).FileName; |
|
// find correct type of the file with 'cut and try' method |
MPlayer.DeviceType := dtAutoSelect; |
repeat |
try |
MPlayer.Open; |
PlayBar.Max := MPlayer.Length; |
PlayTimer.Enabled := True; |
PlayButton.Enabled := True; |
Break; |
except |
if MPlayer.DeviceType < dtWaveAudio then |
MPlayer.DeviceType := Succ(MPlayer.DeviceType) |
else |
Break; |
end; |
until False; |
except |
end |
else begin |
PlayBar.Max := 100; |
end; |
end; |
end; |
|
procedure TMainForm.PlayTimerTimer(Sender: TObject); |
begin |
PlayBar.Position := MPlayer.Position; |
if MPlayer.Mode = mpStopped then begin |
PlayerStop; |
MPlayer.Position := 0; |
end; |
end; |
|
procedure TMainForm.ClearList; |
var |
i : longint; |
|
begin |
// delete corresponded TFileInfo's for all items |
for i := 0 to FilesBox.Items.Count - 1 do begin |
if FilesBox.Items.Objects[i] <> nil then |
FilesBox.Items.Objects[i].Free; |
FilesBox.Items.Objects[i] := nil; |
end; |
|
FilesBox.Items.Clear; |
end; |
|
procedure TMainForm.Load(Files : TStrings); |
var |
Result : TStrings; |
|
begin |
if Files.Count = 0 then Exit; |
|
Result := WaitForm.Execute(Files); |
FilesBox.Items.BeginUpdate; |
FilesBox.Items.AddStrings(Result); |
FilesBox.Items.EndUpdate; |
Result.Free; |
|
StatusBar.Panels[1].Text := 'Total: ' + IntToStr(FilesBox.Items.Count) |
+ '; time: ' + ShowTime(CalcTimes); |
ClearButton.Enabled := (FilesBox.Items.Count > 0); |
UpdatePlayerState; |
end; |
|
procedure TMainForm.PlayBarMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if MPlayer.Mode <> mpPlaying then Exit; |
PlayTimer.Enabled := False; |
MPlayer.Position := Trunc(X/PlayBar.Width*PlayBar.Max); |
MPlayer.Play; |
PlayTimer.Enabled := True; |
end; |
|
end. |