1474 lines
38 KiB
C++
1474 lines
38 KiB
C++
//---------------------------------------------------------------------------
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
|
|
#include "GlobalUnit.h"
|
|
#include "BaseFormUnit.h"
|
|
#include "StyleSelFormUnit.h"
|
|
#include "MessageFormUnit.h"
|
|
//#include "ComposeFormUnit.h"
|
|
|
|
static const TCursor crApart = 0x59,
|
|
crCombine = 0x5A;
|
|
//---------------------------------------------------------------------------
|
|
#pragma package(smart_init)
|
|
#pragma link "PNGButton"
|
|
#pragma resource "*.dfm"
|
|
//USEFORM("MessageFormUnit.cpp", MessageForm);
|
|
|
|
TBaseForm *BaseForm;
|
|
|
|
extern TPNGButton *g_btnFontChange;
|
|
extern Vcl::Extctrls::TPanel *g_panelFontName;
|
|
extern CommonListBoxUnit::TListBox *g_lbFontSelect;
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
__fastcall TBaseForm::TBaseForm(TComponent* Owner)
|
|
: TBackgroundForm(Owner)
|
|
{
|
|
m_bCanErase = false;
|
|
m_iStartBar = m_iLastStartBar = 0;
|
|
m_dblStartPoint = m_dblLastStartPoint = 0;
|
|
m_tTimer = m_tAccuracy = 0;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::FormCreate(TObject *Sender)
|
|
{
|
|
SetTransparent( this );
|
|
|
|
m_lstMainKeys[0] = m_btnMainKey0;
|
|
m_lstMainKeys[1] = m_btnMainKey1;
|
|
m_lstMainKeys[2] = m_btnMainKey2;
|
|
m_lstMainKeys[3] = m_btnMainKey3;
|
|
m_lstMainKeys[4] = m_btnMainKey4;
|
|
m_lstMainKeys[5] = m_btnMainKey5;
|
|
m_lstMainKeys[6] = m_btnMainKey6;
|
|
|
|
for(int i = 0; i < 7; i++ ){
|
|
m_lstMainKeys[i]->Tag = i;
|
|
|
|
String sk = "BaseKey";
|
|
m_aImagKeyLM[i] = new TPngImage();
|
|
m_aImagKeyEG[i] = new TPngImage();
|
|
|
|
m_aImagKeyLM[i]->LoadFromResourceName(int(HInstance), sk + IntToStr(i));
|
|
|
|
char ch = 'A' + ( i+2 ) % 7;
|
|
sk += ch;
|
|
|
|
m_aImagKeyEG[i]->LoadFromResourceName(int(HInstance),sk);
|
|
}
|
|
|
|
m_lblPlayTime->Font->Color = RGB(60,43,23);
|
|
m_lblBeat->Font->Color = RGB(60,43,23);
|
|
m_lblTempo->Font->Color = RGB(60,43,23);
|
|
m_lblKey->Font->Color = RGB(60,43,23);
|
|
m_lblStyleName->Font->Color = RGB(60,43,23);
|
|
|
|
m_lstAjustKeys[0] = m_btnAjustKey0;
|
|
m_lstAjustKeys[1] = m_btnAjustKey1;
|
|
|
|
m_lstChordTypes[0] = m_btnChordType0;
|
|
m_lstChordTypes[1] = m_btnChordType1;
|
|
m_lstChordTypes[2] = m_btnChordType2;
|
|
|
|
Screen->Cursors[crApart] = LoadCursor(HInstance, L"ApartCursor");
|
|
Screen->Cursors[crCombine] = LoadCursor(HInstance, L"CombineCursor");
|
|
|
|
m_pPopMenu = new TPopMenu(this);
|
|
|
|
// m_btnAPR->Enabled = g_bAPRAvaliable;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::FormDestroy(TObject *Sender)
|
|
{
|
|
if( m_panelBarsShow->IsPlaying() )
|
|
StopClick( NULL );
|
|
|
|
if( m_pPopMenu )
|
|
delete m_pPopMenu;
|
|
|
|
for(int i = 0; i < 7; i++)
|
|
delete m_aImagKeyLM[i];
|
|
for(int i = 0; i < 7; i++)
|
|
delete m_aImagKeyEG[i];
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::FormResize(TObject *Sender)
|
|
{
|
|
int wOriClient = 798,
|
|
hOriClient = 494;
|
|
|
|
m_btnPrevStep->Top = Height - DPIY( hOriClient - 460 );
|
|
m_btnNextStep->Top = m_btnPrevStep->Top;
|
|
m_btnNextStep->Left = ClientWidth - DPIX( wOriClient - 705 );
|
|
|
|
m_imgBreakH->Width = Width - 28;
|
|
m_imgBreakI->Left = Width - DPIX( wOriClient - 649 );
|
|
m_btnAudioEffect->Left = m_imgBreakI->Left - DPIX(60);
|
|
|
|
m_btnVolAudioSet->Top = Height - DPIY( hOriClient - 455 );
|
|
m_btnVolMusicSet->Top = m_btnVolAudioSet->Top;
|
|
m_btnMicSet->Top = m_btnVolAudioSet->Top;
|
|
m_btnStyleChange->Top = m_btnVolAudioSet->Top;
|
|
m_panelStyleName->Top = m_btnVolAudioSet->Top + 1;
|
|
|
|
m_panelAudioVolSet->Top = Height - DPIY(hOriClient - 322);
|
|
m_panelMusicVolSet->Top = m_panelAudioVolSet->Top;
|
|
m_panelMusicInfo->Left = Width - DPIX( wOriClient - 666 );
|
|
m_lbKeySelect->Left = m_panelMusicInfo->Left + m_btnKeyChange->Left - m_lbKeySelect->Width;
|
|
|
|
m_panelBarsShow->SetBounds( m_panelBarsShow->Left,
|
|
m_panelBarsShow->Top,
|
|
Width,
|
|
Height - DPIY(84) );
|
|
|
|
// m_lbKeySelect->Left = Width - 62;
|
|
// m_lbKeySelect->Top = m_imgMusicInfoBk->Top + m_imgMusicInfoBk->Height;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::FormActivate(TObject *Sender)
|
|
{
|
|
if( Sender ){
|
|
return;
|
|
}
|
|
|
|
m_btnApart->Down = false;
|
|
m_btnCombine->Down = false;
|
|
// m_btnA->Down = g_bAPRActive;
|
|
OnChangeChordMode(NULL);
|
|
|
|
m_bCanErase = false;
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
|
|
m_lblBeat->Caption = g_strTimeSignature[g_iMelodyTimeSignature];
|
|
m_lblTempo->Caption = IntToStr( g_nMelodyTempo );
|
|
|
|
if( g_iMelodyKey>=0 ){
|
|
m_lblKey->Caption = g_strMelodyKey[g_iMelodyKey];
|
|
}
|
|
else{
|
|
m_lblKey->Caption = "-";
|
|
}
|
|
|
|
m_lblStyleName->Caption = g_strSelectedStyleName.data();
|
|
|
|
if( !g_bBaseComposeLoaded ){//自动编曲
|
|
g_bkMelody.Clear();
|
|
ReloadBaseCompose();
|
|
}
|
|
else{
|
|
f_MM_SetStreamVolume( 3, g_fMusicVolume );
|
|
}
|
|
|
|
// m_btnReload->Enabled = false;
|
|
|
|
f_MM_SetStreamVolume( 2, g_fAudioVolume );
|
|
|
|
m_nAudioVolPos = 100 - g_fAudioVolume * 100;
|
|
m_nMusicVolPos = 100 - g_fMusicVolume * 100;
|
|
|
|
m_btnAudioVolPos->Top = 5 + m_nAudioVolPos;
|
|
m_btnMusicVolPos->Top = 5 + m_nMusicVolPos;
|
|
m_btnAudioVolPos->Hint = IntToStr(100-m_nAudioVolPos);
|
|
m_btnMusicVolPos->Hint = IntToStr(100-m_nMusicVolPos);
|
|
|
|
m_iStartBar = m_iLastStartBar = 0;
|
|
m_dblStartPoint = m_dblLastStartPoint = 0;
|
|
m_panelBarsShow->SetPlayPoint( 0, 0 );
|
|
ShowPlayTime();
|
|
|
|
m_panelBarsShow->SetFocus();
|
|
m_panelBarsShow->InitialVars();
|
|
Invalidate();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::FormDeactivate(TObject *Sender)
|
|
{
|
|
if( Application->ActiveFormHandle!=Application->MainFormHandle ){
|
|
return;
|
|
}
|
|
|
|
StopClick( NULL );
|
|
|
|
g_bCanStep = true;
|
|
if( Sender ){
|
|
ReloadBaseCompose();
|
|
}
|
|
|
|
m_btnApart->Down = false;
|
|
m_btnCombine->Down = false;
|
|
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
|
|
HidePopControls();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::StepClick(TObject *Sender)
|
|
{
|
|
PostMessage(Application->MainFormHandle, UM_JUMP_PAGE, Sender==m_btnNextStep?WPARAM(3):WPARAM(1),LPARAM(this));
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::PlayClick(TObject *Sender)
|
|
{
|
|
double dblComposeStartPoint = m_iStartBar + m_dblStartPoint / POINTS_PER_BAR ;
|
|
|
|
ReloadBaseCompose();
|
|
|
|
HRESULT hr = f_MM_Play( Handle, dblComposeStartPoint, TYPE_AUDIO_BASECOMPOSE );
|
|
if( hr==S_OK ){
|
|
SetPlayTimer( true, m_tTimer, m_tAccuracy, Handle );
|
|
|
|
m_panelBarsShow->Play( true );
|
|
m_btnPlay->Visible = false;
|
|
m_btnPlay->Down = true;
|
|
m_btnPause->Visible = true;
|
|
m_btnStop->Enabled = true;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::StopClick(TObject *Sender)
|
|
{
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
SetPlayTimer( false, m_tTimer, m_tAccuracy );
|
|
f_MM_Stop();
|
|
m_panelBarsShow->Play( false );
|
|
}
|
|
|
|
m_btnStop->Enabled = false;
|
|
m_btnPlay->Down = false;
|
|
m_btnPlay->Visible = true;
|
|
m_btnPause->Visible = false;
|
|
|
|
m_iStartBar = m_iLastStartBar;
|
|
m_dblStartPoint = m_dblLastStartPoint;
|
|
m_panelBarsShow->SetPlayPoint( m_iStartBar, (int)m_dblStartPoint );
|
|
ShowPlayTime();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::PauseClick(TObject *Sender)
|
|
{
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
SetPlayTimer( false, m_tTimer, m_tAccuracy );
|
|
|
|
f_MM_Stop();
|
|
|
|
m_panelBarsShow->Play( false );
|
|
}
|
|
|
|
m_btnPlay->Visible = true;
|
|
m_btnPlay->Down = false;
|
|
m_btnPause->Visible = false;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::PlayTimeClick(TObject *Sender)
|
|
{
|
|
g_bShowPlayTick = !g_bShowPlayTick;
|
|
if( m_lblPlayTime->Caption.Compare("--:--:---")!=0 )
|
|
ShowPlayTime();
|
|
if( g_bShowPlayTick ){
|
|
m_lblPlayTime->Hint = "当前位置(节拍)";
|
|
}
|
|
else{
|
|
m_lblPlayTime->Hint = "当前位置(时间)";
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnKeyChangeClick(TObject *Sender)
|
|
{
|
|
HidePopControls();
|
|
|
|
if( !m_lbKeySelect->Visible ){
|
|
m_btnKeyChange->Down = true;
|
|
if( m_lbKeySelect->ItemIndex != g_iMelodyKey )
|
|
m_lbKeySelect->ItemIndex = g_iMelodyKey;
|
|
m_lbKeySelect->Show();
|
|
m_lbKeySelect->SetFocus();
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::LBKeySelectMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
|
{
|
|
if( X>=0 && X < m_lbKeySelect->Width && Y>=0 && Y<m_lbKeySelect->Height ){
|
|
int iKey = m_lbKeySelect->ItemIndex;
|
|
if( iKey>=0 && iKey!=g_iMelodyKey ){
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
StopClick(NULL);
|
|
}
|
|
|
|
g_iMelodyKey = iKey;
|
|
|
|
m_lblKey->Caption = g_strMelodyKey[g_iMelodyKey];
|
|
|
|
if( g_bPredefine ){
|
|
g_bComposeLoaded = false;
|
|
}
|
|
else{
|
|
SetWavNotes();
|
|
|
|
ClearGlobalVars( LIST_MELODYCHORDS | LIST_MELODYSTAGES |
|
|
LIST_COMPOSESTAGES | LIST_COMPLETEVOLS );
|
|
}
|
|
|
|
ReloadBaseCompose();
|
|
|
|
//切换调要调整
|
|
if( g_iShowType ) {
|
|
OnChangeChordMode(NULL);//ChangeBtnTag();
|
|
}
|
|
g_iComposeKey = g_iMelodyKey;
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
m_panelBarsShow->InitialVars();
|
|
// m_btnReload->Enabled = false;
|
|
}
|
|
}
|
|
|
|
HidePopList( m_lbKeySelect );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TBaseForm::HidePopList(CommonListBoxUnit::TListBox* pList)
|
|
{
|
|
if( pList==m_lbKeySelect )
|
|
m_btnKeyChange->Down = false;
|
|
|
|
pList->Hide();
|
|
m_panelBarsShow->SetFocus();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnVolSetClick(TObject *Sender)
|
|
{
|
|
if( Sender==m_btnVolAudioSet ){
|
|
if( m_panelAudioVolSet->Visible ){
|
|
m_panelAudioVolSet->Hide();
|
|
m_btnVolAudioSet->Down = false;
|
|
}
|
|
else{
|
|
m_panelAudioVolSet->Show();
|
|
m_btnVolAudioSet->Down = true;
|
|
}
|
|
}
|
|
else if( Sender==m_btnVolMusicSet ){
|
|
if( m_panelMusicVolSet->Visible ){
|
|
m_panelMusicVolSet->Hide();
|
|
m_btnVolMusicSet->Down = false;
|
|
}
|
|
else{
|
|
m_panelMusicVolSet->Show();
|
|
m_btnVolMusicSet->Down = true;
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::ImgVolSetMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
|
{
|
|
if( Button==mbLeft && X>8 && X<24 && Y>=16 && Y<=116 ){
|
|
int yPos = Y - 16;
|
|
if( Sender==m_imgAudioVolSet ){
|
|
m_nAudioVolPos = yPos;
|
|
m_btnAudioVolPos->Top = yPos + 5;
|
|
m_btnAudioVolPos->Hint = IntToStr(100-m_nAudioVolPos);
|
|
|
|
g_fAudioVolume = (100-m_nAudioVolPos)/100.0;
|
|
f_MM_SetStreamVolume( 2, g_fAudioVolume );
|
|
}
|
|
else{
|
|
m_nMusicVolPos = yPos;
|
|
m_btnMusicVolPos->Top = yPos + 5;
|
|
m_btnMusicVolPos->Hint = IntToStr(100-m_nMusicVolPos);
|
|
|
|
g_fMusicVolume = (100-m_nMusicVolPos)/100.0;
|
|
f_MM_SetStreamVolume( 3, g_fMusicVolume );
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnVolPosMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X,
|
|
int Y)
|
|
{
|
|
if( Button==mbLeft ){
|
|
m_bPosDraging = true;
|
|
m_yPosDragBegin = Y;
|
|
((TPNGButton*)Sender)->Hint = "";
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnVolPosMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
|
|
{
|
|
if( m_bPosDraging==true ){
|
|
int yPos = (Sender==m_btnAudioVolPos)?m_nAudioVolPos:m_nMusicVolPos;
|
|
yPos += Y - m_yPosDragBegin;
|
|
|
|
if( yPos<0 )
|
|
yPos = 0;
|
|
else if( yPos>100 )
|
|
yPos = 100;
|
|
|
|
if( Sender==m_btnAudioVolPos ){
|
|
m_nAudioVolPos = yPos;
|
|
m_btnAudioVolPos->Top = yPos + 5;
|
|
}
|
|
else{
|
|
m_nMusicVolPos = yPos;
|
|
m_btnMusicVolPos->Top = yPos + 5;
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnVolPosMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
|
{
|
|
if( Button==mbLeft && m_bPosDraging ){
|
|
m_bPosDraging = false;
|
|
|
|
if( Sender==m_btnAudioVolPos ){
|
|
m_btnAudioVolPos->Hint = IntToStr(100-m_nAudioVolPos);
|
|
|
|
g_fAudioVolume = (100-m_nAudioVolPos)/100.0;
|
|
f_MM_SetStreamVolume( 2, g_fAudioVolume );
|
|
}
|
|
else{
|
|
m_btnMusicVolPos->Hint = IntToStr(100-m_nMusicVolPos);
|
|
|
|
g_fMusicVolume = (100-m_nMusicVolPos)/100.0;
|
|
f_MM_SetStreamVolume( 3, g_fMusicVolume );
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::ApartClick(TObject *Sender)
|
|
{
|
|
HidePopControls();
|
|
|
|
m_btnApart->Down = !m_btnApart->Down;
|
|
m_btnCombine->Down = false;
|
|
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::CombineClick(TObject *Sender)
|
|
{
|
|
HidePopControls();
|
|
|
|
m_btnApart->Down = false;
|
|
m_btnCombine->Down = !m_btnCombine->Down;
|
|
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BarsShowMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
|
{
|
|
if( m_panelAudioVolSet->Visible ){
|
|
m_panelAudioVolSet->Hide();
|
|
m_btnVolAudioSet->Down = false;
|
|
}
|
|
|
|
if( m_panelMusicVolSet->Visible ){
|
|
m_panelMusicVolSet->Hide();
|
|
m_btnVolMusicSet->Down = false;
|
|
}
|
|
|
|
if( m_lbKeySelect->Visible ){
|
|
m_lbKeySelect->Hide();
|
|
m_btnKeyChange->Down = false;
|
|
}
|
|
|
|
// if( !m_btnReload->Down ){
|
|
if( m_btnApart->Enabled && m_btnApart->Down || m_btnCombine->Enabled && m_btnCombine->Down ){
|
|
X += 11;
|
|
Y += 7;
|
|
}
|
|
|
|
int iHitType = -1;
|
|
DWORD dwHit = m_panelBarsShow->HitTest( X, Y, iHitType );
|
|
int iHitBar = LOWORD(dwHit),
|
|
iHitPoint = HIWORD(dwHit);
|
|
|
|
if( iHitType==2 && !m_btnApart->Down && !m_btnCombine->Down ){ //选中和弦
|
|
m_bCanErase = (g_iMelodyTimeSignature==0) && (iHitPoint>POINTS_PER_BAR/2);
|
|
if( m_panelBarsShow->SetFocusCell( iHitBar, m_bCanErase ) ){
|
|
int iMainKey, iAjustKey, iChordType;
|
|
m_panelBarsShow->GetFocusChord(iMainKey, iAjustKey, iChordType);
|
|
EnableChordModify( true, iMainKey, iAjustKey, iChordType );
|
|
m_dwOriginChord = MAKELONG( iMainKey, MAKEWORD( iAjustKey, iChordType ) );
|
|
}
|
|
}
|
|
else{
|
|
m_bCanErase = false;
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
}
|
|
|
|
if( iHitType>0 && Button==mbLeft && Sender==m_panelBarsShow ){
|
|
BarsLButtonDown( iHitType, iHitBar, iHitPoint );
|
|
}
|
|
else if( Button==mbRight && !m_btnApart->Down && !m_btnCombine->Down &&
|
|
( iHitType>0 || iHitType==0 && Sender!=m_panelBarsShow )){
|
|
TPoint point(X,Y);
|
|
point = m_panelBarsShow->ClientToScreen(point);
|
|
BarsRButtonDown( iHitType, iHitBar, iHitPoint, point.x, point.y );
|
|
}
|
|
// }
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BarsShowMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
|
|
{
|
|
bool bHitTest = false;
|
|
if( m_btnApart->Enabled && m_btnApart->Down ){
|
|
m_panelBarsShow->Cursor = crApart;
|
|
bHitTest = true;
|
|
}
|
|
else if( m_btnCombine->Enabled && m_btnCombine->Down ){
|
|
m_panelBarsShow->Cursor = crCombine;
|
|
bHitTest = true;
|
|
}
|
|
else if( m_panelBarsShow->Cursor!=crDefault ){
|
|
m_panelBarsShow->Cursor = crDefault;
|
|
}
|
|
|
|
if( bHitTest ){
|
|
X += 11;
|
|
Y += 7;
|
|
|
|
int iHitType = -1;
|
|
DWORD dwHit = m_panelBarsShow->HitTest( X, Y, iHitType );
|
|
if( iHitType>0 ){
|
|
int iHitBar = LOWORD(dwHit),
|
|
iHitPoint = HIWORD(dwHit);
|
|
if( m_btnApart->Down ){
|
|
m_panelBarsShow->SetApartPos( iHitBar, iHitPoint, true );
|
|
}
|
|
else{
|
|
m_panelBarsShow->SetCombinePos( iHitBar, iHitPoint, true );
|
|
}
|
|
}
|
|
else{
|
|
if( m_btnApart->Down ){
|
|
m_panelBarsShow->SetApartPos( -1, 0, true );
|
|
}
|
|
else{
|
|
m_panelBarsShow->SetCombinePos( -1, 0, true );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnMainKeyClick(TObject *Sender)
|
|
{
|
|
int iMainKey=-1, iChordType=0, iAjustKey=0; //得到要修改的和弦
|
|
TPNGButton * pBtn = (TPNGButton *)Sender;
|
|
|
|
if( pBtn->Down ){
|
|
if( !m_bCanErase )
|
|
return;
|
|
}
|
|
else{
|
|
iMainKey = pBtn->Tag;
|
|
}
|
|
|
|
pBtn->Down = !pBtn->Down;
|
|
|
|
if( iMainKey>=0 ){
|
|
int iMain = iMainKey;
|
|
|
|
if( g_iShowType ){
|
|
int iKey = iMain<3 ? iMain * 2 : iMain * 2 -1 ;
|
|
iKey -= g_iMelodyKey;
|
|
if( iKey<0 ) iKey += 12;
|
|
|
|
switch( iKey ){
|
|
case 1 : case 3 : case 6 : case 8 : case 10:
|
|
if( iMainKey==3 )
|
|
iKey++;
|
|
else if( iMainKey==1 || iMainKey==2 || iMainKey==5 || iMainKey==6 )
|
|
iKey--;
|
|
break;
|
|
}
|
|
|
|
switch( iKey ){
|
|
case 0 : iMain = 0; break;
|
|
case 1 : iAjustKey = -1;
|
|
case 2: iMain = 1; break;
|
|
case 3 : iAjustKey = -1;
|
|
case 4: iMain = 2; break;
|
|
case 6: iAjustKey = 1;
|
|
case 5 : iMain = 3; break;
|
|
case 7 : iMain = 4; break;
|
|
case 8 : iAjustKey = -1;
|
|
case 9: iMain = 5; break;
|
|
case 10: iAjustKey = -1;
|
|
case 11:iMain = 6; break;
|
|
}
|
|
}
|
|
|
|
switch( iMain ){
|
|
case 1: case 2: case 5: if( iAjustKey==0 ) iChordType = 1; break;
|
|
case 6: if( iMainKey!=0 && iMainKey!=3 && iMainKey!=4 ) iAjustKey = -1;
|
|
default : iChordType = 0; break;
|
|
}
|
|
|
|
iMainKey = iMain;
|
|
}
|
|
|
|
SetSelectKey( iMainKey, iAjustKey );
|
|
SetChordType( iChordType );
|
|
m_panelBarsShow->SetFocusChord( iMainKey, iAjustKey, iChordType );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnAjustKeyClick(TObject *Sender)
|
|
{
|
|
TPNGButton * pBtn = (TPNGButton *)Sender;
|
|
pBtn->Down = !pBtn->Down;
|
|
|
|
int iAjustKey = pBtn->Down ? pBtn->Tag : 0,
|
|
iMainKey = GetMainKey();
|
|
|
|
if( g_iShowType ){
|
|
int iKey = iMainKey<3 ? iMainKey * 2 : iMainKey * 2 - 1;
|
|
iKey += iAjustKey - g_iMelodyKey;
|
|
|
|
if( iKey>11 ) iKey -= 12;
|
|
else if( iKey<0 ) iKey += 12;
|
|
|
|
iMainKey = 0, iAjustKey = 0;
|
|
switch( iKey ){
|
|
case 1 : iAjustKey = -1;
|
|
case 2: iMainKey = 1;
|
|
break;
|
|
case 3 : iAjustKey = -1;
|
|
case 4: iMainKey = 2;
|
|
break;
|
|
case 6: iAjustKey = 1;
|
|
case 5 : iMainKey = 3;
|
|
break;
|
|
case 7 : iMainKey = 4;
|
|
break;
|
|
case 8 : iAjustKey = -1;
|
|
case 9: iMainKey = 5;
|
|
break;
|
|
case 10: iAjustKey = -1;
|
|
case 11:iMainKey = 6;
|
|
break;
|
|
}
|
|
}
|
|
|
|
m_panelBarsShow->SetFocusChord( iMainKey, iAjustKey, GetChordType() );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnChordTypeClick(TObject *Sender)
|
|
{
|
|
int iChordType=0;
|
|
TPNGButton * pBtn = (TPNGButton *)Sender;
|
|
|
|
pBtn->Down = !pBtn->Down;
|
|
if( pBtn->Down ) iChordType = pBtn->Tag;
|
|
|
|
for( int i=0; i<3; i++ ){
|
|
m_lstChordTypes[i]->Down = iChordType==m_lstChordTypes[i]->Tag;
|
|
}
|
|
|
|
int iMainKey=-1, iAjustKey=0;
|
|
GetSelectKey( iMainKey, iAjustKey );
|
|
|
|
m_panelBarsShow->SetFocusChord( iMainKey, iAjustKey, iChordType );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
/*
|
|
bool TBaseForm::BaseCompose()
|
|
{
|
|
bool bRet = GenerateBaseCompose( Handle );
|
|
|
|
// m_btnReload->Enabled = false;
|
|
// m_btnApart->Enabled = g_lstMelodyStages.size()<g_lstMelodyBars.size();
|
|
// m_btnCombine->Enabled = g_lstMelodyStages.size()>1;
|
|
|
|
return bRet;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
*/
|
|
void TBaseForm::ShowPlayTime()
|
|
{
|
|
char strTime[10];
|
|
|
|
GetPlayTime( m_iStartBar, m_dblStartPoint, strTime );
|
|
|
|
m_lblPlayTime->Caption = strTime;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TBaseForm::EnableChordModify( bool bEnable, int iMainKey, int iAjustKey, int iChordType )
|
|
{
|
|
for( int i=0; i<7; i++ ){
|
|
m_lstMainKeys[i]->Enabled = bEnable;
|
|
m_lstMainKeys[i]->Down = false;//(bEnable && i==iMainKey);
|
|
}
|
|
|
|
for( int i=0; i<3; i++ ){
|
|
m_lstChordTypes[i]->Enabled = bEnable;
|
|
m_lstChordTypes[i]->Down = bEnable && iChordType==m_lstChordTypes[i]->Tag;
|
|
}
|
|
|
|
if( iMainKey<0 ){
|
|
for( int i=0; i<2; i++ ){
|
|
m_lstAjustKeys[i]->Enabled = false;
|
|
m_lstAjustKeys[i]->Down = false;
|
|
}
|
|
}
|
|
else{
|
|
SetSelectKey( iMainKey, iAjustKey );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
int TBaseForm::GetMainKey()
|
|
{
|
|
int ret = -1;
|
|
for( int i=0; i<7; i++ ){
|
|
if( m_lstMainKeys[i]->Down ){
|
|
ret = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
int TBaseForm::GetAjustKey()
|
|
{
|
|
int ret = 0;
|
|
for( int i=0; i<2; i++ ){
|
|
if( m_lstAjustKeys[i]->Down ){
|
|
ret = m_lstAjustKeys[i]->Tag;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
int TBaseForm::GetChordType()
|
|
{
|
|
int ret = 0;
|
|
for( int i=0; i<3; i++ ){
|
|
if( m_lstChordTypes[i]->Down ){
|
|
ret = m_lstChordTypes[i]->Tag;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TBaseForm::SetChordType( int iType )
|
|
{
|
|
for( int i=0; i<3; i++ ){
|
|
m_lstChordTypes[i]->Down = m_lstChordTypes[i]->Tag==iType;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TBaseForm::BarsLButtonDown( int iHitType, int iHitBar, int iHitPoint )
|
|
{
|
|
m_panelBarsShow->SetFocus();
|
|
|
|
if( m_btnApart->Enabled && m_btnApart->Down ){
|
|
if( m_panelBarsShow->SetApartPos( iHitBar, iHitPoint ) ){
|
|
m_btnApart->Enabled = g_lstMelodyStages.size()<g_lstMelodyBars.size();
|
|
m_btnCombine->Enabled = g_lstMelodyStages.size()>1;
|
|
|
|
m_btnApart->Down = false;
|
|
Perform( UM_RELOAD, 0, 0 );
|
|
}
|
|
}
|
|
else if( m_btnCombine->Enabled && m_btnCombine->Down ){
|
|
if( m_panelBarsShow->SetCombinePos( iHitBar, iHitPoint ) ){
|
|
m_btnApart->Enabled = g_lstMelodyStages.size()<g_lstMelodyBars.size();
|
|
m_btnCombine->Enabled = g_lstMelodyStages.size()>1;
|
|
|
|
m_btnCombine->Down = false;
|
|
Perform( UM_RELOAD, 0, 0 );
|
|
}
|
|
}
|
|
else if( iHitType==1 ){ //设置播放位置
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
SetPlayTimer( false, m_tTimer, m_tAccuracy );
|
|
f_MM_Stop();
|
|
}
|
|
|
|
m_iLastStartBar = m_iStartBar = iHitBar;
|
|
m_dblLastStartPoint = m_dblStartPoint = iHitPoint;
|
|
m_panelBarsShow->SetPlayPoint( m_iStartBar, (int)m_dblStartPoint );
|
|
ShowPlayTime();
|
|
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
ReloadBaseCompose();
|
|
|
|
double dblComposeStartPoint = m_iStartBar + m_dblStartPoint / POINTS_PER_BAR ;
|
|
f_MM_Play( Handle, dblComposeStartPoint, TYPE_AUDIO_BASECOMPOSE );
|
|
SetPlayTimer( true, m_tTimer, m_tAccuracy, Handle );
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TBaseForm::BarsRButtonDown( int iHitType, int iHitBar, int iHitPoint, int X, int Y )
|
|
{
|
|
m_pPopMenu->ClearMenuItem();
|
|
m_pPopMenu->Tag = MAKELONG( iHitBar, iHitPoint );
|
|
|
|
if( iHitType==0 ){ //设置段落伴奏类型
|
|
int iStage = m_panelBarsShow->FindStage( iHitBar );
|
|
MELODYSTAGE* pStage = g_lstMelodyStages[iStage];
|
|
int iVar = pStage->iVar;
|
|
|
|
for( int i=0; i<STAGE_VAR_NUM; i++ ){
|
|
bool bChecked = false;
|
|
if( iVar==i ) bChecked = true;
|
|
|
|
String strText = "伴奏类型 " + IntToStr( i+1 );
|
|
|
|
m_pPopMenu->CreateCustomMenuItem( strText, OnSelectStageVar, -1, true, bChecked, i|SHOW_STAGE_VAR );
|
|
}
|
|
}
|
|
else if( iHitType==1 ){ //设置加花类型
|
|
MELODYBAR *pBar = g_lstMelodyBars[iHitBar];
|
|
int iFill = pBar->iFill;
|
|
|
|
for( int i=0; i<COMPOSE_FILL_NUM; i++ ){
|
|
bool bChecked = false;
|
|
if( iFill==i ) bChecked = true;
|
|
|
|
String strText = "加花-" + IntToStr( i+1 );
|
|
|
|
m_pPopMenu->CreateCustomMenuItem( strText, OnSelectBarFill, -1, true, bChecked, i );
|
|
}
|
|
}
|
|
else if( iHitType==2 ){ //选中和弦,提示删除和弦
|
|
bool bEnabled = false;
|
|
if( g_iMelodyTimeSignature==0 && iHitPoint>POINTS_PER_BAR/2 ){
|
|
int iMainKey, iAjustKey, iChordType;
|
|
if( m_panelBarsShow->GetFocusChord( iMainKey, iAjustKey, iChordType )>=0 )
|
|
bEnabled = true;
|
|
|
|
}
|
|
m_pPopMenu->CreateCustomMenuItem( "删除和弦", OnDeleteChord, -1, bEnabled, false, 0 );
|
|
|
|
bEnabled = !g_bPredefine && m_panelBarsShow->HasChordSet();
|
|
m_pPopMenu->CreateCustomMenuItem( "重置全部和弦", OnDeleteChord, -1, bEnabled, false, 1 );
|
|
m_pPopMenu->CreateCustomMenuItem( "-" );
|
|
m_pPopMenu->CreateCustomMenuItem( "罗马数字显示", OnChangeChordMode, -1,
|
|
true, !g_iShowType, 2);
|
|
m_pPopMenu->CreateCustomMenuItem( "英文字母显示", OnChangeChordMode, -1,
|
|
true, g_iShowType, 3 );
|
|
}
|
|
|
|
m_pPopMenu->Popup(X, Y);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::OnSelectStageVar( TObject* Sender )
|
|
{
|
|
TMenuItem* pItem = (TMenuItem*)Sender;
|
|
|
|
if( !pItem->Checked ){
|
|
int iSetBar = LOWORD( m_pPopMenu->Tag );
|
|
int iSetStage = m_panelBarsShow->FindStage( iSetBar );
|
|
m_panelBarsShow->SetStageVar( iSetStage, pItem->Tag & 0xFFFF );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::OnSelectBarFill( TObject* Sender )
|
|
{
|
|
TMenuItem* pItem = (TMenuItem*)Sender;
|
|
int iSetBar = LOWORD( m_pPopMenu->Tag );
|
|
int iFill = pItem->Tag;
|
|
if( pItem->Checked )//取消原状态
|
|
iFill = -1;
|
|
|
|
m_panelBarsShow->SetBarFill( iSetBar, iFill );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::OnDeleteChord( TObject* Sender )
|
|
{
|
|
TMenuItem* pItem = (TMenuItem*)Sender;
|
|
|
|
if( pItem && pItem->Tag>0 ){
|
|
m_panelBarsShow->DeleteAllChord();
|
|
}
|
|
else{
|
|
m_panelBarsShow->SetFocusChord( -1, 0, 0 );
|
|
EnableChordModify( true, -1, 0, 0 );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::OnChangeChordMode( TObject* Sender )
|
|
{
|
|
int iMain = -1, iAdjust = 0;
|
|
if( Sender ){
|
|
TPopMenu* ptp = (TPopMenu*)Sender;
|
|
if( !g_iShowType && ptp->Tag == 2)
|
|
return ;
|
|
if( g_iShowType && ptp->Tag == 3 )
|
|
return ;
|
|
|
|
GetSelectKey( iMain, iAdjust );
|
|
|
|
g_iShowType = !g_iShowType;
|
|
}
|
|
|
|
TPngImage **pimg = g_iShowType ? m_aImagKeyEG : m_aImagKeyLM;
|
|
|
|
//切换图片
|
|
for(int i = 0; i < 7 ; i++){
|
|
m_lstMainKeys[i]->SetPngImg(pimg[i]);
|
|
}
|
|
|
|
SetSelectKey( iMain, iAdjust );
|
|
|
|
//刷新和弦、刷新KEY
|
|
for( int i = 0; i < 7; i++ )
|
|
m_lstMainKeys[i]->Invalidate();
|
|
|
|
m_panelBarsShow->Invalidate();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::ChangeChordMode( bool bAlpha )
|
|
{
|
|
int iMain = -1, iAdjust = 0;
|
|
GetSelectKey( iMain, iAdjust );
|
|
|
|
g_iShowType = bAlpha;
|
|
|
|
TPngImage **pimg = g_iShowType ? m_aImagKeyEG : m_aImagKeyLM;
|
|
|
|
//切换图片
|
|
for(int i = 0; i < 7 ; i++){
|
|
m_lstMainKeys[i]->SetPngImg(pimg[i]);
|
|
}
|
|
|
|
SetSelectKey( iMain, iAdjust );
|
|
|
|
//刷新和弦、刷新KEY
|
|
for( int i = 0; i < 7; i++ )
|
|
m_lstMainKeys[i]->Invalidate();
|
|
|
|
m_panelBarsShow->Invalidate();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TBaseForm::SetSelectKey( int iMain, int iAdjust )
|
|
{
|
|
if( iMain<0 ){
|
|
for( int i=0; i<2; i++ ){
|
|
m_lstAjustKeys[i]->Enabled = false;
|
|
m_lstAjustKeys[i]->Down = false;
|
|
}
|
|
}
|
|
else if( !g_iShowType ){
|
|
if( iMain==0 || iMain==4 ){
|
|
m_lstAjustKeys[0]->Enabled = false;
|
|
m_lstAjustKeys[1]->Enabled = false;
|
|
}
|
|
else if( iMain==3 ){
|
|
m_lstAjustKeys[0]->Enabled = true;
|
|
m_lstAjustKeys[1]->Enabled = false;
|
|
}
|
|
else{
|
|
m_lstAjustKeys[0]->Enabled = false;
|
|
m_lstAjustKeys[1]->Enabled = true;
|
|
}
|
|
}
|
|
else{
|
|
int iKey = iMain < 3 ? iMain * 2 : iMain * 2 - 1;
|
|
iKey += iAdjust + g_iMelodyKey;
|
|
if( iKey>11 ) iKey -= 12;
|
|
|
|
if( iKey==0 || iKey==7 ){
|
|
m_lstAjustKeys[0]->Enabled = false;
|
|
m_lstAjustKeys[1]->Enabled = false;
|
|
}
|
|
else if( iKey==5 || iKey==6 ){
|
|
m_lstAjustKeys[0]->Enabled = true;
|
|
m_lstAjustKeys[1]->Enabled = false;
|
|
}
|
|
else{
|
|
m_lstAjustKeys[0]->Enabled = false;
|
|
m_lstAjustKeys[1]->Enabled = true;
|
|
}
|
|
|
|
iMain = 0;
|
|
switch( iKey ){
|
|
case 1 : case 2: iMain = 1;break;
|
|
case 3 : case 4: iMain = 2;break;
|
|
case 5 : case 6: iMain = 3;break;
|
|
case 7 : iMain = 4;break;
|
|
case 8 : case 9: iMain = 5;break;
|
|
case 10: case 11:iMain = 6;break;
|
|
}
|
|
|
|
iAdjust = 0;
|
|
switch( iKey ){
|
|
case 1: case 3: case 8: case 10: iAdjust = -1; break;
|
|
case 6: iAdjust = 1; break;
|
|
}
|
|
}
|
|
|
|
for( int i=0; i<7; i++ ){
|
|
m_lstMainKeys[i]->Down = ( i==iMain );
|
|
}
|
|
for( int i=0; i<2; i++ ){
|
|
m_lstAjustKeys[i]->Down = ( m_lstAjustKeys[i]->Tag==iAdjust );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TBaseForm::GetSelectKey( int& iMain, int& iAdjust )
|
|
{
|
|
iMain = -1, iAdjust = 0;
|
|
for( int i=0; i<7; i++ ){
|
|
if( m_lstMainKeys[i]->Down ){
|
|
iMain = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for( int i=0; i<2; i++ ){
|
|
if( m_lstAjustKeys[i]->Down ){
|
|
iAdjust = m_lstAjustKeys[i]->Tag;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( g_iShowType && iMain>=0 ){
|
|
int iKey = iMain<3 ? iMain * 2 : iMain * 2 -1;
|
|
iKey += iAdjust - g_iMelodyKey;
|
|
if( iKey<0 ) iKey += 12;
|
|
|
|
iMain = 0;
|
|
switch( iKey ){
|
|
case 1 : case 2: iMain = 1;break;
|
|
case 3 : case 4: iMain = 2;break;
|
|
case 5 : case 6: iMain = 3;break;
|
|
case 7 : iMain = 4;break;
|
|
case 8 : case 9: iMain = 5;break;
|
|
case 10: case 11:iMain = 6;break;
|
|
}
|
|
|
|
iAdjust = 0;
|
|
switch( iKey ){
|
|
case 1: case 3: case 8: case 10: iAdjust = -1; break;
|
|
case 6: iAdjust = 1; break;
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::UMMediaTime(TMessage &Message)
|
|
{
|
|
if( !m_panelBarsShow->IsPlaying() )
|
|
return;
|
|
|
|
int iBar = m_iStartBar;
|
|
double dblStartPoint = m_dblStartPoint + g_dblStep;
|
|
|
|
if( dblStartPoint>=(double)POINTS_PER_BAR ){
|
|
dblStartPoint -= POINTS_PER_BAR;
|
|
iBar++;
|
|
}
|
|
|
|
int iCurrPoint = (int)dblStartPoint;
|
|
if( iBar!=m_iStartBar || iCurrPoint!=(int)m_dblStartPoint ){
|
|
m_panelBarsShow->SetPlayPoint( iBar, (int)dblStartPoint );
|
|
if( iBar==g_lstMelodyBars.size() ){
|
|
StopClick(NULL);
|
|
return;
|
|
}
|
|
}
|
|
|
|
m_iStartBar = iBar;
|
|
m_dblStartPoint = dblStartPoint;
|
|
|
|
ShowPlayTime();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
/*
|
|
void __fastcall TBaseForm::UMEnableReload(TMessage &Message)
|
|
{
|
|
// m_btnReload->Enabled = Message.WParam;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnFontChangeClick(TObject *Sender)
|
|
{
|
|
if( m_btnApart->Down ){
|
|
m_btnApart->Down = false;
|
|
}
|
|
else if( m_btnCombine->Down ){
|
|
m_btnCombine->Down = false;
|
|
}
|
|
|
|
if( m_lbKeySelect->Visible ){
|
|
HidePopList( m_lbKeySelect );
|
|
}
|
|
|
|
if( !m_lbFontSelect->Visible ){
|
|
m_btnFontChange->Down = true;
|
|
if( m_lbFontSelect->ItemIndex != g_idFont )
|
|
m_lbFontSelect->ItemIndex = g_idFont;
|
|
m_lbFontSelect->Show();
|
|
m_lbFontSelect->SetFocus();
|
|
SetCapture( m_lbFontSelect->Handle );
|
|
}
|
|
else{
|
|
HidePopList( m_lbFontSelect );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::LBFontSelectMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
|
{
|
|
if( X>=0 && X < m_lbFontSelect->Width && Y>=0 && Y<m_lbFontSelect->Height ){
|
|
int iSel = m_lbFontSelect->ItemIndex;
|
|
if( iSel>=0 ){
|
|
if( iSel!=g_idFont ){
|
|
m_lblFontName->Caption = g_lstFonts[iSel]->strFontName;
|
|
if( f_MM_SetFont( g_lstFonts[iSel]->strFileName )==S_OK ){
|
|
g_idFont = iSel;
|
|
g_strFontFile = ExtractFileName(g_lstFonts[iSel]->strFileName).c_str();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
HidePopList( m_lbFontSelect );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
*/
|
|
int TBaseForm::HidePopControls()
|
|
{
|
|
int iCount = 0;
|
|
|
|
if( m_btnApart->Down ){
|
|
m_btnApart->Down = false;
|
|
}
|
|
else if( m_btnCombine->Down ){
|
|
m_btnCombine->Down = false;
|
|
}
|
|
|
|
if( m_lbKeySelect->Visible ){
|
|
HidePopList( m_lbKeySelect );
|
|
iCount++;
|
|
}
|
|
|
|
if( m_panelMusicVolSet->Visible ){
|
|
m_panelMusicVolSet->Hide();
|
|
m_btnVolMusicSet->Down = false;
|
|
iCount++;
|
|
}
|
|
|
|
if( m_panelAudioVolSet->Visible ){
|
|
m_panelAudioVolSet->Hide();
|
|
m_btnVolAudioSet->Down = false;
|
|
iCount++;
|
|
}
|
|
|
|
if( g_lbFontSelect->Visible ){
|
|
g_lbFontSelect->Hide();
|
|
g_btnFontChange->Down = false;
|
|
iCount++;
|
|
}
|
|
|
|
return iCount;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
|
{
|
|
switch( Key ){
|
|
case VK_F9:
|
|
if( m_btnNextStep->Enabled ){
|
|
StepClick( m_btnNextStep );
|
|
}
|
|
break;
|
|
|
|
case VK_F8:
|
|
if( m_btnPrevStep->Enabled ){
|
|
StepClick( m_btnPrevStep );
|
|
}
|
|
break;
|
|
|
|
case ' ':
|
|
if( m_btnPause->Visible && m_btnPause->Enabled ){
|
|
PauseClick( NULL );
|
|
}
|
|
else if( m_btnPlay->Visible && m_btnPlay->Enabled ){
|
|
PlayClick( NULL );
|
|
}
|
|
break;
|
|
|
|
case VK_DELETE:
|
|
if( m_bCanErase ){
|
|
OnDeleteChord( NULL );
|
|
}
|
|
break;
|
|
|
|
case VK_UP: case VK_DOWN:
|
|
break;
|
|
|
|
case VK_RETURN:
|
|
if( m_lbKeySelect->Visible ){
|
|
int iSel = m_lbKeySelect->ItemIndex;
|
|
|
|
if( iSel>=0 && iSel!=g_iMelodyKey ){
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
StopClick(NULL);
|
|
}
|
|
|
|
g_iMelodyKey = iSel;
|
|
// m_panelBarsShow->SetMelodyKey( iSel );
|
|
|
|
m_lblKey->Caption = g_strMelodyKey[g_iMelodyKey];
|
|
|
|
SetWavNotes();
|
|
ClearGlobalVars( LIST_MELODYCHORDS | LIST_MELODYSTAGES |
|
|
LIST_COMPOSESTAGES | LIST_COMPLETEVOLS );
|
|
ReloadBaseCompose();
|
|
|
|
//切换调要调整
|
|
if( g_iShowType ) {
|
|
OnChangeChordMode(NULL);//ChangeBtnTag();
|
|
}
|
|
|
|
g_iComposeKey = g_iMelodyKey;
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
m_panelBarsShow->InitialVars();
|
|
}
|
|
|
|
HidePopList( m_lbKeySelect );
|
|
}
|
|
|
|
break;
|
|
|
|
case VK_ESCAPE:
|
|
if( m_btnApart->Down ){
|
|
m_btnApart->Down = false;
|
|
}
|
|
else if( m_btnCombine->Down ){
|
|
m_btnCombine->Down = false;
|
|
}
|
|
else if( HidePopControls()==0 && m_btnMainKey0->Enabled ){
|
|
m_bCanErase = false;
|
|
m_panelBarsShow->SetFocusChord( LOWORD(m_dwOriginChord),
|
|
LOBYTE(HIWORD(m_dwOriginChord)),
|
|
HIBYTE(HIWORD(m_dwOriginChord)));
|
|
m_panelBarsShow->SetFocusCell( -1, 0 );
|
|
EnableChordModify( false, -1, 0, 0 );
|
|
}
|
|
|
|
break;
|
|
|
|
case 'W':
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
StopClick( NULL );
|
|
}
|
|
if( g_lstMelodyBars.size()>0 ){
|
|
m_iStartBar = m_iLastStartBar = 0;
|
|
m_dblStartPoint = m_dblLastStartPoint = 0;
|
|
m_panelBarsShow->SetPlayPoint( 0, 0 );
|
|
ShowPlayTime();
|
|
}
|
|
break;
|
|
|
|
case 'T':
|
|
if( m_btnStyleChange->Enabled ){
|
|
BtnStyleChangeClick( NULL );
|
|
}
|
|
break;
|
|
|
|
case 'K':
|
|
if( m_btnKeyChange->Enabled ){
|
|
BtnKeyChangeClick( NULL );
|
|
}
|
|
break;
|
|
|
|
case 'S':
|
|
if( m_btnApart->Enabled ){
|
|
ApartClick( NULL );
|
|
}
|
|
break;
|
|
|
|
case 'D':
|
|
if( m_btnCombine->Enabled ){
|
|
CombineClick( NULL );
|
|
}
|
|
break;
|
|
|
|
case '1': case '2': case '3': case '4': case '5': case '6': case '7':
|
|
{
|
|
TPNGButton * pBtn = m_lstMainKeys[Key-'1'];
|
|
if( pBtn->Enabled ){
|
|
BtnMainKeyClick( pBtn );
|
|
}
|
|
}
|
|
break;
|
|
|
|
case VK_NUMPAD1: case VK_NUMPAD2: case VK_NUMPAD3: case VK_NUMPAD4:
|
|
case VK_NUMPAD5: case VK_NUMPAD6: case VK_NUMPAD7:
|
|
{
|
|
TPNGButton * pBtn = m_lstMainKeys[Key-VK_NUMPAD1];
|
|
if( pBtn->Enabled ){
|
|
BtnMainKeyClick( pBtn );
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::BtnStyleChangeClick(TObject *Sender)
|
|
{
|
|
StopClick((TObject*) m_btnStop);
|
|
HidePopControls();
|
|
if( m_btnApart->Down ){
|
|
m_btnApart->Down = false;
|
|
}
|
|
else if( m_btnCombine->Down ){
|
|
m_btnCombine->Down = false;
|
|
}
|
|
|
|
PostMessage( Handle, UM_SELECTSTYLE, 0, 0 );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::UMSelectStyle(TMessage &msg)
|
|
{
|
|
StyleSelForm = new TStyleSelForm(this);
|
|
StyleSelForm->m_idSelected = g_iSelectedStyleID;
|
|
StyleSelForm->m_strName = g_strSelectedStyleName;
|
|
StyleSelForm->m_bBase = true;
|
|
StyleSelForm->m_iChordType = ( g_lstMelodyBars[0]->iChords[0] % CHORD_TYPE_NUM ) % 2;
|
|
|
|
StyleSelForm->ShowModal();
|
|
|
|
if( g_iSelectedStyleID!=StyleSelForm->m_idSelected ){
|
|
g_iSelectedStyleID = StyleSelForm->m_idSelected;
|
|
g_strSelectedStyleName = StyleSelForm->m_strName;
|
|
GenerateBaseCompose();
|
|
}
|
|
delete StyleSelForm;
|
|
|
|
m_lblStyleName->Caption = g_strSelectedStyleName.c_str();
|
|
|
|
Application->MainForm->Update();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::UMReload(TMessage &msg)
|
|
{
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
SetPlayTimer( false, m_tTimer, m_tAccuracy );
|
|
f_MM_Stop();
|
|
}
|
|
|
|
BOOL bModified = g_bkMelody.CheckModified();
|
|
if( bModified & CHECK_BAR || bModified & CHECK_STAGE || bModified & CHECK_POS ){
|
|
ClearGlobalVars( LIST_COMPOSESTAGES | LIST_COMPLETEVOLS );
|
|
g_bComposeLoaded = false;
|
|
}
|
|
|
|
ReloadBaseCompose();
|
|
|
|
if( msg.WParam ){
|
|
int iMainKey, iAjustKey, iChordType;
|
|
int ret = m_panelBarsShow->GetFocusChord(iMainKey, iAjustKey, iChordType);
|
|
EnableChordModify( true, iMainKey, iAjustKey, iChordType );
|
|
m_dwOriginChord = MAKELONG( iMainKey, MAKEWORD( iAjustKey, iChordType ) );
|
|
}
|
|
|
|
if( m_panelBarsShow->IsPlaying() ){
|
|
double dblComposeStartPoint = m_iStartBar + m_dblStartPoint / POINTS_PER_BAR ;
|
|
|
|
f_MM_Play( Handle, dblComposeStartPoint, TYPE_AUDIO_BASECOMPOSE );
|
|
SetPlayTimer( true, m_tTimer, m_tAccuracy, Handle );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::AudioEffectClick(TObject *Sender)
|
|
{
|
|
StopClick( NULL );
|
|
|
|
PostMessage(Application->MainFormHandle, UM_AUDIOEFFECT, WPARAM(0),LPARAM(0));
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::MicSetClick(TObject *Sender)
|
|
{
|
|
PostMessage(Application->MainFormHandle, UM_MICSETTING, WPARAM(0),LPARAM(0));
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::UMSetFontPosition(TMessage &msg)
|
|
{
|
|
if( g_btnFontChange && g_panelFontName && g_lbFontSelect ){
|
|
g_btnFontChange->Parent = this;
|
|
g_panelFontName->Parent = this;
|
|
g_lbFontSelect->Parent = this;
|
|
|
|
g_btnFontChange->Top = m_btnVolAudioSet->Top;
|
|
g_panelFontName->Top = g_btnFontChange->Top + 1;
|
|
g_lbFontSelect->Top = g_btnFontChange->Top - g_lbFontSelect->Height;
|
|
|
|
g_btnFontChange->Left = DPIX(451);//m_panelStyleName->Left + m_panelStyleName->Width + 20;
|
|
g_panelFontName->Left = g_btnFontChange->Left + g_btnFontChange->Width;
|
|
g_lbFontSelect->Left = g_panelFontName->Left;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TBaseForm::UMHidePopControl(TMessage &msg)
|
|
{
|
|
HidePopControls();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|