//--------------------------------------------------------------------------- #include #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( curposHandle ){ 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()<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(); } //---------------------------------------------------------------------------