📄 playerpage.cpp
字号:
case MPLoading:
PlayBtn->Enabled = false;
PauseBtn->Enabled = false;
StopBtn->Enabled = true;
TitleStatic->Caption = FileFromPath(OpenFile).c_str();
MainForm->TitleLabel->Caption = FileFromPath(OpenFile).c_str();
// TRANSLATOR: Player status when loading file for playback.
MainForm->TimeLabel->Caption = _("Loading...");
break;
case MPOpen: {
PlayBtn->Enabled = false;
PauseBtn->Enabled = false;
StopBtn->Enabled = true;
SeekTrackBar->Enabled = true;
// reset position
MPlayerPositionChange(NULL,0,0);
// set visualization if wanted
int VideoStreams;
if(MPlayer->GetStreamCount(NULL,&VideoStreams) && VideoStreams == 0) {
if(Config->GetValueInt("player/visualization")) {
MPlayer->SetVisualization(true);
MPlayer->SetDisplaySize(MPFitToWindow);
}
}
break;
}
case MPPlaying:
PlayBtn->Enabled = false;
PauseBtn->Enabled = true;
StopBtn->Enabled = true;
break;
case MPPaused:
PlayBtn->Enabled = true;
PauseBtn->Enabled = false;
StopBtn->Enabled = true;
break;
case MPClosed:
case MPStopped:
PlayBtn->Enabled = true;
PauseBtn->Enabled = false;
StopBtn->Enabled = false;
SeekTrackBar->Enabled = false;
// reset position
MPlayerPositionChange(NULL,0,MPlayer->GetDuration());
MPlayer->SetVisualization(false);
break;
case MPError:
// TRANSLATOR: Message box when file cannot be played in integrated player.
AnsiString Error = AnsiString::Format(_("Unable to play file \"%s\"\n") +
_("Either the file could not be opened or the codecs are not supported."),
ARRAYOFCONST((OpenFile.c_str())));
MessageDlg(Error,mtError,TMsgDlgButtons() << mbOK,0);
ClosePlayback();
MPlayer->SetVisualization(false);
return;
}
// main from
MainForm->PlayBtn->Enabled = PlayBtn->Enabled;
MainForm->PauseBtn->Enabled = PauseBtn->Enabled;
MainForm->StopBtn->Enabled = StopBtn->Enabled;
MainForm->PlayProgressBar->Enabled = SeekTrackBar->Enabled;
// display popup
PlayMnu->Enabled = PlayBtn->Enabled;
PauseMnu->Enabled = PauseBtn->Enabled;
StopMnu->Enabled = StopBtn->Enabled;
}
void __fastcall TPlayerForm::MPlayerPositionChange(TObject* Sender, float Position, int Duration)
{
double Length = Duration / 1000;
double Pos = Position;
double PosSec = Pos * Length;
char buf[64];
// CtrlPanel
SeekTrackBar->SelEnd = Pos * SeekTrackBar->Max;
if(!Dragging) {
// CtrlPanel
SeekTrackBar->Position = Pos * SeekTrackBar->Max;
wsprintf(buf,"%02d:%02d",(unsigned int)PosSec/60,((unsigned int)PosSec)%60);
TimeStatic->Caption = buf;
// MainForm
wsprintf(buf,"%02d:%02d / %02d:%02d",(unsigned int)PosSec/60,((unsigned int)PosSec)%60,(unsigned int)Length/60,((unsigned int)Length)%60);
MainForm->TimeLabel->Caption = buf;
MainForm->PlayProgressBar->Position = Pos * MainForm->PlayProgressBar->Max;
}
}
//---------------------------------------------------------------------------
void __fastcall TPlayerForm::MPlayerKeyPress(TObject *Sender, char &Key)
{
switch(Key) {
case 27: // escape
if(MPlayer->GetDisplaySize() == MPFullscreen)
MPlayer->SetDisplaySize(MPFitToWindow);
break;
case ' ':
MPlayer->TogglePause();
break;
}
}
void __fastcall TPlayerForm::MPlayerDisplayPopup(TObject* Sender, bool Show)
{
if(!Show)
return;
switch(MPlayer->GetDisplaySize()) {
case MPHalfSize: ZoomHalfMnu->Checked = true; break;
case MPDefaultSize: ZoomDefaultMnu->Checked = true; break;
case MPDoubleSize: ZoomDoubleMnu->Checked = true; break;
case MPFitToWindow: ZoomFitMnu->Checked = true; break;
case MPFullscreen: ZoomFullMnu->Checked = true; break;
}
POINT Point;
::GetCursorPos(&Point);
::ShowCursor(TRUE);
DisplayPopup->Popup(Point.x,Point.y);
}
//---------------------------------------------------------------------------
void __fastcall TPlayerForm::CtrlPanelProc(TMessage &Msg)
{
if(Msg.Msg == WM_HSCROLL && (HWND)Msg.LParam == SeekTrackBar->Handle) {
switch(LOWORD(Msg.WParam)) {
case TB_PAGEUP:
case TB_PAGEDOWN:
Msg.WParam = (Msg.WParam & 0xFFFF) | (::SendMessage(SeekTrackBar->Handle,TBM_GETPOS,0,0) << 16);
// fall through
case TB_THUMBTRACK: {
SeekDrag((double)HIWORD(Msg.WParam) / SeekTrackBar->Max);
break;
}
case TB_ENDTRACK:
Msg.WParam = (Msg.WParam & 0xFFFF) | (::SendMessage(SeekTrackBar->Handle,TBM_GETPOS,0,0) << 16);
// fall through
case TB_THUMBPOSITION:
SeekSet((double)HIWORD(Msg.WParam) / SeekTrackBar->Max, true);
break;
}
}
OldCtrlPanelProc(Msg);
}
//---------------------------------------------------------------------------
void __fastcall TPlayerForm::PlayBtnClick(TObject *Sender)
{
if(MPlayer->GetState() == MPPaused) {
MPlayer->Pause(false);
} else {
if(!MPlayer->Play(OpenFile.c_str()))
ClosePlayback();
}
}
void __fastcall TPlayerForm::PauseBtnClick(TObject *Sender)
{
MPlayer->Pause(true);
}
void __fastcall TPlayerForm::StopBtnClick(TObject *Sender)
{
MPlayer->Stop();
}
//---------------------------------------------------------------------------
void __fastcall TPlayerForm::VisualizationBtnClick(TObject *Sender)
{
Config->SetValueInt("player/visualization",VisualizationBtn->Down);
// set visualization if audio file is playing
int VideoStreams;
if(MPlayer->GetStreamCount(NULL,&VideoStreams) && VideoStreams == 0) {
if(Config->GetValueInt("player/visualization")) {
MPlayer->SetVisualization(true);
MPlayer->SetDisplaySize(MPFitToWindow);
} else {
MPlayer->SetVisualization(false);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TPlayerForm::MuteBtnClick(TObject *Sender)
{
MPlayer->Mute(MuteBtn->Down);
}
void __fastcall TPlayerForm::VolumeTrackBarChange(TObject *Sender)
{
MPlayer->SetVolume((double)VolumeTrackBar->Position / VolumeTrackBar->Max);
}
//---------------------------------------------------------------------------
void __fastcall TPlayerForm::ZoomHalfMnuClick(TObject *Sender)
{
MPlayer->SetDisplaySize(MPHalfSize);
}
void __fastcall TPlayerForm::ZoomDefaultMnuClick(TObject *Sender)
{
MPlayer->SetDisplaySize(MPDefaultSize);
}
void __fastcall TPlayerForm::ZoomDoubleMnuClick(TObject *Sender)
{
MPlayer->SetDisplaySize(MPDoubleSize);
}
void __fastcall TPlayerForm::ZoomFitMnuClick(TObject *Sender)
{
MPlayer->SetDisplaySize(MPFitToWindow);
}
void __fastcall TPlayerForm::ZoomFullMnuClick(TObject *Sender)
{
MPlayer->SetDisplaySize(MPFullscreen);
}
//---------------------------------------------------------------------------
void __fastcall TPlayerForm::HidePlayerBtnClick(TObject *Sender)
{
if(PlayerPanel->Visible) {
VSplitter->Visible = false;
PlayerPanel->Visible = false;
HidePlayerBtn->Glyph->LoadFromResourceName((unsigned int)HInstance,"SLIDE_LEFT_BMP");
} else {
// order panels correctly
VSplitter->Left = 0;
PlayerPanel->Left = 1;
PlayerPanel->Visible = true;
VSplitter->Visible = true;
HidePlayerBtn->Glyph->LoadFromResourceName((unsigned int)HInstance,"SLIDE_RIGHT_BMP");
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -