⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playerpage.cpp

📁 Last change: 2008-02-03 This is the source code of KCeasy。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -