454 lines
13 KiB
C++
454 lines
13 KiB
C++
//---------------------------------------------------------------------------
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
|
|
#include "CustomerSettingPanelUnit.h"
|
|
//---------------------------------------------------------------------------
|
|
#pragma package(smart_init)
|
|
//---------------------------------------------------------------------------
|
|
#define SCOLLBAR_WIDTH (14)
|
|
#define TOP_BUTTOM (10)
|
|
#define LEFT_RIGHT (SCOLLBAR_WIDTH + 20)
|
|
|
|
const static COLORREF
|
|
CLR_TXT_HOT = RGB(0, 0, 0),
|
|
// CLR_BKG_INTERNAL = RGB(207, 163, 124),
|
|
CLR_BKG_INTERNAL = RGB(230, 204, 179),
|
|
CLR_BKG_INTERNAL_LIGHT = RGB(234, 184, 140),
|
|
CLR_CONTENT_DB_LINE_DARK = RGB(192, 148, 109),
|
|
CLR_CONTENT_DB_LINE_LIGHT = RGB(237, 193, 154),
|
|
COLOR_BORDER = RGB(186,124,83);
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
__fastcall TCustmerSettingPanel::TCustmerSettingPanel( TComponent* Owner)
|
|
: Vcl::Extctrls::TPanel( Owner )
|
|
{
|
|
m_ScrollBar = NULL;
|
|
m_iTopLine =0;
|
|
m_iShowLine = 1;
|
|
m_iTotalLine= 6;
|
|
|
|
m_ckInitProject = new TCheckBox(this);
|
|
m_ckDownloadStyle = new TCheckBox(this);
|
|
m_ckPreBeat = new TCheckBox(this);
|
|
m_cbChordMode = new TComboBox(this);
|
|
m_cbPreStage = new TComboBox(this);
|
|
m_cbPreSortMode = new TComboBox(this);
|
|
m_cbPreSortUD = new TComboBox(this);
|
|
|
|
m_ckInitProject->Parent = this;
|
|
m_ckDownloadStyle->Parent = this;
|
|
m_ckPreBeat->Parent = this;
|
|
m_cbChordMode->Parent = this;
|
|
m_cbPreStage->Parent = this;
|
|
m_cbPreSortMode->Parent = this;
|
|
m_cbPreSortUD->Parent = this;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::CreateWnd()
|
|
{
|
|
Vcl::Extctrls::TPanel::CreateWnd();
|
|
|
|
SetShowLine();
|
|
|
|
Canvas->Font->Assign(m_ckPreBeat->Font);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
__fastcall TCustmerSettingPanel::~TCustmerSettingPanel()
|
|
{
|
|
if( m_ScrollBar ){
|
|
delete m_ScrollBar;
|
|
m_ScrollBar = NULL;
|
|
}
|
|
|
|
if( m_ckInitProject ){
|
|
delete m_ckInitProject;
|
|
m_ckInitProject = NULL;
|
|
}
|
|
|
|
if( m_ckDownloadStyle ){
|
|
delete m_ckDownloadStyle;
|
|
m_ckDownloadStyle = NULL;
|
|
}
|
|
|
|
if( m_ckPreBeat ){
|
|
delete m_ckPreBeat;
|
|
m_ckPreBeat = NULL;
|
|
}
|
|
|
|
if( m_cbChordMode ){
|
|
delete m_cbChordMode;
|
|
m_cbChordMode = NULL;
|
|
}
|
|
|
|
if( m_cbPreStage ){
|
|
delete m_cbPreStage;
|
|
m_cbPreStage = NULL;
|
|
}
|
|
|
|
if( m_cbPreSortMode ){
|
|
delete m_cbPreSortMode;
|
|
m_cbPreSortMode = NULL;
|
|
}
|
|
|
|
if( m_cbPreSortUD ){
|
|
delete m_cbPreSortUD;
|
|
m_cbPreSortUD = NULL;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::WMEraseBkgnd(TWMEraseBkgnd &Message)
|
|
{
|
|
TRect rect = GetClientRect();
|
|
|
|
TCanvas* tempCanvas = new TCanvas;
|
|
tempCanvas->Handle = Message.DC;
|
|
|
|
tempCanvas->Brush->Color = CLR_BKG_INTERNAL; //背景颜色
|
|
tempCanvas->FillRect( rect );
|
|
tempCanvas->Brush->Color = CLR_CONTENT_DB_LINE_DARK;
|
|
tempCanvas->FrameRect( rect );
|
|
|
|
delete tempCanvas;
|
|
tempCanvas = NULL;
|
|
|
|
// DefaultHandler( &Message );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::WMVScroll(Winapi::Messages::TWMScroll &Message)
|
|
{
|
|
int minpos, maxpos, page, curpos;
|
|
m_ScrollBar->GetScrollRange(&minpos, &maxpos);
|
|
page = m_ScrollBar->GetPageSize();
|
|
// Get the current position of scroll box.
|
|
curpos = m_ScrollBar->GetScrollPos();
|
|
|
|
// Determine the new position of scroll box.
|
|
switch (Message.ScrollCode)
|
|
{
|
|
case SB_TOP: // Scroll to far top.
|
|
curpos = minpos;
|
|
break;
|
|
|
|
case SB_BOTTOM: // Scroll to far bottom.
|
|
curpos = maxpos-page+1;
|
|
break;
|
|
|
|
case SB_ENDSCROLL: // End scroll.
|
|
break;
|
|
|
|
case SB_LINEUP: // Scroll left.
|
|
if (curpos > minpos)
|
|
curpos--;
|
|
break;
|
|
|
|
case SB_LINEDOWN: // Scroll right.
|
|
if (curpos < maxpos-page+1)
|
|
curpos++;
|
|
break;
|
|
|
|
case SB_PAGEUP: // Scroll one page left.
|
|
if (curpos > minpos)
|
|
curpos = (minpos > curpos-page) ? minpos : curpos-page;
|
|
//max(minpos, curpos-page);
|
|
break;
|
|
|
|
case SB_PAGEDOWN: // Scroll one page right.
|
|
if( curpos<maxpos )
|
|
curpos = (maxpos-page+1 < curpos+page) ? maxpos-page+1 : curpos+page;
|
|
//min(maxpos-page+1, curpos+page);
|
|
break;
|
|
|
|
case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
|
|
curpos = Message.Pos; // of the scroll box at the end of the drag operation.
|
|
break;
|
|
|
|
case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
|
|
curpos = Message.Pos; // position that the scroll box has been dragged to.
|
|
break;
|
|
}
|
|
|
|
// Set the new position of the thumb (scroll box).
|
|
if( m_ScrollBar && Message.ScrollBar!=m_ScrollBar->Handle ){
|
|
m_ScrollBar->SetPosition(curpos);
|
|
// Paint();
|
|
}
|
|
if( m_iTopLine != curpos ){
|
|
m_iTopLine = curpos;
|
|
Invalidate();
|
|
}
|
|
|
|
Message.Result = true;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::WMMouseWheel(TWMMouseWheel &Message)
|
|
{
|
|
if( m_ScrollBar && m_ScrollBar->Visible ){
|
|
UINT nSBCode;
|
|
|
|
if( Message.WheelDelta>0 ) nSBCode = SB_LINEUP;
|
|
else nSBCode = SB_LINEDOWN;
|
|
|
|
Perform( WM_VSCROLL, MAKELONG(nSBCode,0), NULL );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::SetShowLine()
|
|
{
|
|
int totalLine = m_iTotalLine;
|
|
m_iShowLine = Height/LINE_HEIGHT;
|
|
|
|
if( totalLine>m_iShowLine ){
|
|
m_ScrollBar = new TSkinScrollBar(this);
|
|
m_ScrollBar->m_pWndCtrl = this;
|
|
m_ScrollBar->Parent = this;
|
|
m_ScrollBar->Height = Height-2;
|
|
m_ScrollBar->Left = Width - m_ScrollBar->Width - 1;
|
|
m_ScrollBar->Top = 1;
|
|
|
|
m_ScrollBar->Ctl3D = false;
|
|
m_ScrollBar->ParentCtl3D = false;
|
|
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::SetContent()
|
|
{
|
|
m_ckInitProject->Caption = L"启动时自动打开上次工程";
|
|
m_ckDownloadStyle->Caption = L"自动下载风格";
|
|
m_ckPreBeat->Caption = L"录音时使用预设风格节拍提示";
|
|
m_ckInitProject->Font->Color = CLR_TXT_HOT;
|
|
m_ckDownloadStyle->Font->Color = CLR_TXT_HOT;
|
|
m_ckPreBeat->Font->Color = CLR_TXT_HOT;
|
|
m_ckInitProject->Width = 250;
|
|
m_ckDownloadStyle->Width = 250;
|
|
m_ckPreBeat->Width = 250;
|
|
|
|
m_cbChordMode->Ctl3D = false;
|
|
m_cbChordMode->ParentCtl3D = false;
|
|
m_cbChordMode->Style = csDropDownList;
|
|
m_cbChordMode->Items->Add(L"级数");
|
|
m_cbChordMode->Items->Add(L"英文");
|
|
m_cbChordMode->Height = 24;
|
|
m_cbChordMode->Width = 60;
|
|
|
|
m_cbPreStage->Ctl3D = false;
|
|
m_cbPreStage->ParentCtl3D = false;
|
|
m_cbPreStage->Style = csDropDownList;
|
|
m_cbPreStage->Items->Add(L"M");
|
|
m_cbPreStage->Items->Add(L"IME");
|
|
m_cbPreStage->Items->Add(L"IMIME");
|
|
m_cbPreStage->Height = 24;
|
|
m_cbPreStage->Width = 60;
|
|
|
|
m_cbPreSortMode->Ctl3D = false;
|
|
m_cbPreSortMode->ParentCtl3D = false;
|
|
m_cbPreSortMode->Style = csDropDownList;
|
|
m_cbPreSortMode->Items->Add(L"发布时间");
|
|
m_cbPreSortMode->Items->Add(L"价格");
|
|
m_cbPreSortMode->Items->Add(L"评分");
|
|
m_cbPreSortMode->Height = 24;
|
|
m_cbPreSortMode->Width = 75;
|
|
|
|
m_cbPreSortUD->Ctl3D = false;
|
|
m_cbPreSortUD->ParentCtl3D = false;
|
|
m_cbPreSortUD->Style = csDropDownList;
|
|
m_cbPreSortUD->Items->Add(L"递增");
|
|
m_cbPreSortUD->Items->Add(L"递减");
|
|
m_cbPreSortUD->Height = 24;
|
|
m_cbPreSortUD->Width = 60;
|
|
|
|
m_ckInitProject->OnClick = CKBoxChange;
|
|
m_ckDownloadStyle->OnClick = CKBoxChange;
|
|
m_ckPreBeat->OnClick = CKBoxChange;
|
|
m_cbChordMode->OnChange = CBChange;
|
|
m_cbPreStage->OnChange = CBChange;
|
|
m_cbPreSortMode->OnChange = CBChange;
|
|
m_cbPreSortUD->OnChange = CBChange;
|
|
|
|
m_bAutoOpenProject = g_bAutoOpenProject;
|
|
m_bDownloadStyle = g_bAutoDownloadStyle;
|
|
m_bAlphaKey = g_iShowType;
|
|
m_cPreStage = g_iPreStageDefault;
|
|
m_iPreStyleSort = g_iPreStyleSort;
|
|
|
|
m_ckInitProject->Checked = g_bAutoOpenProject;
|
|
m_ckDownloadStyle->Checked = g_bAutoDownloadStyle;
|
|
m_ckPreBeat->Checked = g_bPrebeat;
|
|
m_cbChordMode->ItemIndex = g_iShowType;
|
|
m_cbPreStage->ItemIndex = g_iPreStageDefault;
|
|
m_cbPreSortMode->ItemIndex = g_iPreStyleSort & 0xffff;
|
|
m_cbPreSortUD->ItemIndex = (g_iPreStyleSort & 0xffff0000) >> 16;
|
|
|
|
if(m_ScrollBar) {
|
|
m_ScrollBar->SetRange( 0,m_iTotalLine-1 );
|
|
m_ScrollBar->SetPageSize(m_iShowLine);
|
|
m_ScrollBar->SetPosition( m_iTopLine );
|
|
m_ScrollBar->Visible = true;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::Paint(void)
|
|
{
|
|
int curX = 0;
|
|
int curY = 0;
|
|
int contentHeight = LINE_HEIGHT;
|
|
int contentStart = -m_iTopLine*LINE_HEIGHT;
|
|
TSize sizeFont;
|
|
String strText;
|
|
|
|
TFont *fntOld = new TFont;
|
|
fntOld->Assign( Canvas->Font );
|
|
|
|
Canvas->Font->Color = CLR_TXT_HOT;
|
|
Canvas->Brush->Style = bsClear;
|
|
|
|
/////////////////////////////////////////////////
|
|
curX = LEFT_RIGHT;
|
|
curY = contentStart;
|
|
m_ckInitProject->Left = curX;
|
|
m_ckInitProject->Top = curY + (contentHeight - m_ckInitProject->Height)/2;
|
|
|
|
/////////////////////////////////////////////////
|
|
contentStart += LINE_HEIGHT;
|
|
curY = contentStart;
|
|
|
|
m_ckDownloadStyle->Left = curX;
|
|
m_ckDownloadStyle->Top = curY + (contentHeight - m_ckDownloadStyle->Height)/2;
|
|
|
|
/////////////////////////////////////////////////
|
|
contentStart += LINE_HEIGHT;
|
|
curY = contentStart;
|
|
|
|
m_ckPreBeat->Left = curX;
|
|
m_ckPreBeat->Top = curY + (contentHeight - m_ckPreBeat->Height)/2;
|
|
|
|
/////////////////////////////////////////////////
|
|
contentStart += LINE_HEIGHT;
|
|
curX = LEFT_RIGHT + 5;
|
|
|
|
strText = L"和弦显示方式:";
|
|
sizeFont = Canvas->TextExtent(strText);
|
|
curY = contentStart + (contentHeight - sizeFont.Height)/2;
|
|
Canvas->TextOutW(curX, curY, strText);
|
|
|
|
curX += sizeFont.Width + 10;
|
|
curY = contentStart;
|
|
m_cbChordMode->Left = curX;
|
|
m_cbChordMode->Top = curY + (contentHeight - m_cbChordMode->Height)/2;
|
|
|
|
strText = L" * 示例:";
|
|
sizeFont = Canvas->TextExtent(strText);
|
|
curX += m_cbChordMode->Width + 10;
|
|
curY = contentStart + (contentHeight - sizeFont.Height)/2;
|
|
Canvas->TextOutW(curX, curY, strText);
|
|
|
|
if( !m_bAlphaKey ) {
|
|
strText = L"VI";
|
|
}else{
|
|
strText = L"A";
|
|
}
|
|
|
|
Canvas->Font->Name = "Times New Roman";
|
|
Canvas->Font->Quality = TFontQuality::fqClearTypeNatural;
|
|
Canvas->Font->Color = CLR_TXT_HOT;
|
|
Canvas->Font->Style = TFontStyles()<<fsItalic<<fsBold;
|
|
Canvas->Font->Size = g_szFont16;
|
|
|
|
curX += sizeFont.Width;
|
|
sizeFont = Canvas->TextExtent(strText);
|
|
curY = contentStart + (contentHeight - sizeFont.Height)/2;
|
|
Canvas->TextOutW(curX, curY, strText);
|
|
|
|
strText = L"m";
|
|
curX += sizeFont.Width;
|
|
curY += 7;
|
|
Canvas->Font->Size = g_szFont9;
|
|
Canvas->TextOutW(curX, curY, strText);
|
|
|
|
Canvas->Font->Assign( fntOld );
|
|
delete fntOld;
|
|
|
|
/////////////////////////////////////////////////
|
|
contentStart += LINE_HEIGHT;
|
|
curX = LEFT_RIGHT + 5;
|
|
|
|
strText = L"预设段落结构:";
|
|
sizeFont = Canvas->TextExtent(strText);
|
|
curY = contentStart + (contentHeight - sizeFont.Height)/2;
|
|
Canvas->TextOutW(curX, curY, strText);
|
|
|
|
curX += sizeFont.Width + 10;
|
|
curY = contentStart;
|
|
m_cbPreStage->Left = curX;
|
|
m_cbPreStage->Top = curY + (contentHeight - m_cbPreStage->Height)/2;
|
|
|
|
strText = L" * I-前奏、M-旋律、E-尾奏";
|
|
sizeFont = Canvas->TextExtent(strText);
|
|
curX += m_cbPreStage->Width + 10;
|
|
curY = contentStart + (contentHeight - sizeFont.Height)/2;
|
|
Canvas->TextOutW(curX, curY, strText);
|
|
|
|
/////////////////////////////////////////////////
|
|
curX = LEFT_RIGHT + 5;
|
|
contentStart += LINE_HEIGHT;
|
|
strText = L"风格列表排序方式:";
|
|
sizeFont = Canvas->TextExtent(strText);
|
|
curY = contentStart + (contentHeight - sizeFont.Height)/2;
|
|
Canvas->TextOutW(curX, curY, strText);
|
|
|
|
curX += sizeFont.Width + 10;
|
|
curY = contentStart;
|
|
m_cbPreSortMode->Left = curX;
|
|
m_cbPreSortMode->Top = curY + (contentHeight - m_cbPreStage->Height)/2;
|
|
|
|
curX += m_cbPreSortMode->Width + 30;
|
|
curY = contentStart;
|
|
m_cbPreSortUD->Left = curX;
|
|
m_cbPreSortUD->Top = curY + (contentHeight - m_cbPreStage->Height)/2;
|
|
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
void __fastcall TCustmerSettingPanel::CKBoxChange(TObject* Sender)
|
|
{
|
|
TCheckBox *tmpCK = (TCheckBox *)Sender;
|
|
if( tmpCK == m_ckInitProject ) {
|
|
m_bAutoOpenProject = tmpCK->Checked;
|
|
}else if( tmpCK == m_ckDownloadStyle ){
|
|
m_bDownloadStyle = m_ckDownloadStyle->Checked;
|
|
}else if( tmpCK == m_ckPreBeat ){
|
|
m_bPreBeat = m_ckPreBeat->Checked;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TCustmerSettingPanel::CBChange(TObject* Sender)
|
|
{
|
|
TComboBox *tmpCB = (TComboBox *)Sender;
|
|
if( tmpCB == m_cbChordMode ) {
|
|
m_bAlphaKey = tmpCB->ItemIndex;
|
|
this->Invalidate();
|
|
}else if( tmpCB == m_cbPreStage ){
|
|
m_cPreStage = tmpCB->ItemIndex;
|
|
}else if( tmpCB == m_cbPreSortMode ){
|
|
m_iPreStyleSort = (m_iPreStyleSort & 0xffff0000) | tmpCB->ItemIndex;
|
|
}else if( tmpCB == m_cbPreSortUD ){
|
|
m_iPreStyleSort = (m_iPreStyleSort & 0x0000ffff) |
|
|
(tmpCB->ItemIndex<<16);
|
|
}
|
|
|
|
if(m_ScrollBar)
|
|
m_ScrollBar->SetFocus();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|