Initial commit

This commit is contained in:
2026-06-13 00:05:19 +08:00
commit 754cd7ccdb
402 changed files with 123771 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
#排除所有的编译目录
**/Win32/
#排除历史和恢复目录
__history/
__recovery/
#排除本地设置
*.~dsk
*.cbpr
*.local
+3
View File
@@ -0,0 +1,3 @@
#include <vcl.h>
#include <tchar.h>
+2343
View File
File diff suppressed because it is too large Load Diff
+410
View File
@@ -0,0 +1,410 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <System.IOUtils.hpp>
#include <Winerror.h>
#include "GlobalUnit.h"
#include "SplashFormUnit.h"
#include "MessageFormUnit.h"
//---------------------------------------------------------------------------
USEFORM("SplashFormUnit.cpp", SplashForm);
USEFORM("MainFormUnit.cpp", MainForm);
USEFORM("MessageFormUnit.cpp", MessageForm);
//---------------------------------------------------------------------------
HWND hWnd = NULL;
HINSTANCE u_hMMDll = NULL,
u_hCMDll = NULL,
u_hCSDll = NULL,
u_hQRDll = NULL;
void InitUserPath()
{
SplashForm->ShowProgress( "配置用户路径..." );
String strAppPath = TPath::GetFullPath(ExtractFilePath(Application->ExeName));
g_strExecutePath = strAppPath.c_str();
TCHAR filePath[MAX_PATH];
SHGetSpecialFolderPath(NULL, filePath, CSIDL_LOCAL_APPDATA, TRUE);
String strLocPath = filePath;
strLocPath += L"\\iChangzuo";
if(!DirectoryExists( strLocPath, false)){
ForceDirectories( strLocPath );
}
#ifdef _LITE_
strLocPath += L"\\Ac_ProLite\\";
#else
strLocPath += L"\\Ac_Pro\\";
#endif
g_strUserPath = strLocPath.c_str();
if(!DirectoryExists( strLocPath, false)){
ForceDirectories( strLocPath );
}
if(!DirectoryExists( strLocPath + L"Help", false)){
ForceDirectories( strLocPath + L"Help" );
}
if(!DirectoryExists( strLocPath + L"header", false)){
ForceDirectories( strLocPath + L"header" );
String strSrc = strAppPath + L"Header\\default.jpg",
strDest = strLocPath + L"Header\\default.jpg";
if( FileExists( strSrc, false ) )
CopyFile( strSrc.c_str(), strDest.c_str(), FALSE );
}
strLocPath += L"Profile\\";
strAppPath += L"Profile\\";
bool bCover = false;
if( DirectoryExists( strAppPath, false ) ){
if( !DirectoryExists( strLocPath, false) ){
ForceDirectories( strLocPath );
bCover = true;
}
}
else{
return;
}
String strSubPathShort[3] = { "dt_eerp", "ml_bursa", "sf_lyres" },
strDefaultFile[3][2] = { {"uflid.jst","lidshr.lux"},
{"frm0000.lmd","shr0000.lmd"},
{"Lcyh00000.dhy","Lcyh00001.dhy"} };
for( int i=0; i<3; i++ ){
String strOriPath = strAppPath + strSubPathShort[i],
strSubPath = strLocPath + strSubPathShort[i];
if( DirectoryExists( strOriPath, false ) ){
if( !DirectoryExists( strSubPath, false ) ){
ForceDirectories( strSubPath );
bCover = true;
}
else{
for( int j=0; j<2; j++ ){
String strExistFile = strOriPath + L"\\" + strDefaultFile[i][j],
strNewFile = strSubPath + L"\\" + strDefaultFile[i][j];
HANDLE hOriFile = CreateFile( strExistFile.c_str(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL );
if( hOriFile && hOriFile!=INVALID_HANDLE_VALUE ){
HANDLE hNewFile = CreateFile( strNewFile.c_str(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
if( hNewFile && hNewFile!=INVALID_HANDLE_VALUE ){
DWORD dwSizeOri = GetFileSize( hOriFile, NULL ),
dwSizeNew = GetFileSize( hNewFile, NULL );
FILETIME ftModifyOri, ftModifyNew;
GetFileTime( hOriFile, NULL, NULL, &ftModifyOri );
GetFileTime( hNewFile, NULL, NULL, &ftModifyNew );
if( dwSizeOri>dwSizeNew || CompareFileTime( &ftModifyOri, &ftModifyNew )>0 )
bCover = true;
CloseHandle( hNewFile );
}
else{
bCover = true;
}
CloseHandle( hOriFile );
}
else if( j==0 ){
return;
}
}
}
}
else{
return;
}
}
TSearchRec sr;
int iAttr = 0;
for( int i=0; i<3; i++ ){
String strOriPath = strAppPath + strSubPathShort[i],
strSubPath = strLocPath + strSubPathShort[i];
if (FindFirst(strOriPath + L"\\*.*", iAttr, sr) == 0) {
do {
String strExistFile = strOriPath + L"\\" + sr.Name,
strNewFile = strSubPath + L"\\" + sr.Name;
bool bCopy = true;
if( !sr.Name.Compare(strDefaultFile[i][0]) || !sr.Name.Compare(strDefaultFile[i][1]) ){
bCopy = bCover;
}
else if( FileExists( strNewFile, false ) ){
HANDLE hOriFile = CreateFile( strExistFile.c_str(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL );
if( hOriFile && hOriFile!=INVALID_HANDLE_VALUE ){
HANDLE hNewFile = CreateFile( strNewFile.c_str(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
if( hNewFile && hNewFile!=INVALID_HANDLE_VALUE ){
FILETIME ftModifyOri, ftModifyNew;
GetFileTime( hOriFile, NULL, NULL, &ftModifyOri );
GetFileTime( hNewFile, NULL, NULL, &ftModifyNew );
CloseHandle( hNewFile );
if( CompareFileTime( &ftModifyNew, &ftModifyOri )>=0 ){
bCopy = false;
}
}
CloseHandle( hOriFile );
}
else{
bCopy = false;
}
}
if( bCopy ){
CopyFile( strExistFile.c_str(), strNewFile.c_str(), FALSE );
if( !sr.Name.Compare(L"smtd.dhy") ){ //本地风格需处理时间戳
HANDLE hOriFile = CreateFile( strExistFile.c_str(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL );
if( hOriFile && hOriFile!=INVALID_HANDLE_VALUE ){
HANDLE hNewFile = CreateFile( strNewFile.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if( hNewFile && hNewFile!=INVALID_HANDLE_VALUE ){
FILETIME ftCreate;
GetFileTime( hOriFile, &ftCreate, NULL, NULL );
SetFileTime( hNewFile, &ftCreate, NULL, NULL );
CloseHandle( hNewFile );
}
CloseHandle( hOriFile );
}
}
}
}
while( FindNext(sr)==0 );
FindClose(sr);
}
}
}
int LoadDlls()
{
SplashForm->ShowProgress( "加载媒体模块..." );
u_hMMDll = LoadLibrary(L"MediaModule.dll");
if( u_hMMDll==NULL ){
return 1;
}
else if( GetMMFunctions(u_hMMDll)==S_FALSE ) {
return 2;
}
SplashForm->ShowProgress( "加载编曲模块..." );
u_hCMDll = LoadLibrary(L"CompModule.dll");
if( u_hCMDll==NULL ){
int err = GetLastError();
return 3;
}
else if( GetCMFunctions(u_hCMDll)==S_FALSE ) {
return 4;
}
SplashForm->ShowProgress( "加载网络模块..." );
u_hCSDll = LoadLibrary(L"ClientService.dll");
if( u_hCSDll==NULL ){
return 5;
}
else if( GetCSFunctions(u_hCSDll)==S_FALSE ) {
return 6;
}
u_hQRDll = LoadLibrary(L"QRcode.dll");
if( u_hQRDll ){
GetQRFunctions(u_hQRDll);
}
return 0;
}
void FreeDlls()
{
if( u_hCMDll ){
FreeLibrary( u_hCMDll );
u_hCMDll = NULL;
}
if( u_hMMDll ){
FreeLibrary( u_hMMDll );
u_hMMDll = NULL;
}
if( u_hCSDll ){
FreeLibrary( u_hCSDll );
u_hCSDll = NULL;
}
if( u_hQRDll ){
FreeLibrary( u_hQRDll );
u_hQRDll = NULL;
}
}
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
hWnd = FindWindow( (LPCTSTR)APPNAME, NULL );
if( hWnd ){
SendMessage( hWnd, UM_RESTORE, 0, 0 );
if( !ParamStr(1).IsEmpty() ){
int BUF_SIZE = 256;
TCHAR szName[]=TEXT("MyFileMappingObject");
LPTSTR pBuf;
HANDLE hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // max. object size
BUF_SIZE, // buffer size
szName); // name of mapping object
if( hMapFile ){
pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);
if( pBuf ){
wcscpy( pBuf, ParamStr(1).c_str() );
SendMessage( hWnd, UM_LOADPROJECT, 0, wcslen(pBuf) );
UnmapViewOfFile(pBuf);
}
CloseHandle(hMapFile);
}
}
return 0;
}
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->Title = APPNAME;
// 获取DPI
HDC hdc = GetDC(NULL);
if (hdc != NULL) {
g_xDpi = GetDeviceCaps(hdc, LOGPIXELSX);
g_yDpi = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
}
g_szFont7 = int(7 * 96.0 / g_yDpi + 0.5);
g_szFont8 = int(8 * 96.0 / g_yDpi + 0.5);
g_szFont9 = int(9 * 96.0 / g_yDpi + 0.5);
g_szFont10 = int(10 * 96.0 / g_yDpi + 0.5);
g_szFont11 = int(11 * 96.0 / g_yDpi + 0.5);
g_szFont12 = int(12 * 96.0 / g_yDpi + 0.5);
g_szFont16 = int(16 * 96.0 / g_yDpi + 0.5);
//显示启动图片
SplashForm = new TSplashForm(Application);
SplashForm->Show();
InitUserPath();
String strErr;
switch(LoadDlls()){
case 1:
strErr = "加载媒体模块失败!";
break;
case 2:
strErr = "获取媒体模块函数失败!";
break;
case 3:
strErr = "加载编曲模块失败!";
break;
case 4:
strErr = "获取编曲模块函数失败!";
break;
case 5:
strErr = "加载网络服务模块失败!";
break;
case 6:
strErr = "获取网络服务函数失败!";
break;
default:
break;
}
MessageForm = new TMessageForm(Application);
MessageForm->Position = poDesktopCenter;
if( !strErr.IsEmpty() ){
delete SplashForm;
FreeDlls();
MessageForm->ShowMessage( strErr, MB_ICONERROR|MB_OK );
delete MessageForm;
return 0;
}
Word Saved8087CW = Default8087CW;
System::Set8087CW(0x133f);
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->MainForm->Visible = false;
delete SplashForm;
SplashForm = NULL;
if( !g_lstFonts.empty() ){
Application->MainForm->Visible = true;
MessageForm->Position = poMainFormCenter;
Application->Run();
}
delete MessageForm;
FreeDlls();
System::Set8087CW(Saved8087CW);
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
// catch (...)
// {
// try
// {
// throw Exception("");
// }
// catch (Exception &exception)
// {
// Application->ShowException(&exception);
// }
// }
return 0;
}
//---------------------------------------------------------------------------
+761
View File
@@ -0,0 +1,761 @@
[Closed Files]
File_0=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\VSTiFormUnit.cpp',0,1,1,1,1,0,0,,
File_1=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\CustomerSettingFormUnit.cpp',0,1,1,1,1,0,0,,
File_2=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\CustomerSettingPanelUnit.cpp',0,1,28,36,64,0,0,,
File_3=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\StyleSelPanel.cpp',0,1,515,1,548,0,0,,
File_4=TSourceModule,'d:\program files\embarcadero\studio\23.0\SOURCE\VCL\Vcl.Controls.pas',0,1,3698,1,3731,0,0,,
File_5=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\MessageFormUnit.cpp',0,1,1,1,1,0,0,,
File_6=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\SplashFormUnit.cpp',0,1,1,1,1,0,0,,
File_7=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\StylePanel.cpp',0,1,2319,1,2352,0,0,,
File_8=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\SetUpFormUnit.cpp',0,1,1,1,1,0,0,,
File_9=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\MessageDef.h',0,1,1,1,1,0,0,,
File_10=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\ProCommon.h',0,1,1,21,5,0,0,,
File_11=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\commonstruct.h',0,1,1,1,1,0,0,,
File_12=TSourceModule,'E:\Ac_Project\Ac_Windows\AC_Pro\SaveFormUnit.cpp',0,1,1,105,24,0,0,,
File_13=TSourceModule,'E:\BCB_Project\Apps\UKeyApps\SLPChecker\SLPChecker.cpp',0,1,1,99,594,0,0,,
File_14=TSourceModule,'E:\BCB_Project\Apps\UKeyApps\SLPrint\PrintThread.cpp',0,1,1,1,1,0,0,,
[Modules]
Module0=E:\Ac_Project\Ac_Windows\AC_Pro\GlobalUnit.cpp
Module1=E:\Ac_Project\Ac_Windows\AC_Pro\AC_Pro.cbproj
Module2=E:\Ac_Project\Ac_Windows\AC_Pro\MainFormUnit.cpp
Module3=E:\Ac_Project\Ac_Windows\AC_Pro\VSTPathFormUnit.cpp
Count=4
EditWindowCount=1
[E:\Ac_Project\Ac_Windows\AC_Pro\GlobalUnit.cpp]
ModuleType=TSourceModule
[E:\Ac_Project\Ac_Windows\AC_Pro\AC_Pro.cbproj]
ModuleType=TBaseProject
[E:\Ac_Project\Ac_Windows\AC_Pro\MainFormUnit.cpp]
ModuleType=TSourceModule
[E:\Ac_Project\Ac_Windows\AC_Pro\VSTPathFormUnit.cpp]
ModuleType=TSourceModule
[EditWindow0]
ViewCount=4
CurrentEditView=E:\Ac_Project\Ac_Windows\AC_Pro\GlobalUnit.cpp
View0=0
View1=1
View2=2
View3=3
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=9938
Height=9253
MaxLeft=-1
MaxTop=-1
ClientWidth=9938
ClientHeight=9253
TBDockHeight=4476
LRDockWidth=3621
Dockable=1
StayOnTop=0
DockedToMainForm=1
BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0
TopPanelSize=0
LeftPanelSize=1895
LeftPanelClients=PropertyInspector,DockSite3
LeftPanelData=00000800010100000000251000000000000001670700000000000001000000005A0E000009000000446F636B53697465330100000000B31C00001100000050726F7065727479496E73706563746F72FFFFFFFF
RightPanelSize=1996
RightPanelClients=DockSite2,DockSite4
RightPanelData=00000800010100000000251000000000000001CC0700000000000001000000004912000009000000446F636B53697465320100000000B31C000009000000446F636B5369746534FFFFFFFF
BottomPanelSize=1542
BottomPanelClients=DockSite1,MessageView
BottomPanelData=0000080001020100000009000000446F636B536974653103450000000000000206060000000000000100000000034500000F0000004D65737361676556696577466F726DFFFFFFFF
BottomMiddlePanelSize=0
BottomMiddlePanelClients=DockSite0,GraphDrawingModel
BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779F1D00000000000002F206000000000000FFFFFFFF
[View0]
CustomEditViewType=TEditView
Module=E:\Ac_Project\Ac_Windows\AC_Pro\AC_Pro.cpp
CursorX=106
CursorY=236
TopLine=182
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AC_Pro\AC_Pro.cpp
[View1]
CustomEditViewType=TEditView
Module=E:\Ac_Project\Ac_Windows\AC_Pro\VSTPathFormUnit.cpp
CursorX=99
CursorY=108
TopLine=80
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AC_Pro\VSTPathFormUnit.cpp
[View2]
CustomEditViewType=TEditView
Module=E:\Ac_Project\Ac_Windows\AC_Pro\MainFormUnit.cpp
CursorX=1
CursorY=5918
TopLine=5879
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AC_Pro\MainFormUnit.cpp
[View3]
CustomEditViewType=TEditView
Module=E:\Ac_Project\Ac_Windows\AC_Pro\GlobalUnit.cpp
CursorX=87
CursorY=851
TopLine=838
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AC_Pro\GlobalUnit.cpp
[Watches]
Count=0
[WatchWindow]
WatchColumnWidth=120
WatchShowColumnHeaders=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=216
LRDockWidth=13602
Dockable=1
StayOnTop=0
[Breakpoints]
Count=1
Breakpoint0='E:\Ac_Project\Ac_Windows\AC_Pro\MainFormUnit.cpp',5918,'',0,1,'',1,0,0,'',1,'','','',0,''
[EmbarcaderoWin32Debugger_AddressBreakpoints]
Count=0
[EmbarcaderoWin64Debugger_AddressBreakpoints]
Count=0
[EmbarcaderoWin64LLDBDebugger_AddressBreakpoints]
Count=0
[Main Window]
PercentageSizes=1
Create=1
Visible=1
Docked=0
State=2
Left=145
Top=273
Width=8930
Height=8520
MaxLeft=-4
MaxTop=-7
MaxWidth=8930
MaxHeight=8520
ClientWidth=10000
ClientHeight=10057
BottomPanelSize=8944
BottomPanelClients=EditWindow0
BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF
[ProjectManager]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=4382
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=4382
TBDockHeight=5898
LRDockWidth=2348
Dockable=1
StayOnTop=0
[MessageView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=28
Width=9938
Height=1394
MaxLeft=-1
MaxTop=-1
ClientWidth=9938
ClientHeight=1394
TBDockHeight=1394
LRDockWidth=2770
Dockable=1
StayOnTop=0
[ToolForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=2557
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=2557
TBDockHeight=7155
LRDockWidth=1996
Dockable=1
StayOnTop=0
[PropertyInspector]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=557
Width=1895
Height=3599
MaxLeft=-1
MaxTop=-1
ClientWidth=1895
ClientHeight=3599
TBDockHeight=7004
LRDockWidth=1895
Dockable=1
StayOnTop=0
SplitPos=111
[frmDesignPreview]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=6803
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=6803
TBDockHeight=5955
LRDockWidth=2512
Dockable=1
StayOnTop=0
[TemplateView]
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=-2296
Top=370
Width=273
Height=359
MaxLeft=-1
MaxTop=-1
ClientWidth=273
ClientHeight=359
TBDockHeight=359
LRDockWidth=273
Dockable=1
StayOnTop=0
Name=120
Description=334
filter=1
[DebugLogView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=409
LRDockWidth=4949
Dockable=1
StayOnTop=0
[ThreadStatusWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=216
LRDockWidth=7406
Dockable=1
StayOnTop=0
Column0Width=145
Column1Width=100
Column2Width=115
Column3Width=619
[LocalVarsWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=1537
LRDockWidth=3484
Dockable=1
StayOnTop=0
[CallStackWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=2062
LRDockWidth=3484
Dockable=1
StayOnTop=0
[PatchForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=2500
LRDockWidth=3398
Dockable=1
StayOnTop=0
[FindReferencsForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1042
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1042
TBDockHeight=2320
LRDockWidth=2824
Dockable=1
StayOnTop=0
[RefactoringForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=3211
LRDockWidth=2824
Dockable=1
StayOnTop=0
[ToDo List]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=1157
LRDockWidth=3676
Dockable=1
StayOnTop=0
Column0Width=314
Column1Width=30
Column2Width=150
Column3Width=172
Column4Width=129
SortOrder=4
ShowHints=1
ShowChecked=1
[DataExplorerContainer]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=6803
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=6803
TBDockHeight=4885
LRDockWidth=7148
Dockable=1
StayOnTop=0
[GraphDrawingModel]
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=501
Top=1099
Width=2855
Height=3211
MaxLeft=-1
MaxTop=-1
ClientWidth=2855
ClientHeight=3211
TBDockHeight=3211
LRDockWidth=2855
Dockable=1
StayOnTop=0
[ClassBrowserTool]
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=-250
Top=-124
Width=1848
Height=3139
MaxLeft=-1
MaxTop=-1
ClientWidth=1848
ClientHeight=3139
TBDockHeight=3139
LRDockWidth=1848
Dockable=1
StayOnTop=0
[MetricsView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=4835
LRDockWidth=3562
Dockable=1
StayOnTop=0
[QAView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=4835
LRDockWidth=3562
Dockable=1
StayOnTop=0
[BreakpointWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=1545
LRDockWidth=8742
Dockable=1
StayOnTop=0
Column0Width=200
Column1Width=75
Column2Width=200
Column3Width=200
Column4Width=200
Column5Width=75
Column6Width=75
[StructureView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1895
Height=3542
MaxLeft=-1
MaxTop=-1
ClientWidth=1895
ClientHeight=3542
TBDockHeight=3678
LRDockWidth=1895
Dockable=1
StayOnTop=0
[ModelViewTool]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=6803
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=6803
TBDockHeight=4885
LRDockWidth=5309
Dockable=1
StayOnTop=0
[BorlandEditorCodeExplorer@EditWindow0]
PercentageSizes=1
Create=1
Visible=0
Docked=0
State=0
Left=0
Top=0
Width=1824
Height=6171
MaxLeft=-4
MaxTop=-7
ClientWidth=1762
ClientHeight=5891
TBDockHeight=6171
LRDockWidth=1824
Dockable=1
StayOnTop=0
[DockHosts]
DockHostCount=5
[DockSite0]
HostDockSite=DockBottomCenterPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=8
Top=8
Width=2340
Height=1480
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1480
TBDockHeight=1480
LRDockWidth=2340
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=RefactoringForm
TabDockClients=RefactoringForm,PatchForm,FindReferencsForm,ToDo List,MetricsView,QAView
[DockSite1]
HostDockSite=DockBottomPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=0
Top=28
Width=3824
Height=1422
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1422
TBDockHeight=1422
LRDockWidth=3824
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=DebugLogView
TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow
[DockSite2]
HostDockSite=DockRightPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=28
Width=1996
Height=4583
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=4583
TBDockHeight=7004
LRDockWidth=1996
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=ProjectManager
TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview
[DockSite3]
HostDockSite=DockLeftPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=28
Width=1895
Height=3542
MaxLeft=-1
MaxTop=-1
ClientWidth=1895
ClientHeight=3542
TBDockHeight=7004
LRDockWidth=1895
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=StructureView
TabDockClients=StructureView,ClassBrowserTool
[DockSite4]
HostDockSite=DockRightPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=702
Width=1996
Height=2557
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=2557
TBDockHeight=7004
LRDockWidth=1996
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=ToolForm
TabDockClients=ToolForm,TemplateView
+1730
View File
File diff suppressed because it is too large Load Diff
+2200
View File
File diff suppressed because it is too large Load Diff
+90
View File
@@ -0,0 +1,90 @@
[ClosedView_RTpcQWNfUHJvamVjdFxBY19XaW5kb3dzXEFjY29tcGFueUN1YmVcUE5HQnV0dG9uLmhwcA==]
Module=E:\Ac_Project\Ac_Windows\AccompanyCube\PNGButton.hpp
CursorX=85
CursorY=67
TopLine=34
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AccompanyCube\PNGButton.hpp
[ClosedView_RTpcQWNfUHJvamVjdFxBY19XaW5kb3dzXEFjY29tcGFueUN1YmVcTm90aWZpY2F0aW9uRXhVbml0
LmNwcA==]
Module=E:\Ac_Project\Ac_Windows\AccompanyCube\NotificationExUnit.cpp
CursorX=10
CursorY=145
TopLine=98
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AccompanyCube\NotificationExUnit.cpp
[ClosedView_ZDpccHJvZ3JhbSBmaWxlc1xlbWJhcmNhZGVyb1xzdHVkaW9cMjMuMFxpbmNsdWRlXHdpbmRvd3Nc
dmNsXFZjbC5TdGRDdHJscy5ocHA=]
Module=d:\program files\embarcadero\studio\23.0\include\windows\vcl\Vcl.StdCtrls.hpp
CursorX=1
CursorY=474
TopLine=35
LeftCol=1
Elisions=
Bookmarks=
EditViewName=d:\program files\embarcadero\studio\23.0\include\windows\vcl\Vcl.StdCtrls.hpp
[ClosedView_ZDpccHJvZ3JhbSBmaWxlc1xlbWJhcmNhZGVyb1xzdHVkaW9cMjMuMFxpbmNsdWRlXHdpbmRvd3Nc
dmNsXFZjbC5TdGRDdHJscy5ocHA=]
Module=d:\program files\embarcadero\studio\23.0\include\windows\vcl\Vcl.StdCtrls.hpp
CursorX=1
CursorY=474
TopLine=35
LeftCol=1
Elisions=
Bookmarks=
EditViewName=d:\program files\embarcadero\studio\23.0\include\windows\vcl\Vcl.StdCtrls.hpp
[ClosedView_RTpcQWNfUHJvamVjdFxBY19XaW5kb3dzXEFjY29tcGFueUN1YmVcTm90aWZpY2F0aW9uRXhVbml0
LmNwcA==]
Module=E:\Ac_Project\Ac_Windows\AccompanyCube\NotificationExUnit.cpp
CursorX=10
CursorY=145
TopLine=98
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AccompanyCube\NotificationExUnit.cpp
[ClosedView_RTpcQWNfUHJvamVjdFxBY19XaW5kb3dzXEFjY29tcGFueUN1YmVcTm90aWZpY2F0aW9uRXhVbml0
LmNwcA==]
Module=E:\Ac_Project\Ac_Windows\AccompanyCube\NotificationExUnit.cpp
CursorX=10
CursorY=145
TopLine=98
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AccompanyCube\NotificationExUnit.cpp
[ClosedView_RTpcQWNfUHJvamVjdFxBY19XaW5kb3dzXEFjY29tcGFueUN1YmVcQnRuUGFuZWxVbml0LmNwcA==]
Module=E:\Ac_Project\Ac_Windows\AccompanyCube\BtnPanelUnit.cpp
CursorX=1
CursorY=1
TopLine=70
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AccompanyCube\BtnPanelUnit.cpp
[ClosedView_RTpcQWNfUHJvamVjdFxBY19XaW5kb3dzXEFDX1Byb1xDb21wb3NlLmNwcA==]
Module=E:\Ac_Project\Ac_Windows\AC_Pro\Compose.cpp
CursorX=1
CursorY=320
TopLine=293
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AC_Pro\Compose.cpp
[ClosedView_RTpcQWNfUHJvamVjdFxBY19XaW5kb3dzXEFDX1Byb1xTdHlsZVNlbFBhbmVsLmNwcA==]
Module=E:\Ac_Project\Ac_Windows\AC_Pro\StyleSelPanel.cpp
CursorX=65
CursorY=312
TopLine=269
LeftCol=1
Elisions=
Bookmarks=
EditViewName=E:\Ac_Project\Ac_Windows\AC_Pro\StyleSelPanel.cpp
+86
View File
@@ -0,0 +1,86 @@
imgWaveIcon BITMAP "Res\\Content\\AudioIcon.bmp"
imgMidiIcon BITMAP "Res\\Content\\MidiIcon.bmp"
imgPlayCursor BITMAP "Res\\Content\\PlayCursor.bmp"
music_cover_default BITMAP "Res\\Copper\\music_cover_default.bmp"
round RCDATA "Res\\Copper\\round.png"
imgEffectAdd RCDATA "Res\\Effect\\add.png"
imgEffectOff RCDATA "Res\\Effect\\power_off.png"
imgEffectOn RCDATA "Res\\Effect\\power_on.png"
HelpPNG RCDATA "Res\\Help\\help_btn.png"
KBBlackDown BITMAP "Res\\Main\\BlackPress.bmp"
CursorBrush CURSOR "Res\\Main\\brush.cur"
CursorBrushAdd CURSOR "Res\\Main\\brushadd.cur"
CursorBrushNo CURSOR "Res\\Main\\brushno.cur"
KeyBoard RCDATA "Res\\Main\\keyboard.png"
imgMIButton RCDATA "Res\\Main\\mibutton.png"
NoticeBk RCDATA "Res\\Main\\notice.png"
btnViewChordLeft RCDATA "Res\\Main\\view_chord_l.png"
btnViewChordRight RCDATA "Res\\Main\\view_chord_r.png"
btnViewStyleLeft RCDATA "Res\\Main\\view_style_l.png"
btnViewStyleRight RCDATA "Res\\Main\\view_style_r.png"
btnViewTrackLeft RCDATA "Res\\Main\\view_track_l.png"
btnViewTrackRight RCDATA "Res\\Main\\view_track_r.png"
KBWhiteDDown BITMAP "Res\\Main\\WhiteDualPress.bmp"
KBWhiteLDown BITMAP "Res\\Main\\WhiteLeftPress.bmp"
KBWhiteRDown BITMAP "Res\\Main\\WhiteRightPress.bmp"
imgInfo RCDATA "Res\\MessageBox\\info.png"
imgProgressLeft BITMAP "Res\\Progress\\ProgressLeft.bmp"
imgProgressRight BITMAP "Res\\Progress\\ProgressRight.bmp"
imgBeatHint1 RCDATA "Res\\Record\\BeatHint1.png"
imgBeatHint2 RCDATA "Res\\Record\\BeatHint2.png"
imgBeatHint3 RCDATA "Res\\Record\\BeatHint3.png"
imgBeatHint4 RCDATA "Res\\Record\\BeatHint4.png"
SBLineDown BITMAP "Res\\Scrollbar\\LineDown.bmp"
SBLineLeft BITMAP "Res\\Scrollbar\\LineLeft.bmp"
SBLineRight BITMAP "Res\\Scrollbar\\LineRight.bmp"
SBLineUp BITMAP "Res\\Scrollbar\\LineUp.bmp"
TapDown RCDATA "Res\\Setup\\tapHover.png"
TapNor RCDATA "Res\\Setup\\tapNor.png"
imgAddChannel RCDATA "Res\\Style\\addchan.png"
imgAddSegment RCDATA "Res\\Style\\addsegment.png"
imgAlphaChord RCDATA "Res\\Style\\alpha_chord.png"
imgChannel RCDATA "Res\\Style\\channel.png"
imgCollect RCDATA "Res\\Style\\collect.png"
imgDownload RCDATA "Res\\Style\\download.png"
imgEffWav RCDATA "Res\\Style\\eff_wav.png"
imgItemChecked RCDATA "Res\\Style\\item_checked.png"
imgItemUnchecked RCDATA "Res\\Style\\item_unchecked.png"
imgNewStyle RCDATA "Res\\Style\\newstyle.png"
imgPylon RCDATA "Res\\Style\\pylon.png"
imgStar RCDATA "Res\\Style\\star1.png"
imgScore RCDATA "Res\\Style\\star2.png"
imgUnScore RCDATA "Res\\Style\\star3.png"
imgStyleCharge RCDATA "Res\\Style\\stylecharge.png"
imgStyleSave RCDATA "Res\\Style\\stylesave.png"
imgStyleUpload RCDATA "Res\\Style\\styleupload.png"
imgFold RCDATA "Res\\Style\\style_arrows_close.png"
imgUnfold RCDATA "Res\\Style\\style_arrows_open.png"
imgBrush RCDATA "Res\\Style\\style_brush.png"
imgDelete RCDATA "Res\\Style\\style_delete.png"
imgProg RCDATA "Res\\Style\\style_prog.png"
imgTabCollect RCDATA "Res\\Style\\tab_collect.png"
imgTabLocal RCDATA "Res\\Style\\tab_local.png"
imgTabRecom RCDATA "Res\\Style\\tab_recom.png"
imgTabRelease RCDATA "Res\\Style\\tab_release.png"
imgTabSelect RCDATA "Res\\Style\\tab_select.png"
imgTabShare RCDATA "Res\\Style\\tab_share.png"
imgTexture RCDATA "Res\\Style\\texture.png"
imgTrackOff RCDATA "Res\\Style\\trackoff.png"
imgTrackOn RCDATA "Res\\Style\\trackon.png"
imgUnCollect RCDATA "Res\\Style\\uncollect.png"
imgVolume RCDATA "Res\\Style\\volume.png"
imgWave RCDATA "Res\\Style\\wave.png"
imgWavEff RCDATA "Res\\Style\\wav_eff.png"
imgClose RCDATA "Res\\System\\close.png"
ImgSubMenu RCDATA "Res\\System\\menu_arrows.png"
ImgDownMenu RCDATA "Res\\System\\menu_down.png"
ImgUpMenu RCDATA "Res\\System\\menu_up.png"
UserInfo_Icon RCDATA "Res\\UserInfo\\UserIcon.png"
UserInfo_Coin RCDATA "Res\\UserInfo\\user_coin.png"
UserInfo_Fans RCDATA "Res\\UserInfo\\user_fans.png"
UserInfo_Music RCDATA "Res\\UserInfo\\user_music.png"
UserInfo_Pops RCDATA "Res\\UserInfo\\user_pops.png"
UserInfo_Zone RCDATA "Res\\UserInfo\\user_zone.png"
vipNone RCDATA "Res\\Vip\\icon_vip_off.png"
vipTimer RCDATA "Res\\Vip\\icon_vip_on.PNG"
vipForever RCDATA "Res\\Vip\\icon_vip_on5.png"
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

+97
View File
@@ -0,0 +1,97 @@
chordUp RCDATA "Res\\chords\\#.png"
chord2 RCDATA "Res\\chords\\2.png"
chord4 RCDATA "Res\\chords\\4.png"
chord6 RCDATA "Res\\chords\\6.png"
chord7 RCDATA "Res\\chords\\7.png"
chordDown RCDATA "Res\\chords\\b.png"
chordI RCDATA "Res\\chords\\I.png"
chordMaj RCDATA "Res\\chords\\Maj.png"
chordMin RCDATA "Res\\chords\\min.png"
chordSus RCDATA "Res\\chords\\s.png"
chordV RCDATA "Res\\chords\\V.png"
imgWaveIcon BITMAP "Res\\Content\\AudioIcon.bmp"
imgMidiIcon BITMAP "Res\\Content\\MidiIcon.bmp"
imgPlayCursor BITMAP "Res\\Content\\PlayCursor.bmp"
music_cover_default BITMAP "Res\\Copper\\music_cover_default.bmp"
round RCDATA "Res\\Copper\\round.png"
imgEffectAdd RCDATA "Res\\Effect\\add.png"
imgEffectOff RCDATA "Res\\Effect\\power_off.png"
imgEffectOn RCDATA "Res\\Effect\\power_on.png"
HelpPNG RCDATA "Res\\Help\\help_btn.png"
KBBlackDown BITMAP "Res\\Main\\BlackPress.bmp"
CursorBrush CURSOR "Res\\Main\\brush.cur"
CursorBrushAdd CURSOR "Res\\Main\\brushadd.cur"
CursorBrushNo CURSOR "Res\\Main\\brushno.cur"
KeyBoard RCDATA "Res\\Main\\keyboard.png"
imgMIButton RCDATA "Res\\Main\\mibutton.png"
NoticeBk RCDATA "Res\\Main\\notice.png"
btnViewChordLeft RCDATA "Res\\Main\\view_chord_l.png"
btnViewChordRight RCDATA "Res\\Main\\view_chord_r.png"
btnViewStyleLeft RCDATA "Res\\Main\\view_style_l.png"
btnViewStyleRight RCDATA "Res\\Main\\view_style_r.png"
btnViewTrackLeft RCDATA "Res\\Main\\view_track_l.png"
btnViewTrackRight RCDATA "Res\\Main\\view_track_r.png"
KBWhiteDDown BITMAP "Res\\Main\\WhiteDualPress.bmp"
KBWhiteLDown BITMAP "Res\\Main\\WhiteLeftPress.bmp"
KBWhiteRDown BITMAP "Res\\Main\\WhiteRightPress.bmp"
imgInfo RCDATA "Res\\MessageBox\\info.png"
imgProgressLeft BITMAP "Res\\Progress\\ProgressLeft.bmp"
imgProgressRight BITMAP "Res\\Progress\\ProgressRight.bmp"
imgBeatHint1 RCDATA "Res\\Record\\BeatHint1.png"
imgBeatHint2 RCDATA "Res\\Record\\BeatHint2.png"
imgBeatHint3 RCDATA "Res\\Record\\BeatHint3.png"
imgBeatHint4 RCDATA "Res\\Record\\BeatHint4.png"
SBLineDown BITMAP "Res\\Scrollbar\\LineDown.bmp"
SBLineLeft BITMAP "Res\\Scrollbar\\LineLeft.bmp"
SBLineRight BITMAP "Res\\Scrollbar\\LineRight.bmp"
SBLineUp BITMAP "Res\\Scrollbar\\LineUp.bmp"
TapDown RCDATA "Res\\Setup\\tapHover.png"
TapNor RCDATA "Res\\Setup\\tapNor.png"
imgAddChannel RCDATA "Res\\Style\\addchan.png"
imgAddSegment RCDATA "Res\\Style\\addsegment.png"
imgAlphaChord RCDATA "Res\\Style\\alpha_chord.png"
imgChannel RCDATA "Res\\Style\\channel.png"
imgCollect RCDATA "Res\\Style\\collect.png"
imgDownload RCDATA "Res\\Style\\download.png"
imgEffWav RCDATA "Res\\Style\\eff_wav.png"
imgItemChecked RCDATA "Res\\Style\\item_checked.png"
imgItemUnchecked RCDATA "Res\\Style\\item_unchecked.png"
imgNewStyle RCDATA "Res\\Style\\newstyle.png"
imgPylon RCDATA "Res\\Style\\pylon.png"
imgStar RCDATA "Res\\Style\\star1.png"
imgScore RCDATA "Res\\Style\\star2.png"
imgUnScore RCDATA "Res\\Style\\star3.png"
imgStyleCharge RCDATA "Res\\Style\\stylecharge.png"
imgStyleSave RCDATA "Res\\Style\\stylesave.png"
imgStyleUpload RCDATA "Res\\Style\\styleupload.png"
imgFold RCDATA "Res\\Style\\style_arrows_close.png"
imgUnfold RCDATA "Res\\Style\\style_arrows_open.png"
imgBrush RCDATA "Res\\Style\\style_brush.png"
imgDelete RCDATA "Res\\Style\\style_delete.png"
imgProg RCDATA "Res\\Style\\style_prog.png"
imgTabCollect RCDATA "Res\\Style\\tab_collect.png"
imgTabLocal RCDATA "Res\\Style\\tab_local.png"
imgTabRecom RCDATA "Res\\Style\\tab_recom.png"
imgTabRelease RCDATA "Res\\Style\\tab_release.png"
imgTabSelect RCDATA "Res\\Style\\tab_select.png"
imgTabShare RCDATA "Res\\Style\\tab_share.png"
imgTexture RCDATA "Res\\Style\\texture.png"
imgTrackOff RCDATA "Res\\Style\\trackoff.png"
imgTrackOn RCDATA "Res\\Style\\trackon.png"
imgUnCollect RCDATA "Res\\Style\\uncollect.png"
imgVolume RCDATA "Res\\Style\\volume.png"
imgWave RCDATA "Res\\Style\\wave.png"
imgWavEff RCDATA "Res\\Style\\wav_eff.png"
imgClose RCDATA "Res\\System\\close.png"
ImgSubMenu RCDATA "Res\\System\\menu_arrows.png"
ImgDownMenu RCDATA "Res\\System\\menu_down.png"
ImgUpMenu RCDATA "Res\\System\\menu_up.png"
UserInfo_Icon RCDATA "Res\\UserInfo\\UserIcon.png"
UserInfo_Coin RCDATA "Res\\UserInfo\\user_coin.png"
UserInfo_Fans RCDATA "Res\\UserInfo\\user_fans.png"
UserInfo_Music RCDATA "Res\\UserInfo\\user_music.png"
UserInfo_Pops RCDATA "Res\\UserInfo\\user_pops.png"
UserInfo_Zone RCDATA "Res\\UserInfo\\user_zone.png"
vipNone RCDATA "Res\\Vip\\icon_vip_off.png"
vipTimer RCDATA "Res\\Vip\\icon_vip_on.PNG"
vipForever RCDATA "Res\\Vip\\icon_vip_on5.png"
+75
View File
@@ -0,0 +1,75 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "AboutFormUnit.h"
#include "GlobalUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PNGButton"
#pragma link "GeneralDialogPanel"
#pragma resource "*.dfm"
TAboutForm *AboutForm;
//---------------------------------------------------------------------------
__fastcall TAboutForm::TAboutForm(TComponent* Owner)
: TForm(Owner)
{
Font->Color = RGB(60,43,23);
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::FormCreate(TObject *Sender)
{
m_lblVersion->Caption = g_strCurrentVersion;
int wMaj, wMin, wMod, wBld;
sscanf( g_strCurrentVersion, "%d.%d.%d.%d", &wMaj, &wMin, &wMod, &wBld );
if( SOFTWARE_ID==e_Pro_Lite )
m_lblType->Caption = L"教学版";
else if( wMaj==0 )
m_lblType->Caption = L"测试版";
else
m_lblType->Caption = L"正式版";
m_lblType->Left = m_lblVersion->Left + m_lblVersion->Width + 3;
int nOrigin, nDownload, nShare, nLocal;
f_CS_GetStyleNumsEx( nOrigin, nDownload, nShare, nLocal );
char strNums[64];
sprintf( strNums, "发布/下载风格数:%d/%d", nOrigin, nDownload );
m_lblStyleNums->Caption = strNums;
m_lblURL->Caption = g_strServerURL;
SetTransparent( this );
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::WMNCHitTest(TWMNCHitTest &Msg)
{
TForm::Dispatch(&Msg);
if( Msg.Result==HTCLIENT && Msg.YPos<Top+24 && Msg.XPos<Left+275 )
Msg.Result = HTCAPTION;
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::URLClick(TObject *Sender)
{
if( m_lblURL->Caption.Length()>0 ){
ShellExecute(Handle,NULL, m_lblURL->Caption.c_str(), NULL,NULL,SW_SHOWNORMAL);
}
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
switch( Key ){
case VK_RETURN:
case VK_ESCAPE:
ModalResult = mrCancel;
break;
}
}
//---------------------------------------------------------------------------
+1091
View File
File diff suppressed because it is too large Load Diff
+41
View File
@@ -0,0 +1,41 @@
//---------------------------------------------------------------------------
#ifndef AboutFormUnitH
#define AboutFormUnitH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include "PNGButton.hpp"
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Imaging.jpeg.hpp>
#include "GeneralDialogPanel.h"
#include <Vcl.Imaging.pngimage.hpp>
//---------------------------------------------------------------------------
class TAboutForm : public TForm
{
__published: // IDE-managed Components
TLabel *m_lblVersion;
TLabel *m_lblURL;
TLabel *m_lblStyleNums;
TLabel *m_lblType;
TGeneralDialogPanel *GeneralDialogPanel1;
TImage *PNGLogo;
TImage *PNGText;
void __fastcall FormCreate(TObject *Sender);
void __fastcall URLClick(TObject *Sender);
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
private: // User declarations
void __fastcall WMNCHitTest(TWMNCHitTest &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NCHITTEST, TWMNCHitTest, WMNCHitTest)
END_MESSAGE_MAP(TForm)
public: // User declarations
__fastcall TAboutForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TAboutForm *AboutForm;
//---------------------------------------------------------------------------
#endif
+1161
View File
File diff suppressed because it is too large Load Diff
+75
View File
@@ -0,0 +1,75 @@
//---------------------------------------------------------------------------
#ifndef AudStylePanelH
#define AudStylePanelH
#include "StylePanel.h"
#include "StyleSelPanel.h"
//---------------------------------------------------------------------------
class TAudStylePanel : public TStylePanel
{
private:
bool IsCollected( UINT idLoc, UINT idStyle );
DWORD GetStyleOptions( TPROSTYLE* info );
void RefreshList();
void StyleRename();
int m_iListType;
int m_nBtnCount;
bool m_bDoubleClick;
TTimer *m_RenameTimer;
protected:
TStyleSelPanel *m_SearchPanel; //ËÑË÷Ãæ°å
void SetDownload( TCommonItem *pItem );
TStyleItem* CreateInstrumentItem( TPROSTYLE* info, bool bCollected, bool bAuthority );
TStyleItem* CreateStyleItem( TPROSTYLE* info, bool bCollected, bool bAuthority );
void InsertStyleItem( TStyleItem* pStyItem, int index );
TStyleItem* __fastcall AddStyleItem( TPROSTYLE* info, bool bCollected );
virtual void Init();
virtual bool StartDrag();
virtual void SetScrollTimer(TPoint ptNew){};
virtual void PlayDemo( TCommonItem *pItem, int tempo );
virtual void DeleteItem( TCommonItem *pItem, int iLine );
virtual String ChargeTip( TStyleItem* pItem );
virtual bool CanVSplit(){ return true; };
void __fastcall CMClick(System::TObject* Sender); //pngbutton °´ÏÂ
void __fastcall ListTypeClick( TObject *Sender );
void __fastcall RenameTimerProc(System::TObject* Sender);
void __fastcall EditMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall EditMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall EditMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
void __fastcall EditKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
void __fastcall EditChange(TObject *Sender);
virtual void __fastcall RenameTiming(int op); //ÖØÃüÃû
virtual void __fastcall DoRename(TObject* Sender);
virtual void __fastcall DoCollect(TObject* Sender);
virtual void __fastcall DoubleClick(TObject* sender);
MESSAGE void __fastcall OnNetworkError(TMessage &msg);
MESSAGE void __fastcall OnNetworkMessage(TMessage &msg);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message); //add
MESSAGE void __fastcall UMSearchStyle(TMessage &msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MSG_NETWORKERROR, TMessage, OnNetworkError)
MESSAGE_HANDLER(MSG_NETWORKMESSAGE, TMessage, OnNetworkMessage)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize) //add
MESSAGE_HANDLER(UM_SEARCH,TMessage,UMSearchStyle);
END_MESSAGE_MAP(TStylePanel)
public:
__fastcall virtual TAudStylePanel(System::Classes::TComponent* AOwner);
__fastcall ~TAudStylePanel();
void __fastcall ReloadLocalStyle( bool bShow=true );
};
#endif
+388
View File
@@ -0,0 +1,388 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "GlobalUnit.h"
#include "AudioFxFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GeneralDialogPanel"
#pragma link "TextButton"
#pragma link "ComboBoxComponent"
#pragma link "PNGButton"
#pragma link "SkinTrackBar"
#pragma resource "*.dfm"
#define TIMER_INTERVAL 50
#define FX_TOP_BOUND 24
#define FX_BOTTOM_BOUND 24
#define FX_LEFT_BOUND 40
#define FX_ITEM_HEIGHT 40
TAudioFxForm *AudioFxForm;
//---------------------------------------------------------------------------
__fastcall TAudioFxForm::TAudioFxForm( TComponent* Owner, int iTrk, double start, double end,
int iInd, int iFx, int iPlugin )
: TForm(Owner)
{
m_iTrack = iTrk;
m_iInd = iInd;
m_iFx = iFx;
m_iPlugin = iPlugin;
memset( m_fParam, 0, sizeof(float)*6 );
memset( m_lstCaption, 0, sizeof(void*)*6 );
memset( m_lstTrack, 0, sizeof(void*)*6 );
m_iCurrPos = 0;
m_dblPos = 0;
m_dblStep = TIMER_INTERVAL * (double)g_nMelodyTempo / g_nBPM / 60.0 / ( end - start );
m_dblStart = start;
m_dblEnd = end;
}
//---------------------------------------------------------------------------
__fastcall TAudioFxForm::~TAudioFxForm()
{
for( int i=0; i<6 && m_lstCaption[i]; i++ ){
delete m_lstCaption[i];
delete m_lstTrack[i];
}
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::FormClose(TObject *Sender, TCloseAction &Action)
{
if( m_btnStop->Visible ){
StopClick( NULL );
}
if( m_iFx>=FX_VST )
f_MM_ShowVSTEditor( NULL, NULL, NULL, NULL, m_iTrack, m_iInd, NULL );
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::PlayClick(TObject *Sender)
{
double dblPos = ( (double)m_tbPosition->Position / m_tbPosition->Max ) * ( m_dblEnd - m_dblStart ) + m_dblStart;
m_btnPlay->Visible = false;
m_btnStop->Visible = true;
f_MM_Play( Handle, dblPos, TYPE_AUDIOFX|g_iSelAudio );
SetPlayTimer( true, m_tTimer, m_tAccuracy, Handle, TIMER_INTERVAL );
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::PowerClick(TObject *Sender)
{
m_btnPowerOn->Visible = Sender==m_btnPowerOff;
m_btnPowerOff->Visible = !m_btnPowerOn->Visible;
if( m_iFx>=FX_VST )
f_MM_AudioSetFxParam( m_iTrack, m_iInd, (void*)m_btnPowerOn->Visible, 0 );
else
f_MM_AudioSetFxParam( m_iTrack, m_iInd, (void*)(m_btnPowerOn->Visible ? m_fParam : NULL), 0 );
if( m_iInd<0 )
m_btnOk->Enabled = m_btnPowerOn->Visible;
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::StopClick(TObject *Sender)
{
m_btnStop->Visible = false;
m_btnPlay->Visible = true;
f_MM_Stop();
SetPlayTimer(false, m_tTimer, m_tAccuracy);
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::LoopClick(TObject *Sender)
{
m_btnLoop->Down = !m_btnLoop->Down;
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::PresetChange(TComboBoxItem *Sender, int Index)
{
if( m_iFx<FX_VST && m_cbPreset->DefItemIndex!=m_cbPreset->ItemsCount-1 ){
int iFxNo = m_iFx==FX_PITCH ? MAX_FX_NUM-1 : m_iFx;
GetFxPreset( m_iFx, m_cbPreset->DefItemIndex, m_fParam );
for( int i=0; i<6 && m_lstTrack[i]; i++ ){
m_lstTrack[i]->OnChange = NULL;
if( m_iFx==FX_PITCH ){
m_lstTrack[i]->Position = (int)m_fParam[i];
}
else{
int pos = Param2Pos( iFxNo, i, m_fParam[i] );
m_lstTrack[i]->Position = pos;
}
m_lstTrack[i]->Hint = IntToStr(m_lstTrack[i]->Position);
m_lstTrack[i]->OnChange = TrackBarChange;
}
if( m_btnPowerOn->Visible )
f_MM_AudioSetFxParam( m_iTrack, m_iInd, (void*)m_fParam, 0 );
}
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::TrackBarChange(TObject *Sender)
{
TSkinTrackBar* pTrack = (TSkinTrackBar*)Sender;
int nPos = pTrack->Position;
pTrack->Hint = IntToStr(nPos);
int iFxNo = m_iFx==FX_PITCH ? MAX_FX_NUM-1 : m_iFx;
if( m_cbPreset->DefItemIndex!=m_cbPreset->ItemsCount-1 )
m_cbPreset->DefItemIndex = m_cbPreset->ItemsCount-1;
float fParam = Pos2Param( iFxNo, pTrack->Tag, nPos );
m_fParam[pTrack->Tag] = fParam;
if( m_btnPowerOn->Visible )
f_MM_AudioSetFxParam( m_iTrack, m_iInd, (void*)m_fParam, 0 );
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::UMMediaTime(TMessage &Message)
{
m_dblPos += m_dblStep;
m_iCurrPos = (DWORD)( m_dblPos + 0.5 );
if( m_iCurrPos==m_tbPosition->Position )
return;
if( m_iCurrPos >= m_tbPosition->Max ){
m_dblPos = 0;
m_iCurrPos = 0;
if( m_btnLoop->Down ){
f_MM_Play( Handle, m_dblStart, TYPE_AUDIOFX | g_iSelAudio );
}
else{
StopClick( NULL );
}
}
m_tbPosition->Position = m_iCurrPos;
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::PositionChange(TObject *Sender)
{
if( m_iCurrPos!=m_tbPosition->Position ){
m_iCurrPos = m_tbPosition->Position;
m_dblPos = m_iCurrPos;
if( m_btnStop->Visible ){
SetPlayTimer(false, m_tTimer, m_tAccuracy);
double dblPos = ( (double)m_tbPosition->Position / m_tbPosition->Max ) * ( m_dblEnd - m_dblStart ) + m_dblStart;
f_MM_Play( Handle, dblPos, TYPE_AUDIOFX | g_iSelAudio );
SetPlayTimer( true, m_tTimer, m_tAccuracy, Handle, TIMER_INTERVAL );
}
}
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::FormResize(TObject *Sender)
{
m_panShow->SetBounds( m_panShow->Left, m_panShow->Top,
ClientWidth - 50, ClientHeight - 155 );
m_tbPosition->Width = m_panShow->Width;
m_tbPosition->Top = ClientHeight - 69;
m_btnPlay->Top = ClientHeight - 43;
m_btnStop->Top = m_btnPlay->Top;
m_btnLoop->Top = m_btnPlay->Top;
m_btnOk->Top = m_btnPlay->Top + 1;
m_btnCancel->Top = m_btnOk->Top;
m_btnPowerOn->Left = ClientWidth - 66;
m_btnPowerOff->Left = m_btnPowerOn->Left;
m_btnCancel->Left = ClientWidth - 83;
m_btnOk->Left = ClientWidth - 148;
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::UMEditorResize(TMessage &Message)
{
int nWidth = Message.WParam,
nHeight = Message.LParam;
if( nWidth==0 )
nWidth = 300;
if( nHeight==0 )
nHeight = 150;
SetBounds( Left, Top, nWidth + 50, nHeight + 155 );
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::FormCreate(TObject *Sender)
{
m_BKGPanel->Font->Size = g_szFont9;
m_btnCancel->FontSize = g_szFont9;
m_btnOk->FontSize = g_szFont9;
m_cbPreset->SetFont(g_strTxtFontName, g_szFont9);
String strCaption = m_BKGPanel->Caption + L" - ";
int nFormWidth = m_panShow->Width + 50,
nFormHeight = m_panShow->Height + 155;
m_lblNoParams->Visible = false;
if( m_iInd>=0 )
m_btnOk->Text = "È·¶¨";
if( m_iFx>=FX_VST ){
m_cbPreset->AddItem( "(ĬÈÏ)" );
m_cbPreset->DefItemIndex = 0;
if( m_iPlugin<0 )
strCaption += g_lstVSTFx[m_iFx-FX_VST]->strVSTName;
else
strCaption += g_lstVSTFx[m_iFx-FX_VST]->aPlugins[m_iPlugin]->name;
int nWidth(0), nHeight(0);
if( f_MM_ShowVSTEditor( Handle, m_panShow->Handle, &nWidth, &nHeight,
m_iTrack, m_iInd, NULL )==S_OK ){
if( nWidth<0 && nHeight<0 ){
m_lblNoParams->Visible = true;
}
else{
if( nWidth==0 || nHeight==0 )
BorderStyle = bsSizeable;
if( nWidth==0 )
nWidth = 300;
if( nHeight==0 )
nHeight = 150;
nFormWidth = nWidth + 50;
nFormHeight = nHeight + 155;
}
}
}
else{
int iFxNo = m_iFx==FX_PITCH ? MAX_FX_NUM-1 : m_iFx,
n = GetFxParamNum( m_iFx ),
t = FX_TOP_BOUND;
strCaption += g_strEffect[iFxNo];
int nItemCount = 0;
for( int i=0; i<3; i++ ){
if( strlen( g_strEffectPreset[iFxNo][i] )>0 ){
m_cbPreset->AddItem( g_strEffectPreset[iFxNo][i] );
nItemCount++;
}
else
break;
}
m_cbPreset->AddItem( "×Ô¶¨Òå" );
if( false ){
m_cbPreset->DefItemIndex = 0;
}
else{
m_cbPreset->DefItemIndex = 0;
}
if( m_iInd<0 || m_iInd>=g_aAudioTracks[m_iTrack]->lstFxs.size() ){
GetFxPreset( m_iFx, m_cbPreset->DefItemIndex, m_fParam );
f_MM_AudioSetFxParam( m_iTrack, m_iInd, (void*)m_fParam, 0 );
}
else{
TAudioFx* pFx = g_aAudioTracks[m_iTrack]->lstFxs[m_iInd];
m_cbPreset->DefItemIndex = pFx->iPreset;
memcpy( m_fParam, pFx->pParam, sizeof(float) * pFx->nParamSize );
m_btnPowerOn->Visible = !pFx->bBypass;
m_btnPowerOff->Visible = !!pFx->bBypass;
}
for( int i=0; i<n; i++ ){
m_lstCaption[i] = new TLabel(this);
m_lstCaption[i]->Parent = m_panShow;
m_lstCaption[i]->Layout = tlBottom;
m_lstCaption[i]->Font->Name = g_strTxtFontName;
m_lstCaption[i]->Font->Size = g_szFont9;
m_lstCaption[i]->Font->Color = RGB( 156, 170, 189 );
m_lstCaption[i]->SetBounds( FX_LEFT_BOUND, t, 60, 18 );
m_lstCaption[i]->Caption = g_strEffectParamName[iFxNo][i];
m_lstCaption[i]->Caption += ":";
m_lstTrack[i] = new TSkinTrackBar(this);
m_lstTrack[i]->Parent = m_panShow;
m_lstTrack[i]->ShowHint = true;
m_lstTrack[i]->Tag = i;
m_lstTrack[i]->SetBounds( 104, t, 209, 18 );
if( m_iFx==FX_PITCH ){
m_lstTrack[i]->Min = -36;
m_lstTrack[i]->Max = 36;
m_lstTrack[i]->PageSize = 12;
m_lstTrack[i]->Position = (int)m_fParam[i];
}
else{
int pos = Param2Pos( iFxNo, i, m_fParam[i] );
m_lstTrack[i]->Position = pos;
}
m_lstTrack[i]->Hint = IntToStr(m_lstTrack[i]->Position);
m_lstTrack[i]->OnChange = TrackBarChange;
t += FX_ITEM_HEIGHT;
}
nFormHeight = t + 155;
}
m_BKGPanel->Caption = strCaption;
SetBounds( Left, Top, nFormWidth, nFormHeight );
SetTransparent( this );
}
//---------------------------------------------------------------------------
int __fastcall TAudioFxForm::GetParamCount()
{
int count = 0;
for( int i=0; i<6 && m_lstCaption[i]; i++ ){
count++;
}
return count;
}
//---------------------------------------------------------------------------
int __fastcall TAudioFxForm::GetPreset()
{
return m_cbPreset->DefItemIndex;
}
//---------------------------------------------------------------------------
bool __fastcall TAudioFxForm::IsBypass()
{
return m_btnPowerOff->Visible;
}
//---------------------------------------------------------------------------
void __fastcall TAudioFxForm::OkClick(TObject *Sender)
{
f_MM_SaveVSTParams( m_iTrack, m_iInd, false );
}
//---------------------------------------------------------------------------
+833
View File
@@ -0,0 +1,833 @@
object AudioFxForm: TAudioFxForm
Left = 0
Top = 0
BorderIcons = []
BorderStyle = bsNone
ClientHeight = 238
ClientWidth = 406
Color = clBtnFace
DoubleBuffered = True
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Position = poMainFormCenter
Scaled = False
OnClose = FormClose
OnCreate = FormCreate
OnResize = FormResize
TextHeight = 13
object m_BKGPanel: TGeneralDialogPanel
Left = 0
Top = 0
Width = 406
Height = 238
Align = alClient
Caption = #38899#25928
Color = 5064257
ParentBackground = False
TabOrder = 0
object m_btnPowerOff: TPNGButton
Left = 340
Top = 38
Width = 39
Height = 26
Hint = #25171#24320#38899#25928
ParentCustomHint = False
ImgStates = 3
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D49484452000000750000001A080600000089A613
33000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000004964944415478DAED9A5F4C144718
C0BFBBDB8303EF3891F2C71339B1B641E8210891464B8D31312510904A09AD0F
DA36E9030F267DF2C5475F4C4C34C698D8342D264A1AFEA835D25209518AC490
801A0C29B1ADF45A4BEF304AE13882DC72F87DEB2EA1158FBDDB99E52EB949BE
ECECCCC2FE32BFDD99DB99312C2C2C806B5B31AC56BA7F772054B51143C048C0
B0C847412ED72B0531448C398C59F928CA7551C96620A9F3F3F3663C49C6B0CB
47B38E604A0A60CC604CCAC780DC50A9180E8CCD181918369DF988C387318EF1
08630C6342AEB362ACC3C89239AD32B35E89244ECB3C1E8C6774AE48B57F5051
F995C7EBADD71168D9949599D9D2F963C717F0522E35D25BFB6B0F5CFFC3ED76
AC36DB26A773ECEA95F62ACCFEAAE0D61EF8E8D4E8E868D56AB3E5E6E65EBFD2
DEFA25663D8AD49CA2EDA5EE9CCD79ABCD067F3E1AA12ED949598C373076235B
5B14B1D561B6472ECA43B6DE048B1504410093C90406A3110C06037716F2B610
0C923B104511E666A789AD1CAB4614A904F74B1435DC56828397DD6E0DB29D8B
22B646CC7E2F179520DBB564EB5A10CC66146B06A38E52832855140320060230
33FD2FB15563D5A022D58570435A1A2EAFA0184ACACAE1D2376758345C21661F
60E4603420DB8928623B8AD9EFE4A25DC8D66CB3A7813921517A5B8DF4B68621
35DF55023B76EE81A6F327C36291A4CA6F6960EE39F8269F12DB2758D517ED52
37611C44B6E351C4760CB397E4221A1A9A5252D32181A4E2DB6A32A1D830A4E6
BD530CA5EFEE868B5F9F0E8B25287913A5B7740EA54E4D3C21B6C358D5C3446A
D97B7B2131D1021B9D6FC2ED9B9D909A960EF707FAB4341C33A91CD85E916A5F
97B1285540A934AEF266A3F1545C2275F2D9381BA945A5BBA0A0B044CAFBA626
C196628771CFDF9091B541BA695FCF0D708F3E8CA4E1344BE5C8A6592A0B362E
52E929DBF2768104D5DD79199FB62D8B5D5C7AA603CAF7544052F21A18ECEF85
91E17BBA4AE5CCA6492A2B36E652E9E6FB2AEBA4A7ABEB8776A96CB971ABBAEE
90F4145E6DF916FCD33E5DA4EAC016B154966CCCA5D24DAD561B34379D5D2C5B
0E6E0D5EB3BFFE53F8CBFD3BFCDCDDA18B541DD82296CA928DB9D4839F1D81DF
1E0E43FFEDEE9070942A6A3E06AB2D055A2F9ED745AA0E6C114B65C9C645EA72
7D3E01FEBF4CF951A0F673828554CE6C9AA4B262E322F546471B3CF18EAD786D
B8DF882CA47266D32495151B17A9C34383AABEA9DEDF5B09D91B73FF338EA868
384D5239B36992CA8A8DB9D40F1B3E97A6A7AEB55D58F1DA86438D30E3F7ABBA
7649C3452C5507B688A5B264632E55E9EF57FA96A2A78D664BD476394B1A2E62
A93AB0452C95251B97C907E55BEA75DD8902B6F49B2C8C86D334F9C0994DD3E4
032B366ED3840A20FD53EF3F8F11640C32B21CE0C8764A13DBE1361A2BA99CD9
344FE8D7D41F46B6B58B6C1499EBB3C1B101D904413AEFC2B73454E23AA14FBF
D2F25DDBC16249929E50BA118D05777ABB54776B21A46A5A7AE3C4C664E98D96
DC5C453B2011D9680D761EC75ABFDF077DB77E02AFE7F18A7FAF66E92DBE48AE
9E2D6616C9E3DB59D4B3C5CC7696F8C6331529D6369EC5B78886E68ABD2DA2F1
CDDC2153CC6DE67E015E45E7AEE26F6CCA0000000049454E44AE426082}
ShowHint = True
Visible = False
OnClick = PowerClick
end
object m_btnCancel: TTextButton
Left = 323
Top = 196
Width = 56
Height = 25
ModalResult = mrCancel
ParentShowHint = False
ShowHint = True
Text = #21462#28040
end
object m_btnOk: TTextButton
Left = 258
Top = 196
Width = 56
Height = 25
ModalResult = mrOk
ParentShowHint = False
ShowHint = True
OnClick = OkClick
Text = #24212#29992
end
object m_lblPreset: TLabel
Left = 33
Top = 41
Width = 24
Height = 14
Caption = #39044#35774
Font.Charset = DEFAULT_CHARSET
Font.Color = 12429980
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_cbPreset: TComboBoxComponent
Left = 71
Top = 38
Width = 98
Height = 20
ParentShowHint = False
ShowHint = True
OnChange = PresetChange
ShowItemCount = 5
Parent = m_BKGPanel
end
object m_btnStop: TPNGButton
Left = 23
Top = 194
Width = 39
Height = 26
Hint = #20572#27490
ParentCustomHint = False
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D494844520000009C0000001A0806000000425135
88000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000004C64944415478DAED9B7D6893471C
C72FC9F3A45D4C8DD1698B4263EBCB3A5DDD6C1D28DABD20B88DD6971237CAFA
C7A6C806F32F19634C6463228E21E25F1514D9F48F8EB22DA8D3B229145FAA28
D85659F7D26DAE35424B5B37B3D898B5C99374DF4B2F9BCEDAE4FA3C777984E7
073FEE9EE71EC827779FDC13B83BDBE8E828297F7A29C9555CEB689BA8D98E54
904E643E2B15765F5624911A32861C66A5C6DA4CC9F64CC5B2A44486FB62A2F1
74381CC446854B24122AAE5D480F2BD51CB0C69151649895F49A0EA217391B59
8A9C852C90CC4739869083C86E641F32C4DADCC8E9C822C6E966CCB2820A1661
3CFDC8DBF41AC2C530F02AE3A15C5324F7D9BD7D7797F145205C3C2D9CE7E557
AA0FF60F0CBC9603A8FBA2A8B0F0CBEFBE6D7E8B8C89473B6CC1865AFFC91BC1
E0EC5CB3CDF5F9FA8E1D0DD4A0FA5B1AB7D6FFEABE9E9E9E9A5CB39594949C3C
1AF86A1BAAFD102E02E1BC18D32318D3B5B966C3989EC098BE01E14269E18A01
192C2E2DCB351BB9D9DD45A7651FAD221F473E0FB6AF4DC4B611D573EC5619D8
5A9DF96EA228CAD82BC36E27369B4D380B1DB7D164928E1DD1348DC4862394AD
0A4D5D60FA03F55294BF2F5FF562AEBB8D5CBE7086B2CD43FF74A785A31DF7B3
8906F549DA7164EC55BA1E6CFB4DC4F60EAAC7D9AD4AB07DE3724F238AAA423A
95D8250A9784709A16275A3C4EA291BF28DB3A34B583A90FF57294DF9B48B825
10AE332D5C0ACE4483BA04D54E6431B20E6C9F9A88ED7D549BD8AD9560FBA2C0
3383A8CEBCD42C67A7B39C2CE1D8EC168F8D90A1F09F94ED75345D04D34DD42B
50B69B48B84A08D73129E112F8922323C3A95F5736417FF97979F9C4A128199F
FD9F707391F560DB6522B61DA836B25BF4757F78AA77267152E130CB391C90EE
21C2FDC7A665FCAC3136E5A16CC9D4B869A9D92D06E1EE846E51B637D1740E4C
3778854BD2D7722C46B44496FDE650F19D9DC49E45BFE9162E7A3742AADE6EC8
EAD974B41ED84A5C53DC199FD32B9C04B60784F34C9FF5AF700A84A3FFE344B3
D1FF6FDA3DC2856F0FEA126E381A25CBEA3EE4626B6BDA49F25DAE8CCFE916EE
4E38449EE3ECB8F3E8B8A91E6FC6E7F40A27816DD2C219C966B47091A13079B6
EE232EB62B4D1F13778127E3738608B762F33E2EB84B9F6D93269C60365DC219
C52642B8A5FEED5C6C5703BBE5095759FF09175C7BE307D28413CCA64B38A3D8
4408F7D4DA77B9D87E38B1579E70E57EBEF77D6760A734E104B3E912CE283611
C23DB1662B17DB2FA71BE409B7B0FA3D2EB85F9BF748134E309B2EE18C621321
5CC90B5BB8D87ACE1E92279C6F35DFAF21D8D2204D38C16CBA84338A4D847073
56D473B1F55E6A94275CD1CA4D5C70FD173F97269C60365DC219C52642B89915
7E2EB65B1D0179C2792BEAB8E0421D4DD28413CCA64B38A3D84408E75954CDC5
16FEA9599E70AEC5EBB9E0A23F1E97269C60365DC219C52642B8C7E6AFE662FB
FB7A8B3CE1D4F92F71C1C5AF9F92269C60365DC219C5264238D557C5C7166C95
231C5DA2D1E6ACE282537A2F485BDA12CCA66B69CB2836114B5B5A61251FDB40
BB9CA52D6BF1DE5ABC97BA782F32ACED49D9C5A3BE3DC9DA80993D9BB5019333
C6DB80696D31CF9ECDDA62CE19E36D31B70ED16411D6219AC9C5788768AC6382
137359C70427DF770F1E13B40E424F18D641688EC87410FA1FF0936827C0A298
CF0000000049454E44AE426082}
ShowHint = True
Visible = False
OnClick = StopClick
end
object m_btnPlay: TPNGButton
Left = 24
Top = 195
Width = 39
Height = 26
Hint = #25773#25918
ParentCustomHint = False
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D494844520000009C0000001A0806000000425135
88000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000006DB4944415478DAED9B5B6C145518
C7FF33B3B33BBB5DD8DEA08514684B34F000229840A284105E105120808A2682
D110F4498C898A3E9878892646DF34F1816022C4A080968A260A4DA3D2126805
6AA55269BB157ABFEF76BBF7F53BB3B3A49576BBBB7366B60FFB255FE6ECCCB6
FBDB737E73CE999D33422C16C3AA071E44B6E26AE3956487454A0BA59552D1B6
166DBF5911A50C530629FDDA36AC1D9B936C6BD63E143591614A246B4F499220
30E12291884CAF1D942E6D2B67813544E9A31CD5B6EC356BC402CAC59495940B
29E799CCC7383C947D946D945D94C3DA3127652165A9C6E9D498CD0A269857E3
E9A11C62AF49B82035BCACF130AE3C93EB6C72DD8D6B7C5E122E9410CEB5F5D1
C7BEE8E9ED7D320B5053A2B4A4E4E44F3FFE701071F15885DDB773D7EEEA0EB7
7B71B6D9CA972DEBFAEECCA9ED546C4DE0EEDABDF7D3F6F6F6EDD966ABA8A8A8
3E73EA9BC354EC21E1BC245C01B5E997D4A68F679B8DDAF42CB5E97E126E3821
DC5282742FAD5C916D3674B6B5B06E79192B5216536E22B66FE710DB1E2AD66A
BB5610DBAF56C5098BC5121F324411822018CEC2DA2D168DB2B643381C46D0EF
656C1BE9500B310D50B992B6B7363CB239DBD586FADF6A18DB72AA9FB68470AC
E26ECCA1465DC92A0EF1A17407B17D3687D85EA6E2F7DAAE75C456E570E6C322
CB249D0CD144E1A2245C381C42381482CF3BC2D89EA0430DC4D445E555B4BD3E
87845B4DC235258453E1526DD4283BAB2261AA5C297E5673AC60AD515753B189
7229E5D3C4F6D11C627B9D8A5F6BBB1E26B613F35C4590AD36B59713937C6634
1A41241C517B41BD6CAA705AEF160A06E0191D646CCFD0A1DF89A993CA6B69DB
90AA7031F6BF884F14E26CE0586F9A70EBE8FF3666249C7FC287C2375E40DFB1
D390BA8760B52971480EF13FE1CA299F25B6F7E610DBDB543CAEED62C3FDB1F9
050B6065C2512F274924DD0C8DE59F9840D19117D177F414C49E21F56F32658B
AAED16567BB720093736DCCFD80ED0A15A62EA4857B8A07F02AE837B3078FA67
48FD23EA092472AA37DDC2793D63283BFE2124A7030355E7E1397E0EB6884090
567548D1137A853381ED1EE15C850BEF0A6721E184193E87271B9BBF85270937
3AD4A74B38DFB817A51FBF06C9A160F8421DBC55B5B046898DBE93A0B3DE740B
E7191B41C9D177D58A6311F1FA3078A21AE10B97A1508FC2E632990E177A8533
812D63E178B2F1166EDC3B86E20F5E81E850D4D7519F1F23D53508D735C1A64D
17321D66B908E7FAFC08A43CC794FD0177173C5F9D85A5B50B8A6287C420336B
545DC219CCA64B385E6C460837EF9D436A0F37398277FA305E5503A9A30F361B
0DB319D41B17E1EC9F1C8698679FF6F84443338227CFC33E1E54E750E90C173C
8433984D9770BCD88C104E79F30044BB32ED717F732B42E7EAA04C84D4F95D3A
C32C17E184F70F51F76B9FF13D31BA1A0BFC520FF1FC1538249B3A4F4965B8E0
219CC16CBA84E3C5668470C2E17D1015DBCC6C91288217AF42ACFB138A6455E7
77A90CB35C840BBCF51C048732EB7BA3A35EC4CE5D84F3C66D2876C7AC3D0A0F
E10C66D3251C2F3623840B1EDA09C16E9BF5BD318F0FB1DA46386EF5C2A628B3
F6765C841B7D756F4A7089B0D4FF85A2BA9BF1C96792E0219CC16CBA84E3C566
8470DEE7B782AE105267BB760BF97FB4CF3AE7E4225CEF4BDB0025858A1B1885
BDE62A0A7A3CEA84D88C1ECE60365DC2F1623342B8C17D9B52136ED803DBA51B
70F58FD38584493D9C7B3F7D1125095C3004FBA51614FFDD03BB4C7311D9BC39
9CC16CBA84E3C56684705DBBD683BEC8CC6FA2CF52AEB5A1A07D0036E2922D26
CEE15A9FDA80D80C6783ADE55F94347660BE688DFF626DF255AAC16CBA84E3C5
668470EE6D6B10B34EBF8AC9DAD68DE2E63BC813E5F84960F6556AD30E82B34D
8593FB46B0E8723B8AFC5479ECF7A40C6E8DF010CE60365DC2F1623342B89B5B
56927053E76396410F1636DD467E80A4B36576BB8B8B700D5B57DE3D1B245F00
0BAE776249BF9FE61B0E751299CD3B0D06B3E9128E179B11C2356F5C8E981C17
4EF20751D0D28D45C3019AD629F10B836CDD6960F704EB37572066115148738D
8A4E0F9C567BCABF67A5D0A8BAEEA51ACC96F1CD7BC67669CB728DAD1BE5EEB1
385B8A73C8C9C1FBE63DBB977A6D7D19629208577B3FCABAC7E19095947F6B4B
16FA578BF82770BDD289B27F06512858D3FEC53E59E85D9E64025BC6CB93027E
3F9AEF7761F1CD7EE4435625CD948DF7F2A460C08F96250E94BA47902FC869DF
4D4816D30997D602CCA8BAD234AC56163BA37986DE059826B065BC0093B13149
12EBE1F404EF059889D5C3A228D049C3B7DEA65B80995B629E3A5B6E89799A31
DD12F3DC43342944EE219ACC62BA8768728F0926E7CA3D269879DDDDFB9860EE
41E8A4917B103A8D98ED41E8FF0013A48036FFAB77F70000000049454E44AE42
6082}
ShowHint = True
OnClick = PlayClick
end
object m_btnPowerOn: TPNGButton
Tag = 1
Left = 340
Top = 38
Width = 39
Height = 26
Hint = #20851#38381#38899#25928
ParentCustomHint = False
ImgStates = 3
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D49484452000000750000001A080600000089A613
33000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000004A74944415478DAED9A7F6894751C
C7DFF7737ADDB5DDB9ED86C4769B354E6AB666D08F952328DAD85889299622A5
A0129185445052521649482814D20F31C1107569367142FD314B6895D354722A
6C3709DB56DD3937D676CF73777DBECF9EE7B8EAB83DF73CDFE7D91DDC173E3C
DF7DBFCFEE5E7C5FCFF3FDDEF787259148A0EEEE7B305BE95CEFCF99AAAD1476
0A27C51CF96A97CBCD4A710A91224A31295F45B92E27D92C4C6A2C1673D01F2E
8A62F9EA30114C4902C504C5A87C15E486F252CCA7A8A128A7F098CCC738C628
4628FA29AE5344E43A37858FA242E674CBCC662526715CE619A208B3BF15A9C5
CD2DAD1F0F0D0FAF3011286DAAF0FB0F769D38BE1ED3725923DDF1E4D2659DA1
C1C1F9B3CD16A8AABA7EF448471B65AF2AB84B972DFF606060A06DB6D9AAABAB
3B8F741C7A99B2438AD4CAFA867B072B6B82B3CD866BFD7DAC4BAE62598A528A
26623B9C436C4F51B65B2E0A12DB77CE396ED8ED76D86C3658AC56582C16C359
98B7443CCEDC4114454427C719DBC354D5A74865709772A8E11632384C77BB4F
10DB4739C4F63C65BF928B1613DB3197BB04768783C43A6035516A9CA48AA200
511030317E83B1B553D519456A1DC19DD7D37081C7EF47705533BAD66CE5D170
8B287B81A2926225B16DCF21B657297B402E6A24B62F3CC5F3E07016496FAB95
BDAD5948AD6969C49D6B5AF1F5D3AF65C5224995DF52213A85B1D1BF18DB3354
753AD7A506285611DBB61C62DB42D9FD72111B1AF6DEEA2D839349A5B7D56623
B159480D343F8085AB5B7062F51B59B1C4256FA2F4964649EACDC81F8CED59AA
EAE622F5AE75ED70BA5D285F1CC42F1F1E86A7AA02570E7EA3A7E1B8493580ED
7F528B7DE549A97692CAC655A3D9D8782AA6481D0D8FF0915ABBE251D4B43682
FA1B4C0C87E1F2FB10EE0BC1170C20118BE3FCEE2FF17BCF452D0DA75BAA816C
BAA5F26033442A7BCA6E6B6A90A07EDABE0F7E7ADA942ECE5B5B89FA1796A3A8
C483BEFD5D089DFCC154A906B3E992CA8B8DBB54F6E5F76D592B3D5D3FBEBB57
2A4B376E2D79FF45B8CABDE8DEBC137FFF79C314A926B06996CA938DBB54F6A5
734B4B70F2B9B79265E9E0D83D4D3B3661A4F7327A771E50F5D97AA59AC0A659
2A4F36EE529B3F7F13BF9D3A8B8B9F1DCB08C7D2836F6FC0DC322FBEDDF89E29
524D60D32C95271B7FA9FBB6A6EDF319E07FCBA41F056D0FA99E4EE8966A3C9B
76A91CD90C91DAB36D0F2257AECD786FB673441E520D66D32595179B2152FB3B
BF5735A76AD8B41265F5B5FF1A4754349C2EA906B3E992CA8B8DBBD447766D46
6C4AC0A95776CD78EF639FBE8EA9C898AA7B531A4EB35413D8344BE5C9C65DAA
D2DFCF3497624F1B5B2D51DBE5A4349C66A926B06996CA93CD90C507652ED57F
FC74DAEE44014B9D9365D170BA161F0C66D3B5F8C08BCDB0654209D0EF833031
89C8A55072A96B5EDD02D89C8EAC1B8D975483D9742FE837ED7829C916FE7520
C956BAE8F66936E2ED79674FC6CF3074419FFD4AAB6E6D84D3730B2C362B6251
411A0B2E7C725475B79641AAAEAD3783D8B86CBDB12DB705ED4B5094C23619BE
8973BB3B10BE1C9AF1FFD56CBD1536C9D5B3E5CD2679E1388B7AB6BC39CE5238
78A622E5DBC1B3C211D1CC5CF97744B470983B63CABBC3DCFF002BA4E7AE5B39
17140000000049454E44AE426082}
ShowHint = True
OnClick = PowerClick
end
object m_btnLoop: TPNGButton
Left = 68
Top = 195
Width = 39
Height = 26
Hint = #24490#29615#25773#25918
ParentCustomHint = False
ImgStates = 3
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D49484452000000750000001A080600000089A613
33000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000005684944415478DAED9A0F4C55551C
C7BFEF1F3C9E0FDE03111E38F99726B05149906DE89C384CC321A828EA2A6BCD
1646850DDACC9594B3D8523337E658C35C591A30A169B491115A5B186693500A
068F24FEFFE7C9E0BD07F43BD7FB5C0BE33DDEBBF7021B67FBED9E7BCF79F77D
389F7BCEE19D7B64131313887A7405662AFDF66BF554C5720A25851B859A3F2A
F9EB52A5710A2B859962843F5AF9B259C9266352C7C6C65474A2A1D0F1479584
60B664A118A618E08F16BEA1BC290229C228FC283C25E6631C43149D148D14AD
147D7C9996C287C2C0736A7966A9129368E279DA297AD9B94DAA6EC3C6C4FCF6
8E8EED12023D3019FCFDBFFAB6ECD25EDC93CB1A695972CAD68BC6E6E6C09966
0B090E6E2DB950BC89B2F536DC94ADA9C79B9A9A36CD345B6868E8C50BC58599
946DB7490D7A2C3AA639282C7CA6D9F057631D1B92835996C297620DB115CD22
B66D94ADE42F8513DB5537B5164AA5120A850232B91C32994C7416E66D627C9C
B983D56A8579C4C4D85653519D4D2A83BB3D8B1A2E82C1E1DEB0BB99D8F26611
5B3A654BF94B8F13DBD71AAD1E4A958AC4AA209750EA3849B55A2DB05A2C1836
F533B6242ABA6E931A4570375D6938BDDE0BDE3E7A2EDF6C6CE1BED085867B84
B23514411469C4963B8BD8DEA4EC39FE521CB17DE1A95B08959B3BD75BE5ACB7
4E43AADEDB0B3E3EDE5CDED874C761364E2ADF4B2DE6510C0DF430B65D54F493
4B52BDBCB4484A49407C421CD46AF7FBD7CD660B7EACBC86A2F3DFA0BF7FD099
86B3490DA1D84D6C876711DB41CA9EE52FB1A9E1532FEF45706352A9B72A1424
D68E548E6DCB7AAC5BBF6A12DBD51FAA5074EE925DB671CE9B95EBA566923AD8
D7C5D8F65051A5D352B55A0D8EE5BD0D8DC60326D3301AEB9BD1DDDD477F9C8A
7E222D878E7AC7C8C8284E9DFC1CD5553725952A32DB24A93A1FBFFB52952495
CDAB62B3B1F9D4FA2FA903BD9DAE4B6573C7BECC67D0F0A71115E53F7320B6A4
542A90B07115B6ED7C9ACB9F3C7A86006B24932A329B4B5285621354AA87468D
D111B343637F64D452BCF1D68B547F1459AFE4E2AE695854A912B13925556836
41A5BE9CB90BC6C61694955EB15B97A5E41D09D89CBA0E25E7CB515A78D9D186
734AAA446C4E49159A4D30A9D12B23919EB59BFEE31AC3A1FD1FA3BDB5DB2EDC
02AD078E171CC01D631BDECBCE73B4E1A62D5542B6694B15834D10A9EC4B723E
CA80975ECB9D3735B420F7C0270E0D27EF1CDB07FF405FA4A7E588225562B669
49158B4D30A90BFDF4C83EF202FA7B8790FF6121DA5ABAE8379275CACFBC94BD
1DC161017057BB51A3B4A1F4CB0AD4DE68105CAA846CD3962A069BA073EAE153
1934E9BB236BCF517ADA26ECD65F9BF804529F4FE0F27FD4187122E7EC94F55D
99532562736A4E159A4D50A9CFBD968498D591C8CF2D46CD2FF576EBCBE53264
1CDA89256106BCBFBF003D9DFDA2499588CD29A942B3092A7569E41264BC9B86
EEF63E1C79FD34C668F2B7977C0DDE78286231AA2A7EB75BD715A912B1392555
6836C1171F9ECD4CC48AB8E5B875BD119F9D28C3C8F0E8A43AEC49D3F968D1D7
3DE4D03DFFD3704E2F3E48C0E6F4E283906C824B55D3DCB0F76032421E0E406F
E720CA8BAB5077A3996E6CC2E29045085A66C0BA9458E87D3DF1C1AB67E8E9EC
77E8BE42489580CD69A942B289B24CA8502AF0D48E95884F897960391B5EAA2E
DF42E9E92B0E0D3542499580CDA5057DC6B621ED49C46F89FD7FB6EF6A515250
39259B280BFAB6E46BD0217A4D3842C303A05EE086D6A66EEE29ACAEB84D4FCF
DD69DF4FC8576F22B109F2EACD37408FD8B591088B08243677FCDDD8859E8E01
5CFBBE16033D26BB9F77E4D5DBFC4B72C7D9E6CC4BF2F9ED2C8EB3CD99ED2CF3
1BCF1C48736DE3D9FC16D1A9B9E6DE16D1F9CDDC53A639B799FB1FC0F365BD55
01D0790000000049454E44AE426082}
ShowHint = True
OnClick = LoopClick
end
object m_panShow: TPanel
Left = 24
Top = 72
Width = 356
Height = 83
ParentCustomHint = False
BevelEdges = []
BevelOuter = bvNone
Ctl3D = False
ParentColor = True
ParentCtl3D = False
ParentShowHint = False
ShowCaption = False
ShowHint = False
TabOrder = 0
object m_lblNoParams: TLabel
Left = 39
Top = 27
Width = 84
Height = 14
Caption = #27809#26377#21487#35843#33410#21442#25968
Font.Charset = DEFAULT_CHARSET
Font.Color = 12429980
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
end
object m_tbPosition: TSkinTrackBar
Tag = 1
Left = 24
Top = 169
Width = 356
Height = 19
Hint = '0'
Caption = 'm_tbPosition'
FullRepaint = False
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
ParentColor = True
ParentFont = False
ParentShowHint = False
ShowHint = False
TabOrder = 1
OnChange = PositionChange
Max = 1000
end
end
end
+76
View File
@@ -0,0 +1,76 @@
//---------------------------------------------------------------------------
#ifndef AudioFxFormUnitH
#define AudioFxFormUnitH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include "GeneralDialogPanel.h"
#include "TextButton.h"
#include <Vcl.ExtCtrls.hpp>
#include "ComboBoxComponent.h"
#include "PNGButton.hpp"
#include "SkinTrackBar.h"
//---------------------------------------------------------------------------
class TAudioFxForm : public TForm
{
__published: // IDE-managed Components
TGeneralDialogPanel *m_BKGPanel;
TTextButton *m_btnCancel;
TTextButton *m_btnOk;
TPNGButton *m_btnPlay;
TPNGButton *m_btnStop;
TPNGButton *m_btnPowerOn;
TPNGButton *m_btnLoop;
TLabel *m_lblPreset;
TComboBoxComponent *m_cbPreset;
TSkinTrackBar *m_tbPosition;
TLabel *m_lblNoParams;
TPanel *m_panShow;
TPNGButton *m_btnPowerOff;
void __fastcall PlayClick(TObject *Sender);
void __fastcall PowerClick(TObject *Sender);
void __fastcall StopClick(TObject *Sender);
void __fastcall LoopClick(TObject *Sender);
void __fastcall PresetChange(TComboBoxItem *Sender, int Index);
void __fastcall PositionChange(TObject *Sender);
void __fastcall TrackBarChange(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall FormResize(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall OkClick(TObject *Sender);
private: // User declarations
TLabel * m_lstCaption[6];
TSkinTrackBar * m_lstTrack[6];
float m_fParam[6];
int m_iFx, m_iPlugin, m_iTrack, m_iInd;
bool m_bPowerOn;
double m_dblStart, m_dblEnd, m_dblStep, m_dblPos;
int m_iCurrPos;
UINT m_tTimer, m_tAccuracy;
MESSAGE void __fastcall UMMediaTime(TMessage &Message);
MESSAGE void __fastcall UMEditorResize(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MSG_MEDIATIME, TMessage, UMMediaTime)
MESSAGE_HANDLER(MSG_VSTEDITORRESIZE, TMessage, UMEditorResize)
END_MESSAGE_MAP(TForm)
public: // User declarations
__fastcall TAudioFxForm( TComponent* Owner, int iTrk, double start, double end,
int iInd=-1, int iFx=-1, int iPlugin=-1 );
__fastcall ~TAudioFxForm();
int __fastcall GetParamCount();
float* __fastcall GetParams(){ return m_fParam; };
int __fastcall GetPreset();
bool __fastcall IsBypass();
};
//---------------------------------------------------------------------------
extern PACKAGE TAudioFxForm *AudioFxForm;
//---------------------------------------------------------------------------
#endif
+813
View File
@@ -0,0 +1,813 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "GlobalUnit.h"
#include "AudioTrack.h"
#include "Undo.h"
#include "Project.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
/***************************************************************************************/
// 全局变量
/***************************************************************************************/
TAudio g_Audio;
TAudioTrackList& g_aAudioTracks = g_Audio.AudioTracks(); //全曲音频轨道(最大4组)
int g_iSelAudio = 0; // 当前处理的音频轨
/***************************************************************************************/
// TAudio类函数
/***************************************************************************************/
void TAudio::CopyTrackList( int iStartBar, int nCopyBars, TAudioTrackList* lstAudio, bool bFx )
{
int iTrkStart = 1,
iTrkEnd = m_lstTracks.size();
if( g_iPreStage==0/*iTrkEnd==iTrkStart*/ )
iTrkStart = 0;
for( int i=iTrkStart; i<iTrkEnd; i++ ){
if( !m_lstTracks[i]->lstBars.empty() )
lstAudio->push_back( CopyTrack( i, iStartBar, nCopyBars, bFx ) );
}
}
TAudioTrack* TAudio::CopyTrack( int iTrack, int iStartBar, int nCopyBars, bool bFx, TAudioTrack* pDest )
{
TAudioTrack* pSrcTrack = m_lstTracks[iTrack],
*pDestTrack = pDest ? pDest : new TAudioTrack();
pDestTrack->state = pSrcTrack->state;
pDestTrack->volume = pSrcTrack->volume;
pDestTrack->pan = pSrcTrack->pan;
pDestTrack->gain = pSrcTrack->gain;
for( int i=0; i<nCopyBars; i++ ){
pDestTrack->lstBars.push_back( new TWaveBar( pSrcTrack->lstBars[iStartBar+i] ) );
}
if( bFx ){
for( int i=0; i<pSrcTrack->lstFxs.size(); i++ )
pDestTrack->lstFxs.push_back( new TAudioFx( pSrcTrack->lstFxs[i]) );
}
return pDestTrack;
}
void TAudio::ResetTracks( TAudioTrackList* lstAudio )
{
//处理音频
while( m_lstTracks.size()>1 ){
delete m_lstTracks.back();
m_lstTracks.pop_back();
}
for( int i=0; i<lstAudio->size(); i++ ){
//替换AudioTrack
TAudioTrack* pNewTrack = DuplicateAudioTrack( (*lstAudio)[i] );
m_lstTracks.push_back( pNewTrack );
AudioEffectsSet( i+1 );
}
/* if( m_lstTracks.size()>1 ){
m_lstTracks[0]->bHide = true;
}
*/
}
void TAudio::RestoreAudio( TOpusStageList* lstStages, TAudioTrackList* lstAudio, bool bUndo )
{
int iOrigStage = 0, iVarBar = 0;
TOpusStageList::iterator iterDest = lstStages->begin(),
iterSrc = g_lstOpusStages.begin();
int iDestBar(0), iSrcBar(0);//, iDVB(0), iSVB(0);
while( iterDest!=lstStages->end() && iterSrc!=g_lstOpusStages.end() ){
TOpusStage *pSrcStage = *iterSrc,
*pDestStage = *iterDest;
if( pSrcStage->iSegType<SEGTYPE_INTRO && pDestStage->iSegType<SEGTYPE_INTRO ){
int nBar = min( pSrcStage->aBars.size(), pDestStage->aBars.size() );
if( nBar==pSrcStage->aBars.size() ){
iterSrc++;
}
if( nBar==pDestStage->aBars.size() ){
iterDest++;
}
iDestBar += nBar;
iSrcBar += nBar;
}
else if( pSrcStage->iSegType<SEGTYPE_INTRO && pDestStage->iSegType>=SEGTYPE_INTRO ){ //undo情况
int nBar = pDestStage->aBars.size();
iDestBar += nBar;
iSrcBar += nBar;
iterDest++;
}
else if( pSrcStage->iSegType>=SEGTYPE_INTRO && pDestStage->iSegType<SEGTYPE_INTRO ){ //redo情况
//删掉音频
int nBar = pSrcStage->aBars.size();
for( int i=1; i<g_aAudioTracks.size(); i++ ){
RemoveWaveBars( i, iSrcBar, nBar );
}
iterSrc++;
}
else if( pSrcStage->iSegType==SEGTYPE_INTRO && pDestStage->iSegType==SEGTYPE_ENDING ){//redo情况
//删掉音频
int nBar = pSrcStage->aBars.size();
for( int i=1; i<g_aAudioTracks.size(); i++ ){
RemoveWaveBars( i,iSrcBar , nBar );
}
iterSrc++;
}
else if( pSrcStage->iSegType==SEGTYPE_ENDING && pDestStage->iSegType==SEGTYPE_INTRO ){//undo情况
int nBar = pDestStage->aBars.size();
iDestBar += nBar;
iSrcBar += nBar;
iterDest++;
}
else{ //前尾奏类型相同
//redo比较长度并插入空白或删除
if( !bUndo ){
if( pDestStage->aBars.size() > pSrcStage->aBars.size() ){
int nBar = pDestStage->aBars.size() - pSrcStage->aBars.size(),
iInsBar = iSrcBar + pSrcStage->aBars.size();
for( int i=1; i<g_aAudioTracks.size(); i++ ){
InsertAudioTrack( i, iInsBar, nBar, NULL );
}
iSrcBar += nBar;
}
else if( pDestStage->aBars.size() < pSrcStage->aBars.size() ){
int nBar = pSrcStage->aBars.size() - pDestStage->aBars.size(),
iDelBar = iSrcBar + pDestStage->aBars.size();
for( int i=1; i<g_aAudioTracks.size(); i++ ){
RemoveWaveBars( i, iDelBar, nBar );
}
iSrcBar -= nBar;
}
}
iSrcBar += pSrcStage->aBars.size();
iDestBar += pDestStage->aBars.size();
iterSrc++;
iterDest++;
}
}
while( iterDest!=lstStages->end() ){ //undo情况
int nBar = (*iterDest)->aBars.size();
iDestBar += nBar;
iterDest++;
}
//处理音频
if( lstAudio ){
for( int i=1; i<g_aAudioTracks.size(); i++ ){
if( bUndo ){ //替换WaveBars
TAudioTrack *pAT = g_aAudioTracks[i],
*pSrc = (*lstAudio)[i-1];
RemoveWaveBars( i, 0, pAT->lstBars.size() );
if( pSrc ){
for( int i=0; i<pSrc->lstBars.size(); i++ ){
TWaveBar* pWvBar = new TWaveBar;
memcpy( pWvBar->aVols, pSrc->lstBars[i], sizeof(DWORD)*POINTS_PER_BAR );
pAT->lstBars.push_back( pWvBar );
}
}
}
}
}
}
void TAudio::WriteProj( FILE* pFile )
{
int num = m_lstTracks.size();
fwrite( &num, sizeof(int), 1, pFile );
for( int i=0; i<num; i++ ){
TAudioTrack* pAT = m_lstTracks[i];
int nBars = pAT->lstBars.size();
fwrite( &nBars, sizeof(int), 1, pFile );
// fwrite( &bHide, sizeof(BYTE), 1, pFile );
// fwrite( &bMute, sizeof(BYTE), 1, pFile );
fwrite( &pAT->state, sizeof(BYTE), 1, pFile );
fwrite( &pAT->volume, sizeof(BYTE), 1, pFile );
fwrite( &pAT->pan, sizeof(char), 1, pFile );
fwrite( &pAT->gain, sizeof(char), 1, pFile );
// fwrite( &iShow, sizeof(BYTE), 1, pFile );
int count = pAT->lstFxs.size();
fwrite( &count, sizeof(int), 1, pFile );
for( int j=0; j<count; j++ ){
TAudioFx* pFx = pAT->lstFxs[j];
fwrite( &pFx->iFx, sizeof(int), 1, pFile );
fwrite( &pFx->iPreset, sizeof(int), 1, pFile );
fwrite( &pFx->bBypass, sizeof(WORD), 1, pFile );
fwrite( &pFx->nParamSize, sizeof(WORD), 1, pFile );
if( pFx->nParamSize>0 )
fwrite( pFx->pParam, sizeof(float), pFx->nParamSize, pFile );
if( pFx->iFx >= FX_VST ){
VSTINFO* pVST = g_lstVSTFx[pFx->iFx-FX_VST];
DWORD uniqueID = pVST->uniqueID;
fwrite( &uniqueID, sizeof(DWORD), 1, pFile );
if( pFx->iPreset>=0 ){
uniqueID = pVST->aPlugins[pFx->iPreset]->id;
fwrite( &uniqueID, sizeof(DWORD), 1, pFile );
}
}
}
}
}
int TAudio::ReadProj( FILE* pFile, DWORD dwVersion )
{
WORD wMajVersion = HIWORD( dwVersion ),
wMinVersion = LOWORD( dwVersion );
int iError = E_PROJ_NOERROR;
int num;
fread( &num, sizeof(int), 1, pFile );
for( int i=0; i<num; i++ ){
int nBars;
fread( &nBars, sizeof(int), 1, pFile );
TAudioTrack* pAT = NULL;
if( i==0 ){
pAT = m_lstTracks[0];
}
else{
pAT = new TAudioTrack;
m_lstTracks.push_back( pAT );
}
for( int j=0; j<nBars; j++ ){
TWaveBar* pWvBar = new TWaveBar;
pAT->lstBars.push_back( pWvBar );
}
if( wMajVersion==5 && wMinVersion>=6 ){
fread( &pAT->state, sizeof(BYTE), 1, pFile );
fread( &pAT->volume, sizeof(BYTE), 1, pFile );
fread( &pAT->pan, sizeof(char), 1, pFile );
fread( &pAT->gain, sizeof(char), 1, pFile );
int count = 0;
fread( &count, sizeof(int), 1, pFile );
for( int j=0; j<count; j++ ){
int iFx, iPreset;
WORD bBypass, nParamSize;
float* pParam = NULL;
bool bAdd = true;
fread( &iFx, sizeof(int), 1, pFile );
fread( &iPreset, sizeof(int), 1, pFile );
fread( &bBypass, sizeof(WORD), 1, pFile );
fread( &nParamSize, sizeof(WORD), 1, pFile );
if( nParamSize>0 ){
pParam = new float[nParamSize];
fread( pParam, sizeof(float), nParamSize, pFile );
}
if( iFx >= FX_VST ){
DWORD uniqueID = 0, pluginID = 0;
fread( &uniqueID, sizeof(DWORD), 1, pFile );
if( iPreset>=0 )
fread( &pluginID, sizeof(int), 1, pFile );
bAdd = false;
for( int k=0; k<g_lstVSTFx.size(); k++ ){
if( uniqueID==g_lstVSTFx[k]->uniqueID ){
iFx = FX_VST + k;
if( iPreset<0 ){
bAdd = true;
}
else{
for( int p=0; p<g_lstVSTFx[k]->aPlugins.size(); p++ ){
if( g_lstVSTFx[k]->aPlugins[p]->id==pluginID ){
iPreset = p;
bAdd = true;
break;
}
}
}
break;
}
}
}
if( bAdd ){
TAudioFx* pFx = new TAudioFx( iFx, iPreset, pParam, nParamSize, bBypass );
pAT->lstFxs.push_back( pFx );
}
else{
iError |= E_PROJ_INVALIDFX;
}
}
}
else{
BYTE bHide, bMute, iShow;
fread( &bHide, sizeof(BYTE), 1, pFile );
fread( &bMute, sizeof(BYTE), 1, pFile );
fread( &pAT->volume, sizeof(BYTE), 1, pFile );
fread( &iShow, sizeof(BYTE), 1, pFile );
if( bHide )
pAT->Hide();
if( bMute )
pAT->Mute();
for( int k=0; k<MAX_FX_NUM; k++ ){
int count;
fread(&count, sizeof(int), 1, pFile);
for( int j=0; j<count; j++ ){
TEffect pAE;
fread( &pAE.iBarStart, sizeof(int), 1, pFile );
fread( &pAE.iPointStart, sizeof(int), 1, pFile );
fread( &pAE.iBarEnd, sizeof(int), 1, pFile );
fread( &pAE.iPointEnd, sizeof(int), 1, pFile );
fread( &pAE.iPreset, sizeof(int), 1, pFile );
fread( &pAE.bOn, sizeof(bool), 1, pFile );
if( pAE.bOn ){
pAE.aParams = new float[6];
fread( pAE.aParams, sizeof(float), 6, pFile );
}
if( pAE.iBarStart==0 && pAE.iBarEnd>=pAT->lstBars.size()-1 ){
int iType = g_aAudioEffectTypes[k];
if( iType!=FX_PITCH ){
int nSize = GetFxParamNum( iType );
float* pParams = new float[nSize];
int iPreset = pAE.iPreset;
int nPresetCount = GetFxPresetCount( iType );
if( pAE.bOn )
memcpy( pParams, pAE.aParams, sizeof(float)*nSize );
else{
if( iPreset>=nPresetCount )
iPreset = 0;
GetFxPreset( iType, iPreset, pParams );
}
TAudioFx* pFx = new TAudioFx( iType, iPreset, pParams, nSize, !pAE.bOn );
pAT->lstFxs.push_back( pFx );
}
}
else{
iError |= E_PROJ_INVALIDFX;
}
}
}
}
}
return iError;
}
/***************************************************************************************/
// 全局函数
/***************************************************************************************/
TAudioTrack* NewAudioTrack( int nBar, bool bAddUndo )
{
TAudioTrack* pTrack = NULL;
if( g_aAudioTracks.size()<MAX_AUDIOTRACK ){
pTrack = new TAudioTrack;
g_aAudioTracks.push_back( pTrack );
if( g_aAudioTracks.size()>1 ){
int iTrack = g_aAudioTracks.size()-1;
for( int i=0; i<nBar; i++ ){
TWaveBar* pBar = new TWaveBar;
pTrack->lstBars.push_back( pBar );
}
if( bAddUndo ){
f_MM_AudioNewTrack();
g_Undo.AddUndo( UNDO_TRKAUD_ADD, iTrack, 0, 0, NULL, NULL );
f_MM_AddUndoBefore( 0, NULL );
f_MM_AddUndoAfter( 1, &iTrack );
}
g_aAudioTracks[0]->Hide();
}
PostMessage( Application->MainFormHandle, UM_ENABLERECORD, 0, 0 );
}
return pTrack;
}
void DeleteAudioTrack( int iTrack, bool bAddUndo )
{
if( iTrack>0 && iTrack>=g_aAudioTracks.size() )
return;
int num = 1, iDelTrk = iTrack;
TAudioTrackList* aTracks = NULL;
// TAudioTrack* aTracks = NULL;
if( iTrack<0 ){
if( g_iPreStage==0 ){
if( g_aAudioTracks[0]->lstBars.empty() )
return;
else
iDelTrk = 0;
}
else if( g_aAudioTracks.size()<=1 )
return;
}
if( iDelTrk<0 ){
int nBars = g_Opus.BarCount();
num = g_aAudioTracks.size()-1;
if( bAddUndo ){
aTracks = new TAudioTrackList;
// aTracks = new TAudioTrack[num];
int* aTrks = new int[num];
for( int i=0; i<num; i++ )
aTrks[i] = i+1;
f_MM_AddUndoBefore( num, aTrks );
delete[] aTrks;
}
for( int i=num; i>0; i-- ){
if( bAddUndo )
// g_Audio.CopyTrack( i, 0, nBars, true, &aTracks[i-1] );
aTracks->insert( aTracks->begin(), DuplicateAudioTrack( g_aAudioTracks[i] ));
f_MM_AudioDeleteTrack( i );
delete g_aAudioTracks.back();
g_aAudioTracks.pop_back();
}
}
else{
if( bAddUndo ){
aTracks = new TAudioTrackList;
aTracks->push_back( DuplicateAudioTrack( g_aAudioTracks[iDelTrk] ));
f_MM_AddUndoBefore( 1, &iDelTrk );
}
f_MM_AudioDeleteTrack( iDelTrk );
delete g_aAudioTracks[iDelTrk];
if( iDelTrk==0 )
g_aAudioTracks[0] = new TAudioTrack;
else
g_aAudioTracks.erase( g_aAudioTracks.begin() + iDelTrk );
}
if( bAddUndo ){
int iUndoType = iTrack<0 ? UNDO_TRKAUD_DELALL : UNDO_TRKAUD_DEL;
g_Undo.AddUndo( iUndoType, iDelTrk, -1, -1, (void*)aTracks, NULL );
}
PostMessage( Application->MainFormHandle, UM_ENABLERECORD, 0, 0 );
//Application->MainForm->Perform( UM_ENABLERECORD, 0, 0 );
}
void DuplicateRawBars()
{
if( g_aAudioTracks.size()>1 || g_aAudioTracks[0]->lstBars.empty() )
return;
TAudioTrack* pRaw = g_aAudioTracks[0];
TAudioTrack* pAT = DuplicateAudioTrack( pRaw );
g_aAudioTracks.push_back( pAT );
pRaw->Hide();
pAT->Hide(false);
f_MM_AudioNewTrack();
f_MM_SetStreamVolume( 0x10+1, pAT->IsMute() ? 0.0 : ( pAT->volume / 100.0) );
MoveAudio( 0, 0, pRaw->lstBars.size(), 1, 0, MODE_INSERT | OPT_BARS );
AudioEffectsSet( g_aAudioTracks.size()-1 );
}
TAudioTrack* DuplicateAudioTrack( TAudioTrack* pSrc )
{
if( !pSrc )
return NULL;
TAudioTrack* pNew = new TAudioTrack( pSrc );
//复制bars
for( int i=0; i<pSrc->lstBars.size(); i++ ){
TWaveBar* pWvBar = new TWaveBar;
memcpy( pWvBar->aVols, pSrc->lstBars[i]->aVols, sizeof(DWORD)*POINTS_PER_BAR );
pNew->lstBars.push_back( pWvBar );
}
for( int i=0; i<pSrc->lstFxs.size(); i++ ){
TAudioFx* pFx = new TAudioFx( pSrc->lstFxs[i] );
pNew->lstFxs.push_back( pFx );
}
return pNew;
}
bool MoveAudio( int iSrcTrack, double dblStart, double dblEnd,
int iDestTrack, double dblInsert, int iOption )
{
bool bMoveBars = iOption & OPT_BARS,
bCountDown = false;
int iMode = iOption & 0x0F;
int iStartBar = (int)dblStart,
iEndBar = (int)dblEnd,
iInsertBar = (int)dblInsert,
iStartPoint = (int)( (dblStart-iStartBar) * POINTS_PER_BAR + 0.5 ),
iEndPoint = (int)( (dblEnd-iEndBar) * POINTS_PER_BAR + 0.5 ),
iInsertPoint = (int)( (dblInsert-iInsertBar) * POINTS_PER_BAR + 0.5 );
TAudioTrack *pSrcTrack = iSrcTrack<0 ? NULL : g_aAudioTracks[iSrcTrack],
*pDestTrack = iDestTrack<0 ? NULL : g_aAudioTracks[iDestTrack];
if( bMoveBars ){ //小节操作
int nBarCount = iEndBar - iStartBar,
iDelBar = iStartBar;
if( iMode==MODE_MOVE || iMode==MODE_COPY || iMode==MODE_INSERT ){
TWaveBarList lstCopyBars;
for( int i=iStartBar; i<iEndBar; i++ ){
TWaveBar* pWvBar = new TWaveBar;
if( pSrcTrack )
memcpy( pWvBar->aVols, pSrcTrack->lstBars[i]->aVols,
sizeof(DWORD)*POINTS_PER_BAR );
lstCopyBars.push_back( pWvBar );
}
InsertWaveBars( iDestTrack, iInsertBar, lstCopyBars );
if( iMode==MODE_MOVE && iInsertBar<iStartBar )
iDelBar += nBarCount;
f_MM_AudioMove( iDestTrack, dblInsert, iSrcTrack, dblStart, dblEnd, MODE_INSERT );
}
if( iMode == MODE_DELETE || iMode == MODE_MOVE ){
RemoveWaveBars( iSrcTrack, iDelBar, nBarCount );
f_MM_AudioMove( -1, 0, iSrcTrack, iDelBar, iDelBar+nBarCount, MODE_DELETE );
}
}
else{ //音频操作
if( iSrcTrack==iDestTrack && iStartBar==iInsertBar && iStartPoint==iInsertPoint ) //无需移动
return false;
int nPoints = (int)( (dblEnd-dblStart) * POINTS_PER_BAR + 0.5 );
double dblDelStart = dblStart, dblDelEnd = dblEnd;
DWORD* aWave = iMode==MODE_ERASE ? NULL : new DWORD[nPoints];
if( pSrcTrack ){
int iPoint = 0;
for( int i=iStartBar; i<=iEndBar; i++ ){
int iSP = 0, iEP = POINTS_PER_BAR;
if( i==iStartBar )
iSP = iStartPoint;
if( i==iEndBar )
iEP = iEndPoint;
if( iEP>iSP ){
int lenP = iEP - iSP;
if( iMode==MODE_MOVE || iMode==MODE_COPY )
memcpy( aWave + iPoint, pSrcTrack->lstBars[i]->aVols + iSP,
sizeof(DWORD) * lenP );
if( iMode==MODE_MOVE || iMode==MODE_ERASE )
memset( pSrcTrack->lstBars[i]->aVols + iSP, 0,
sizeof(DWORD) * lenP );
iPoint += lenP;
}
else{
break;
}
}
}
if( iMode==MODE_MOVE || iMode==MODE_COPY ){
if( iDestTrack==0 ){ //处理增加长度
double dblMinLen = dblInsert + dblEnd - dblStart;
if( dblMinLen > pDestTrack->lstBars.size() ){
int nBars = (int)dblMinLen;
if( dblMinLen - nBars > 0 )
nBars++;
for( int i=pDestTrack->lstBars.size(); i<nBars; i++ ){
TWaveBar* pWvBar = new TWaveBar;
pDestTrack->lstBars.push_back( pWvBar );
}
}
}
int iPoint = 0;
while( iPoint<nPoints ){
int iSP = 0, iEP = POINTS_PER_BAR;
if( iInsertPoint>0 ){
iSP = iInsertPoint;
if( iSP + nPoints - iPoint < POINTS_PER_BAR )
iEP = iSP + nPoints - iPoint;
}
else if( nPoints-iPoint < POINTS_PER_BAR ){
iEP = nPoints - iPoint;
}
if( iEP > iSP ){
int lenP = iEP - iSP;
memcpy( pDestTrack->lstBars[iInsertBar]->aVols + iInsertPoint,
aWave + iPoint, sizeof(DWORD) * lenP );
iInsertPoint = 0;
iInsertBar++;
iPoint += lenP;
}
else{
break;
}
}
delete[] aWave;
}
f_MM_AudioMove( iDestTrack, dblInsert, iSrcTrack, dblStart, dblEnd, iMode );
if( g_iSelAudio==0 )
PostMessage( Application->MainForm->Handle, UM_AUTORECOGNITION, iMode, 0 );
}
return bCountDown;
}
int CopyWave( int iTrack, int iStartBar, int iStartPoint,
int iEndBar, int iEndPoint, DWORD** aWave )
{
bool bT2A = *aWave==NULL;
int nSelPoints = ( iEndBar - iStartBar - 1) * POINTS_PER_BAR
+ (POINTS_PER_BAR - iStartPoint) + iEndPoint;
if( bT2A ){
*aWave = new DWORD[nSelPoints];
}
TAudioTrack* pTrack = g_aAudioTracks[iTrack];
int iPoint = 0;
for( int i=iStartBar; i<=iEndBar; i++ ){
int iSP = 0, iEP = POINTS_PER_BAR;
if( i==iStartBar )
iSP = iStartPoint;
if( i==iEndBar )
iEP = iEndPoint;
if( iEP>iSP ){
char *pSrc = (char*)( bT2A ? pTrack->lstBars[i]->aVols+iSP : (*aWave)+iPoint ),
*pDest = (char*)( bT2A ? (*aWave)+iPoint : pTrack->lstBars[i]->aVols+iSP );
memcpy( pDest, pSrc, sizeof(DWORD) * ( iEP - iSP ));
iPoint += iEP - iSP;
}
else{
break;
}
}
return nSelPoints;
}
void RemoveWaveBars( int iTrack, int iStartBar, int nDelBars )
{
TAudioTrack* pTrack = g_aAudioTracks[iTrack];
for( int i=0; i<nDelBars; i++ ){
delete pTrack->lstBars[iStartBar];
pTrack->lstBars.erase( pTrack->lstBars.begin()+iStartBar );
}
}
void InsertWaveBars( int iTrack, int iInsertBar, TWaveBarList lstBars )
{
TAudioTrack* pTrack = g_aAudioTracks[iTrack];
if( pTrack->lstBars.size()>0 && iInsertBar < pTrack->lstBars.size() ){
for( int i=lstBars.size()-1; i>=0; i-- ){
pTrack->lstBars.insert( pTrack->lstBars.begin()+iInsertBar, lstBars[i] );
}
}
else{
for( int i=0; i<lstBars.size(); i++ ){
pTrack->lstBars.push_back( lstBars[i] );
}
}
}
void RestoreWaveBars( int iInsBar, int nBars, DWORD* aWave )
{
int nPoints = nBars * POINTS_PER_BAR;
for( int i=1; i<g_aAudioTracks.size(); i++ ){
DWORD* pW = aWave ? aWave + nPoints * ( i - 1 ) : NULL;
TWaveBarList lstWaveBars;
for( int j=0; j<nBars; j++ ){
TWaveBar* pWvBar = new TWaveBar;
if( pW )
memcpy( pWvBar->aVols, pW + j * POINTS_PER_BAR,
sizeof(DWORD)*POINTS_PER_BAR );
lstWaveBars.push_back( pWvBar );
}
InsertWaveBars( i, iInsBar, lstWaveBars );
}
}
TAudioTrack* CopyAudioTrack( int iTrack, int iStartBar, int nCopyBars )
{
TAudioTrack* pSrcTrack = g_aAudioTracks[iTrack],
*pDestTrack = new TAudioTrack(pSrcTrack);
for( int i=0; i<nCopyBars; i++ ){
TWaveBar* pWvBar = new TWaveBar;
memcpy( pWvBar->aVols, pSrcTrack->lstBars[iStartBar+i],
sizeof(DWORD)*POINTS_PER_BAR );
pDestTrack->lstBars.push_back( pWvBar );
}
return pDestTrack;
}
void InsertAudioTrack( int iTrack, int iInsertBar, int nBars, TAudioTrack* pSrcTrack, int iStartBar )
{
TAudioTrack* pDestTrack = g_aAudioTracks[iTrack];
if( pDestTrack->lstBars.size()>0 && iInsertBar < pDestTrack->lstBars.size() ){
for( int i=nBars-1; i>=0; i-- ){
TWaveBar* pWvBar = new TWaveBar;
if( pSrcTrack )
memcpy( pWvBar->aVols, pSrcTrack->lstBars[iStartBar+i], sizeof(DWORD)*POINTS_PER_BAR );
pDestTrack->lstBars.insert( pDestTrack->lstBars.begin()+iInsertBar, pWvBar );
}
}
else{
for( int i=0; i<nBars; i++ ){
TWaveBar* pWvBar = new TWaveBar;
if( pSrcTrack )
memcpy( pWvBar->aVols, pSrcTrack->lstBars[iStartBar+i], sizeof(DWORD)*POINTS_PER_BAR );
pDestTrack->lstBars.push_back( pWvBar );
}
}
}
+166
View File
@@ -0,0 +1,166 @@
//---------------------------------------------------------------------------
#ifndef AudioTrackH
#define AudioTrackH
//---------------------------------------------------------------------------
#include "FxDef.h"
#include "BaseTrack.h"
#include <vector>
using namespace std;
#define MODE_INIT 0
#define MODE_CHANGE 1
#define MODE_INSERT 2
#define MODE_DELETE 3 //删除小节
#define MODE_MOVE 4 //移动(小节/音频)
#define MODE_COPY 5 //复制(小节/音频)
#define MODE_ERASE 6 //擦除音频
#define MODE_LOAD 7
#define MODE_RECORD 8
#define MODE_RELOAD 9
#define OPT_BARS 0x10
#define POINTS_PER_BAR 120
#define MAX_AUDIOTRACK 17
typedef struct tagWaveBar //波形小节
{
//每小节最多POINTS_PER_BAR个音量值
DWORD aVols[POINTS_PER_BAR];
tagWaveBar()
{
memset( this, 0, sizeof(tagWaveBar) );
}
tagWaveBar( tagWaveBar* pSrc )
{
memcpy( this, pSrc, sizeof(tagWaveBar));
}
} TWaveBar;
typedef vector<TWaveBar*> TWaveBarList;
typedef vector<TAudioFx*> TAudioFxList;
class TAudioTrack : public TBaseTrack
{
public:
TWaveBarList lstBars;
TAudioFxList lstFxs;
TAudioTrack() : TBaseTrack()
{
}
TAudioTrack( TAudioTrack* pSrc ) : TBaseTrack( pSrc->state, pSrc->volume, pSrc->pan, pSrc->gain )
{
}
~TAudioTrack()
{
while( !lstBars.empty() ){
delete lstBars.back();
lstBars.pop_back();
}
while( !lstFxs.empty() ){
delete lstFxs.back();
lstFxs.pop_back();
}
}
};
typedef vector<TAudioTrack*> TAudioTrackList;
class TAudio
{
private:
TAudioTrackList m_lstTracks;
public:
TAudioTrackList& AudioTracks() { return m_lstTracks; };
void CopyTrackList( int iStartBar, int nCopyBars, TAudioTrackList* lstAudio, bool bFx=false );
TAudioTrack* CopyTrack( int iTrack, int iStartBar, int nCopyBars, bool bFx=false,
TAudioTrack* pDest=NULL );
void ResetTracks( TAudioTrackList* lstAudio );
void RestoreAudio( TOpusStageList* lstStages, TAudioTrackList* lstAudio, bool bUndo );
bool Empty(){ return m_lstTracks.size()==1 && m_lstTracks[0]->lstBars.empty(); };
void WriteProj( FILE* pFile );
int ReadProj( FILE* pFile, DWORD dwVersion );
TAudio() {
m_lstTracks.push_back( new TAudioTrack );
};
~TAudio(){
while( m_lstTracks.size()>0 ){
delete m_lstTracks.back();
m_lstTracks.pop_back();
}
}
};
extern TAudio g_Audio;
extern int g_iSelAudio; //当前处理的音轨
extern TAudioTrackList& g_aAudioTracks; //全曲音频轨道(最大4组)
/////////////////////////////////////////////
//兼容早期版本
typedef struct tagEffect
{
int iBarStart, iBarEnd;
int iPointStart, iPointEnd;
bool bOn;
int iPreset;
float *aParams;
tagEffect* pNext;
tagEffect(){
memset( this, 0, sizeof(tagEffect) );
iPreset = -1;
}
tagEffect( tagEffect* pSrc ){
pNext = NULL;
iBarStart = pSrc->iBarStart;
iBarEnd = pSrc->iBarEnd;
iPointStart = pSrc->iPointStart;
iPointEnd = pSrc->iPointEnd;
iPreset = pSrc->iPreset;
bOn = pSrc->bOn;
if( pSrc->aParams ){
aParams = new float[6];
memcpy( aParams, pSrc->aParams, sizeof(float)*6 );
}
}
~tagEffect(){
if( aParams )
delete aParams;
}
}TEffect, *PTEffect;
//
//////////////////////////////////////////////
/***************************************************************************************/
// 全局函数
/***************************************************************************************/
TAudioTrack* NewAudioTrack( int nBar, bool bAddUndo=true );
void DeleteAudioTrack( int iTrack, bool bAddUndo=true );
void DuplicateRawBars();
TAudioTrack* DuplicateAudioTrack( TAudioTrack* pSrc );
bool MoveAudio( int iSrcTrack, double dblStart, double dblEnd,
int iDestTrack, double dblInsert, int iOption ); //返回:是否刷新整个音轨
//int GetShowWave( int iTrack ); //获取当前显示的音轨
int CopyWave( int iTrack, int iStartBar, int iStartPoint,
int iEndBar, int iEndPoint, DWORD** aWave ); //复制波形
void RemoveWaveBars( int iTrack, int iStartBar, int nDelBars );
void InsertWaveBars( int iTrack, int iInsertBar, TWaveBarList lstCopyBars );
void RestoreWaveBars( int iInsBar, int nBars, DWORD* aWave );
TAudioTrack* CopyAudioTrack( int iTrack, int iStartBar, int nCopyBars );
void InsertAudioTrack( int iTrack, int iInsertBar, int nBars, TAudioTrack* pSrcTrack, int iStartBar=0 );
//---------------------------------------------------------------------------
#endif
+108
View File
@@ -0,0 +1,108 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "BKGMemoUnit.h"
#include "GlobalUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
static const COLORREF
CLR_BKG = RGB(228, 232, 237);//168, 180, 196);
//---------------------------------------------------------------------------
__fastcall BKGMemoUnit::TMemo::TMemo(System::Classes::TComponent* AOwner)
: Vcl::Stdctrls::TMemo(AOwner)
{
ControlStyle >> csOpaque;
// FTransparent = true;
m_pbmpBkg = new TBitmap();
//ÉèÖñÊË¢£¬ÓÃ×÷±³¾°
m_pbmpBkg->Width = 2;
m_pbmpBkg->Height = 2;
m_pbmpBkg->Canvas->Brush->Color = CLR_BKG;
m_pbmpBkg->Canvas->Pen->Color = CLR_BKG;
m_pbmpBkg->Canvas->Rectangle(0, 0, m_pbmpBkg->Width, m_pbmpBkg->Height);
Brush->Bitmap = m_pbmpBkg;
}
//---------------------------------------------------------------------------
__fastcall BKGMemoUnit::TMemo::~TMemo()
{
if(m_pbmpBkg)
delete m_pbmpBkg;
}
//---------------------------------------------------------------------------
void __fastcall BKGMemoUnit::TMemo::CreateWnd(void)
{
Vcl::Stdctrls::TMemo::CreateWnd();
if( FTransparent ){
SetWindowLong( Parent->Handle, GWL_STYLE,
GetWindowLong(Parent->Handle, GWL_STYLE) & ~WS_CLIPCHILDREN );
}
}
//---------------------------------------------------------------------------
void __fastcall BKGMemoUnit::TMemo::CreateParams(Vcl::Controls::TCreateParams &Params)
{
Vcl::Stdctrls::TMemo::CreateParams( Params );
Params.ExStyle |= WS_EX_TRANSPARENT;
}
//---------------------------------------------------------------------------
void __fastcall BKGMemoUnit::TMemo::Invalidate()
{
if( FTransparent )
SendMessage( Handle, UM_TEINVALIDATE, 0, 0 );
else
Vcl::Stdctrls::TMemo::Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall BKGMemoUnit::TMemo::WMEraseBkgnd(TWMEraseBkgnd &Message)
{
if( Parent && FTransparent )
PostMessage( Handle, UM_TEINVALIDATE, 0, 0 );
else
DefaultHandler( &Message );
}
//---------------------------------------------------------------------------
void __fastcall BKGMemoUnit::TMemo::CNCtlColorEdit(TWMCtlColorEdit &Message)
{
if( FTransparent ){
SetBkColor(Message.ChildDC, CLR_BKG);
// SetBkMode( Message.ChildDC, TRANSPARENT);
Font->Size = 8;
Message.Result = (int)Brush->Handle;
}
else
DefaultHandler( &Message );
}
//---------------------------------------------------------------------------
void __fastcall BKGMemoUnit::TMemo::TEInvalidate(TMessage &Message)
{
if( Parent && FTransparent ){
TRect r = GetClientRect();
TPoint& pTL = r.TopLeft();
pTL = Parent->ScreenToClient( ClientToScreen(pTL) );
TPoint& pBR = r.BottomRight();
pBR = Parent->ScreenToClient( ClientToScreen(pBR) );
RedrawWindow( Handle, &r, 0, RDW_FRAME|RDW_INVALIDATE );
}
else
Vcl::Stdctrls::TMemo::Invalidate();
}
//---------------------------------------------------------------------------
+44
View File
@@ -0,0 +1,44 @@
//---------------------------------------------------------------------------
#ifndef BKGMemoUnitH
#define BKGMemoUnitH
#define UM_TEINVALIDATE WM_USER + 0x1003
#include "SkinScrollBarUnit.h"
namespace BKGMemoUnit
{
//---------------------------------------------------------------------------
class TMemo : public Stdctrls::TMemo
{
private:
TBitmap *m_pbmpBkg;
bool FTransparent;
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall CNCtlColorEdit(TWMCtlColorEdit &Message);
MESSAGE void __fastcall TEInvalidate(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(CN_CTLCOLOREDIT, TWMCtlColorEdit, CNCtlColorEdit)
MESSAGE_HANDLER(UM_TEINVALIDATE, TMessage, TEInvalidate)
END_MESSAGE_MAP(Vcl::Stdctrls::TMemo)
protected:
virtual void __fastcall CreateWnd();
virtual void __fastcall CreateParams(Vcl::Controls::TCreateParams &Params);
public:
__fastcall virtual TMemo(System::Classes::TComponent* AOwner);
__fastcall ~TMemo();
virtual void __fastcall Invalidate();
};
}
using namespace BKGMemoUnit;
#endif
+197
View File
@@ -0,0 +1,197 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "GlobalUnit.h"
#include "MidiTrack.h"
#include "AudioTrack.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
bool IsTrackMute( int iType, int iTrack )
{
TBaseTrack* pBase = iType==ST_MIDI ? (TBaseTrack*)g_aMidiTracks[iTrack]
: (TBaseTrack*)g_aAudioTracks[iTrack];
if( pBase->IsMute() )
return true;
else if( !pBase->IsSolo() ){
for( int i=0; i<g_aMidiTracks.size(); i++ ){
if( g_aMidiTracks[i]->IsSolo() )
return true;
}
int iATStart = g_iPreStage==0 ? 0 : 1,
iATEnd = g_iPreStage==0 ? 1 : g_aAudioTracks.size();
for( int i=iATStart; i<iATEnd; i++ ){
if( g_aAudioTracks[i]->IsSolo() )
return true;
}
}
return false;
}
//---------------------------------------------------------------------------
void SetTrackParams( bool bSolo )
{
vector<TBaseTrack*> aSoloTracks;
int iATStart = g_iPreStage==0 ? 0 : 1,
iATEnd = g_iPreStage==0 ? 1 : g_aAudioTracks.size();
if( bSolo ){
for( int i=iATStart; i<iATEnd; i++ ){
if( g_aAudioTracks[i]->IsSolo() )
aSoloTracks.push_back( g_aAudioTracks[i] );
}
for( int i=0; i<g_aMidiTracks.size(); i++ ){
if( g_aMidiTracks[i]->IsSolo() )
aSoloTracks.push_back( g_aMidiTracks[i] );
}
}
for( int i=iATStart; i<iATEnd; i++ ){
TAudioTrack* pAT = g_aAudioTracks[i];
if( pAT->IsMute() || !aSoloTracks.empty() && !pAT->IsSolo() )
f_MM_SetAudioTrackParam( i, 0, 0 );
else
f_MM_SetAudioTrackParam( i, 0, (float)(pAT->volume / 100.0) );
f_MM_SetAudioTrackParam( i, 1, (float)(pAT->pan / 100.0) );
f_MM_SetAudioTrackParam( i, 2, (float)(pAT->gain / 100.0) );
}
for( int i=0; i<g_aMidiTracks.size(); i++ ){
TMidiTrack* pMT = g_aMidiTracks[i];
if( pMT->IsMute() || !aSoloTracks.empty() && !pMT->IsSolo() )
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, 0 );
else{
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, pMT->volume );
}
}
}
//---------------------------------------------------------------------------
void ChangeTrackState( int iType, int iTrack, int iState, bool& bSet, bool& bUnset )
{
TBaseTrack* pBaseTrk = iType==ST_AUDIO ? (TBaseTrack*)g_aAudioTracks[iTrack]
: (TBaseTrack*)g_aMidiTracks[iTrack];
int iATStart = g_iPreStage==0 ? 0 : 1,
iATEnd = g_iPreStage==0 ? 1 : g_aAudioTracks.size();
bSet = !(pBaseTrk->state & iState);
vector<TBaseTrack*> aSoloTracks;
for( int i=iATStart; i<iATEnd; i++ ){
if( g_aAudioTracks[i]->IsSolo() )
aSoloTracks.push_back( g_aAudioTracks[i] );
}
for( int i=0; i<g_aMidiTracks.size(); i++ ){
if( g_aMidiTracks[i]->IsSolo() )
aSoloTracks.push_back( g_aMidiTracks[i] );
}
if( aSoloTracks.empty() ){
if( iState==TRACK_MUTE ){
if( iType==ST_AUDIO ){
f_MM_SetAudioTrackParam( iTrack, 0, bSet ? 0 : pBaseTrk->volume / 100.0 );
}
else{
TMidiTrack* pMT = (TMidiTrack*)pBaseTrk;
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, bSet ? 0 : pMT->volume );
}
pBaseTrk->Mute( bSet );
}
else{
for( int i=iATStart; i<iATEnd; i++ ){
if( g_aAudioTracks[i]==pBaseTrk ){
if( pBaseTrk->IsMute() ){
f_MM_SetAudioTrackParam( i, 0, pBaseTrk->volume / 100.0 );
pBaseTrk->Mute( false );
bUnset = true;
}
}
else{
f_MM_SetAudioTrackParam( i, 0, 0 );
}
}
for( int i=0; i<g_aMidiTracks.size(); i++ ){
TMidiTrack* pMT = g_aMidiTracks[i];
if( pMT==pBaseTrk ){
if( pBaseTrk->IsMute() ){
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, pMT->volume );
pMT->Mute( false );
bUnset = true;
}
}
else{
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, 0 );
DebugPrint( "Midi mute file %d, chno %d\n", pMT->file, pMT->chno );
}
}
pBaseTrk->Solo();
}
}
else if( pBaseTrk->IsSolo() ){
if( iState==TRACK_MUTE || aSoloTracks.size()>1 ){
if( iType==ST_AUDIO )
f_MM_SetAudioTrackParam( iTrack, 0, 0 );
else{
TMidiTrack* pMT = (TMidiTrack*)pBaseTrk;
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, 0 );
}
if( iState==TRACK_MUTE ){
pBaseTrk->Mute();
bUnset = true;
}
}
if( aSoloTracks.size()==1 ){
for( int i=iATStart; i<iATEnd; i++ ){
if( !g_aAudioTracks[i]->IsMute() ){
f_MM_SetAudioTrackParam( i, 0, g_aAudioTracks[i]->volume / 100.0 );
}
}
for( int i=0; i<g_aMidiTracks.size(); i++ ){
TMidiTrack* pMT = g_aMidiTracks[i];
if( !pMT->IsMute() ){
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, pMT->volume );
}
}
}
pBaseTrk->Solo( false );
}
else{
if( iState==TRACK_MUTE ){
pBaseTrk->Mute( bSet );
}
else{
if( iType==ST_AUDIO ){
f_MM_SetAudioTrackParam( iTrack, 0, bSet ? pBaseTrk->volume / 100.0 : 0 );
}
else{
TMidiTrack* pMT = (TMidiTrack*)pBaseTrk;
f_MM_SetMidiTrackParam( pMT->file, pMT->chno, 0, bSet ? pMT->volume : 0 );
}
pBaseTrk->Solo( bSet );
if( bSet && pBaseTrk->IsMute() ){
pBaseTrk->Mute( false );
bUnset = true;
}
}
}
}
//---------------------------------------------------------------------------
+50
View File
@@ -0,0 +1,50 @@
//---------------------------------------------------------------------------
#ifndef BaseTrackH
#define BaseTrackH
//---------------------------------------------------------------------------
#define TRACK_NORMAL 0x00
#define TRACK_MUTE 0x01
#define TRACK_SOLO 0x02
#define TRACK_HIDE 0x04
#define ST_MIDI 0
#define ST_AUDIO 1
class TBaseTrack
{
public:
BYTE state;
BYTE volume;
char pan;
char gain;
TBaseTrack()
{
state = TRACK_NORMAL;
volume = 100;
pan = gain = 0;
};
TBaseTrack( BYTE s, BYTE v, char p, char g )
{
state = s;
volume = v;
pan = p;
gain = g;
}
bool IsMute(){ return state & TRACK_MUTE; };
bool IsSolo(){ return state & TRACK_SOLO; };
bool IsHide(){ return state & TRACK_HIDE; };
void Mute( bool bMute=true ) { if( bMute ) state |= TRACK_MUTE; else state &= ~TRACK_MUTE; };
void Solo( bool bSolo=true ) { if( bSolo ) state |= TRACK_SOLO; else state &= ~TRACK_SOLO; };
void Hide( bool bHide=true ) { if( bHide ) state |= TRACK_HIDE; else state &= ~TRACK_HIDE; };
};
void SetTrackParams( bool bSolo=true ); //bSolo£ºÊÇ·ñ¿¼ÂǶÀ×à״̬
bool IsTrackMute( int iType, int iTrack );
void ChangeTrackState( int iType, int iTrack, int iState, bool& bSet, bool& bUnset );
#endif
+527
View File
@@ -0,0 +1,527 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "BtnPanelUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
VCTBtnPanel::iterator vc_pFindVCTBtnPanel;
//---------------------------------------------------------------------------
__fastcall TBtnPanel::TBtnPanel(TWinControl *pTWnCtl)
: TComponent(pTWnCtl)
{
m_pTWnCtl = pTWnCtl;
m_pAppEvents = new TApplicationEvents(this);
m_pAppEvents->OnMessage = OnAppEvents;
m_bPalEn = false;
m_bPalLD = false;
m_bPalRD = false;
m_bBtnEn = m_bBtnLD = m_bBtnRD = false;
m_pParentBtn = NULL;
FLeft = FTop = FWidth = FHeight = 0;
FEnabled = true;
FDown = false;
FStateEnter = true;
FStateCount = 3;
FBtnCurState = Bs_NORMAL;
FTransparent = false;
FTransparentValue = 255;
m_BtnCurStateBac = Bs_NORMAL;
}
//---------------------------------------------------------------------------
__fastcall TBtnPanel::~TBtnPanel()
{
SAFE_DELETE(m_pAppEvents)
}
//---------------------------------------------------------------------------
bool __fastcall TBtnPanel::IsPtInSubtn(int XPos, int YPos)
{
for(vc_pFindVCTBtnPanel =m_VCSubtn.begin();
vc_pFindVCTBtnPanel!=m_VCSubtn.end();
vc_pFindVCTBtnPanel++ )
{
TRect TRectTmpSubView
= TRect((*vc_pFindVCTBtnPanel)->Left, (*vc_pFindVCTBtnPanel)->Top,
(*vc_pFindVCTBtnPanel)->Left+(*vc_pFindVCTBtnPanel)->Width,
(*vc_pFindVCTBtnPanel)->Top+(*vc_pFindVCTBtnPanel)->Height);
if( PtInRect(TRectTmpSubView, TPoint(XPos, YPos) ) ) {
return true;
}
}
return false;
}
//---------------------------------------------------------------------------
bool __fastcall TBtnPanel::IsBtnHandleAppEvent(unsigned int message, int XPos, int YPos)
{
if( IsPtInSubtn(XPos, YPos) ) {
if( Bs_NORMAL==FBtnCurState )
return false;
}
return true;
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::OnAppEvents(tagMSG &Msg, bool &Handled)
{
// -----
if( false == FEnabled ||
false == m_pTWnCtl->Enabled ||
(false == m_bPalEn &&
Msg.hwnd != m_pTWnCtl->Handle) )
return;
if( WM_LBUTTONDOWN == Msg.message ||
WM_LBUTTONUP == Msg.message ||
WM_LBUTTONDBLCLK == Msg.message ||
WM_RBUTTONDOWN == Msg.message ||
WM_RBUTTONUP == Msg.message ||
WM_MOUSEMOVE == Msg.message )
{
}else return;
// -----
TRect rtSelf = TRect(Left, Top, Left+Width, Top+Height);
TPoint pt = m_pTWnCtl->ScreenToClient(TPoint(Msg.pt.x, Msg.pt.y));
TWMMouse Message;
Message.Msg = Msg.message;
Message.XPos = pt.x;
Message.YPos = pt.y;
if( false==IsBtnHandleAppEvent(Message.Msg, Message.XPos, Message.YPos) ) return;
// -----
MsState MsStatus = Ms_NONE;
//刚离开区域
if( m_bPalEn && !PtInRect( rtSelf, pt ) ) {
if( WM_MOUSEMOVE != Msg.message ) {
return;
}else if( WM_MOUSEMOVE==Msg.message ) {
m_bPalEn = false;
MsStatus = Ms_LEAVE;
BtnHandleAppEvent(MsStatus, Message.XPos, Message.YPos);
return;
}
//已经离开了区域
} else if(!m_bPalEn && !PtInRect( rtSelf, pt ) ) {
if( m_bPalLD ) { //处理拖动事件
MsStatus = Ms_DRAG;
BtnHandleAppEvent(MsStatus, Message.XPos, Message.YPos);
}
//除了 WM_LBUTTONUP WM_RBUTTONUP 都不再处理
if((WM_LBUTTONUP != Msg.message && WM_RBUTTONUP != Msg.message) ||
(false==m_bPalLD && WM_LBUTTONUP == Msg.message ) || //没有按下键 不再处理
(false==m_bPalRD && WM_RBUTTONUP == Msg.message ) )
return;
}
// -----
switch( Msg.message )
{
case WM_LBUTTONDOWN:
{
MsStatus = Ms_LDOWN;
m_bPalLD = true;
} break;
case WM_LBUTTONUP:
{
if( m_bPalLD ) {
MsStatus = Ms_LUP;
m_bPalLD = false;
}
} break;
case WM_LBUTTONDBLCLK:
{
MsStatus = Ms_LLDOWN;
} break;
case WM_RBUTTONDOWN:
{
MsStatus = Ms_RDOWN;
m_bPalRD = true;
} break;
case WM_RBUTTONUP:
{
if(m_bPalRD) {
MsStatus = Ms_RUP;
m_bPalRD = false;
}
} break;
case WM_MOUSEMOVE:
{
if( m_bPalEn )
{
if(m_bPalLD)
MsStatus = Ms_DRAG;
else
MsStatus = Ms_MOVE;
}else MsStatus = Ms_ENTER;
m_bPalEn = true;
} break;
default: break;
}
if(Ms_NONE!=MsStatus ) BtnHandleAppEvent(MsStatus, Message.XPos, Message.YPos);
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::BtnHandleAppEvent(MsState MsSrcTmp, int XPos, int YPos)
{
MsState MsTmp = Ms_NONE;
BtnState BsTmp = Bs_NONE;
switch( MsSrcTmp )
{
case Ms_LDOWN:
{
m_bBtnLD = true;
BsTmp = Bs_DOWN;
FBtnCurState = BsTmp;
MsTmp = Ms_LDOWN;
} break;
case Ms_LLDOWN:
{
MsTmp = Ms_LLDOWN;
} break;
case Ms_LUP:
{
m_bBtnLD = false;
if( PtInRect( TRect(Left, Top, Left+Width, Top+Height),
TPoint(XPos, YPos) ) )
BsTmp = Bs_ENTER;
else
BsTmp = Bs_NORMAL;
FBtnCurState = BsTmp;
MsTmp = Ms_LUP;
} break;
case Ms_RDOWN:
{
MsTmp = Ms_RDOWN;
} break;
case Ms_RUP:
{
MsTmp = Ms_RUP;
} break;
case Ms_ENTER:
{
if( true!=m_bBtnLD ) {
m_bBtnEn = true;
BsTmp = Bs_ENTER;
FBtnCurState = BsTmp;
MsTmp = Ms_ENTER;
}
} break;
case Ms_LEAVE:
{
if( true!=m_bBtnLD ) {
m_bBtnEn = false;
BsTmp = Bs_NORMAL;
FBtnCurState = BsTmp;
MsTmp = Ms_LEAVE;
}
} break;
case Ms_MOVE:
{
if( m_bBtnEn ) {
bool bIsPtInSubtn = IsPtInSubtn(XPos, YPos);
if( bIsPtInSubtn ) {
m_bBtnEn = false;
BsTmp = Bs_NORMAL;
FBtnCurState = BsTmp;
MsTmp = Ms_LEAVE;
}else {
MsTmp = Ms_MOVE;
}
}else{
m_bBtnEn = true;
BsTmp = Bs_ENTER;
FBtnCurState = BsTmp;
MsTmp = Ms_ENTER;
}
} break;
case Ms_DRAG:
{
MsTmp = Ms_DRAG;
} break;
default: break;
}
if( Ms_NONE != MsTmp ) BtnMsEvent(MsTmp, XPos, YPos);
if( Bs_NONE != BsTmp ) BtnDrEvent(FBtnCurState, XPos, YPos);
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::BtnHandleState()
{
BtnState BtnStateTmp = this->FBtnCurState;
if( false==m_pTWnCtl->Enabled ||
false==FEnabled ) {
BtnStateTmp = Bs_DISABLE;
}else {
if( false==FStateEnter && Bs_ENTER==this->FBtnCurState )
BtnStateTmp = Bs_NORMAL;
if( FDown ) BtnStateTmp = Bs_DOWN;
if( FStateCount<=BtnStateTmp ) BtnStateTmp = FStateCount-1;
}
m_BtnCurStateBac = FBtnCurState = BtnStateTmp;
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::BtnDrEvent(BtnState BsTmp, int XPos, int YPos)
{
if( Bs_DOWN == BsTmp ||
Bs_ENTER == BsTmp ||
Bs_NORMAL == BsTmp )
{
int BtnCurStateBac = m_BtnCurStateBac;
BtnHandleState();
if( BtnCurStateBac==m_BtnCurStateBac ) return;
Paint();
}
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::BtnMsEvent(MsState MsTmp, int XPos, int YPos)
{
if( Ms_LDOWN == MsTmp ||
Ms_LUP == MsTmp ||
Ms_LLDOWN == MsTmp ||
Ms_RDOWN == MsTmp ||
Ms_RUP == MsTmp ||
Ms_ENTER == MsTmp ||
Ms_LEAVE == MsTmp ||
Ms_MOVE == MsTmp ||
Ms_DRAG == MsTmp )
{
if( OnPanelMsEvent ) OnPanelMsEvent(MsTmp, XPos, YPos);
}
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::AddSubPanel(TBtnPanel *pTBtnPanel)
{
m_VCSubtn.push_back(pTBtnPanel);
pTBtnPanel->m_pParentBtn = this;
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::SetBounds(int nLeft, int nTop, int nWidth, int nHeight)
{
FLeft = nLeft;
FTop = nTop;
FWidth = nWidth;
FHeight = nHeight;
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::PaintParent(TCanvas *CanvasDrawCus)
{
if( this->m_pParentBtn ) {
this->m_pParentBtn->Paint(CanvasDrawCus, false);
}
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::PaintSub(TCanvas *CanvasParent)
{
if( m_VCSubtn.size() ) {
for(vc_pFindVCTBtnPanel =m_VCSubtn.begin();
vc_pFindVCTBtnPanel!=m_VCSubtn.end();
vc_pFindVCTBtnPanel++ )
{
((TBtnPanel *)(*vc_pFindVCTBtnPanel))->Paint(CanvasParent, false);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::Paint(TCanvas *Canvas, bool bParent)
{
TCanvas *CanvasDraw = Canvas;
TRect rtThis = TRect(this->Left, this->Top,
this->Left+this->Width,
this->Top +this->Height);
TRect rtCreate = TRect(this->m_pTWnCtl->Left, this->m_pTWnCtl->Top,
this->m_pTWnCtl->Left+this->m_pTWnCtl->Width,
this->m_pTWnCtl->Top +this->m_pTWnCtl->Height);
//自身创建
HDC ParentDC = GetDC(this->m_pTWnCtl->Handle);
HDC DCCreate;
HBITMAP BmpCreate;
TCanvas *CanvasCreate;
if( NULL==Canvas ) {
DCCreate = CreateCompatibleDC(ParentDC);
BmpCreate = CreateCompatibleBitmap(ParentDC,
rtCreate.Width(),
rtCreate.Height());
SelectObject(DCCreate, BmpCreate);
PerformEraseBackground(this->m_pTWnCtl, DCCreate);
CanvasCreate = new TCanvas();
CanvasCreate->Handle = DCCreate;
CanvasDraw = CanvasCreate;
if( FTransparent ) {
SetBkMode( CanvasDraw->Handle, TRANSPARENT);
StyleServices()->DrawParentBackground(
this->m_pTWnCtl->Handle,
CanvasDraw->Handle,
NULL, false, rtThis);
}
}
//绘制
if( FPanelDrEvent )
{
BtnHandleState();
//新建绘制
TCanvas *CanvasCusDraw = new TCanvas();
HDC DCCusDraw;
HBITMAP BmpCusDraw;
DCCusDraw = CreateCompatibleDC(ParentDC);
BmpCusDraw = CreateCompatibleBitmap(ParentDC, rtCreate.Width(),
rtCreate.Height());
SelectObject(DCCusDraw, BmpCusDraw);
PerformEraseBackground(this->m_pTWnCtl, DCCusDraw);
CanvasCusDraw->Handle = DCCusDraw;
if( FTransparent ) {
SetBkMode( CanvasCusDraw->Handle, TRANSPARENT);
StyleServices()->DrawParentBackground(
this->m_pTWnCtl->Handle,
CanvasCusDraw->Handle,
NULL, false, rtThis);
//parent贴图到自身区域
if( this->m_pParentBtn ) {
if( true==bParent ) {
if( NULL==Canvas ) PaintParent(CanvasDraw);
}
StretchBlt(CanvasCusDraw->Handle,
rtThis.Left, rtThis.Top,
rtThis.Width(), rtThis.Height(),
CanvasDraw->Handle,
rtThis.Left, rtThis.Top,
rtThis.Width(), rtThis.Height(),
SRCCOPY);
}
}
FPanelDrEvent(FBtnCurState, rtThis, CanvasCusDraw);
if( FTransparent ) {
BLENDFUNCTION BFun;
BFun.BlendOp = AC_SRC_OVER;
BFun.BlendFlags = 0;
BFun.SourceConstantAlpha = FTransparentValue;
BFun.AlphaFormat = 0;
::AlphaBlend( CanvasDraw->Handle,
rtThis.Left, rtThis.Top,
rtThis.Width(), rtThis.Height(),
CanvasCusDraw->Handle,
rtThis.Left, rtThis.Top,
rtThis.Width(), rtThis.Height(),
BFun);
}else{
StretchBlt(CanvasDraw->Handle,
rtThis.Left, rtThis.Top,
rtThis.Width(), rtThis.Height(),
CanvasCusDraw->Handle,
rtThis.Left, rtThis.Top,
rtThis.Width(), rtThis.Height(),
SRCCOPY);
}
if( true==bParent )
PaintSub(CanvasDraw);
DeleteDC(DCCusDraw);
DeleteObject(BmpCusDraw);
SAFE_DELETE(CanvasCusDraw)
}
if( NULL==Canvas ) {
StretchBlt(ParentDC,
this->Left, this->Top,
this->Width, this->Height,
CanvasDraw->Handle,
this->Left, this->Top,
this->Width, this->Height,
SRCCOPY);
DeleteDC(DCCreate);
DeleteObject(BmpCreate);
SAFE_DELETE(CanvasCreate)
}
}
//---------------------------------------------------------------------------
void __fastcall TBtnPanel::Update(bool bEreaseBkg)
{
if( m_pParentBtn && bEreaseBkg ) {
((TBtnPanel *)m_pParentBtn)->Update(bEreaseBkg);
}else {
Paint();
}
}
//---------------------------------------------------------------------------
+126
View File
@@ -0,0 +1,126 @@
//---------------------------------------------------------------------------
#ifndef BtnPanelUnitH
#define BtnPanelUnitH
//---------------------------------------------------------------------------
#include <Vcl.AppEvnts.hpp>
//---------------------------------------------------------------------------
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
#ifndef SAFE_DELETE(p)
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#endif
//---------------------------------------------------------------------------
typedef enum{
Bs_NORMAL=0,
Bs_ENTER,
Bs_DOWN,
Bs_DISABLE,
Bs_NONE
}BtnState;
typedef enum{
Ms_LDOWN=0,
Ms_LUP,
Ms_LLDOWN,
Ms_RDOWN,
Ms_RUP,
Ms_ENTER,
Ms_LEAVE,
Ms_MOVE,
Ms_DRAG,
Ms_NONE
}MsState;
//---------------------------------------------------------------------------
class TBtnPanel;
typedef vector<TBtnPanel *> VCTBtnPanel;
extern VCTBtnPanel::iterator vc_pFindVCTBtnPanel;
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *PanelMsEvent)(int MsTmp, int XPos, int YPos);
typedef void __fastcall (__closure *PanelDrEvent)(int BsTmp, TRect TRectTmp, TCanvas *pCanvas);
//---------------------------------------------------------------------------
class TBtnPanel: public TComponent
{
private:
TApplicationEvents *m_pAppEvents;
bool m_bPalEn, m_bPalLD, m_bPalRD;
void __fastcall OnAppEvents(tagMSG &Msg, bool &Handled);
TBtnPanel *m_pParentBtn;
VCTBtnPanel m_VCSubtn;
bool m_bBtnEn, m_bBtnLD, m_bBtnRD;
int m_BtnCurStateBac;
bool __fastcall IsBtnHandleAppEvent(unsigned int message, int XPos, int YPos);
bool __fastcall IsPtInSubtn(int XPos, int YPos);
void __fastcall BtnHandleAppEvent(MsState MsSrcTmp, int XPos, int YPos);
void __fastcall BtnHandleState();
void __fastcall BtnMsEvent(MsState MsTmp, int XPos, int YPos);
void __fastcall BtnDrEvent(BtnState BsTmp, int XPos, int YPos);
void __fastcall PaintParent(TCanvas *CanvasDrawCus);
void __fastcall PaintSub(TCanvas *CanvasDraw);
// -----
int FLeft, FTop, FWidth, FHeight;
bool FEnabled;
bool FDown;
bool FStateEnter;
int FStateCount;
int FBtnCurState;
bool FTransparent;
BYTE FTransparentValue;
PanelMsEvent FPanelMsEvent;
PanelDrEvent FPanelDrEvent;
public:
TWinControl *m_pTWnCtl;
void __fastcall SetBounds(int nLeft, int nTop, int nWidth, int nHeight);
void __fastcall AddSubPanel(TBtnPanel *pTBtnPanel);
void __fastcall Update(bool bEreaseBkg=true);
void __fastcall Paint(TCanvas *Canvas=NULL, bool bParent=true);
__fastcall TBtnPanel(TWinControl *pTWnCtl);
__fastcall ~TBtnPanel();
__published:
__property int Left = { read=FLeft, write=FLeft, default=0 };
__property int Top = { read=FTop, write=FTop, default=0 };
__property int Width = { read=FWidth, write=FWidth, default=0 };
__property int Height = { read=FHeight, write=FHeight, default=0 };
__property bool StateEnter = { read=FStateEnter, write=FStateEnter, default=true };
__property bool Enabled = { read=FEnabled, write=FEnabled, default=true };
__property bool Down = { read=FDown, write=FDown, default=false };
__property int BtnCurState = { read=FBtnCurState,write=FBtnCurState,default=Bs_NORMAL};
__property int StateCount = { read=FStateCount, write=FStateCount, default=3 };
__property bool Transparent = { read=FTransparent, write=FTransparent, default=false };
__property BYTE TransparentValue = { read=FTransparentValue, write=FTransparentValue, default=255 };
__property PanelMsEvent OnPanelMsEvent = { read=FPanelMsEvent , write=FPanelMsEvent };
__property PanelDrEvent OnPanelDrEvent = { read=FPanelDrEvent , write=FPanelDrEvent };
};
//---------------------------------------------------------------------------
#endif
/******************************************
******************READ ME******************
*******************************************
@ 先触发鼠标事件,在触发绘制事件
@ 事件坐标体系是绝对坐标;
@ 绘制坐标体系是相对坐标;
@ 自身重绘,子view相应重绘;
@ 自身rect发生变化,父view相应重绘;
@ 只画png需要设置trans
@ StateCount-->BtnState;
@ Ms_LLDOWN-->event no paint;
*******************************************
*******************************************
*******************************************/
+74
View File
@@ -0,0 +1,74 @@
//---------------------------------------------------------------------------
#ifndef CKBoxH
#define CKBoxH
#include <vcl.h>
#include <Vcl.Imaging.pngimage.hpp>
//---------------------------------------------------------------------------
class PACKAGE TCKBox : public TPanel
{
private:
bool FChecked;
bool FEnabled;
bool bMouse;
bool FAutoBox;
TNotifyEvent FOnChange;
TColor FBoxColor;
String m_strText;
// TLabel *m_pCaption;
Vcl::Imaging::Pngimage::TPngImage *m_pImgCheck;
private:
void __fastcall SetBoxEnabled(bool bEnabled);
void __fastcall SetEnabled(bool bEnabled);
void __fastcall SetChecked(bool bCheck);
void __fastcall SetBoxColor(TColor cColor);
TFont* __fastcall GetTextFont();
void __fastcall SetTextFont( TFont* Value );
// void __fastcall Clicklb(TObject *Sender);
// TColor __fastcall ColorSub(TColor cColor,int index);
String __fastcall GetCaption();
void __fastcall SetCaption( String Value );
protected:
virtual void __fastcall Paint(void);
MESSAGE void __fastcall CMMouseLeave(TWMMouse &Message);
MESSAGE void __fastcall CMMouseEnter(TWMMouse &Message);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TWMMouse, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TWMMouse, CMMouseLeave)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP(TPanel)
public:
DYNAMIC void __fastcall Click(void);
__fastcall TCKBox( TComponent* Owner );
__fastcall ~TCKBox();
__published:
__property bool Checked = { read = FChecked, write = SetChecked, default = 0 };
__property bool Enabled = { read = FEnabled, write = SetEnabled, default = 1 };
__property bool AutoBox = { read = FAutoBox,write = FAutoBox,default = 1};
__property TColor BoxColor = { read = FBoxColor,write = SetBoxColor };
__property Font = { read = GetTextFont, write = SetTextFont };
__property TNotifyEvent OnChange = {read = FOnChange, write = FOnChange ,default = NULL};
__property String Caption = {read = GetCaption, write = SetCaption };
};
#endif
/*
使用说明
1、OnChange 为当 Checked 发生改变时触发 为外部接口 也可以使用父类 TPanel 的 onClick
2、FontSize 为 字体大小
3、AutoBox 为 True 时:
Box 的大小随字体高度变化
为false 时:
Box 的大小 随控件的 Height 变化
4、BoxEnabled 能否使用 ,不与 TPanel 的 Enabled 冲突
附注:
控件 最小 Height 为 6 ;最小 Width 为 11
*/
+139
View File
@@ -0,0 +1,139 @@
//---------------------------------------------------------------------------
#ifndef CapButtonH
#define CapButtonH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.pnglang.hpp>
#include <Vcl.Graphics.hpp>
//---------------------------------------------------------------------------
class PACKAGE TCapButton : public TGraphicControl
{
public:
enum TModalResult{
mrNone = System::Int8(0x0),
mrOk = System::Int8(0x1),
mrCancel = System::Int8(0x2),
mrAbort = System::Int8(0x3),
mrRetry = System::Int8(0x4),
mrIgnore = System::Int8(0x5),
mrYes = System::Int8(0x6),
mrNo = System::Int8(0x7),
mrClose = System::Int8(0x8),
mrHelp = System::Int8(0x9),
mrTryAgain = System::Int8(0xa),
mrContinue = System::Int8(0xb),
mrAll = System::Int8(0xc),
mrNoToAll = System::Int8(0xd),
mrYesToAll = System::Int8(0xe)
};
private:
COLORREF
clrFrameExNormal,
clrFrameExEnter,
clrFrameExDisable,
clrFrameNormal,
clrLineNormal,
clrRectNormal,
clrRectDisable,
clrCapArrowOpenBound[10],
clrCapArrowOpenLine[4],
clrExFrameBound[4],
clrExFrameBoundDisable[4];
TColor FBorderColor;
TColor FInterFrameColor;
TColor FInterColor;
void __fastcall IniColor(int nstate);
COLORREF __fastcall TransformColor(COLORREF icolor, int nNum=0, bool bplus=true);
void __fastcall SetBorderColor(TColor iBorderColor);
void __fastcall SetInterFrameColor(TColor iInterFrameColor);
void __fastcall SetInterColor(TColor iInterColor);
private:
String FCaption;
TNotifyEvent FOnMouseEnter;//on mouse enter notify event
TNotifyEvent FOnMouseLeave;//on mouse leave notify event
// System::Uitypes::TModalResult FModalResult;
TModalResult FModalResult;
int __fastcall GetFontSize();
MESSAGE void __fastcall CMMouseEnter(Winapi::Messages::TMessage &Msg); // to know when mouse is entered
MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Msg); // to know when mouse is leaved
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
END_MESSAGE_MAP(TGraphicControl)
protected:
bool FEnablePNG; //是否加载了png格式图片背景
bool FDown; // value to know if we painting mouse down
int EtatBtn; // 0=Normal 1=Mouse entered 2=Pressed 3=Disabled
int FStateCount;
Vcl::Imaging::Pngimage::TPngImage *FPngImg; //our 4 states image
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall SetEnabled(bool Value);
public:
__fastcall virtual TCapButton(System::Classes::TComponent* AOwner);
__fastcall virtual ~TCapButton(void);
void __fastcall SetStateCount( int count );
void __fastcall SetPngImg(Vcl::Imaging::Pngimage::TPngImage *value); // we set the png image
void __fastcall SetDown(bool value); // to know if mouse is down or not
void __fastcall SetEnablePNG(bool Value);// to know if customer set png img
void __fastcall SetCaption(String Value);
virtual void __fastcall Paint(void); // override the painting of the component
DYNAMIC void __fastcall Click(void);
__published:
__property Action;
__property Anchors = {default=3};
__property bool Down = {read=FDown, write=SetDown, default=False};
__property Enabled = {default=1};
__property int ImgStates = {read=FStateCount, write=SetStateCount, default=4};
// __property System::Uitypes::TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property ParentShowHint = {default=1};
__property Vcl::Imaging::Pngimage::TPngImage *PngImg = {read=FPngImg, write=SetPngImg};
__property PopupMenu;
__property ShowHint;
__property Visible = {default=1};
__property OnClick;
__property OnContextPopup;
__property OnMouseDown;
__property OnMouseMove;
__property OnMouseUp;
__property System::Classes::TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter};
__property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave};
__property bool EnablePNG = {read=FEnablePNG, write=SetEnablePNG, default=False};
__property TColor BorderColor = {read=FBorderColor, write=SetBorderColor, default=TColor(0x83807d)};
__property TColor InterFrameColor = {read=FInterFrameColor, write=SetInterFrameColor, default=TColor(0x302e2c)};
__property TColor InterColor = {read=FInterColor, write=SetInterColor, default=TColor(0x58504a)};
private:
Vcl::Imaging::Pngimage::TPngImage *m_pPngButton, *m_pPngFoucusButton;
Vcl::Imaging::Pngimage::TPngImage *pTmpDraw, *pTmpFoucusDraw;
void __fastcall PaintCustomer(void);
void __fastcall PaintCustomerText(void);
public:
TRect rtCaption;
void __fastcall SetFontSize( int value );
void __fastcall SetFont(String name, int size );
__published:
__property String Caption = {read=FCaption, write=FCaption};
__property int FontSize = {read=GetFontSize, write=SetFontSize, default=8};
};
//---------------------------------------------------------------------------
#endif
+414
View File
@@ -0,0 +1,414 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Vcl.Imaging.pngimage.hpp>
#pragma hdrstop
#include "GlobalUnit.h"
#include "ChordPanel.h"
#define COL_HEIGHT 40
#define COL_GAP 10
#define MAINKEY_WIDTH 50
#define ADJKEY_WIDTH 40
#define CHORDTYPE_WIDTH 96
String u_strChordType[] = { "大三 Maj", "小三 Min", "大小七 7", "小七 Min7",
"挂二 Sus2", "挂四 Sus4", "挂六 Sus6", "大七 Maj7" };
//---------------------------------------------------------------------------
#pragma package(smart_init)
__fastcall TChordPanel::TChordPanel(TComponent* AOwner)
: TToolpalPanel(AOwner)
{
m_iType = TPTYPE_CHORD;
m_nTextHeight = 40;
m_iMelodyKey = 0;
m_iMainKey = m_iChordType = -1;
m_iAdjustKey = 0;
m_bEnable = false;
m_lblName = NULL;
m_lblType = NULL;
m_strTitle = "和弦设置";
AddToolBtn( 3, "imgAlphaChord", KeyModeClick, "显示英文和弦" );
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::CreateWnd(void)
{
TToolpalPanel::CreateWnd();
m_lblName = new TLabel(this);
m_lblName->Parent = this;
m_lblName->Alignment = taCenter;
m_lblName->Layout = tlCenter;
m_lblName->AutoSize = false;
m_lblName->SetBounds( LEFT_BOUND + COL_GAP,
m_nTitleHeight + COL_GAP,
MAINKEY_WIDTH + ADJKEY_WIDTH + COL_GAP,
m_nTextHeight - COL_GAP );
m_lblName->Font->Name = g_strTxtFontName;
// m_lblName->Font->Size = g_szFont9;
m_lblName->Font->Color = RGB(156, 170, 189);
m_lblName->Caption = g_bAlphaKey ? L"和弦调号" : L"和弦级数";
m_lblType = new TLabel(this);
m_lblType->Parent = this;
m_lblType->Alignment = taCenter;
m_lblType->Layout = tlCenter;
m_lblType->AutoSize = false;
m_lblType->SetBounds( m_lblName->Left + m_lblName->Width + 16,
m_nTitleHeight + COL_GAP,
CHORDTYPE_WIDTH,
m_nTextHeight - COL_GAP );
m_lblType->Font->Name = g_strTxtFontName;
// m_lblType->Font->Size = g_szFont9;
m_lblType->Font->Color = RGB(156, 170, 189);
m_lblType->Caption = L"和弦类型";
for( int i = 0; i < 7; i++ ){
m_aMainKeys[i] = new TTextButton(this);
m_aMainKeys[i]->Parent = this;
m_aMainKeys[i]->Enabled = false;
m_aMainKeys[i]->OnClick = MainKeyClick;
m_aMainKeys[i]->Tag = MainKeyTag( i );
m_aMainKeys[i]->Text = g_bAlphaKey ? g_strAlphaTable[i] : g_strTable[i];
m_aMainKeys[i]->FontName = g_strTxtFontName;
m_aMainKeys[i]->FontSize = g_szFont12;
m_aMainKeys[i]->SetBounds( LEFT_BOUND + COL_GAP,
m_nTitleHeight + m_nTextHeight + i*COL_HEIGHT,
MAINKEY_WIDTH, COL_HEIGHT );
}
for( int i=0; i<2; i++ ){
m_aAdjustKeys[i] = new TTextButton(this);
m_aAdjustKeys[i]->Parent = this;
m_aAdjustKeys[i]->Enabled = false;
m_aAdjustKeys[i]->OnClick = AdjustKeyClick;
m_aAdjustKeys[i]->Tag = i==0 ? 1 : -1;
m_aAdjustKeys[i]->Text = i==0 ? "#" : "b";
m_aAdjustKeys[i]->FontName = g_strTxtFontName;
m_aAdjustKeys[i]->FontSize = g_szFont12;
m_aAdjustKeys[i]->SetBounds( m_aMainKeys[0]->Left + m_aMainKeys[0]->Width + COL_GAP,
m_nTitleHeight + m_nTextHeight + i*COL_HEIGHT,
ADJKEY_WIDTH, COL_HEIGHT );
}
for( int i=0; i<c_Type_Num; i++ ){
m_aChordTypes[i] = new TTextButton(this);
m_aChordTypes[i]->Parent = this;
m_aChordTypes[i]->Enabled = false;
m_aChordTypes[i]->OnClick = ChordTypeClick;
m_aChordTypes[i]->Tag = i;
m_aChordTypes[i]->Text = u_strChordType[i];
m_aChordTypes[i]->FontName = g_strTxtFontName;
m_aChordTypes[i]->FontSize = g_szFont12;
int h = i;
if( i==7 ) h = 4;
else if( i>=4 ) h++;
m_aChordTypes[i]->SetBounds( m_aAdjustKeys[0]->Left + m_aAdjustKeys[0]->Width + 16,
m_nTitleHeight + m_nTextHeight + h*COL_HEIGHT,
CHORDTYPE_WIDTH, COL_HEIGHT );
}
m_lstBtnTools[0]->Down = g_bAlphaKey;
}
//---------------------------------------------------------------------------
__fastcall TChordPanel::~TChordPanel()
{
for( int i = 0; i < 7; i++ ){
SAFE_DELETE( m_aMainKeys[i] );
}
for( int i=0; i<2; i++ ){
SAFE_DELETE( m_aAdjustKeys[i] );
m_aAdjustKeys[i] = NULL;
}
for( int i=0; i<c_Type_Num; i++ ){
SAFE_DELETE( m_aChordTypes[i] );
}
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::WMSize(Winapi::Messages::TWMSize &Message)
{
TToolpalPanel::WMSize( Message );
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::SetChord( int iMainKey, int iAdjustKey, int iChordType )
{
if( m_iMainKey!=iMainKey ){
if( m_iMainKey>=0 )
m_aMainKeys[m_iMainKey]->SetDown( false );
if( iMainKey>=0 )
m_aMainKeys[iMainKey]->SetDown( true );
m_iMainKey = iMainKey;
}
EnableAdjustKey( iMainKey, iAdjustKey );
EnableChordType( iMainKey );
m_iAdjustKey = iAdjustKey;
if( m_iChordType!=iChordType ){
if( m_iChordType>=0 )
m_aChordTypes[m_iChordType]->SetDown(false);
if( iChordType>=0 )
m_aChordTypes[iChordType]->SetDown(true);
m_iChordType = iChordType;
}
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::MainKeyClick( TObject* Sender )
{
int iSeries = ((TTextButton*)Sender)->Tag,
iAdjustKey = 0,
iChordType = 0;
if( iSeries==1 || iSeries==2 || iSeries==5 )
iChordType = 1;
else if( iSeries==6 )
iAdjustKey = -1;
if( g_bAlphaKey ){
int iKey = (iSeries<3) ? (iSeries*2) : (iSeries*2 - 1);
iKey += m_iMelodyKey + iAdjustKey;
if( iKey<0 ) iKey += 12;
else if( iKey>11 ) iKey -= 12;
if( iKey==1 || iKey==3 || iKey==8 || iKey==10 ) iAdjustKey = -1;
else if( iKey==6 ) iAdjustKey = 1;
}
int iMainKey = -1;
for( int i=0; i<7; i++ ){
if( m_aMainKeys[i]==Sender ){
iMainKey = i;
break;
}
}
if( iMainKey!=m_iMainKey || iAdjustKey!=m_iAdjustKey || iChordType!=m_iChordType ){
SetChord( iMainKey, iAdjustKey, iChordType );
m_pContentPanel->SetSelectChord( GetChordKey(), iChordType );
}
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::AdjustKeyClick( TObject* Sender )
{
TTextButton* pAdjust = (TTextButton*)Sender;
int iAdjustKey = pAdjust->Down ? 0 : pAdjust->Tag;
if( iAdjustKey!=m_iAdjustKey ){
SetChord( m_iMainKey, iAdjustKey, m_iChordType );
m_pContentPanel->SetSelectChord( GetChordKey(), m_iChordType );
}
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::ChordTypeClick( TObject* Sender )
{
int iChordType = ((TTextButton*)Sender)->Tag;
if( iChordType!=m_iChordType ){
SetChord( m_iMainKey, m_iAdjustKey, iChordType );
m_pContentPanel->SetSelectChord( GetChordKey(), iChordType );
}
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::EnableChordModify( bool bEnable, int iBarKey, int iChordKey, int iChordType )
{
SetMelodyKey( iBarKey );
int iMainKey, iAdjustKey;
m_pContentPanel->GetChordDispalyKey( iChordKey, iBarKey, iMainKey, iAdjustKey );
if( bEnable!=m_bEnable ){
for( int i=0; i<7; i++ ){
TTextButton * pBtn = m_aMainKeys[i];
pBtn->Enabled = bEnable;
pBtn->SetDown( bEnable && i==iMainKey );
}
for( int i=0; i<c_Type_Num; i++ ){
TTextButton * pBtn = m_aChordTypes[i];
pBtn->Enabled = bEnable;
pBtn->SetDown( bEnable && i==iChordType );
}
EnableAdjustKey( bEnable ? iMainKey : 0, iAdjustKey );
EnableChordType( bEnable ? iMainKey : -1 );
m_bEnable = bEnable;
m_iMainKey = iMainKey;
m_iAdjustKey = iAdjustKey;
m_iChordType = iChordType;
}
else if( bEnable ){
SetChord( iMainKey, iAdjustKey, iChordType );
}
}
//---------------------------------------------------------------------------
void TChordPanel::EnableAdjustKey( int iMainKey, int iAdjustKey )
{
switch( iMainKey ){
case -1: case 0: case 4:
m_aAdjustKeys[0]->Enabled = false;
m_aAdjustKeys[1]->Enabled = false;
break;
case 3:
m_aAdjustKeys[0]->Enabled = true;
m_aAdjustKeys[1]->Enabled = false;
break;
default:
m_aAdjustKeys[0]->Enabled = false;
m_aAdjustKeys[1]->Enabled = true;
break;
}
m_aAdjustKeys[0]->SetDown( iAdjustKey>0 );
m_aAdjustKeys[1]->SetDown( iAdjustKey<0 );
}
//---------------------------------------------------------------------------
void TChordPanel::EnableChordType( int iMainKey )
{
for( int i=0; i<c_Type_Num; i++ ){
m_aChordTypes[i]->Enabled = iMainKey>=0;
}
}
//---------------------------------------------------------------------------
int TChordPanel::MainKeyTag( int index )
{
int iTag = index;
if( g_bAlphaKey && m_iMelodyKey>0 ){
int iOffset = 0;
switch( m_iMelodyKey ){
case 1: case 2: iOffset = 1; break;
case 3: case 4: iOffset = 2; break;
case 5: case 6: iOffset = 3; break;
case 7: iOffset = 4; break;
case 8: case 9: iOffset = 5; break;
case 10: case 11: iOffset = 6; break;
}
iTag -= iOffset;
if( iTag<0 )
iTag += 7;
}
return iTag;
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::SetMelodyKey( int iKey )
{
if( m_iMelodyKey!=iKey ){
m_iMelodyKey = iKey;
if( iKey>0 ){
for( int i=0; i<7; i++ ){
if( m_aMainKeys[i] )
m_aMainKeys[i]->Tag = MainKeyTag( i );
}
}
}
}
//---------------------------------------------------------------------------
int TChordPanel::GetChordKey()
{
int iKey = m_iMainKey;
switch( m_iMainKey ){
case 1: case 2:
iKey = m_iMainKey * 2;
if( m_iAdjustKey!=0 ) iKey += m_iAdjustKey;
break;
case 3:
iKey = 5;
if( m_iAdjustKey!=0 ) iKey += m_iAdjustKey;
break;
case 4:
iKey = 7;
break;
case 5: case 6:
iKey = m_iMainKey * 2 - 1;
if( m_iAdjustKey!=0 ) iKey += m_iAdjustKey;
break;
}
if( iKey>=0 && !g_bAlphaKey ){
iKey += m_iMelodyKey;
if( iKey>11 )
iKey -= 12;
}
return iKey;
}
//---------------------------------------------------------------------------
void __fastcall TChordPanel::KeyModeClick(TObject *Sender)
{
TPNGButton* pBtn = (TPNGButton*)Sender;
// pBtn->Down = !pBtn->Down;
SetKeyMode( !pBtn->Down );
}
//---------------------------------------------------------------------------
void TChordPanel::SetKeyMode( bool bAlpha )
{
if( g_bAlphaKey!= bAlpha ){
if( m_lblName ){
int iChordKey = GetChordKey();
g_bAlphaKey = bAlpha;
for( int i = 0; i < 7; i++ ){
m_aMainKeys[i]->Text = g_bAlphaKey ? g_strAlphaTable[i] : g_strTable[i];
m_aMainKeys[i]->Tag = MainKeyTag( i );
if( Visible )
m_aMainKeys[i]->Repaint();
}
if( Visible ){
int iMainKey, iAdjustKey;
m_pContentPanel->GetChordDispalyKey( iChordKey, m_iMelodyKey, iMainKey, iAdjustKey );
SetChord( iMainKey, iAdjustKey, m_iChordType );
}
m_lblName->Caption = g_bAlphaKey ? L"和弦调号" : L"和弦级数";
m_lstBtnTools[0]->Down = bAlpha;
}
else{
g_bAlphaKey = bAlpha;
}
m_pContentPanel->InvalidateShowBars( BAR_DATA );
}
}
//---------------------------------------------------------------------------
+69
View File
@@ -0,0 +1,69 @@
//---------------------------------------------------------------------------
#ifndef ChordPanelH
#define ChordPanelH
#include "ContentPanelUnit.h"
#include "ToolpalPanel.h"
#include "TextButton.h"
enum CONCORD_TYPE{
c_Type_Maj,
c_Type_Min,
c_Type_Dom7,
c_Type_Min7,
c_Type_Sus2,
c_Type_Sus4,
c_Type_Sus6,
c_Type_Maj7,
c_Type_Num
};
//---------------------------------------------------------------------------
class TChordPanel : public TToolpalPanel
{
private:
TContentPanel* m_pContentPanel; //ÄÚÈÝÃæ°å¾ä±ú
TTextButton *m_aMainKeys[7],
*m_aAdjustKeys[2],
*m_aChordTypes[c_Type_Num];
TLabel *m_lblName,
*m_lblType;
int m_nTextHeight;
int m_iMainKey, m_iAdjustKey, m_iChordType, m_iMelodyKey;
bool m_bEnable;
void EnableAdjustKey( int iMainKey, int iAdjustKey );
void EnableChordType( int iMainKey );
int MainKeyTag( int index );
int GetChordKey();
void __fastcall MainKeyClick( TObject* Sender );
void __fastcall AdjustKeyClick( TObject* Sender );
void __fastcall ChordTypeClick( TObject* Sender );
void __fastcall KeyModeClick( TObject* Sender );
protected:
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP(TToolpalPanel)
virtual void __fastcall CreateWnd();
public:
__fastcall virtual TChordPanel(System::Classes::TComponent* AOwner);
__fastcall ~TChordPanel();
void SetKeyMode( bool bAlpha );
void __fastcall SetMelodyKey( int iKey );
void __fastcall SetContentPanel( TContentPanel* pPanel ){ m_pContentPanel=pPanel; };
void __fastcall SetChord( int iMainKey, int iAdjustKey, int iChordType );
void __fastcall EnableChordModify( bool bEnable, int iBarKey, int iChordKey, int iChordType );
};
//---------------------------------------------------------------------------
#endif
+427
View File
@@ -0,0 +1,427 @@
//---------------------------------------------------------------------------
#ifndef ComboBoxComponentH
#define ComboBoxComponentH
#include <vcl.h>
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.pnglang.hpp>
#include <Vcl.Graphics.hpp>
//---------------------------------------------------------------------------
class TDropListScrollBar;
class TComboBoxItem;
class TDropListView;
class CBCapButton;
//---------------------------------------------------------------------------
/* 定义下拉列表项点击事件 */
typedef void __fastcall (__closure *TItemClickEvent)(TComboBoxItem* Sender, int Index);
/* 下拉列表框显示风格 */
enum DECLSPEC_DENUM TComboBoxMode : unsigned char {cbShowUp, cbShowDown};
//typedef System::Set<ComboBox_Mode, ComboBox_Mode::cbShowUp, ComboBox_Mode::cbShowDown> TComboBoxMode;
/* 定义下拉列表框变化事件 */
typedef void __fastcall (__closure *TComboBoxChangeEvent)(TComboBoxItem* Sender, int Index);
/**************************************************************************************************/
/**************************************************************************************************/
class TDropListScrollBar : public TScrollBar
{
private:
// int m_nTileHeight, //add by tj 2013/11/18
int m_nThumbHeight,
m_nThumbTop,
m_nPreThumbTop,
m_nDragPos,
m_nDragPoint,
m_iClicked,
m_iHitPrev,
m_nMax,
m_nMin,
m_nPos,
m_nPage,
m_nTrackPos;
bool m_bPause,
m_bNotify,
m_bDrag,
m_bTrace;
TBitmap *u_pPicLineUp,
*u_pPicLineDown;
TTimer *m_pTimer;
TCanvas *m_pCanvas;
int HitTest( int X, int Y );
void CalcThumbHeight();
void CalcThumbTop();
void DrawArrow( int iDirection, int iState );
void DrawThumb( int iState, bool bEraseBk, int iPageUD=-1 );
void __fastcall TimerProc(TObject* Sender);
MESSAGE void __fastcall WMPaint(Winapi::Messages::TWMPaint &Message);
MESSAGE void __fastcall WMLButtonDown(TWMMouse &Message);
MESSAGE void __fastcall WMLButtonUp(TWMMouse &Message);
MESSAGE void __fastcall WMLButtonDblClk(TWMMouse &Message);
MESSAGE void __fastcall WMRButtonDown(TWMMouse &Message); //add by tj 2013/11/18
MESSAGE void __fastcall WMRButtonUp(TWMMouse &Message); //add by tj 2013/11/18
MESSAGE void __fastcall WMMouseMove(TWMMouse &Message);
// MESSAGE void __fastcall CMMouseLeave(TMessage &Message); //add by tj 2013/11/25 12:35
MESSAGE void __fastcall SBMSetScrollInfo(TMessage &Message);
MESSAGE void __fastcall SBMGetScrollInfo(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_PAINT, TWMPaint, WMPaint)
MESSAGE_HANDLER(WM_LBUTTONDOWN, TWMLButtonDown, WMLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONUP, TWMLButtonUp, WMLButtonUp)
MESSAGE_HANDLER(WM_LBUTTONDBLCLK, TWMLButtonDblClk, WMLButtonDblClk)
MESSAGE_HANDLER(WM_RBUTTONDOWN, TWMRButtonDown, WMRButtonDown)
MESSAGE_HANDLER(WM_RBUTTONUP, TWMRButtonUp, WMRButtonUp) //add by tj 2013/11/18
MESSAGE_HANDLER(WM_MOUSEMOVE, TWMMouseMove, WMMouseMove) //add by tj 2013/11/18
// MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave) //add by tj 2013/11/25 12:35
MESSAGE_HANDLER(SBM_SETSCROLLINFO, TMessage, SBMSetScrollInfo)
MESSAGE_HANDLER(SBM_GETSCROLLINFO, TMessage, SBMGetScrollInfo)
END_MESSAGE_MAP(TScrollBar)
protected:
virtual void __fastcall PaintWindow(HDC DC);
public:
TWinControl *m_pWndCtrl;
bool m_bAction;
__fastcall virtual TDropListScrollBar(System::Classes::TComponent* AOwner);
__fastcall ~TDropListScrollBar();
void __fastcall CMMouseLeave(TObject *Sender); //add by tj 2013/11/25 12:35
bool IsDraging(){ return m_bDrag; };
void __fastcall SetPosition(int Value, bool bRedraw=true);
void __fastcall SetPageSize(int Value, bool bRedraw=true);
void __fastcall SetRange(int AMin, int AMax, bool bRedraw=true);
void __fastcall GetScrollRange(int* nMin, int* nMax);
int __fastcall GetScrollPos();
int __fastcall GetPageSize();
};
/**************************************************************************************************/
/**************************************************************************************************/
class TComboBoxItem : public TObject
{
private:
int FTag;
String FCaption;
TItemClickEvent FOnItemClick;
void __fastcall SetCaption(String Caption);
public:
__fastcall TComboBoxItem(String Caption, TItemClickEvent OnItemClick);
void __fastcall DrawItem(TCanvas *Canvas, TRect Rect, bool Selected);
__published:
__property String Caption = {read = FCaption, write = FCaption};
__property int Tag = {read = FTag, write = FTag};
__property TItemClickEvent OnItemClicked = {read = FOnItemClick, write = FOnItemClick};
};
// ---------------------------------------------------------------------------
// TDropListView
// ---------------------------------------------------------------------------
class TDropListView : public TWinControl
{
private:
TNotifyEvent FOnHide, // 下拉列表隐藏事件
FOnShow; // 下拉列表显示事件
int FItemHeight,
FItemWidth,
FShowItemsCount,
FDefItemIndex;
TControlCanvas *m_Canvas;
TList *m_ItemRectList,
*m_ItemList;
TDropListScrollBar *m_ScrollBar;
HWND m_pActiveWnd;
int m_BeginIndex,
m_EndIndex,
m_CurrentItemIndex,
m_RealShowCount,
m_MouseX,
m_MouseY;
void __fastcall CreateScrollBar();
void __fastcall DoItemsCountChange();
void __fastcall DoItemClicked(int Index);
void __fastcall DoItemSelect(int Index);
void __fastcall DoKeyUpDown(int Index);
void __fastcall DoShowItemsChange();
int __fastcall CalcListHeight();
int __fastcall GetItemsCount();
TRect *__fastcall GetItemRect(int Index);
void __fastcall SetShowItemsCount(int Value);
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMKeyDown(TWMKeyDown &Message);
MESSAGE void __fastcall WMKillFocus(TMessage &Message);
MESSAGE void __fastcall WMLButtonDown(TWMLButtonDown &Message);
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
MESSAGE void __fastcall WMPaint(TWMPaint &Message);
MESSAGE void __fastcall WMSetFocus(TMessage &Message);
MESSAGE void __fastcall WMVScroll(TWMScroll &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(CN_KEYDOWN, TWMKeyDown, WMKeyDown)
MESSAGE_HANDLER(WM_KILLFOCUS, TMessage, WMKillFocus)
MESSAGE_HANDLER(WM_LBUTTONDOWN, TWMLButtonDown, WMLButtonDown)
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
MESSAGE_HANDLER(WM_PAINT, TWMPaint, WMPaint)
MESSAGE_HANDLER(WM_SETFOCUS, TMessage, WMSetFocus)
MESSAGE_HANDLER(WM_VSCROLL, TWMScroll, WMVScroll)
END_MESSAGE_MAP(TWinControl)
protected:
virtual void __fastcall CreateParams(TCreateParams &Params);
virtual void __fastcall CreateWnd();
virtual void __fastcall PaintWindow(HDC DC);
DYNAMIC void __fastcall MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseMove(TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);
public:
__fastcall TDropListView(TComponent *Owner);
__fastcall ~TDropListView();
void __fastcall AddItem(TComboBoxItem* Item);
void __fastcall Clear();
TComboBoxItem *__fastcall GetItem(int Index);
void __fastcall Hide();
void __fastcall RemoveItem(int Index);
void __fastcall ScrollPos(int Pos);
void __fastcall Show();
void __fastcall SetFontSize(int sz);
void __fastcall SetFont(String name, int sz);
__published:
__property int ListHeight = {read = CalcListHeight};
__property int ItemHeight = {write = FItemHeight, read = FItemHeight, default = 16};
__property TNotifyEvent OnHide = {write = FOnHide, read = FOnHide};
__property TNotifyEvent OnShow = {write = FOnShow, read = FOnShow};
__property int ShowItemsCount = {write = SetShowItemsCount, read = FShowItemsCount};
__property int DefItemIndex = {read = FDefItemIndex, write = FDefItemIndex};
__property int ItemsCount = {read = GetItemsCount};
};
/**************************************************************************************************/
/**************************************************************************************************/
class CBCapButton : public TGraphicControl
{
public:
enum TModalResult{
mrNone = System::Int8(0x0),
mrOk = System::Int8(0x1),
mrCancel = System::Int8(0x2),
mrAbort = System::Int8(0x3),
mrRetry = System::Int8(0x4),
mrIgnore = System::Int8(0x5),
mrYes = System::Int8(0x6),
mrNo = System::Int8(0x7),
mrClose = System::Int8(0x8),
mrHelp = System::Int8(0x9),
mrTryAgain = System::Int8(0xa),
mrContinue = System::Int8(0xb),
mrAll = System::Int8(0xc),
mrNoToAll = System::Int8(0xd),
mrYesToAll = System::Int8(0xe)
};
private:
COLORREF
clrFrameExNormal,
clrFrameExEnter,
clrFrameExDisable,
clrFrameNormal,
clrLineNormal,
clrRectNormal,
clrRectDisable,
clrCapArrowOpenBound[10],
clrCapArrowOpenLine[4],
clrExFrameBound[4],
clrExFrameBoundDisable[4];
TColor FBorderColor;
TColor FInterFrameColor;
TColor FInterColor;
void __fastcall IniColor(int nstate);
COLORREF __fastcall TransformColor(COLORREF icolor, int nNum=0, bool bplus=true);
void __fastcall SetBorderColor(TColor iBorderColor);
void __fastcall SetInterFrameColor(TColor iInterFrameColor);
void __fastcall SetInterColor(TColor iInterColor);
TNotifyEvent FOnMouseEnter;//on mouse enter notify event
TNotifyEvent FOnMouseLeave;//on mouse leave notify event
String FCaption;
// System::Uitypes::TModalResult FModalResult;
TModalResult FModalResult;
void __fastcall SetCaption(String Value);
MESSAGE void __fastcall CMMouseEnter(Winapi::Messages::TMessage &Msg); // to know when mouse is entered
MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Msg); // to know when mouse is leaved
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
END_MESSAGE_MAP(TGraphicControl)
protected:
bool FEnablePNG; //是否加载了png格式图片背景
bool FDown; // value to know if we painting mouse down
int EtatBtn; // 0=Normal 1=Mouse entered 2=Pressed 3=Disabled
int FStateCount;
Vcl::Imaging::Pngimage::TPngImage *FPngImg; //our 4 states image
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall SetEnabled(bool Value);
public:
__fastcall virtual CBCapButton(System::Classes::TComponent* AOwner);
__fastcall virtual ~CBCapButton(void);
void __fastcall SetStateCount( int count );
void __fastcall SetPngImg(Vcl::Imaging::Pngimage::TPngImage *value); // we set the png image
void __fastcall SetDown(bool value); // to know if mouse is down or not
void __fastcall SetEnablePNG(bool Value);// to know if customer set png img
virtual void __fastcall SetFontSize( int value );
virtual void __fastcall SetFont( String name, int sz );
virtual void __fastcall Paint(void); // override the painting of the component
DYNAMIC void __fastcall Click(void);
__published:
__property Action;
__property Anchors = {default=3};
__property bool Down = {read=FDown, write=SetDown, default=False};
__property Enabled = {default=1};
__property int ImgStates = {read=FStateCount, write=SetStateCount, default=4};
// __property System::Uitypes::TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property ParentShowHint = {default=1};
__property Vcl::Imaging::Pngimage::TPngImage *PngImg = {read=FPngImg, write=SetPngImg};
__property PopupMenu;
__property ShowHint;
__property Visible = {default=1};
__property OnClick;
__property OnContextPopup;
__property OnMouseDown;
__property OnMouseMove;
__property OnMouseUp;
__property System::Classes::TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter};
__property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave};
__property bool EnablePNG = {read=FEnablePNG, write=SetEnablePNG, default=False};
__property TColor BorderColor = {read=FBorderColor, write=SetBorderColor, default=TColor(0x83807d)};
__property TColor InterFrameColor = {read=FInterFrameColor, write=SetInterFrameColor, default=TColor(0x302e2c)};
__property TColor InterColor = {read=FInterColor, write=SetInterColor, default=TColor(0x58504a)};
private:
Vcl::Imaging::Pngimage::TPngImage *m_pPngButton, *m_pPngFoucusButton;
Vcl::Imaging::Pngimage::TPngImage *pTmpDraw, *pTmpFoucusDraw;
void __fastcall PaintCustomer(void);
void __fastcall PaintCustomerText(void);
public:
TRect rtCaption;
__published:
__property int FontSize = {write=SetFontSize, default=8};
__property String Caption = {read=FCaption, write=SetCaption};
};
/**************************************************************************************************/
/**************************************************************************************************/
class PACKAGE TComboBoxComponent : public CBCapButton
{
private:
TComboBoxChangeEvent FOnChange; // ComboBox变化事件
int FItemHeight,
FShowItemCount;
TComboBoxMode FShowMode;
TDropListView *m_DropListView; // 定义下拉列表框
bool m_IsMouseOver;
int m_ClickStat; // .....
void __fastcall DoItemClick(TComboBoxItem *Sender, int Index);
// 处理下拉列表隐藏、显示事件
void __fastcall DoDropListShow(TObject *Sender);
void __fastcall DoDropListHide(TObject *Sender);
int __fastcall GetDefaultItem();
int __fastcall GetItemsCount();
void __fastcall SetDefaultItem(int Value);
void __fastcall SetItemHeight(int Value);
void __fastcall SetShowItemCount(int Value);
void __fastcall SetShowMode(TComboBoxMode Value);
void __fastcall DoMouseEnter(TObject *Sender);
void __fastcall DoMouseLeave(TObject *Sender);
//MESSAGE void __fastcall CMMouseEnter(TMessage &Message);
//MESSAGE void __fastcall CMMouseLeave(TMessage &Message);
//BEGIN_MESSAGE_MAP
// MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
// MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
//END_MESSAGE_MAP(CBCapButton)
protected:
DYNAMIC void __fastcall MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);
virtual void __fastcall SetParent(TWinControl* AParent);
public:
__fastcall TComboBoxComponent(TComponent *Owner);
__fastcall ~TComboBoxComponent();
TComboBoxItem * __fastcall AddItem(String Caption);
void __fastcall Clear();
void __fastcall RemoveItem(int Index);
TComboBoxItem * __fastcall GetItem(int Index);
virtual void __fastcall SetFontSize( int value );
virtual void __fastcall SetFont( String name, int size );
__property int DefItemIndex = {read = GetDefaultItem, write = SetDefaultItem};
__property int ItemsCount = {read = GetItemsCount};
__published:
__property TComboBoxChangeEvent OnChange = {read = FOnChange, write = FOnChange};
__property int ItemHeight = {read = FItemHeight, write = SetItemHeight, default = 20};
__property int ShowItemCount = {read = FShowItemCount, write = SetShowItemCount, default = 10};
__property TComboBoxMode ShowMode = {read = FShowMode, write = SetShowMode, default = cbShowDown};
__property TWinControl* Parent = {read=FParent, write=SetParent};
};
/**************************************************************************************************/
/**************************************************************************************************/
#endif
File diff suppressed because it is too large Load Diff
+139
View File
@@ -0,0 +1,139 @@
//---------------------------------------------------------------------------
#ifndef CapButtonH
#define CapButtonH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.pnglang.hpp>
#include <Vcl.Graphics.hpp>
//---------------------------------------------------------------------------
class PACKAGE TCapButton : public TGraphicControl
{
public:
enum TModalResult{
mrNone = System::Int8(0x0),
mrOk = System::Int8(0x1),
mrCancel = System::Int8(0x2),
mrAbort = System::Int8(0x3),
mrRetry = System::Int8(0x4),
mrIgnore = System::Int8(0x5),
mrYes = System::Int8(0x6),
mrNo = System::Int8(0x7),
mrClose = System::Int8(0x8),
mrHelp = System::Int8(0x9),
mrTryAgain = System::Int8(0xa),
mrContinue = System::Int8(0xb),
mrAll = System::Int8(0xc),
mrNoToAll = System::Int8(0xd),
mrYesToAll = System::Int8(0xe)
};
private:
COLORREF
clrFrameExNormal,
clrFrameExEnter,
clrFrameExDisable,
clrFrameNormal,
clrLineNormal,
clrRectNormal,
clrRectDisable,
clrCapArrowOpenBound[10],
clrCapArrowOpenLine[4],
clrExFrameBound[4],
clrExFrameBoundDisable[4];
TColor FBorderColor;
TColor FInterFrameColor;
TColor FInterColor;
void __fastcall IniColor(int nstate);
COLORREF __fastcall TransformColor(COLORREF icolor, int nNum=0, bool bplus=true);
void __fastcall SetBorderColor(TColor iBorderColor);
void __fastcall SetInterFrameColor(TColor iInterFrameColor);
void __fastcall SetInterColor(TColor iInterColor);
private:
String FCaption;
TNotifyEvent FOnMouseEnter;//on mouse enter notify event
TNotifyEvent FOnMouseLeave;//on mouse leave notify event
// System::Uitypes::TModalResult FModalResult;
TModalResult FModalResult;
int __fastcall GetFontSize();
MESSAGE void __fastcall CMMouseEnter(Winapi::Messages::TMessage &Msg); // to know when mouse is entered
MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Msg); // to know when mouse is leaved
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
END_MESSAGE_MAP(TGraphicControl)
protected:
bool FEnablePNG; //是否加载了png格式图片背景
bool FDown; // value to know if we painting mouse down
int EtatBtn; // 0=Normal 1=Mouse entered 2=Pressed 3=Disabled
int FStateCount;
Vcl::Imaging::Pngimage::TPngImage *FPngImg; //our 4 states image
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall SetEnabled(bool Value);
public:
__fastcall virtual TCapButton(System::Classes::TComponent* AOwner);
__fastcall virtual ~TCapButton(void);
void __fastcall SetStateCount( int count );
void __fastcall SetPngImg(Vcl::Imaging::Pngimage::TPngImage *value); // we set the png image
void __fastcall SetDown(bool value); // to know if mouse is down or not
void __fastcall SetEnablePNG(bool Value);// to know if customer set png img
void __fastcall SetCaption(String Value);
virtual void __fastcall Paint(void); // override the painting of the component
DYNAMIC void __fastcall Click(void);
__published:
__property Action;
__property Anchors = {default=3};
__property bool Down = {read=FDown, write=SetDown, default=False};
__property Enabled = {default=1};
__property int ImgStates = {read=FStateCount, write=SetStateCount, default=4};
// __property System::Uitypes::TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property ParentShowHint = {default=1};
__property Vcl::Imaging::Pngimage::TPngImage *PngImg = {read=FPngImg, write=SetPngImg};
__property PopupMenu;
__property ShowHint;
__property Visible = {default=1};
__property OnClick;
__property OnContextPopup;
__property OnMouseDown;
__property OnMouseMove;
__property OnMouseUp;
__property System::Classes::TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter};
__property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave};
__property bool EnablePNG = {read=FEnablePNG, write=SetEnablePNG, default=False};
__property TColor BorderColor = {read=FBorderColor, write=SetBorderColor, default=TColor(0x83807d)};
__property TColor InterFrameColor = {read=FInterFrameColor, write=SetInterFrameColor, default=TColor(0x302e2c)};
__property TColor InterColor = {read=FInterColor, write=SetInterColor, default=TColor(0x58504a)};
private:
Vcl::Imaging::Pngimage::TPngImage *m_pPngButton, *m_pPngFoucusButton;
Vcl::Imaging::Pngimage::TPngImage *pTmpDraw, *pTmpFoucusDraw;
void __fastcall PaintCustomer(void);
void __fastcall PaintCustomerText(void);
public:
TRect rtCaption;
void __fastcall SetFontSize( int value );
void __fastcall SetFont(String name, int size );
__published:
__property String Caption = {read=FCaption, write=FCaption};
__property int FontSize = {read=GetFontSize, write=SetFontSize, default=8};
};
//---------------------------------------------------------------------------
#endif
+17
View File
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
+664
View File
@@ -0,0 +1,664 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CKBox.h"
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
static inline void ValidCtrCheck(TCKBox *)
{
new TCKBox(NULL);
}
#define BOX_RECT RGB( 145, 156, 170 )
#define CLR_ENABLED RGB( 100, 108, 119 )
#define CLR_ENABLED_1 RGB( 119, 129, 130 )
#define CLR_CAPTION RGB( 172, 184, 200 )
#define RET_LEFT 4
#define RET_W 10
#define CLR_RECT_1_1 RGB( 100, 108, 119 ) //bMouse 内条
#define CLR_RECT_1_2 RGB( 87,96,111 )
//#define CLR_RECT_2_1 RGB( 102,113,130 ) // bMouse&&!FCheck
//#define CLR_RECT_2_2 RGB( 43,46,51 ) //Check
//#define CLR_RECT_2_3 RGB( 77,85,100 ) //Nor
#define MIN_H 6
#define MIN_W 11
const static char pngImageCheck[] = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,
0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x0c,0x00,
0x00,0x00,0x0b,0x08,0x06,0x00,0x00,0x00,0x4b,0x70,
0x6c,0x5f,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,
0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,
0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4d,0x69,0x43,0x43,
0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,
0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69,
0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x77,0x58,
0x93,0xf7,0x16,0x3e,0xdf,0xf7,0x65,0x0f,0x56,0x42,
0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x00,0x22,0x23,0xac,
0x08,0xc8,0x10,0x59,0xa2,0x10,0x92,0x00,0x61,0x84,
0x10,0x12,0x40,0xc5,0x85,0x88,0x0a,0x56,0x14,0x15,
0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0x0a,0x48,0x9d,
0x88,0xe2,0xa0,0x28,0xb8,0x67,0x41,0x8a,0x88,0x5a,
0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d,
0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,
0xe7,0xfc,0xce,0x79,0xcf,0x0f,0x80,0x11,0x12,0x26,
0x91,0xe6,0xa2,0x6a,0x00,0x39,0x52,0x85,0x3c,0x3a,
0xd8,0x1f,0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x02,
0x15,0x48,0xe0,0x04,0x20,0x10,0xe6,0xcb,0xc2,0x67,
0x05,0xc5,0x00,0x00,0xf0,0x03,0x79,0x78,0x7e,0x74,
0xb0,0x3f,0xfc,0x01,0xaf,0x6f,0x00,0x02,0x00,0x70,
0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50,
0x26,0x57,0x00,0x20,0x91,0x00,0xe0,0x22,0x12,0xe7,
0x0b,0x01,0x90,0x52,0x00,0xc8,0x2e,0x54,0xc8,0x14,
0x00,0xc8,0x18,0x00,0xb0,0x53,0xb3,0x64,0x0a,0x00,
0x94,0x00,0x00,0x6c,0x79,0x7c,0x42,0x22,0x00,0xaa,
0x0d,0x00,0xec,0xf4,0x49,0x3e,0x05,0x00,0xd8,0xa9,
0x93,0xdc,0x17,0x00,0xd8,0xa2,0x1c,0xa9,0x08,0x00,
0x8d,0x01,0x00,0x99,0x28,0x47,0x24,0x02,0x40,0xbb,
0x00,0x60,0x55,0x81,0x52,0x2c,0x02,0xc0,0xc2,0x00,
0xa0,0xac,0x40,0x22,0x2e,0x04,0xc0,0xae,0x01,0x80,
0x59,0xb6,0x32,0x47,0x02,0x80,0xbd,0x05,0x00,0x76,
0x8e,0x58,0x90,0x0f,0x40,0x60,0x00,0x80,0x99,0x42,
0x2c,0xcc,0x00,0x20,0x38,0x02,0x00,0x43,0x1e,0x13,
0xcd,0x03,0x20,0x4c,0x03,0xa0,0x30,0xd2,0xbf,0xe0,
0xa9,0x5f,0x70,0x85,0xb8,0x48,0x01,0x00,0xc0,0xcb,
0x95,0xcd,0x97,0x4b,0xd2,0x33,0x14,0xb8,0x95,0xd0,
0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c,
0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x09,0xe4,0x22,
0x9c,0x97,0x9b,0x23,0x13,0x48,0xe7,0x03,0x4c,0xce,
0x0c,0x00,0x00,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,
0x90,0xe7,0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,
0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22,0x3e,0x21,
0xf1,0xdf,0xfe,0xbc,0x8c,0x02,0x04,0x00,0x10,0x4e,
0xcf,0xef,0xda,0x5f,0xe5,0xe5,0xd6,0x03,0x70,0xc7,
0x01,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x00,0xda,0x56,
0x00,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x09,0xa0,0x5a,
0x0a,0xd0,0x7a,0xf9,0x8b,0x79,0x38,0xfc,0x40,0x1e,
0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0x0a,0x0b,0x0b,
0xed,0x25,0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,
0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc,0x40,0x1e,
0xfe,0xdb,0x7a,0xf0,0x00,0x71,0x9a,0x40,0x99,0xad,
0xc0,0xa3,0x83,0xfd,0x71,0x61,0x6e,0x76,0xae,0x52,
0x8e,0xe7,0xcb,0x04,0x42,0x31,0x6e,0xf7,0xe7,0x23,
0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,
0xb1,0x5c,0x2c,0x15,0x8a,0xf1,0x58,0x89,0xb8,0x50,
0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,
0x95,0xe2,0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,
0x09,0x93,0x77,0x0d,0x00,0xac,0x86,0x4f,0xc0,0x4e,
0xb6,0x07,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x01,0x02,
0x8b,0x0e,0x58,0xd2,0x76,0x00,0x40,0x7e,0xf3,0x2d,
0x8c,0x1a,0x0b,0x91,0x00,0x10,0x67,0x34,0x32,0x79,
0xf7,0x00,0x00,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x01,
0x00,0xcd,0x97,0xa4,0xe3,0x00,0x00,0xbc,0xe8,0x18,
0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x08,0x00,0x00,0x44,
0xa0,0x81,0x2a,0xb0,0x41,0x07,0x0c,0xc1,0x14,0xac,
0xc0,0x0e,0x9c,0xc1,0x1d,0xbc,0xc0,0x17,0x02,0x61,
0x06,0x44,0x40,0x0c,0x24,0xc0,0x3c,0x10,0x42,0x06,
0xe4,0x80,0x1c,0x0a,0xa1,0x18,0x96,0x41,0x19,0x54,
0xc0,0x3a,0xd8,0x04,0xb5,0xb0,0x03,0x1a,0xa0,0x11,
0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0x0d,0xe7,0xe0,
0x12,0x5c,0x81,0xeb,0x70,0x17,0x06,0x60,0x18,0x9e,
0xc2,0x18,0xbc,0x86,0x09,0x04,0x41,0xc8,0x08,0x13,
0x61,0x21,0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,
0x08,0x17,0x99,0x8e,0x04,0x22,0x61,0x48,0x34,0x92,
0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,
0x72,0xa4,0x02,0xa9,0x42,0x6a,0x91,0x5d,0x48,0x23,
0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90,
0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,
0x94,0x81,0xb2,0x51,0x03,0xd4,0x02,0x75,0x40,0xb9,
0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,
0x0f,0x5d,0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,
0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8,0x75,0x74,
0x00,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0x0e,0x66,
0x8c,0xd9,0x61,0x5c,0x8c,0x87,0x45,0x60,0x89,0x58,
0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f,
0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,
0x61,0xef,0x08,0x24,0x02,0x8b,0x80,0x13,0xec,0x08,
0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,
0x4c,0x58,0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,
0x08,0x57,0x09,0x83,0x84,0x31,0xc2,0x27,0x22,0x93,
0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,
0x3a,0xb1,0x90,0x58,0x46,0xac,0x26,0xee,0x21,0x1e,
0x21,0x9e,0x25,0x5e,0x27,0x0e,0x13,0x5f,0x93,0x48,
0x24,0x0e,0xc9,0x92,0xe4,0x4e,0x0a,0x21,0x25,0x90,
0x32,0x49,0x0b,0x49,0x6b,0x48,0xdb,0x48,0x2d,0xa4,
0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,
0x90,0x6d,0xc9,0xde,0xe4,0x08,0xb2,0x80,0xac,0x20,
0x97,0x91,0xb7,0x90,0x0f,0x90,0x4f,0x92,0xfb,0xc9,
0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x09,
0xa2,0x24,0x52,0xa4,0x94,0x12,0x4a,0x35,0x65,0x3f,
0xe5,0x04,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51,
0xcd,0xa9,0x9e,0xd4,0x08,0xaa,0x88,0x3a,0x9f,0x5a,
0x49,0x6d,0xa0,0x76,0x50,0x2f,0x53,0x87,0xa9,0x13,
0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,
0x2d,0xa3,0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,
0x2f,0xe9,0x74,0xba,0x09,0xdd,0x83,0x1e,0x45,0x97,
0xd0,0x97,0xd2,0x6b,0xe8,0x07,0xe9,0xe7,0xe9,0x83,
0xf4,0x77,0x0c,0x0d,0x86,0x0d,0x83,0xc7,0x48,0x62,
0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19,
0x2f,0x99,0x4c,0xa6,0x05,0xd3,0x97,0x99,0xc8,0x54,
0x30,0xd7,0x32,0x1b,0x99,0x67,0x98,0x0f,0x98,0x6f,
0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,
0x95,0x3a,0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,
0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0x0b,0x54,0xab,
0x55,0x0f,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,
0x50,0xe3,0xa9,0x09,0xd4,0x16,0xab,0xd5,0xa9,0x1d,
0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f,
0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,
0x63,0x0d,0xb2,0x86,0x85,0x46,0xa0,0x86,0x48,0xa3,
0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,
0x65,0xf1,0x58,0x42,0xd6,0x72,0x56,0x03,0xeb,0x2c,
0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec,0x4c,0x76,
0x05,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,
0xaa,0x66,0xac,0x66,0x91,0x66,0x9d,0xe6,0x71,0xcd,
0x01,0x0e,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a,
0xce,0x21,0xce,0x0d,0xce,0x7b,0x2d,0x03,0x2d,0x3f,
0x2d,0xb1,0xd6,0x6a,0xad,0x66,0xad,0x7e,0xad,0x37,
0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,
0xed,0xeb,0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,
0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x09,0xba,0x36,
0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,
0xd3,0x63,0xeb,0x79,0xe9,0x09,0xf5,0xca,0xf5,0x0e,
0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17,
0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x08,
0x36,0x90,0x19,0x6c,0x31,0x38,0x63,0xf0,0xcc,0x90,
0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,
0xa8,0x11,0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,
0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67,0xe3,0x35,
0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,
0xde,0x65,0xdc,0x6b,0x3c,0x61,0x62,0x69,0x32,0xdb,
0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b,
0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,
0x2c,0xdc,0xac,0xd8,0xac,0xc9,0xec,0x8e,0x39,0xd5,
0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,
0x85,0xa5,0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,
0x96,0xda,0x96,0x7c,0xcb,0x05,0x96,0x4d,0x96,0xf7,
0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,
0xac,0x49,0xd6,0x5c,0xeb,0x2c,0xeb,0x6d,0xd6,0x57,
0x6c,0x50,0x1b,0x57,0x9b,0x0c,0x9b,0x3a,0x9b,0xcb,
0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,
0x14,0xe2,0x14,0x8f,0x29,0xd2,0x29,0xf5,0x53,0x6e,
0xda,0x31,0xec,0xfc,0xec,0x0a,0xec,0x9a,0xec,0x06,
0xed,0x39,0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,
0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74,0x3b,0x7c,
0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,
0xe1,0x34,0xc3,0xa9,0xc4,0xa9,0xc3,0xe9,0x57,0x67,
0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b,
0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,
0x8a,0xa7,0x6e,0x9f,0x7a,0xcb,0x95,0xe5,0x1a,0xee,
0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,
0xad,0xd9,0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,
0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3,0x3d,0xef,
0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,
0xa7,0x9b,0xa7,0xc2,0xf3,0x90,0xe7,0x2f,0x5e,0x76,
0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26,
0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,
0xcb,0x7b,0x60,0x3a,0x3e,0x3d,0x65,0xfa,0xce,0xe9,
0x03,0x3e,0xc6,0x3e,0x02,0x9f,0x7a,0x9f,0x87,0xbe,
0xa6,0xbe,0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,
0x99,0x7e,0x07,0xfc,0x9e,0xfb,0x3b,0xfa,0xcb,0xfd,
0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x05,
0x60,0x01,0xc1,0x01,0xe5,0x01,0xbd,0x81,0x1a,0x81,
0xb3,0x03,0x6b,0x03,0x1f,0x04,0x99,0x04,0xa5,0x07,
0x35,0x05,0x8d,0x05,0xbb,0x06,0x2f,0x0c,0x3e,0x15,
0x42,0x0c,0x09,0x0d,0x59,0x1f,0x72,0x93,0x6f,0xc0,
0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,
0xd1,0x15,0xca,0x08,0x9d,0x15,0x5a,0x1b,0xfa,0x30,
0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86,0xcf,0x08,
0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,
0x08,0x88,0xe0,0x47,0x6c,0x88,0xb8,0x1f,0x69,0x19,
0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e,
0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,
0xac,0xe4,0x59,0xfb,0x67,0xbd,0x8e,0xf1,0x8f,0xa9,
0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,
0x6a,0x6c,0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,
0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1,0x97,0x12,
0x74,0x13,0x24,0x09,0xed,0x89,0xe4,0xc4,0xd8,0xc4,
0x3d,0x89,0xe3,0x73,0x02,0xe7,0x6c,0x9a,0x33,0x9c,
0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2,
0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,
0x35,0x59,0x90,0x7c,0x38,0x85,0x98,0x12,0x97,0xb2,
0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,
0xa7,0x6e,0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,
0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7,0xb8,0x4a,
0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,
0x7d,0x43,0xfa,0x68,0x86,0x4f,0x46,0x75,0xc6,0x33,
0x09,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23,
0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,
0xd9,0x2d,0x39,0x94,0x9c,0x94,0x9c,0xa3,0x52,0x0d,
0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,
0x66,0x2b,0x2b,0x93,0x0d,0xe4,0x79,0xe6,0x6d,0xca,
0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9,0x73,0xf3,
0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,
0x50,0x0e,0x16,0x4c,0x2f,0xa8,0x2b,0x78,0x5b,0x18,
0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf,
0x66,0xfe,0xea,0xf9,0x23,0x0b,0x82,0x16,0x7c,0xbd,
0x90,0xb0,0x50,0xb8,0xb0,0xb3,0xd8,0xb8,0x78,0x59,
0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,
0x17,0x77,0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,
0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96,0xfd,0x50,
0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,
0x52,0x83,0xd2,0xa5,0xa5,0x43,0x2b,0x82,0x57,0x34,
0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9,
0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,
0x5b,0x56,0x7f,0x2a,0x17,0x95,0x5f,0xac,0x70,0xac,
0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,
0x5f,0xd5,0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,
0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb,0x6e,0xac,
0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,
0x86,0xf0,0x0d,0xad,0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,
0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd,
0xb4,0xcd,0xca,0xcd,0x03,0x35,0x61,0x35,0xed,0x5b,
0xcc,0xb6,0xac,0xdb,0xf2,0xa1,0x36,0xa3,0xf6,0x7a,
0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,
0xd9,0x26,0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0x0e,
0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec,0xbc,0xb5,
0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,
0xee,0x82,0xdd,0x8f,0x1a,0x62,0x1b,0xba,0xbf,0xe6,
0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b,
0xa5,0x7b,0x07,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,
0x6c,0xdc,0xaf,0xbf,0xbf,0xb2,0x09,0x6d,0x52,0x36,
0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,
0x9b,0xed,0x9a,0x77,0xb5,0x70,0x5a,0x2a,0x0e,0xc2,
0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b,0xe3,0x50,
0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,
0xb7,0xf5,0x08,0xeb,0x48,0x79,0x2b,0xd2,0x3a,0xbf,
0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef,
0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,
0xff,0x7e,0xef,0x31,0xe3,0x63,0x75,0xc7,0x35,0x8f,
0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,
0x93,0xe3,0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,
0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99,0x6b,0x5d,
0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,
0xee,0x4c,0xb7,0x5f,0xf7,0xc9,0xf3,0xde,0xe7,0x8f,
0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25,
0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,
0xe1,0x48,0xaf,0x5b,0x6f,0xeb,0x65,0xf7,0xcb,0xed,
0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,
0xd3,0x7f,0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,
0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec,0x1b,0xb7,
0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,
0xf6,0xed,0x17,0x77,0x0a,0xee,0x4c,0xdc,0x5d,0x7a,
0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x07,0xfa,
0x0f,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,
0xf8,0x60,0xc0,0x60,0xcf,0xc3,0x59,0x0f,0xef,0x0e,
0x09,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,
0x47,0xcc,0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,
0x1f,0x1f,0x1b,0x0d,0x1a,0xbd,0xf2,0x64,0xce,0x93,
0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,
0x79,0xeb,0x73,0xab,0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,
0xcf,0x58,0xfc,0xd8,0xf0,0x0b,0xf9,0x8b,0xcf,0xbf,
0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,
0xc7,0x23,0xc7,0x1f,0xbc,0xce,0x79,0x3d,0xf1,0xa6,
0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,
0xc7,0xbd,0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,
0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7,0x3e,0xe7,
0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,
0x9f,0x33,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,
0x00,0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,
0xf9,0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,
0x00,0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,
0x17,0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0xd8,
0x49,0x44,0x41,0x54,0x78,0xda,0x8c,0xd1,0xbd,0x4a,
0xc4,0x60,0x10,0x85,0xe1,0x27,0x59,0x1b,0x51,0xb4,
0x12,0x94,0x05,0xc1,0x72,0x83,0x16,0x09,0x9a,0xb4,
0x6a,0x65,0x25,0x6c,0x25,0x78,0x0d,0x56,0xbb,0x95,
0xa5,0x9d,0x95,0x8d,0x20,0x78,0x03,0x62,0xab,0x78,
0x07,0x56,0x69,0xd2,0x2c,0x04,0xaf,0x62,0x5b,0xcb,
0xcf,0x26,0x81,0xcf,0x1f,0x88,0x03,0x53,0x9c,0xe1,
0x9d,0x19,0xe6,0x4c,0x12,0x42,0x30,0x14,0x59,0x51,
0x9d,0xe2,0x0d,0xaf,0xe9,0x3f,0xe0,0xb2,0x83,0x57,
0xb1,0x4c,0x07,0xe0,0x4d,0x3c,0x77,0x30,0x6c,0x0f,
0x6d,0x78,0xc4,0x5e,0xa4,0xc7,0x69,0x34,0x6d,0x3d,
0x2b,0xaa,0x83,0x48,0x5f,0xe2,0x22,0x82,0x6f,0x71,
0x9c,0x84,0x10,0x64,0x45,0x75,0x8e,0x07,0x2c,0x91,
0x63,0x84,0x8f,0x68,0xfa,0xbc,0x6d,0xea,0x3b,0x58,
0xc9,0x8a,0xea,0x1e,0x57,0xfd,0x4a,0x4c,0xb1,0x1b,
0xc1,0xd7,0x3d,0x0c,0xa3,0xad,0x9d,0xf1,0x3b,0xd6,
0x70,0x84,0x14,0xfb,0x38,0xc1,0x06,0x9e,0xda,0xa6,
0x9e,0xc5,0x47,0x25,0xfd,0x1f,0x22,0xaf,0x7b,0x47,
0x16,0xa8,0xda,0xa6,0xfe,0xfc,0xb3,0xa1,0x6b,0x3a,
0xc3,0x4b,0x27,0x0f,0xdb,0xa6,0x5e,0xfc,0xf2,0x2d,
0x84,0xf0,0x2d,0x27,0x79,0x39,0x9d,0xe4,0xe5,0xcd,
0xcf,0x7a,0x9f,0x5f,0x03,0x00,0xb7,0x35,0x53,0x35,
0x8f,0xfe,0x68,0x97,0x00,0x00,0x00,0x00,0x49,0x45,
0x4e,0x44,0xae,0x42,0x60,0x82
};
__fastcall TCKBox::TCKBox( TComponent* Owner )
:TPanel(Owner)
{
Width = 80;
Height = 18;
FAutoBox = true;
// FBoxEnabled = true;
FEnabled = true;
bMouse = false;
ParentColor = true;
Ctl3D = false;
ParentCtl3D = false;
DoubleBuffered = true;
m_pImgCheck = new Vcl::Imaging::Pngimage::TPngImage(); //we create our png
TMemoryStream *pngStream = new TMemoryStream();
pngStream->Position = 0;
pngStream->WriteBuffer(pngImageCheck, 2988);
pngStream->Position = 0;
m_pImgCheck->LoadFromStream(pngStream);
delete pngStream;
/* m_pCaption = new TLabel(this);
m_pCaption->Parent = this;
// m_pCaption->AutoSize = true;
m_pCaption->OnClick = Clicklb;
m_pCaption->Left = Height + 2;
m_pCaption->Top = ( Height - m_pCaption->Height ) / 2;
*/
}
//---------------------------------------------------------------------------
__fastcall TCKBox::~TCKBox()
{
if( m_pImgCheck ){
delete m_pImgCheck;
m_pImgCheck = NULL;
}
/* if( m_pCaption ){
delete m_pCaption;
m_pCaption = NULL;
}
*/
}
//---------------------------------------------------------------------------
namespace Ckbox
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TCKBox)};
RegisterComponents(L"Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::Paint(void)
{
TRect Rect;
int hText = Canvas->TextHeight( m_strText );// m_pCaption->Height;
if( FAutoBox && hText>0 ){
Rect.init( RET_LEFT, (Height-hText)/2, RET_LEFT+hText, (Height+hText)/2+1 );
}
else{
Rect.init( RET_LEFT, 0, RET_LEFT + Height, Height );
}
if( FEnabled ){
Canvas->Brush->Color = BoxColor;
Canvas->FrameRect( Rect );
TRect rct1,rct2;
if( Rect.Height()<= 9 ){
rct1.init( Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1 ); //内1
}
else{
rct1.init( Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1 ); //内1
}
rct2.init( Rect.Left+1+1,Rect.Top+1+1,Rect.Right-1-1,Rect.Bottom-1-1 );
if( bMouse && !FChecked ){
if( Rect.Height()<=9 ){
Canvas->Brush->Color = CLR_RECT_1_1; //内条
Canvas->FillRect(rct1);
}
else{
Canvas->Brush->Color = CLR_RECT_1_1; //内条
Canvas->FillRect(rct1);
}
}
else if( bMouse && FChecked ){
if( Rect.Height()<=9 ){
Canvas->Brush->Color = CLR_RECT_1_1; //内条
Canvas->FrameRect(rct1);
Canvas->StretchDraw(rct2, m_pImgCheck); //黑块
}else{
Canvas->Brush->Color = CLR_RECT_1_1; //内条
Canvas->FillRect(rct1);
Canvas->StretchDraw(rct2, m_pImgCheck); //黑块
}
}
else if( !bMouse && FChecked ){
if( Rect.Height()<=9 ){
Canvas->Brush->Color = CLR_RECT_1_2; //内条
Canvas->FrameRect(rct1);
Canvas->StretchDraw(rct2, m_pImgCheck); //黑块
}
else{
Canvas->Brush->Color = CLR_RECT_1_2; //内条
Canvas->FillRect(rct1);
Canvas->StretchDraw(rct2, m_pImgCheck); //黑块
}
}
else if( !bMouse && !FChecked ){
if( Rect.Height()<=9 ){
Canvas->Brush->Color = CLR_RECT_1_2; //内条
Canvas->FillRect(rct1);
}
else{
Canvas->Brush->Color = CLR_RECT_1_2; //内条
Canvas->FillRect(rct1);//FrameRect(rct1);
}
}
}
else{
Canvas->Brush->Color = CLR_ENABLED;
Canvas->FrameRect( Rect );
TRect temp(Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1);
Canvas->Brush->Color = CLR_ENABLED_1;
Canvas->FillRect( temp );
}
if( !m_strText.IsEmpty() ){
int x = RET_LEFT + Height + 2, y = (Height-hText)/2;
Canvas->Brush->Style = bsClear;
Canvas->TextOut( x, y, m_strText );
if( !FEnabled ){
// }
// else{
//Canvas->Font->Color = RGB(255,255,255);
Canvas->TextOut( x, y, m_strText );
TColor clUse = Canvas->Font->Color;
Canvas->Font->Color = RGB(128,128,128);
Canvas->TextOut( x-1, y-1, m_strText );
Canvas->Font->Color = clUse;
}
Canvas->Brush->Style = bsSolid;
}
}
//---------------------------------------------------------------------------
/*
TColor __fastcall TCKBox::ColorSub(TColor cColor,int index)
{
int R = GetRValue(cColor);//; cColor&0x000000FF;//
int G = GetGValue(cColor);//cColor&0x0000FF00;//
int B = GetBValue(cColor);//cColor&0x0000FF00;//
// int A = cColor&0xFF000000;
int tr= (R*(100-index)+255*index)/100,
tg = (G*(100-index)+255*index)/100,
tb = (B*(100-index)+255*index)/100;
return RGB(tr,tg,tb);
}
//---------------------------------------------------------------------------
*/
void __fastcall TCKBox::SetChecked(bool bCheck)
{
if( FChecked!=bCheck ){
FChecked = bCheck;
if(FOnChange)
FOnChange(this);
if( Visible && Handle ){
RECT rect;
SetRect( &rect, 0, 0, Height, Height );
InvalidateRect( Handle, &rect, false );
}
}
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::SetEnabled(bool bEnabled)
{
if( FEnabled!=bEnabled ){
FEnabled = bEnabled;
// Paint();
Invalidate();
}
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::SetBoxColor(TColor cColor)
{
if( FBoxColor!=cColor ){
FBoxColor = cColor;
//Paint();
if( Visible && Handle ){
RECT rect;
SetRect( &rect, 0, 0, Height, Height );
InvalidateRect( Handle, &rect, false );
}
}
}
//---------------------------------------------------------------------------
TFont* __fastcall TCKBox::GetTextFont()
{
return Canvas->Font;
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::SetTextFont(TFont* Value)
{
/* if( m_pCaption ){
m_pCaption->Font = Value;
m_pCaption->Invalidate();
}
*/
Canvas->Font = Value;
if( Visible && Handle ){
RECT rect;
SetRect( &rect, Height, 0, Width, Height );
InvalidateRect( Handle, &rect, false );
}
//Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::Click(void)
{
if( FEnabled ){
FChecked = !Checked;
if(FOnChange)
FOnChange(this);
TPanel::Click();
// Paint();
Invalidate();
}
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::CMMouseLeave(TWMMouse &Message)
{
if(bMouse){
bMouse = false;
RECT rect;
SetRect( &rect, 0, 0, Height, Height );
InvalidateRect( Handle, &rect, false );
}
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::CMMouseEnter(TWMMouse &Message)
{
if(!bMouse){
bMouse = true;
RECT rect;
SetRect( &rect, 0, 0, Height, Height );
InvalidateRect( Handle, &rect, false );
}
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::WMSize(Winapi::Messages::TWMSize &Message)
{
Height = Message.Height < MIN_H ? MIN_H : Message.Height;
Width = Message.Width< MIN_W ? MIN_W : Message.Width;
/* m_pCaption->Left = Height + 2;
m_pCaption->Top = ( Height - m_pCaption->Height ) / 2;
m_pCaption->Width = Width - Height - 2;
m_pCaption->Invalidate();
*/
Message.Result = true;
return;
}
//---------------------------------------------------------------------------
String __fastcall TCKBox::GetCaption()
{
// if( m_pCaption )
// return m_pCaption->Caption;
return m_strText;
}
//---------------------------------------------------------------------------
void __fastcall TCKBox::SetCaption( String Value )
{
m_strText = Value;
if( Visible && Handle ){
RECT rect;
SetRect( &rect, Height, 0, Width, Height );
InvalidateRect( Handle, &rect, false );
}
/*
if( m_pCaption ){
m_pCaption->Caption = Value;
m_pCaption->Invalidate();
}
*/
}
//---------------------------------------------------------------------------
+74
View File
@@ -0,0 +1,74 @@
//---------------------------------------------------------------------------
#ifndef CKBoxH
#define CKBoxH
#include <vcl.h>
#include <Vcl.Imaging.pngimage.hpp>
//---------------------------------------------------------------------------
class PACKAGE TCKBox : public TPanel
{
private:
bool FChecked;
bool FEnabled;
bool bMouse;
bool FAutoBox;
TNotifyEvent FOnChange;
TColor FBoxColor;
String m_strText;
// TLabel *m_pCaption;
Vcl::Imaging::Pngimage::TPngImage *m_pImgCheck;
private:
void __fastcall SetBoxEnabled(bool bEnabled);
void __fastcall SetEnabled(bool bEnabled);
void __fastcall SetChecked(bool bCheck);
void __fastcall SetBoxColor(TColor cColor);
TFont* __fastcall GetTextFont();
void __fastcall SetTextFont( TFont* Value );
// void __fastcall Clicklb(TObject *Sender);
// TColor __fastcall ColorSub(TColor cColor,int index);
String __fastcall GetCaption();
void __fastcall SetCaption( String Value );
protected:
virtual void __fastcall Paint(void);
MESSAGE void __fastcall CMMouseLeave(TWMMouse &Message);
MESSAGE void __fastcall CMMouseEnter(TWMMouse &Message);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TWMMouse, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TWMMouse, CMMouseLeave)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP(TPanel)
public:
DYNAMIC void __fastcall Click(void);
__fastcall TCKBox( TComponent* Owner );
__fastcall ~TCKBox();
__published:
__property bool Checked = { read = FChecked, write = SetChecked, default = 0 };
__property bool Enabled = { read = FEnabled, write = SetEnabled, default = 1 };
__property bool AutoBox = { read = FAutoBox,write = FAutoBox,default = 1};
__property TColor BoxColor = { read = FBoxColor,write = SetBoxColor };
__property Font = { read = GetTextFont, write = SetTextFont };
__property TNotifyEvent OnChange = {read = FOnChange, write = FOnChange ,default = NULL};
__property String Caption = {read = GetCaption, write = SetCaption };
};
#endif
/*
使
1OnChange Checked 使 TPanel  onClick
2FontSize
3AutoBox True
Box
false
Box Height
4BoxEnabled 使 TPanel Enabled
Height 6 Width 11
*/
+17
View File
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,241 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "ComboBoxComponent.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include "DropListScrollBar.cpp"
#include "DropListView.cpp"
#include "CapButton.cpp"
static inline void ValidCtrCheck(TComboBoxComponent *)
{
new TComboBoxComponent(NULL);
}
namespace Comboboxcomponent
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TComboBoxComponent)};
RegisterComponents(L"Samples", classes, 0);
}
}
#define MIN(x, y) ((x)<(y)?(x):(y))
__fastcall TComboBoxComponent::TComboBoxComponent(TComponent *Owner)
: CBCapButton(Owner)
{
m_ClickStat = 0;
m_IsMouseOver = false;
ItemHeight = 20;
ShowItemCount = 5;
FShowMode = TComboBoxMode(cbShowDown);
// 初始化下拉列表框
m_DropListView = new TDropListView(this);
m_DropListView->Parent = (TWinControl *)Owner;
m_DropListView->SetDesignVisible(false);
m_DropListView->Visible = false;
m_DropListView->OnHide = DoDropListHide;
m_DropListView->OnShow = DoDropListShow;
OnMouseEnter = DoMouseEnter;
OnMouseLeave = DoMouseLeave;
}
__fastcall TComboBoxComponent::~TComboBoxComponent()
{
}
void __fastcall TComboBoxComponent::SetParent(TWinControl* AParent)
{
m_DropListView->Parent = AParent;
CBCapButton::Parent = AParent;
}
void __fastcall TComboBoxComponent::SetFontSize( int value )
{
m_DropListView->SetFontSize(value);
CBCapButton::SetFontSize(value);
}
void __fastcall TComboBoxComponent::SetFont( String name, int size )
{
CBCapButton::SetFont(name, size);
m_DropListView->SetFont(name, size);
}
TComboBoxItem * __fastcall TComboBoxComponent::AddItem(String Caption)
{
TComboBoxItem * pNewItem = new TComboBoxItem(Caption, DoItemClick);
m_DropListView->AddItem(pNewItem);
return pNewItem;
}
TComboBoxItem * __fastcall TComboBoxComponent::GetItem(int Index)
{
return m_DropListView->GetItem( Index );
}
void __fastcall TComboBoxComponent::Clear()
{
if(m_DropListView->ItemsCount != 0)
{
m_DropListView->Clear();
}
}
void __fastcall TComboBoxComponent::DoDropListShow(TObject *Sender)
{
Down = true;
m_ClickStat = 1;
}
void __fastcall TComboBoxComponent::DoDropListHide(TObject *Sender)
{
Down = false;
if(!m_IsMouseOver)
{
m_ClickStat = 2;
}
else
{
m_ClickStat = 3;
}
}
void __fastcall TComboBoxComponent::DoItemClick(TComboBoxItem* Sender, int Index)
{
Caption = Sender->Caption;
if(FOnChange) FOnChange(Sender, Index);
}
void __fastcall TComboBoxComponent::DoMouseEnter(TObject *Sender)
{
m_IsMouseOver = true;
}
void __fastcall TComboBoxComponent::DoMouseLeave(TObject *Sender)
{
m_IsMouseOver = false;
}
/*
void __fastcall TComboBoxComponent::CMMouseEnter(TMessage &Message)
{
m_IsMouseOver = true;
//TGraphicControl::Dispatch(&Message);
CBCapButton::DefaultHandler(&Message);
}
void __fastcall TComboBoxComponent::CMMouseLeave(TMessage &Message)
{
m_IsMouseOver = false;
//TGraphicControl::Dispatch(&Message);
}
*/
void __fastcall TComboBoxComponent::MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y)
{
TGraphicControl::MouseDown(Button, Shift, X, Y);
if(Button != 0) return;
if(m_ClickStat == 3) return;
m_DropListView->ItemHeight = FItemHeight;
m_DropListView->Width = Width;
TPoint var_Client(0, Height);
TPoint var_Screen = ClientToScreen(var_Client);
m_DropListView->Left = var_Screen.X;
m_DropListView->ShowItemsCount = FShowItemCount;
if(ShowMode == TComboBoxMode(cbShowUp))
{
// 上方显示
m_DropListView->Top = var_Screen.Y - Height - m_DropListView->ListHeight;
}
else
{
// 下方显示
m_DropListView->Top = var_Screen.Y;
}
m_DropListView->Show();
}
void __fastcall TComboBoxComponent::MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y)
{
TGraphicControl::MouseUp(Button, Shift, X, Y);
if(Button != 0) return;
if(m_ClickStat == 3) m_ClickStat = 0;
}
int __fastcall TComboBoxComponent::GetDefaultItem()
{
return m_DropListView->DefItemIndex;
}
int __fastcall TComboBoxComponent::GetItemsCount()
{
return m_DropListView->ItemsCount;
}
void __fastcall TComboBoxComponent::RemoveItem(int Index)
{
int var_Count = m_DropListView->ItemsCount;
if(Index < var_Count && Index >= 0)
{
m_DropListView->RemoveItem(Index);
}
}
void __fastcall TComboBoxComponent::SetDefaultItem(int Value)
{
int var_Count = m_DropListView->ItemsCount;
if(Value >= var_Count || Value < 0)
{
Value = -1;
Caption = "";
}
else if(var_Count > 0)
{
TComboBoxItem *var_Item = m_DropListView->GetItem(Value);
if(var_Item != NULL)
{
Caption = var_Item->Caption;
}
}
m_DropListView->DefItemIndex = Value;
}
void __fastcall TComboBoxComponent::SetItemHeight(int Value)
{
FItemHeight = Value;
}
void __fastcall TComboBoxComponent::SetShowMode(TComboBoxMode Value)
{
FShowMode = Value;
}
void __fastcall TComboBoxComponent::SetShowItemCount(int Value)
{
FShowItemCount = Value;
}
@@ -0,0 +1,427 @@
//---------------------------------------------------------------------------
#ifndef ComboBoxComponentH
#define ComboBoxComponentH
#include <vcl.h>
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.pnglang.hpp>
#include <Vcl.Graphics.hpp>
//---------------------------------------------------------------------------
class TDropListScrollBar;
class TComboBoxItem;
class TDropListView;
class CBCapButton;
//---------------------------------------------------------------------------
/* 定义下拉列表项点击事件 */
typedef void __fastcall (__closure *TItemClickEvent)(TComboBoxItem* Sender, int Index);
/* 下拉列表框显示风格 */
enum DECLSPEC_DENUM TComboBoxMode : unsigned char {cbShowUp, cbShowDown};
//typedef System::Set<ComboBox_Mode, ComboBox_Mode::cbShowUp, ComboBox_Mode::cbShowDown> TComboBoxMode;
/* 定义下拉列表框变化事件 */
typedef void __fastcall (__closure *TComboBoxChangeEvent)(TComboBoxItem* Sender, int Index);
/**************************************************************************************************/
/**************************************************************************************************/
class TDropListScrollBar : public TScrollBar
{
private:
// int m_nTileHeight, //add by tj 2013/11/18
int m_nThumbHeight,
m_nThumbTop,
m_nPreThumbTop,
m_nDragPos,
m_nDragPoint,
m_iClicked,
m_iHitPrev,
m_nMax,
m_nMin,
m_nPos,
m_nPage,
m_nTrackPos;
bool m_bPause,
m_bNotify,
m_bDrag,
m_bTrace;
TBitmap *u_pPicLineUp,
*u_pPicLineDown;
TTimer *m_pTimer;
TCanvas *m_pCanvas;
int HitTest( int X, int Y );
void CalcThumbHeight();
void CalcThumbTop();
void DrawArrow( int iDirection, int iState );
void DrawThumb( int iState, bool bEraseBk, int iPageUD=-1 );
void __fastcall TimerProc(TObject* Sender);
MESSAGE void __fastcall WMPaint(Winapi::Messages::TWMPaint &Message);
MESSAGE void __fastcall WMLButtonDown(TWMMouse &Message);
MESSAGE void __fastcall WMLButtonUp(TWMMouse &Message);
MESSAGE void __fastcall WMLButtonDblClk(TWMMouse &Message);
MESSAGE void __fastcall WMRButtonDown(TWMMouse &Message); //add by tj 2013/11/18
MESSAGE void __fastcall WMRButtonUp(TWMMouse &Message); //add by tj 2013/11/18
MESSAGE void __fastcall WMMouseMove(TWMMouse &Message);
// MESSAGE void __fastcall CMMouseLeave(TMessage &Message); //add by tj 2013/11/25 12:35
MESSAGE void __fastcall SBMSetScrollInfo(TMessage &Message);
MESSAGE void __fastcall SBMGetScrollInfo(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_PAINT, TWMPaint, WMPaint)
MESSAGE_HANDLER(WM_LBUTTONDOWN, TWMLButtonDown, WMLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONUP, TWMLButtonUp, WMLButtonUp)
MESSAGE_HANDLER(WM_LBUTTONDBLCLK, TWMLButtonDblClk, WMLButtonDblClk)
MESSAGE_HANDLER(WM_RBUTTONDOWN, TWMRButtonDown, WMRButtonDown)
MESSAGE_HANDLER(WM_RBUTTONUP, TWMRButtonUp, WMRButtonUp) //add by tj 2013/11/18
MESSAGE_HANDLER(WM_MOUSEMOVE, TWMMouseMove, WMMouseMove) //add by tj 2013/11/18
// MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave) //add by tj 2013/11/25 12:35
MESSAGE_HANDLER(SBM_SETSCROLLINFO, TMessage, SBMSetScrollInfo)
MESSAGE_HANDLER(SBM_GETSCROLLINFO, TMessage, SBMGetScrollInfo)
END_MESSAGE_MAP(TScrollBar)
protected:
virtual void __fastcall PaintWindow(HDC DC);
public:
TWinControl *m_pWndCtrl;
bool m_bAction;
__fastcall virtual TDropListScrollBar(System::Classes::TComponent* AOwner);
__fastcall ~TDropListScrollBar();
void __fastcall CMMouseLeave(TObject *Sender); //add by tj 2013/11/25 12:35
bool IsDraging(){ return m_bDrag; };
void __fastcall SetPosition(int Value, bool bRedraw=true);
void __fastcall SetPageSize(int Value, bool bRedraw=true);
void __fastcall SetRange(int AMin, int AMax, bool bRedraw=true);
void __fastcall GetScrollRange(int* nMin, int* nMax);
int __fastcall GetScrollPos();
int __fastcall GetPageSize();
};
/**************************************************************************************************/
/**************************************************************************************************/
class TComboBoxItem : public TObject
{
private:
int FTag;
String FCaption;
TItemClickEvent FOnItemClick;
void __fastcall SetCaption(String Caption);
public:
__fastcall TComboBoxItem(String Caption, TItemClickEvent OnItemClick);
void __fastcall DrawItem(TCanvas *Canvas, TRect Rect, bool Selected);
__published:
__property String Caption = {read = FCaption, write = FCaption};
__property int Tag = {read = FTag, write = FTag};
__property TItemClickEvent OnItemClicked = {read = FOnItemClick, write = FOnItemClick};
};
// ---------------------------------------------------------------------------
// TDropListView
// ---------------------------------------------------------------------------
class TDropListView : public TWinControl
{
private:
TNotifyEvent FOnHide, // 下拉列表隐藏事件
FOnShow; // 下拉列表显示事件
int FItemHeight,
FItemWidth,
FShowItemsCount,
FDefItemIndex;
TControlCanvas *m_Canvas;
TList *m_ItemRectList,
*m_ItemList;
TDropListScrollBar *m_ScrollBar;
HWND m_pActiveWnd;
int m_BeginIndex,
m_EndIndex,
m_CurrentItemIndex,
m_RealShowCount,
m_MouseX,
m_MouseY;
void __fastcall CreateScrollBar();
void __fastcall DoItemsCountChange();
void __fastcall DoItemClicked(int Index);
void __fastcall DoItemSelect(int Index);
void __fastcall DoKeyUpDown(int Index);
void __fastcall DoShowItemsChange();
int __fastcall CalcListHeight();
int __fastcall GetItemsCount();
TRect *__fastcall GetItemRect(int Index);
void __fastcall SetShowItemsCount(int Value);
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMKeyDown(TWMKeyDown &Message);
MESSAGE void __fastcall WMKillFocus(TMessage &Message);
MESSAGE void __fastcall WMLButtonDown(TWMLButtonDown &Message);
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
MESSAGE void __fastcall WMPaint(TWMPaint &Message);
MESSAGE void __fastcall WMSetFocus(TMessage &Message);
MESSAGE void __fastcall WMVScroll(TWMScroll &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(CN_KEYDOWN, TWMKeyDown, WMKeyDown)
MESSAGE_HANDLER(WM_KILLFOCUS, TMessage, WMKillFocus)
MESSAGE_HANDLER(WM_LBUTTONDOWN, TWMLButtonDown, WMLButtonDown)
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
MESSAGE_HANDLER(WM_PAINT, TWMPaint, WMPaint)
MESSAGE_HANDLER(WM_SETFOCUS, TMessage, WMSetFocus)
MESSAGE_HANDLER(WM_VSCROLL, TWMScroll, WMVScroll)
END_MESSAGE_MAP(TWinControl)
protected:
virtual void __fastcall CreateParams(TCreateParams &Params);
virtual void __fastcall CreateWnd();
virtual void __fastcall PaintWindow(HDC DC);
DYNAMIC void __fastcall MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseMove(TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);
public:
__fastcall TDropListView(TComponent *Owner);
__fastcall ~TDropListView();
void __fastcall AddItem(TComboBoxItem* Item);
void __fastcall Clear();
TComboBoxItem *__fastcall GetItem(int Index);
void __fastcall Hide();
void __fastcall RemoveItem(int Index);
void __fastcall ScrollPos(int Pos);
void __fastcall Show();
void __fastcall SetFontSize(int sz);
void __fastcall SetFont(String name, int sz);
__published:
__property int ListHeight = {read = CalcListHeight};
__property int ItemHeight = {write = FItemHeight, read = FItemHeight, default = 16};
__property TNotifyEvent OnHide = {write = FOnHide, read = FOnHide};
__property TNotifyEvent OnShow = {write = FOnShow, read = FOnShow};
__property int ShowItemsCount = {write = SetShowItemsCount, read = FShowItemsCount};
__property int DefItemIndex = {read = FDefItemIndex, write = FDefItemIndex};
__property int ItemsCount = {read = GetItemsCount};
};
/**************************************************************************************************/
/**************************************************************************************************/
class CBCapButton : public TGraphicControl
{
public:
enum TModalResult{
mrNone = System::Int8(0x0),
mrOk = System::Int8(0x1),
mrCancel = System::Int8(0x2),
mrAbort = System::Int8(0x3),
mrRetry = System::Int8(0x4),
mrIgnore = System::Int8(0x5),
mrYes = System::Int8(0x6),
mrNo = System::Int8(0x7),
mrClose = System::Int8(0x8),
mrHelp = System::Int8(0x9),
mrTryAgain = System::Int8(0xa),
mrContinue = System::Int8(0xb),
mrAll = System::Int8(0xc),
mrNoToAll = System::Int8(0xd),
mrYesToAll = System::Int8(0xe)
};
private:
COLORREF
clrFrameExNormal,
clrFrameExEnter,
clrFrameExDisable,
clrFrameNormal,
clrLineNormal,
clrRectNormal,
clrRectDisable,
clrCapArrowOpenBound[10],
clrCapArrowOpenLine[4],
clrExFrameBound[4],
clrExFrameBoundDisable[4];
TColor FBorderColor;
TColor FInterFrameColor;
TColor FInterColor;
void __fastcall IniColor(int nstate);
COLORREF __fastcall TransformColor(COLORREF icolor, int nNum=0, bool bplus=true);
void __fastcall SetBorderColor(TColor iBorderColor);
void __fastcall SetInterFrameColor(TColor iInterFrameColor);
void __fastcall SetInterColor(TColor iInterColor);
TNotifyEvent FOnMouseEnter;//on mouse enter notify event
TNotifyEvent FOnMouseLeave;//on mouse leave notify event
String FCaption;
// System::Uitypes::TModalResult FModalResult;
TModalResult FModalResult;
void __fastcall SetCaption(String Value);
MESSAGE void __fastcall CMMouseEnter(Winapi::Messages::TMessage &Msg); // to know when mouse is entered
MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Msg); // to know when mouse is leaved
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
END_MESSAGE_MAP(TGraphicControl)
protected:
bool FEnablePNG; //是否加载了png格式图片背景
bool FDown; // value to know if we painting mouse down
int EtatBtn; // 0=Normal 1=Mouse entered 2=Pressed 3=Disabled
int FStateCount;
Vcl::Imaging::Pngimage::TPngImage *FPngImg; //our 4 states image
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall SetEnabled(bool Value);
public:
__fastcall virtual CBCapButton(System::Classes::TComponent* AOwner);
__fastcall virtual ~CBCapButton(void);
void __fastcall SetStateCount( int count );
void __fastcall SetPngImg(Vcl::Imaging::Pngimage::TPngImage *value); // we set the png image
void __fastcall SetDown(bool value); // to know if mouse is down or not
void __fastcall SetEnablePNG(bool Value);// to know if customer set png img
virtual void __fastcall SetFontSize( int value );
virtual void __fastcall SetFont( String name, int sz );
virtual void __fastcall Paint(void); // override the painting of the component
DYNAMIC void __fastcall Click(void);
__published:
__property Action;
__property Anchors = {default=3};
__property bool Down = {read=FDown, write=SetDown, default=False};
__property Enabled = {default=1};
__property int ImgStates = {read=FStateCount, write=SetStateCount, default=4};
// __property System::Uitypes::TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property ParentShowHint = {default=1};
__property Vcl::Imaging::Pngimage::TPngImage *PngImg = {read=FPngImg, write=SetPngImg};
__property PopupMenu;
__property ShowHint;
__property Visible = {default=1};
__property OnClick;
__property OnContextPopup;
__property OnMouseDown;
__property OnMouseMove;
__property OnMouseUp;
__property System::Classes::TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter};
__property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave};
__property bool EnablePNG = {read=FEnablePNG, write=SetEnablePNG, default=False};
__property TColor BorderColor = {read=FBorderColor, write=SetBorderColor, default=TColor(0x83807d)};
__property TColor InterFrameColor = {read=FInterFrameColor, write=SetInterFrameColor, default=TColor(0x302e2c)};
__property TColor InterColor = {read=FInterColor, write=SetInterColor, default=TColor(0x58504a)};
private:
Vcl::Imaging::Pngimage::TPngImage *m_pPngButton, *m_pPngFoucusButton;
Vcl::Imaging::Pngimage::TPngImage *pTmpDraw, *pTmpFoucusDraw;
void __fastcall PaintCustomer(void);
void __fastcall PaintCustomerText(void);
public:
TRect rtCaption;
__published:
__property int FontSize = {write=SetFontSize, default=8};
__property String Caption = {read=FCaption, write=SetCaption};
};
/**************************************************************************************************/
/**************************************************************************************************/
class PACKAGE TComboBoxComponent : public CBCapButton
{
private:
TComboBoxChangeEvent FOnChange; // ComboBox变化事件
int FItemHeight,
FShowItemCount;
TComboBoxMode FShowMode;
TDropListView *m_DropListView; // 定义下拉列表框
bool m_IsMouseOver;
int m_ClickStat; // .....
void __fastcall DoItemClick(TComboBoxItem *Sender, int Index);
// 处理下拉列表隐藏、显示事件
void __fastcall DoDropListShow(TObject *Sender);
void __fastcall DoDropListHide(TObject *Sender);
int __fastcall GetDefaultItem();
int __fastcall GetItemsCount();
void __fastcall SetDefaultItem(int Value);
void __fastcall SetItemHeight(int Value);
void __fastcall SetShowItemCount(int Value);
void __fastcall SetShowMode(TComboBoxMode Value);
void __fastcall DoMouseEnter(TObject *Sender);
void __fastcall DoMouseLeave(TObject *Sender);
//MESSAGE void __fastcall CMMouseEnter(TMessage &Message);
//MESSAGE void __fastcall CMMouseLeave(TMessage &Message);
//BEGIN_MESSAGE_MAP
// MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
// MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
//END_MESSAGE_MAP(CBCapButton)
protected:
DYNAMIC void __fastcall MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);
virtual void __fastcall SetParent(TWinControl* AParent);
public:
__fastcall TComboBoxComponent(TComponent *Owner);
__fastcall ~TComboBoxComponent();
TComboBoxItem * __fastcall AddItem(String Caption);
void __fastcall Clear();
void __fastcall RemoveItem(int Index);
TComboBoxItem * __fastcall GetItem(int Index);
virtual void __fastcall SetFontSize( int value );
virtual void __fastcall SetFont( String name, int size );
__property int DefItemIndex = {read = GetDefaultItem, write = SetDefaultItem};
__property int ItemsCount = {read = GetItemsCount};
__published:
__property TComboBoxChangeEvent OnChange = {read = FOnChange, write = FOnChange};
__property int ItemHeight = {read = FItemHeight, write = SetItemHeight, default = 20};
__property int ShowItemCount = {read = FShowItemCount, write = SetShowItemCount, default = 10};
__property TComboBoxMode ShowMode = {read = FShowMode, write = SetShowMode, default = cbShowDown};
__property TWinControl* Parent = {read=FParent, write=SetParent};
};
/**************************************************************************************************/
/**************************************************************************************************/
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,619 @@
//---------------------------------------------------------------------------
#include "ComboBoxComponent.h"
//---------------------------------------------------------------------------
#define CP_ITEM_SLECTED RGB(67, 73, 80)
#define CP_ITEM_UNSLECTED RGB(39, 42, 47)
//---------------------------------------------------------------------------
__fastcall TComboBoxItem::TComboBoxItem(String Caption, TItemClickEvent OnItemClick)
{
FCaption = Caption;
FOnItemClick = OnItemClick;
FTag = 0;
}
//---------------------------------------------------------------------------
void __fastcall TComboBoxItem::DrawItem(TCanvas *Canvas, TRect Rect, bool Selected)
{
if(Selected)
Canvas->Brush->Color = CP_ITEM_SLECTED;
else
Canvas->Brush->Color = CP_ITEM_UNSLECTED;
/* 绘制背景 */
Canvas->FillRect(Rect);
/* 绘制文字 */
int var_TextRectTop = Rect.Top + (Rect.Height() - Canvas->TextHeight(FCaption)) / 2;
TRect var_TextRect(4, var_TextRectTop, Rect.Right - 4, Rect.Bottom);
Canvas->TextRect(var_TextRect, FCaption);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//#define CP_BORDER RGB(29, 31, 35)
#define CP_BORDER RGB(106, 111, 117)
#define CP_BACKGRND RGB(39, 42, 47)
#define CP_BORDER_HL RGB(30, 32, 36)
#define CP_BACKGRND_HL RGB(67, 73, 80)
#define CP_TXT_NOR RGB(213, 221, 232)
#define CP_TXT_DISABLE RGB(100, 108, 119)
#define CP_BREAK RGB(100, 108, 119)
#define CP_BOARD_FILL RGB(76, 82, 91)
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define MAX(x, y) ((x) > (y) ? (x) : (y))
//---------------------------------------------------------------------------
__fastcall TDropListView::TDropListView(TComponent *Owner) : TWinControl(Owner)
{
m_Canvas = new TControlCanvas();
m_Canvas->Control = this;
m_Canvas->Font->Color = RGB(156, 170, 189);
m_ItemRectList = new TList();
m_ItemList = new TList();
FOnHide = NULL;
FOnShow = NULL;
FItemHeight = 16;
FItemWidth = 99;
FDefItemIndex = -1;
FShowItemsCount = 10;
DoShowItemsChange();
m_CurrentItemIndex = 0;
m_RealShowCount = 0;
m_BeginIndex = 0;
m_ScrollBar = NULL;
SetDesignVisible(false);
Ctl3D = false;
ParentBackground = false;
ParentBiDiMode = false;
ParentColor = false;
ParentCustomHint = false;
ParentDoubleBuffered = false;
ParentFont = true;
ParentShowHint = false;
CreateScrollBar();
}
//---------------------------------------------------------------------------
__fastcall TDropListView::~TDropListView()
{
if(m_ItemRectList)
{
delete m_ItemRectList;
m_ItemRectList = NULL;
}
if(m_ItemList)
{
delete m_ItemList;
m_ItemList = NULL;
}
if(m_ScrollBar)
{
delete m_ScrollBar;
m_ScrollBar = NULL;
}
if(m_Canvas)
{
delete m_Canvas;
m_Canvas = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::AddItem(TComboBoxItem* Item)
{
m_ItemList->Add(Item);
DoItemsCountChange();
}
//---------------------------------------------------------------------------
int __fastcall TDropListView::CalcListHeight()
{
if(ItemsCount == 0)
return 10;
else
return FItemHeight * m_RealShowCount;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::Clear()
{
m_ItemList->Clear();
FDefItemIndex = -1;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::CreateParams(TCreateParams &Params)
{
TWinControl::CreateParams(Params);
Params.Style = 0;
Params.Style = WS_POPUP;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::CreateScrollBar()
{
m_ScrollBar = new TDropListScrollBar(NULL);
m_ScrollBar->Parent = this;
m_ScrollBar->Visible = false;
m_ScrollBar->m_pWndCtrl = this;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::CreateWnd()
{
TWinControl::CreateWnd();
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::SetFontSize(int sz)
{
m_Canvas->Font->Size = sz;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::SetFont(String name, int sz)
{
m_Canvas->Font->Name = name;
m_Canvas->Font->Size = sz;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::DoItemClicked(int Index)
{
FDefItemIndex = Index;
GetItem(FDefItemIndex)->OnItemClicked(GetItem(FDefItemIndex), FDefItemIndex);
Hide();
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::DoItemsCountChange()
{
m_RealShowCount = MIN(FShowItemsCount, ItemsCount);
m_EndIndex = m_BeginIndex + m_RealShowCount;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::DoItemSelect(int Index)
{
if(Index != m_CurrentItemIndex)
{
/* 还原上一次选中项 */
if(m_CurrentItemIndex >= m_BeginIndex && m_CurrentItemIndex < m_EndIndex)
{
GetItem(m_CurrentItemIndex)->DrawItem(m_Canvas,
*GetItemRect(m_CurrentItemIndex - m_BeginIndex), false);
}
/* 更新当前选择项 */
m_CurrentItemIndex = Index;
/* 重绘选中项 */
GetItem(m_CurrentItemIndex)->DrawItem(m_Canvas,
*GetItemRect(m_CurrentItemIndex - m_BeginIndex), true);
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::DoKeyUpDown(int Index)
{
if(Index < m_BeginIndex)
{
int var_eIndex = Index + 1;
if(var_eIndex < m_RealShowCount)
ScrollPos(0);
else
ScrollPos(var_eIndex - m_RealShowCount);
}
if(Index >= m_EndIndex)
{
int var_eIndex = Index + m_RealShowCount;
if(var_eIndex > ItemsCount)
ScrollPos(ItemsCount - m_RealShowCount);
else
ScrollPos(var_eIndex - m_RealShowCount);
}
DoItemSelect(Index);
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::DoShowItemsChange()
{
m_ItemRectList->Clear();
for(int i = 0; i < FShowItemsCount; i++)
{
int var_ItemTop = i * FItemHeight;
int var_ItemBottom = var_ItemTop + FItemHeight;
m_ItemRectList->Add(new TRect(1, var_ItemTop + 1, FItemWidth, var_ItemBottom - 1));
}
DoItemsCountChange();
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::Hide()
{
TWinControl::Hide();
SetActiveWindow(m_pActiveWnd);
if(FOnHide) FOnHide(this);
}
//---------------------------------------------------------------------------
int __fastcall TDropListView::GetItemsCount()
{
if(m_ItemList)
return m_ItemList->Count;
else
return -1;
}
//---------------------------------------------------------------------------
TComboBoxItem *__fastcall TDropListView::GetItem(int Index)
{
if(ItemsCount == 0 || Index < 0 || Index > ItemsCount)
return NULL;
else
return (TComboBoxItem *)m_ItemList->Items[Index];
}
//---------------------------------------------------------------------------
TRect *__fastcall TDropListView::GetItemRect(int Index)
{
return (TRect *)m_ItemRectList->Items[Index];
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y)
{
TWinControl::MouseDown(Button, Shift, X, Y);
TRect cl_Rect = GetClientRect();
if(X >= 0 && X <= cl_Rect.Right && Y >= 0 && Y <= cl_Rect.Bottom && ItemsCount > 0)
{
if(Button == 0 && X < FItemWidth)
{
int var_DefItemIndex = Y / FItemHeight + m_BeginIndex;
if(m_CurrentItemIndex != var_DefItemIndex)
DoItemSelect(var_DefItemIndex);
else
DoItemClicked(var_DefItemIndex);
}
}
else
{
Hide();
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::MouseMove(TShiftState Shift, int X, int Y)
{
TWinControl::MouseMove(Shift, X, Y);
if(m_MouseX == X && m_MouseY == Y) return;
m_MouseX = X;
m_MouseY = Y;
TRect var_Rect = GetClientRect();
if(X >= 0 && X < FItemWidth && Y >= 0 && Y < var_Rect.Bottom && ItemsCount > 0)
DoItemSelect(Y / FItemHeight + m_BeginIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y)
{
TWinControl::MouseUp(Button, Shift, X, Y);
TRect cl_Rect = GetClientRect();
if(X >= 0 && X <= cl_Rect.Right && Y >= 0 && Y <= cl_Rect.Bottom)
{
if(Visible && ItemsCount > 0 && Button == 0 && X < FItemWidth)
{
int var_DefItemIndex = Y / FItemHeight + m_BeginIndex;
if(m_CurrentItemIndex != var_DefItemIndex)
DoItemSelect(var_DefItemIndex);
else
DoItemClicked(var_DefItemIndex);
}
}
else
{
if(Visible) Hide();
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::PaintWindow(HDC DC)
{
if(ItemsCount == 0) return;
m_Canvas->Lock();
for(int Index = m_BeginIndex; Index < m_EndIndex; Index++)
{
int var_ShowIndex = Index - m_BeginIndex;
if(Index == m_CurrentItemIndex)
GetItem(Index)->DrawItem(m_Canvas, *GetItemRect(var_ShowIndex), true);
else
GetItem(Index)->DrawItem(m_Canvas, *GetItemRect(var_ShowIndex), false);
}
m_Canvas->Unlock();
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::RemoveItem(int Index)
{
if(ItemsCount == 0 || Index < 0 || Index > ItemsCount)
return;
if(Index == FDefItemIndex)
FDefItemIndex = -1;
else if(Index > FDefItemIndex)
FDefItemIndex--;
m_ItemList->Delete(Index);
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::ScrollPos(int Pos)
{
if(Pos >= 0 && Pos < ItemsCount)
{
int var_bIndex = Pos;
int var_eIndex = Pos + m_RealShowCount;
if(var_eIndex > ItemsCount)
{
var_eIndex = ItemsCount;
var_bIndex = var_eIndex - m_RealShowCount;
}
if(var_bIndex != m_BeginIndex)
{
m_BeginIndex = var_bIndex;
m_EndIndex = var_eIndex;
PaintWindow(NULL);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::SetShowItemsCount(int Value)
{
if(FShowItemsCount != Value)
{
FShowItemsCount = Value;
DoShowItemsChange();
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::Show()
{
TWinControl::Show();
m_pActiveWnd = GetActiveWindow();
SetActiveWindow(Handle);
//if(FDefItemIndex == -1)
//m_CurrentItemIndex = 0;
//else
m_CurrentItemIndex = FDefItemIndex;
if(m_CurrentItemIndex == -1)
{
m_BeginIndex = 0;
m_EndIndex = m_RealShowCount;
ScrollPos(0);
}
else
{
m_BeginIndex = m_CurrentItemIndex;
m_EndIndex = m_CurrentItemIndex + m_RealShowCount;
if(m_EndIndex > ItemsCount)
{
m_EndIndex = ItemsCount;
m_BeginIndex = m_EndIndex - m_RealShowCount;
}
if(m_CurrentItemIndex < m_BeginIndex || m_CurrentItemIndex >= m_EndIndex)
{
int var_eIndex = m_CurrentItemIndex + 1;
if(var_eIndex < m_RealShowCount)
ScrollPos(m_BeginIndex);
else
ScrollPos(m_EndIndex - m_RealShowCount);
}
}
if(ItemsCount == 0)
Height = 10;
else
Height = FItemHeight * m_RealShowCount;
if(m_ScrollBar)
{
m_ScrollBar->Height = Height - 2;
m_ScrollBar->Left = Width - m_ScrollBar->Width - 1;
m_ScrollBar->Top = 1;
if(m_RealShowCount < ItemsCount)
{
m_ScrollBar->Visible = true;
FItemWidth = m_ScrollBar->Left;
m_ScrollBar->SetRange(0, ItemsCount - 1);
m_ScrollBar->SetPageSize(m_RealShowCount);
m_ScrollBar->SetPosition(m_BeginIndex);
DoShowItemsChange();
}
else
{
m_ScrollBar->Visible = false;
FItemWidth = Width - 1;
DoShowItemsChange();
}
}
if(FOnShow) FOnShow(this);
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMEraseBkgnd(TWMEraseBkgnd &Message)
{
TCanvas* var_BKCanvas = new TCanvas();
var_BKCanvas->Handle = Message.DC;
TRect var_Rect = GetClientRect();
var_BKCanvas->Brush->Color = CP_BACKGRND; // 绘制底色
var_BKCanvas->FillRect(var_Rect);
var_BKCanvas->Brush->Color = CP_BORDER; // 绘制边框
var_BKCanvas->FrameRect(var_Rect);
delete var_BKCanvas;
var_BKCanvas = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMKeyDown(TWMKeyDown &Message)
{
if(ItemsCount == 0) return;
if(Message.CharCode == VK_UP)
{
int var_Index = m_CurrentItemIndex - 1;
if(var_Index < 0) var_Index = 0;
DoKeyUpDown(var_Index);
}
else if(Message.CharCode == VK_DOWN)
{
int var_Index = m_CurrentItemIndex + 1;
if(var_Index >= ItemsCount) var_Index = ItemsCount - 1;
DoKeyUpDown(var_Index);
}
else if(Message.CharCode == VK_ESCAPE)
{
Hide();
}
else if(Message.CharCode == VK_RETURN)
{
DoItemClicked(m_CurrentItemIndex);
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMKillFocus(TMessage &Message)
{
Hide();
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMLButtonDown(TWMLButtonDown &Message)
{
TWinControl::Dispatch(&Message);
if(m_ScrollBar)
{
}
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMMouseWheel(TWMMouseWheel &Message)
{
UINT nSBCode;
if(Message.WheelDelta < 0)
{
nSBCode = SB_LINEDOWN;
}
else
{
nSBCode = SB_LINEUP;
}
if(m_ScrollBar->Visible)
Perform(WM_VSCROLL, MAKELONG(nSBCode, 0), NULL);
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMPaint(TWMPaint &Message)
{
PaintHandler(Message);
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMSetFocus(TMessage &Message)
{
}
//---------------------------------------------------------------------------
void __fastcall TDropListView::WMVScroll(TWMScroll &Message)
{
int minpos, maxpos, page, curpos;
m_ScrollBar->GetScrollRange(& minpos, & maxpos);
page = m_ScrollBar->GetPageSize();
curpos = m_ScrollBar->GetScrollPos();
switch(Message.ScrollCode)
{
case SB_TOP:
curpos = minpos;
break;
case SB_BOTTOM:
curpos = maxpos - page + 1;
break;
case SB_ENDSCROLL:
break;
case SB_LINEUP:
if(curpos > minpos)
{
curpos--;
}
break;
case SB_LINEDOWN:
if(curpos < maxpos - page + 1)
{
curpos++;
}
break;
case SB_PAGEUP:
if(curpos > minpos)
{
curpos = MAX(minpos, curpos - page);
}
break;
case SB_PAGEDOWN:
if(curpos < maxpos)
{
curpos = MIN(maxpos - page + 1, curpos + page);
}
break;
case SB_THUMBPOSITION:
curpos = Message.Pos;
break;
case SB_THUMBTRACK:
curpos = Message.Pos;
break;
}
if(Message.ScrollBar != m_ScrollBar->Handle)
{
m_ScrollBar->SetPosition(curpos);
}
ScrollPos(curpos);
}
//---------------------------------------------------------------------------
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
+654
View File
@@ -0,0 +1,654 @@
[Closed Files]
File_0=TSourceModule,'E:\Ac_Project\Ac_Windows\PngButton\PNGButton.pas',0,1,181,82,200,0,0,,
File_1=TSourceModule,'d:\program file\embarcadero\studio\23.0\include\dinkumware\xlocnum',0,1,1586,20,1618,0,0,,
File_2=TSourceModule,'E:\Ac_Project\Ac_Windows\PngButton\TPNGButtonPCH1.h',0,1,1,1,1,0,0,,
File_3=TSourceModule,'d:\program file\embarcadero\studio\23.0\include\windows\crtl\typeinfo.h',0,1,122,2,154,0,0,,
File_4=TSourceModule,'E:\BCB_Project\Apps\UKeyApps\SLPChecker\SLPChecker.cpp',0,1,1,99,594,0,0,,
File_5=TSourceModule,'E:\BCB_Project\Apps\UKeyApps\SLPrint\PrintThread.cpp',0,1,1,1,1,0,0,,
File_6=TSourceModule,'E:\BCB_Project\Apps\UKeyApps\SLPChecker\Common.cpp',0,1,34,63,66,0,0,,
File_7=TSourceModule,'E:\BCB_Project\Apps\UKeyApps\SLPChecker\SLPChecker.vrc',0,1,1,1,2,0,0,,
File_8=TSourceModule,'E:\BCB_Project\Apps\Global\GlobalUnit.cpp',0,1,1,1,1,0,0,,
File_9=TSourceModule,'E:\BCB_Project\Apps\TotalGoals\Datas.cpp',0,1,1834,55,1847,0,0,,
File_10=TSourceModule,'E:\BCB_Project\Apps\TotalGoals\TGsMain.cpp',0,1,1378,115,1406,0,0,,
File_11=TSourceModule,'E:\BCB_Project\Apps\SportteryHedge\SLHdgMain.cpp',0,1,1,1,1,0,0,,
File_12=TSourceModule,'E:\BCB_Project\Apps\TotalGoals\HGPanelUnit.cpp',0,1,145,75,169,0,0,,
File_13=TSourceModule,'E:\BCB_Project\Apps\TotalGoals\BDPanelUnit.cpp',0,1,134,57,79,0,0,,
File_14=TSourceModule,'E:\BCB_Project\Apps\TotalGoals\SLPanelUnit.cpp',0,1,9,56,26,0,0,,
[Modules]
Count=0
EditWindowCount=1
[EditWindow0]
ViewCount=0
CurrentView=-1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=9938
Height=9253
MaxLeft=-1
MaxTop=-1
ClientWidth=9938
ClientHeight=9253
TBDockHeight=4476
LRDockWidth=3621
Dockable=1
StayOnTop=0
DockedToMainForm=1
BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0
TopPanelSize=0
LeftPanelSize=1895
LeftPanelClients=PropertyInspector,DockSite3
LeftPanelData=00000800010100000000251000000000000001670700000000000001000000005A0E000009000000446F636B53697465330100000000B31C00001100000050726F7065727479496E73706563746F72FFFFFFFF
RightPanelSize=1996
RightPanelClients=DockSite2,DockSite4
RightPanelData=00000800010100000000251000000000000001CC0700000000000001000000004912000009000000446F636B53697465320100000000B31C000009000000446F636B5369746534FFFFFFFF
BottomPanelSize=1542
BottomPanelClients=DockSite1,MessageView
BottomPanelData=0000080001020100000009000000446F636B536974653103450000000000000206060000000000000100000000034500000F0000004D65737361676556696577466F726DFFFFFFFF
BottomMiddlePanelSize=0
BottomMiddlePanelClients=DockSite0,GraphDrawingModel
BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779F1D00000000000002F206000000000000FFFFFFFF
[Watches]
Count=0
[WatchWindow]
WatchColumnWidth=120
WatchShowColumnHeaders=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=216
LRDockWidth=13602
Dockable=1
StayOnTop=0
[Breakpoints]
Count=0
[EmbarcaderoWin32Debugger_AddressBreakpoints]
Count=0
[EmbarcaderoWin64Debugger_AddressBreakpoints]
Count=0
[EmbarcaderoWin64LLDBDebugger_AddressBreakpoints]
Count=0
[Main Window]
PercentageSizes=1
Create=1
Visible=1
Docked=0
State=2
Left=145
Top=273
Width=8930
Height=8520
MaxLeft=-4
MaxTop=-7
MaxWidth=8930
MaxHeight=8520
ClientWidth=10000
ClientHeight=10057
BottomPanelSize=8944
BottomPanelClients=EditWindow0
BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF
[ProjectManager]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=4382
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=4382
TBDockHeight=5898
LRDockWidth=2348
Dockable=1
StayOnTop=0
[MessageView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=28
Width=9938
Height=1394
MaxLeft=-1
MaxTop=-1
ClientWidth=9938
ClientHeight=1394
TBDockHeight=1394
LRDockWidth=2770
Dockable=1
StayOnTop=0
[ToolForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=2557
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=2557
TBDockHeight=7155
LRDockWidth=1996
Dockable=1
StayOnTop=0
[PropertyInspector]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=557
Width=1895
Height=3599
MaxLeft=-1
MaxTop=-1
ClientWidth=1895
ClientHeight=3599
PixelsPerInch=96
MonitorNum=0
TBDockHeight=4274
LRDockWidth=1895
Dockable=1
StayOnTop=0
SplitPos=111
[frmDesignPreview]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=4073
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=4073
TBDockHeight=5955
LRDockWidth=2512
Dockable=1
StayOnTop=0
[TemplateView]
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=0
Top=0
Width=273
Height=359
MaxLeft=-1
MaxTop=-1
ClientWidth=273
ClientHeight=359
TBDockHeight=359
LRDockWidth=273
Dockable=1
StayOnTop=0
Name=120
Description=334
filter=1
[DebugLogView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=409
LRDockWidth=4949
Dockable=1
StayOnTop=0
[ThreadStatusWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=216
LRDockWidth=7406
Dockable=1
StayOnTop=0
Column0Width=145
Column1Width=100
Column2Width=115
Column3Width=619
[LocalVarsWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=1537
LRDockWidth=3484
Dockable=1
StayOnTop=0
[CallStackWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=2062
LRDockWidth=3484
Dockable=1
StayOnTop=0
[PatchForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=2500
LRDockWidth=3398
Dockable=1
StayOnTop=0
[FindReferencsForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=2320
LRDockWidth=2824
Dockable=1
StayOnTop=0
[RefactoringForm]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=3211
LRDockWidth=2824
Dockable=1
StayOnTop=0
[ToDo List]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=2340
Height=1279
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1279
TBDockHeight=1157
LRDockWidth=3676
Dockable=1
StayOnTop=0
Column0Width=314
Column1Width=30
Column2Width=150
Column3Width=172
Column4Width=129
SortOrder=4
ShowHints=1
ShowChecked=1
[DataExplorerContainer]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1996
Height=4073
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=4073
TBDockHeight=4885
LRDockWidth=7148
Dockable=1
StayOnTop=0
[GraphDrawingModel]
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=0
Top=0
Width=2855
Height=3211
MaxLeft=-1
MaxTop=-1
ClientWidth=2855
ClientHeight=3211
TBDockHeight=3211
LRDockWidth=2855
Dockable=1
StayOnTop=0
[BreakpointWindow]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=3824
Height=1221
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1221
TBDockHeight=1545
LRDockWidth=8742
Dockable=1
StayOnTop=0
Column0Width=200
Column1Width=75
Column2Width=200
Column3Width=200
Column4Width=200
Column5Width=75
Column6Width=75
[StructureView]
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=0
Width=1895
Height=3542
MaxLeft=-1
MaxTop=-1
ClientWidth=1895
ClientHeight=3542
TBDockHeight=3678
LRDockWidth=1895
Dockable=1
StayOnTop=0
[ParnassusBookmarksForm]
PercentageSizes=1
Create=1
Visible=0
Docked=0
State=0
Left=0
Top=0
Width=2227
Height=2364
MaxLeft=-4
MaxTop=-7
ClientWidth=2164
ClientHeight=2083
TBDockHeight=2364
LRDockWidth=2227
Dockable=1
StayOnTop=0
[BorlandEditorCodeExplorer@EditWindow0]
PercentageSizes=1
Create=1
Visible=0
Docked=0
State=0
Left=0
Top=0
Width=1824
Height=6171
MaxLeft=-4
MaxTop=-7
ClientWidth=1762
ClientHeight=5891
TBDockHeight=6171
LRDockWidth=1824
Dockable=1
StayOnTop=0
[DockHosts]
DockHostCount=5
[DockSite0]
HostDockSite=DockBottomCenterPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=8
Top=8
Width=2340
Height=1480
MaxLeft=-1
MaxTop=-1
ClientWidth=2340
ClientHeight=1480
PixelsPerInch=96
MonitorNum=0
TBDockHeight=1480
LRDockWidth=2340
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=RefactoringForm
TabDockClients=RefactoringForm,PatchForm,FindReferencsForm,ToDo List
[DockSite1]
HostDockSite=DockBottomPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=0
Docked=1
State=0
Left=8
Top=8
Width=3824
Height=1422
MaxLeft=-1
MaxTop=-1
ClientWidth=3824
ClientHeight=1422
PixelsPerInch=96
MonitorNum=0
TBDockHeight=1422
LRDockWidth=3824
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=DebugLogView
TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow
[DockSite2]
HostDockSite=DockRightPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=28
Width=1996
Height=4583
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=4583
PixelsPerInch=96
MonitorNum=0
TBDockHeight=4274
LRDockWidth=1996
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=ProjectManager
TabDockClients=ProjectManager,DataExplorerContainer,frmDesignPreview
[DockSite3]
HostDockSite=DockLeftPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=28
Width=1895
Height=3542
MaxLeft=-1
MaxTop=-1
ClientWidth=1895
ClientHeight=3542
PixelsPerInch=96
MonitorNum=0
TBDockHeight=4274
LRDockWidth=1895
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=StructureView
TabDockClients=StructureView
[DockSite4]
HostDockSite=DockRightPanel
DockSiteType=1
PercentageSizes=1
Create=1
Visible=1
Docked=1
State=0
Left=0
Top=702
Width=1996
Height=2557
MaxLeft=-1
MaxTop=-1
ClientWidth=1996
ClientHeight=2557
PixelsPerInch=96
MonitorNum=0
TBDockHeight=4274
LRDockWidth=1996
Dockable=1
StayOnTop=0
TabPosition=1
ActiveTabID=ToolForm
TabDockClients=ToolForm,TemplateView
[ActiveProject]
ActiveProject=8
+120
View File
@@ -0,0 +1,120 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{CE208A77-9005-40A7-9448-30493E16683A}</ProjectGuid>
</PropertyGroup>
<ItemGroup>
<Projects Include="TCKBox.cbproj">
<Dependencies/>
</Projects>
<Projects Include="TComboBoxComponent.cbproj">
<Dependencies/>
</Projects>
<Projects Include="TGeneralDialogPanel.cbproj">
<Dependencies/>
</Projects>
<Projects Include="TLineEdit.cbproj">
<Dependencies/>
</Projects>
<Projects Include="TRadioBtn.cbproj">
<Dependencies/>
</Projects>
<Projects Include="TSkinTrackBar.cbproj">
<Dependencies/>
</Projects>
<Projects Include="TTextButton.cbproj">
<Dependencies/>
</Projects>
<Projects Include="TCapButton.cbproj">
<Dependencies/>
</Projects>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Default.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Default.Personality/>
</BorlandProject>
</ProjectExtensions>
<Target Name="TCKBox">
<MSBuild Projects="TCKBox.cbproj"/>
</Target>
<Target Name="TCKBox:Clean">
<MSBuild Projects="TCKBox.cbproj" Targets="Clean"/>
</Target>
<Target Name="TCKBox:Make">
<MSBuild Projects="TCKBox.cbproj" Targets="Make"/>
</Target>
<Target Name="TComboBoxComponent">
<MSBuild Projects="TComboBoxComponent.cbproj"/>
</Target>
<Target Name="TComboBoxComponent:Clean">
<MSBuild Projects="TComboBoxComponent.cbproj" Targets="Clean"/>
</Target>
<Target Name="TComboBoxComponent:Make">
<MSBuild Projects="TComboBoxComponent.cbproj" Targets="Make"/>
</Target>
<Target Name="TGeneralDialogPanel">
<MSBuild Projects="TGeneralDialogPanel.cbproj"/>
</Target>
<Target Name="TGeneralDialogPanel:Clean">
<MSBuild Projects="TGeneralDialogPanel.cbproj" Targets="Clean"/>
</Target>
<Target Name="TGeneralDialogPanel:Make">
<MSBuild Projects="TGeneralDialogPanel.cbproj" Targets="Make"/>
</Target>
<Target Name="TLineEdit">
<MSBuild Projects="TLineEdit.cbproj"/>
</Target>
<Target Name="TLineEdit:Clean">
<MSBuild Projects="TLineEdit.cbproj" Targets="Clean"/>
</Target>
<Target Name="TLineEdit:Make">
<MSBuild Projects="TLineEdit.cbproj" Targets="Make"/>
</Target>
<Target Name="TRadioBtn">
<MSBuild Projects="TRadioBtn.cbproj"/>
</Target>
<Target Name="TRadioBtn:Clean">
<MSBuild Projects="TRadioBtn.cbproj" Targets="Clean"/>
</Target>
<Target Name="TRadioBtn:Make">
<MSBuild Projects="TRadioBtn.cbproj" Targets="Make"/>
</Target>
<Target Name="TSkinTrackBar">
<MSBuild Projects="TSkinTrackBar.cbproj"/>
</Target>
<Target Name="TSkinTrackBar:Clean">
<MSBuild Projects="TSkinTrackBar.cbproj" Targets="Clean"/>
</Target>
<Target Name="TSkinTrackBar:Make">
<MSBuild Projects="TSkinTrackBar.cbproj" Targets="Make"/>
</Target>
<Target Name="TTextButton">
<MSBuild Projects="TTextButton.cbproj"/>
</Target>
<Target Name="TTextButton:Clean">
<MSBuild Projects="TTextButton.cbproj" Targets="Clean"/>
</Target>
<Target Name="TTextButton:Make">
<MSBuild Projects="TTextButton.cbproj" Targets="Make"/>
</Target>
<Target Name="TCapButton">
<MSBuild Projects="TCapButton.cbproj"/>
</Target>
<Target Name="TCapButton:Clean">
<MSBuild Projects="TCapButton.cbproj" Targets="Clean"/>
</Target>
<Target Name="TCapButton:Make">
<MSBuild Projects="TCapButton.cbproj" Targets="Make"/>
</Target>
<Target Name="Build">
<CallTarget Targets="TCKBox;TComboBoxComponent;TGeneralDialogPanel;TLineEdit;TRadioBtn;TSkinTrackBar;TTextButton;TCapButton"/>
</Target>
<Target Name="Clean">
<CallTarget Targets="TCKBox:Clean;TComboBoxComponent:Clean;TGeneralDialogPanel:Clean;TLineEdit:Clean;TRadioBtn:Clean;TSkinTrackBar:Clean;TTextButton:Clean;TCapButton:Clean"/>
</Target>
<Target Name="Make">
<CallTarget Targets="TCKBox:Make;TComboBoxComponent:Make;TGeneralDialogPanel:Make;TLineEdit:Make;TRadioBtn:Make;TSkinTrackBar:Make;TTextButton:Make;TCapButton:Make"/>
</Target>
<Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
</Project>
@@ -0,0 +1,353 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "GeneralDialogPanel.h"
#pragma package(smart_init)
#include "PNGButton.cpp"
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
//
static const char *pngImage =
"89504E470D0A1A0A0000000D49484452000000450000001208060000000D0613"\
"66000000097048597300000B1300000B1301009A9C1800000A4D694343505068"\
"6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF"\
"F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A"\
"561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5"\
"7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8"\
"1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC"\
"01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200"\
"C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05"\
"00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2"\
"00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C"\
"CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97"\
"4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313"\
"48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F"\
"223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA"\
"560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED"\
"2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383"\
"FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A"\
"F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86"\
"4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432"\
"79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0"\
"812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C"\
"0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70"\
"170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261"\
"48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA"\
"90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F"\
"5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961"\
"5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402"\
"8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2"\
"272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93"\
"48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90"\
"6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452"\
"A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650"\
"2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83"\
"1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7"\
"192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295"\
"3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9"\
"09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685"\
"46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9"\
"EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C"\
"4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED"\
"EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB"\
"79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31"\
"3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87"\
"67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94"\
"6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85"\
"A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6"\
"5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29"\
"D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B"\
"743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6"\
"4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD"\
"D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7"\
"C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E"\
"3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B"\
"FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5"\
"0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1"\
"15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0"\
"476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67"\
"BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845"\
"F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC"\
"A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7"\
"6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA"\
"68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C"\
"949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423"\
"F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433"\
"DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317"\
"772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2"\
"A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17"\
"955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4"\
"EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E"\
"CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9"\
"26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD"\
"8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF"\
"B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C"\
"7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD"\
"EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293"\
"E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7"\
"5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F"\
"EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6"\
"EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07"\
"FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247"\
"CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73"\
"ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC"\
"CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F"\
"F73EE77CFEFC2FF784F3FB25D29F330000067F4944415478DABD58094C944714"\
"9EDD85656529085A400B495913D46A9346894DDAC4A3BA2A566CB54A8B72552C"\
"2A022D2AD178228256299472C8214D056FA86D53A807A65A4D5AABD1A6D15A95"\
"8A3D14C55A05916365D9DDBE61DFB06F87DD4093EA9FBCFCF3CF3FF3E69B6FDE"\
"BCF76614168B853D89C7643289A282881245419A5A50E4F6F4BF19C522B55738"\
"18E3BFEA96755A1494143291FFF3E124A8405C405C515CB05E8031E19B122740"\
"77811851BAB0AD994C5249C610A220933413DD322926223DC43F695204684E84"\
"1B883B881644837574E2666C4F09E3F5069036907690C7488E9828255C4D4458"\
"A323C205295C4727911EC26552B8724F102F029A21B02604C627E40D32800CC0"\
"81B6A018255254488816F5FAE07B004EC6420029B14E41087908F200DF6D488C"\
"98A8205C8DFAB4F816C4D0AD27B0084238CE0ED4D981C4181D598A666EF8DBE9"\
"D7AFD7A7D2E5562A955D5151917129EF27D7565656BD94959D73C068347AD136"\
"414141B95F1EAA5A830350525C10A857C4FCC8942B57AFA648BA4D5B32338AA7"\
"4F9BFAD7C54B977CE2172F4D34180C5ADA263838B8A0F2C0BE2C24A61D096384"\
"14F7D7C366A53434DC5E27E34E4A5CB6FCDDD898BA13274FFAAD5ABD264FC6ED"\
"EFEFBFEDE8E19AED8418879612307DC6CC838D8D8DE368673737B7FB39D9592B"\
"D7AEDBB0AAB9B97904FDE7EBEBFB53EDD1C373A178CB81A5085206720C00BE10"\
"C087D0FE1E1E1E8FCA4A4B76AE484D0D877F0112E89F01F4122836A2B5762029"\
"165CF96E5238E99326EB773535358DEF2F6E2F2FCF1F4E9D3C1149C8363A2285"\
"BF34A74E9F0E0156BF80157B962A51A954066E4DB44EA3D1DCDBBC296D9E5E3F"\
"E52C9A3B7D84C96A9094217575752F2E5C149FDDDADA3A9036747575ED845554"\
"4B643517EF284C1D3D7AD445F8BC0DD28C63C8DBA79B9433677ED4A5AC5879A0"\
"BFB83FDCBA65C1C409E37FEB0F297C22CF64E77C1CB177DFFE02B3D9ECC29C3C"\
"0A85C23C3FE29DA4D4952BF6C0E723661FFE7A3031AB4FE1663B0444575D5DA3"\
"DFB8293D0E74AB9CE906D3B7AC5FB7B66CF69B6FD4C2E70D903B085EF814C66C"\
"3E6800EA1F5C5C523AB17467D9B6BE702F8A5BB87A59C2D26FE1F31FD42B2CD0"\
"EC2CFAF0C1862E5E92B0F9ECB973B1CE94BF3C6EDCAE92E21D1BA0D8C06C61B2"\
"D7FC98D5F171D0FE9C149091EB37A64DE4E438D31D1636F33858E07750BC0A52"\
"CFACDB8783EF64F6215990C20304B79021807B5E3F705721D1F7983540F46C4B"\
"67A4F08102DF9A175E545F7F639A33E5C386E98E1DAAAAE4FBFD26593D47A4B8"\
"21686E29C340462C8A5F3CFBFCF90B639DE90E09197B01FCCC5750BC82A4DC41"\
"F08F9D90E285A4F803EEE47EE0CE27A4504B71480A9F84F772F07AE0B157B13E"\
"1EFD94C95BB3B66FCB665627285B8BC80D844F190AA2CBFD242F7C5779C59CBE"\
"7483891F4A5C96C057946F1FEA53689EC2497147FD83C117461CABAD5DDE97EE"\
"D0D0E91F6DCDCC38C8ACDB87EB1551CDE1F6D102E0D0FC82C2DDB27352ABD54D"\
"9D9D9DDEB48E3B31087B51B131D1479835E6CBA48895E4FD86D61E3FFE2A4482"\
"4CD9A96AB5EEAD6D6DED1EB48E3BDFCC8CF4B553F5FAEF91141A7DC4027247DB"\
"9D039557EC0EC9CB2F28EF2FEEE4A4C49898E8A8F3CC96033974B46ED7AED58D"\
"8C7B2FFE6B880E8154C9A0413EBF1415166C84C8912BFF832871F3D39DA5B386"\
"0F0FE6A6FE58224544079F9BB76E3DBF2032BAA2A5A5E539DA3F3030F04FD82A"\
"FBE74746C6DDBFFFC02E72787A7A36ECDD53111D1810F007B32671224A0852BA"\
"33E5CB977FF503DCD510798264DC25454519B10BE3B264DC10817E07DC61A346"\
"BD7097D932E65EA4784C0B9DB1FFEEDDBF67D2CE3CD66F4E4F9B032B760556E3"\
"15B0A27D5D5D5DEEB48D9F9F6FCDB1238723A0D84AAAEDCC1B74E7CBBAB55A6D"\
"CBEEF2CF72753ADD23708EBE49C91F24C1AA6A1CE84E62F6662EF294EE6C76C2"\
"A4D78A1F3E6C992BE3DE51989F3076CC98E6EA9A6F02D236A5E7C11CED1243C8"\
"553E875C6509B3256F26991411253C992D25B620106EBA069CA048F37BBA32AB"\
"1314D1815A0A27458326CEF7BD0FEAD7206966664BF34532A6C46F03EA7D8084"\
"B4619DBC7DD4ACF7B94A9C7D449A2FCE490A664BF3E9B94AA4F9E6A771201413"\
"D52070772C8B3CC2C46C074271B853927F1D08BA1D276164B64847F58BC3A02B"\
"B33F65D3444F29E93632DB8150E87D2AA764015C9C64C5D5015D497A925531FB"\
"53AEB83AA027590BEB7DD5E0E2A0AFD02F1E25C144C7168BF254AE0E2831F482"\
"C9D9458F7C5944FFC9174D8C3DA14BA67F0133893470B75DAFB1000000004945"\
"4E44AE426082";
//---------------------------------------------------------------------------
static const COLORREF
CLR_TXT_HOT = RGB(171, 186, 207), //d5dde8
CLR_BKG_EXTERNAL_ROUND = RGB(107, 115, 126),
CLR_BKG_EXTERNAL_FRMAE = RGB(145, 156, 170),
CLR_BKG_INTERNAL = RGB(65, 70, 77 ),
CLR_BKG_INTERNAL_LINE_HIG = RGB(118, 126, 134),
CLR_BKG_INTERNAL_LINE_BLACK = RGB(32, 36, 41 );
//---------------------------------------------------------------------------
static inline void ValidCtrCheck(TGeneralDialogPanel *)
{
new TGeneralDialogPanel(NULL);
}
//---------------------------------------------------------------------------
#define PNGCLOSE_LEFT Width - m_imgClose->Width/3 - 2
#define PNGCLOSE_TOP 3
__fastcall TGeneralDialogPanel::TGeneralDialogPanel(TComponent* Owner)
: TPanel(Owner)
{
Color = CLR_BKG_INTERNAL;
FOnCanceled = NULL;
m_imgClose = new TPngImage();
TMemoryStream *pngStream = new TMemoryStream();
String pngData = pngImage;
int length = pngData.Length();
const char *temppngImage = pngImage;
unsigned char buffer[10000];
for(int i=0;i<length;i++){
sscanf(temppngImage, "%02hhx", &buffer[i]);
temppngImage += 2;
}
pngStream->Position = 0;
pngStream->WriteBuffer(buffer, length);
pngStream->Position = 0;
m_imgClose->LoadFromStream(pngStream);
delete pngStream;
m_btnClose = new CBTPNButton(this);
m_btnClose->SetStateCount( 3 );
m_btnClose->SetPngImg( m_imgClose );
m_btnClose->SetColor( Color );
m_btnClose->Left = PNGCLOSE_LEFT;
m_btnClose->Top = PNGCLOSE_TOP;
m_btnClose->Hint = "关闭";
m_btnClose->ModalResult = System::Uitypes::mrCancel;
m_btnClose->Parent = this;
m_btnClose->OnClick = CloseClick;
Canvas->Font->Size = 9;
}
//---------------------------------------------------------------------------
__fastcall TGeneralDialogPanel::~TGeneralDialogPanel()
{
if(m_imgClose)
delete m_imgClose;
if(m_btnClose)
delete m_btnClose;
}
//---------------------------------------------------------------------------
namespace Generaldialogpanel
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TGeneralDialogPanel)};
RegisterComponents(L"Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::CloseClick(TObject *Sender)
{
if( FOnCanceled )
FOnCanceled( this );
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::WMEraseBkgnd(Winapi::Messages::TWMEraseBkgnd &Message)
{
TRect rect = GetClientRect();
TRect rectFill = rect;
TCanvas* tempCanvas = new TCanvas;
tempCanvas->Handle = Message.DC;
rectFill.Top = rectFill.Top + LEN_BKG_EXTERNAL_ROUND;
rectFill.Left = rectFill.Left + LEN_BKG_EXTERNAL_ROUND;
rectFill.Right = rectFill.Right - LEN_BKG_EXTERNAL_ROUND;
rectFill.Bottom = rectFill.Bottom - LEN_BKG_EXTERNAL_ROUND;
tempCanvas->Brush->Color = CLR_BKG_INTERNAL;
tempCanvas->FillRect( rectFill );
delete tempCanvas;
Message.Result = true;
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::WMSize(Winapi::Messages::TWMSize &Message)
{
DefaultHandler( &Message );
m_btnClose->Left = PNGCLOSE_LEFT;
m_btnClose->Top = PNGCLOSE_TOP;
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::CreateWnd()
{
Vcl::Extctrls::TPanel::CreateWnd();
Canvas->Font->Assign(Font);
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::Paint(void)
{
//==========画圆角
Canvas->Pen->Color = CLR_BKG_EXTERNAL_ROUND;
int X,Y;
//上面的
Y = 0;
X = 0;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
X = Width - LEN_BKG_EXTERNAL_ROUND;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
//下面的
Y = Height - LEN_BKG_EXTERNAL_ROUND;
X = 0;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
X = Width - LEN_BKG_EXTERNAL_ROUND;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
//===========画边框
Canvas->Pen->Color = CLR_BKG_EXTERNAL_FRMAE;
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, 0 );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, 0 );
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
Canvas->MoveTo( 0, LEN_BKG_EXTERNAL_FRMAE );
Canvas->LineTo( 0, Height-LEN_BKG_EXTERNAL_FRMAE );
Canvas->MoveTo( Width-LEN_BKG_EXTERNAL_FRMAE, LEN_BKG_EXTERNAL_FRMAE );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
//===========画分割线
int iLineHeight = LEN_BKG_INTERNAL_LINE;
Canvas->Pen->Color = CLR_BKG_INTERNAL_LINE_HIG;
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight );
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight+2 );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight+2 );
Canvas->Pen->Color = CLR_BKG_INTERNAL_LINE_BLACK;
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight+1 );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight+1 );
//画标题
Canvas->Font->Color = CLR_TXT_HOT;
Canvas->Brush->Style = bsClear;
TSize size = Canvas->TextExtent( Caption );
X = LEN_BKG_EXTERNAL_FRMAE + ( Width - size.Width )/2,
Y = LEN_BKG_EXTERNAL_FRMAE + ( LEN_BKG_INTERNAL_LINE-size.Height )/2;
Canvas->TextOut( X, Y, Caption );
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y)
{
if (X > Left + 10 && X < Left + Width - 50 && Y < Top + LEN_BKG_INTERNAL_LINE){
ReleaseCapture();
Parent->Perform(WM_NCLBUTTONDOWN,HTCAPTION, 0);
}else{
Vcl::Extctrls::TPanel::MouseDown(Button, Shift, X, Y);
}
}
//---------------------------------------------------------------------------
@@ -0,0 +1,54 @@
//---------------------------------------------------------------------------
/////////////////////////////////
////////安装 记得在生成编译包的工程和使用工程中加图片 Res\System\close.png -->L"PngImage_Close"
/////////////////////////////////
#ifndef GeneralDialogPanelH
#define GeneralDialogPanelH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.jpeg.hpp>
#include <Vcl.Graphics.hpp>
//---------------------------------------------------------------------------
class CBTPNButton;
#define LEN_BKG_EXTERNAL_ROUND 1
#define LEN_BKG_EXTERNAL_FRMAE 1
#define LEN_BKG_INTERNAL_LINE 23
//---------------------------------------------------------------------------
class PACKAGE TGeneralDialogPanel : public TPanel
{
private:
TNotifyEvent FOnCanceled; // 关闭窗口事件
TPngImage *m_imgClose;
CBTPNButton *m_btnClose;
void __fastcall CloseClick(TObject *Sender);
MESSAGE void __fastcall WMEraseBkgnd(Winapi::Messages::TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP(Vcl::Extctrls::TPanel)
protected:
virtual void __fastcall Paint(void);
virtual void __fastcall CreateWnd();
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button,
System::Classes::TShiftState Shift, int X, int Y);
public:
__fastcall TGeneralDialogPanel(TComponent* Owner);
__fastcall ~TGeneralDialogPanel();
__published:
__property TNotifyEvent OnCanceled = {write = FOnCanceled, read = FOnCanceled};
};
//---------------------------------------------------------------------------
#endif
+205
View File
@@ -0,0 +1,205 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "PNGButton.h"
//#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
//static inline void ValidCtrCheck(TPNGButton *)
//{
// new TPNGButton(NULL);
//}
////---------------------------------------------------------------------------
__fastcall CBTPNButton::CBTPNButton(TComponent* Owner)
: TGraphicControl(Owner)
{
Height = 25; //a default Height
Width = 75; //a default Width
FStateCount = 4; //default state count
FPngImg = new Vcl::Imaging::Pngimage::TPngImage(); //we create our png
FDown = false;
}
//---------------------------------------------------------------------------
__fastcall CBTPNButton::~CBTPNButton(void)
{
if(FPngImg)
delete FPngImg; //destroy our png
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::SetStateCount( int count )
{
if( count>4 ) count = 4;
if( count<2 ) count = 2;
FStateCount = count;
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::SetPngImg(Vcl::Imaging::Pngimage::TPngImage *value)
{
FPngImg->Assign(value);
//Now setting the component width and height by the png image used
Height = FPngImg->Height;
Width = FPngImg->Width / FStateCount;
Constraints->MaxHeight = Height;
Constraints->MinHeight = Height;
Constraints->MaxWidth = Width;
Constraints->MinWidth = Width;
EtatBtn = 0; //reset the component state to normal
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::SetDown(bool value)
{
if( FStateCount<3 )
value = false;
FDown = value;
if( FDown==False )
EtatBtn = 0; //is the mouse down is false then we reset the component state to normal
Paint();
// Refresh(); //we repaint the componet)
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::SetColor( TColor value )
{
FBkColor = value;
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::Paint(void)
{
TRect rect = GetClientRect();
Canvas->Brush->Color = FBkColor;
Canvas->FillRect( rect );
if( FPngImg ){
switch( EtatBtn ){
case 0:
FPngImg->Draw( Canvas, Rect(0, 0, FStateCount*Width, Height) ); // Normal
break;
case 1:
FPngImg->Draw( Canvas, Rect(-Width, 0, (FStateCount-1)*Width, Height) ); // Mouse Entered
break;
case 2:
FPngImg->Draw( Canvas, Rect(-(Width*2), 0, (FStateCount-2)*Width, Height) ); // Pressed
break;
case 3:
FPngImg->Draw( Canvas, Rect(-(Width*3), 0, (FStateCount-3)*Width, Height) ); // Disabled
break;
}
}
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::SetEnabled(bool Value)
{
if(FStateCount<4) //can't be disable
Value = true;
TGraphicControl::SetEnabled(Value);
if( Enabled )
EtatBtn = 0;
else
EtatBtn = 3;
Paint();
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::MouseDown(System::Uitypes::TMouseButton Button,
System::Classes::TShiftState Shift, int X, int Y)
{
TGraphicControl::MouseDown( Button, Shift, X, Y );
if( Button==mbLeft && Enabled && FStateCount>2){
EtatBtn = 2; // Pressed
Paint();
// Refresh();
}
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::MouseUp(System::Uitypes::TMouseButton Button,
System::Classes::TShiftState Shift, int X, int Y)
{
TGraphicControl::MouseUp( Button, Shift, X, Y );
if( Button==mbLeft && Enabled ){
if( X>=0 && X<Width && Y>=0 && Y<Height )
EtatBtn = 1; //Mouse Entered
else
EtatBtn = 0; //normal;
Paint();
// Refresh(); //repaint component
}
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::CMMouseEnter(Winapi::Messages::TMessage &Msg)
{
if( Enabled ){//&& !ComponentState.Contains(csDesigning) ){
EtatBtn = 1; // Mouse Entered
Paint();
// Refresh(); //repainting the component
}
if( FOnMouseEnter )
FOnMouseEnter(this); //if user set a mouse enter procedure then we execute it
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::CMMouseLeave(Winapi::Messages::TMessage &Msg)
{
if( Enabled ){//&& !ComponentState.Contains(csDesigning) ) {
EtatBtn = 0; //Normal
Paint();
// Refresh(); //repainting the component
}
if( FOnMouseLeave )
FOnMouseLeave(this); //if user set a mouse leave procedure then we execute it
}
//---------------------------------------------------------------------------
void __fastcall CBTPNButton::Click(void)
{
TCustomForm * parentForm = GetParentForm( this );
if( parentForm ){
parentForm->ModalResult = FModalResult;
parentForm->Close();
}
TGraphicControl::Click();
}
//---------------------------------------------------------------------------
//namespace Pngbutton
//{
// void __fastcall PACKAGE Register()
// {
// TComponentClass classes[1] = {__classid(TPNGButton)};
// RegisterComponents(L"Samples", classes, 0);
// }
//}
////---------------------------------------------------------------------------
+108
View File
@@ -0,0 +1,108 @@
//---------------------------------------------------------------------------
/////////////////////////////////
////////安装 可以不用安装,直接用原来的 .pas文件安装
/////////////////////////////////
/////////////////////////////////
/////////使用
//--》供新的包使用
//把.cpp 中 #pragma package(smart_init) 去掉
//新包.cpp #include "PNGButton.cpp"
/////////////////////////////////
#ifndef PNGButtonH
#define PNGButtonH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.pnglang.hpp>
//---------------------------------------------------------------------------
//class PACKAGE TPNGButton : public TGraphicControl
class CBTPNButton : public TGraphicControl
{
public:
enum TModalResult{
mrNone = System::Int8(0x0),
mrOk = System::Int8(0x1),
mrCancel = System::Int8(0x2),
mrAbort = System::Int8(0x3),
mrRetry = System::Int8(0x4),
mrIgnore = System::Int8(0x5),
mrYes = System::Int8(0x6),
mrNo = System::Int8(0x7),
mrClose = System::Int8(0x8),
mrHelp = System::Int8(0x9),
mrTryAgain = System::Int8(0xa),
mrContinue = System::Int8(0xb),
mrAll = System::Int8(0xc),
mrNoToAll = System::Int8(0xd),
mrYesToAll = System::Int8(0xe)
};
private:
TNotifyEvent FOnMouseEnter;//on mouse enter notify event
TNotifyEvent FOnMouseLeave;//on mouse leave notify event
// System::Uitypes::TModalResult FModalResult;
TModalResult FModalResult;
MESSAGE void __fastcall CMMouseEnter(Winapi::Messages::TMessage &Msg); // to know when mouse is entered
MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Msg); // to know when mouse is leaved
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
END_MESSAGE_MAP(TGraphicControl)
protected:
int EtatBtn; // 0=Normal 1=Mouse entered 2=Pressed 3=Disabled
int FStateCount;
Vcl::Imaging::Pngimage::TPngImage *FPngImg; //our 4 states image
bool FDown; // value to know if we painting mouse down
TColor FBkColor;
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall SetEnabled(bool Value);
public:
__fastcall virtual CBTPNButton(System::Classes::TComponent* AOwner);
__fastcall virtual ~CBTPNButton(void);
void __fastcall SetStateCount( int count );
void __fastcall SetPngImg(Vcl::Imaging::Pngimage::TPngImage *value); // we set the png image
void __fastcall SetDown(bool value); // to know if mouse is down or not
void __fastcall SetColor( TColor value );
virtual void __fastcall Paint(void); // override the painting of the component
DYNAMIC void __fastcall Click(void);
__published:
__property Action;
__property Anchors = {default=3};
__property bool Down = {read=FDown, write=SetDown, default=False};
__property Enabled = {default=1};
__property int ImgStates = {read=FStateCount, write=SetStateCount, default=4};
// __property System::Uitypes::TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property ParentShowHint = {default=1};
__property Vcl::Imaging::Pngimage::TPngImage *PngImg = {read=FPngImg, write=SetPngImg};
__property PopupMenu;
__property ShowHint;
__property Visible = {default=1};
__property OnClick;
__property OnContextPopup;
__property OnMouseDown;
__property OnMouseMove;
__property OnMouseUp;
__property System::Classes::TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter};
__property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave};
};
//---------------------------------------------------------------------------
#endif
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
+784
View File
@@ -0,0 +1,784 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "LineEdit.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TLineEdit *)
{
new TLineEdit(NULL);
}
//---------------------------------------------------------------------------
__fastcall TLineEdit::TLineEdit(TComponent* Owner)
: TWinControl(Owner)
{
m_Canvas = new TControlCanvas();
m_Canvas->Control = this;
m_HintLabel = new TLabel(this);
m_HintLabel->Font->Color = TColor(0x594D43);
m_HintLabel->OnMouseDown = DoHintLabelMouseDown;
Height = 24;
Width = 124;
FBorderColor = TColor(0x5F5954);
FShadowColor = TColor(0x4C463F);
Color = TColor(0xC4B4A8);
FHintColor = TColor(0x594D43);
FMaxLength = 500;
FOnChange = NULL;
TabStop = true;
FNumberMax = -1;
FNumberMin = -1;
m_IsCreated = false;
}
//---------------------------------------------------------------------------
namespace Lineedit
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TLineEdit)};
RegisterComponents(L"Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
__fastcall TLineEdit::~TLineEdit()
{
if(m_Canvas)
{
delete m_Canvas;
m_Canvas = NULL;
}
if(m_HintLabel)
{
delete m_HintLabel;
m_HintLabel = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TLineEdit::SetTextFont(String name, int size)
{
Font->Name = name;
Font->Size = size;
m_HintLabel->Font->Name = Font->Name;
m_HintLabel->Font->Size = Font->Size;
}
//---------------------------------------------------------------------------
void __fastcall TLineEdit::AdjustThisSize()
{
// 设置创建圆角窗口
HRGN var_Hrgn;
var_Hrgn = CreateRoundRectRgn(0, 0, Width + 1, Height + 1, 3, 3);
SetWindowRgn(Handle, var_Hrgn, true);
DeleteObject(var_Hrgn);
// 获取字体高度
m_FontHeight = CalcFontHeight();
int var_EditTop = (Height - m_FontHeight) / 2;
// 计算编辑区位置
m_TextRect = GetClientRect();
m_TextRect.Left += 4;
m_TextRect.Right -= 4;
m_TextRect.Top = var_EditTop;
// 设置HintText位置
m_HintLabel->Top = m_TextRect.Top;
m_HintLabel->Left = m_TextRect.Left;
m_HintLabel->Width = m_TextRect.Width();
// 设置编辑区左右边距
SendMessage(Handle, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, 0);
// 设置编辑区域(多行编辑有效)
SendMessage(Handle, EM_SETRECT, 0, (LPARAM)(&m_TextRect));
}
int __fastcall TLineEdit::CalcColorValue(TColor Bg, TColor Fr, int Level, int Alpha)
{
return ((Bg * (Level - Alpha) + Fr * Alpha) / Level);
}
int __fastcall TLineEdit::CalcFontHeight()
{
// 计算字体高度
TTextMetric var_Metric;
HDC var_DC = GetDC(0);
SelectObject(var_DC, Font->Handle);
GetTextMetricsW(var_DC, &var_Metric);
ReleaseDC(0, var_DC);
return var_Metric.tmHeight;
}
void __fastcall TLineEdit::CreateShadowColor()
{
int var_R, var_G, var_B, var_Alpha;
int Level = (int)(atan(3.14 / 2) * 500);
// 计算阴影颜色
for(int var_Index = 0; var_Index < 4; var_Index++)
{
var_Alpha = (int)(atan(3.14 / (2 * 3) * var_Index) * 500);
var_R = CalcColorValue(GetRValue(FShadowColor), GetRValue(Color), Level, var_Alpha);
var_G = CalcColorValue(GetGValue(FShadowColor), GetGValue(Color), Level, var_Alpha);
var_B = CalcColorValue(GetBValue(FShadowColor), GetBValue(Color), Level, var_Alpha);
m_ShadowColorArray[var_Index] = RGB(var_R, var_G, var_B);
}
m_ShadowColorArray[4] = Color;
}
void __fastcall TLineEdit::CreateParams(TCreateParams &Params)
{
TWinControl::CreateParams(Params);
CreateSubClass(Params, L"EDIT");
DWORD var_Alignments[] = {ES_LEFT, ES_RIGHT, ES_CENTER};
DWORD var_CharCase[] = {0, ES_UPPERCASE, ES_LOWERCASE};
DWORD var_HideSelection[] = {ES_NOHIDESEL, 0};
DWORD var_NumbersOnly[] = {0, ES_NUMBER};
DWORD var_OEMConvert[] = {0, ES_OEMCONVERT};
DWORD var_PasswordChar[] = {0, ES_PASSWORD};
DWORD var_ReadOnly[] = {0, ES_READONLY};
Params.Style |= var_Alignments[FAlignment];
Params.Style |= var_CharCase[FCharCase];
Params.Style |= var_HideSelection[FHideSelection];
Params.Style |= var_NumbersOnly[FNumbersOnly];
Params.Style |= var_OEMConvert[FOEMConvert];
Params.Style |= var_PasswordChar[FPasswordChar != 0];
Params.Style |= var_ReadOnly[FReadOnly];
Params.Style |= ES_AUTOHSCROLL;
Params.Style |= ES_MULTILINE;
//Params.Style |= WS_TABSTOP;
//Params.ExStyle |= WS_EX_CONTROLPARENT;
}
void __fastcall TLineEdit::CreateWindowHandle(const TCreateParams &Params)
{
TWinControl::CreateWindowHandle(Params);
}
void __fastcall TLineEdit::CreateWnd()
{
TWinControl::CreateWnd();
m_HintLabel->Parent = this;
if(FPasswordChar != 0)
{
if(FPasswordChar == '*')
{
SendMessageW(Handle, EM_SETPASSWORDCHAR, L'', 0);
}
else
{
SendMessageW(Handle, EM_SETPASSWORDCHAR, FPasswordChar, 0);
}
}
if(FReadOnly)
{
SendMessage(WindowHandle, EM_SETREADONLY, 1, 0);
}
if(!m_IsCreated)
{
SetText(FText);
m_IsCreated = true;
}
SetMaxLength(FMaxLength);
AdjustThisSize();
}
void __fastcall TLineEdit::CMColorChanged(TMessage &Message)
{
CreateShadowColor();
Invalidate();
}
void __fastcall TLineEdit::CMFontChanged(TWMFontChange &Message)
{
TColor var_FontColor = Font->Color;
if(var_FontColor != m_FontColor) {
m_FontColor = var_FontColor; // 保存字体颜色
Invalidate();
}
else {
m_HintLabel->Font->Name = Font->Name;
m_HintLabel->Font->Size = Font->Size;
RecreateWnd();
}
}
void __fastcall TLineEdit::SetBorderColor(TColor Color)
{
if(FBorderColor != Color)
{
FBorderColor = Color;
SendMessage(Handle, CM_COLORCHANGED, 0, 0);
}
}
void __fastcall TLineEdit::SetCursorPos(int Pos)
{
//SendMessage(Handle, EM_SETSEL, Pos, Pos);
SendMessage(Handle, EM_SCROLL, SB_PAGEUP, 0);
}
void __fastcall TLineEdit::SetFocus()
{
m_HintLabel->Visible = false;
TWinControl::SetFocus();
}
void __fastcall TLineEdit::SetOnChange(TNotifyEvent OnChange)
{
FOnChange = OnChange;
}
void __fastcall TLineEdit::SetShadowColor(TColor Color)
{
if(FShadowColor != Color)
{
FShadowColor = Color;
SendMessage(Handle, CM_COLORCHANGED, 0, 0);
}
}
void __fastcall TLineEdit::ShowHintText()
{
if(Text.IsEmpty() && !Focused())
m_HintLabel->Visible = true;
else
m_HintLabel->Visible = false;
//if(Text.Length() == 0) m_HintLabel->Visible = true;
//else m_HintLabel->Visible = false;
}
void __fastcall TLineEdit::WMChar(TWMChar &Message)
{
if(Message.CharCode < 32)
{
switch(Message.CharCode)
{
case 1: // Ctrl + A
case 3: // 双击鼠标左键
SelectAll();
break;
default:
TWinControl::Dispatch(&Message);
}
}
else if(Message.CharCode == 32)
{
if(!FNumbersOnly)
TWinControl::Dispatch(&Message);
}
else
{
// 限制长度
String text = GetText();
int selStart = GetSelStart();
int selLen = GetSelLength();
text.Delete(selStart + 1, selLen);
if(text.Length() < FMaxLength)
{
if(FNumbersOnly)
{
if(Message.CharCode >= 0x30 && Message.CharCode <= 0x39)
{
if(FNumberMax != -1) {
wchar_t c = Message.CharCode;
if(!text.IsEmpty()) {
if(selStart == 0 && Message.CharCode == '0')
return;
if(StrToInt(text) == 0 && Message.CharCode == '0')
return;
}
text.Insert(String(c), selStart);
int num = StrToInt(text);
if(num <= FNumberMax) {
TWinControl::Dispatch(&Message);
}
}
else
TWinControl::Dispatch(&Message);
}
}
else
{
TWinControl::Dispatch(&Message);
}
}
else
{
//MessageBeep(MB_OK);
}
}
}
void __fastcall TLineEdit::WMCommand(TWMCommand &Message)
{
if(Message.NotifyCode == EN_CHANGE)
{
//ShowHintText();
Invalidate();
if(FOnChange) FOnChange(this);
}
}
void __fastcall TLineEdit::WMCtlColorEdit(TWMCtlColorEdit &Message)
{
if(GetTextColor(Message.ChildDC) != ColorToRGB(Font->Color))
SetTextColor(Message.ChildDC, ColorToRGB(Font->Color)); // 设置编辑文字颜色
//if(GetBkColor(Message.ChildDC) != ColorToRGB(Color))
//{
// SetBkColor(Message.ChildDC, ColorToRGB(Color)); // 设置编辑背景颜色
//}
if(GetBkMode(Message.ChildDC) != TRANSPARENT)
SetBkMode(Message.ChildDC, TRANSPARENT);
//ExcludeUpdateRgn(Message.ChildDC, Message.ChildWnd); */
}
void __fastcall TLineEdit::WMCtlColorStatic(TWMCtlColorStatic &Message)
{
SetTextColor(Message.ChildDC, ColorToRGB(Font->Color)); // 设置编辑文字颜色
if(GetBkMode(Message.ChildDC) != TRANSPARENT)
SetBkMode(Message.ChildDC, TRANSPARENT);
//SetBkColor(Message.ChildDC, ColorToRGB(Color)); // 设置编辑背景颜色
}
void __fastcall TLineEdit::WMEraseBkgnd(TWMEraseBkgnd &Message)
{
m_Canvas->Lock();
m_Canvas->Handle = Message.DC;
TRect var_Rect = GetClientRect();
// 绘制背景
m_Canvas->Brush->Color = Color;
m_Canvas->FillRect(var_Rect);
// 绘制边框
m_Canvas->Brush->Color = FBorderColor;
m_Canvas->FrameRect(var_Rect);
var_Rect.Top++;
var_Rect.Left++;
var_Rect.Right--;
var_Rect.Bottom--;
// 绘制阴影
m_Canvas->Brush->Color = TColor(m_ShadowColorArray[0]);
//m_Canvas->Brush->Color = FShadowColor;
m_Canvas->FrameRect(var_Rect);
for(int var_Layer = 1; var_Layer < 4; var_Layer++)
{
// 设置画笔颜色
m_Canvas->Pen->Color = TColor(m_ShadowColorArray[var_Layer]);
m_Canvas->MoveTo(var_Rect.Left + var_Layer, var_Rect.Bottom - 2);
m_Canvas->LineTo(var_Rect.Left + var_Layer, var_Rect.Top + var_Layer);
m_Canvas->MoveTo(var_Rect.Left + var_Layer, var_Rect.Top + var_Layer);
m_Canvas->LineTo(var_Rect.Right - 1, var_Rect.Top + var_Layer);
}
m_Canvas->UpdateTextFlags();
m_Canvas->Unlock();
}
void __fastcall TLineEdit::WMKeyDown(TWMKeyDown &Message)
{
if(Message.CharCode == VK_RETURN && !FReadOnly && Enabled)
{
MessageBeep(MB_OK);
}
TWinControl::Dispatch(&Message);
}
void __fastcall TLineEdit::WMKillFocus(TWMKillFocus &Message)
{
ShowHintText();
TWinControl::Dispatch(&Message);
if(Text.Length() < FMaxLength && !Text.IsEmpty())
{
if(FNumbersOnly && FNumberMin != -1)
{
int Value = StrToInt(Text);
if(Value < FNumberMin) {
Text = IntToStr(FNumberMin);
}
}
}
Invalidate();
}
void __fastcall TLineEdit::WMPaint(TWMPaint &Message)
{
PaintHandler(Message);
}
void __fastcall TLineEdit::WMSetFocus(TWMSetFocus &Message)
{
//ShowHintText();
m_HintLabel->Visible = false;
TWinControl::Dispatch(&Message);
}
void __fastcall TLineEdit::WMSize(TWMSize &Message)
{
// 获取当前字体高度
m_FontHeight = CalcFontHeight();
// 计算编辑框的最小高度
int var_MinHeight = m_FontHeight + 4;
int var_MinWidth = 20;
// 检查宽高的合法性
if(Height < var_MinHeight)
{
Height = var_MinHeight;
return;
}
if(Width < var_MinWidth)
{
Width = var_MinWidth;
return;
}
AdjustThisSize();
}
/******************************************************************************/
// 编辑框操作
/******************************************************************************/
void __fastcall TLineEdit::DoHintLabelMouseDown(TObject *Sender,
TMouseButton Button,
TShiftState Shift, int X, int Y)
{
SetFocus();
}
void __fastcall TLineEdit::Clear()
{
FText = "";
SetText(FText);
}
void __fastcall TLineEdit::ClearSelection()
{
SendMessage(Handle, WM_CLEAR, 0, 0);
}
void __fastcall TLineEdit::CopyToClipboard()
{
SendMessage(Handle, WM_COPY, 0, 0);
}
void __fastcall TLineEdit::CutToClipboard()
{
SendMessage(Handle, WM_CUT, 0, 0);
}
void __fastcall TLineEdit::PasteFromClipboard()
{
SendMessage(Handle, WM_PASTE, 0, 0);
}
void __fastcall TLineEdit::Undo()
{
SendMessage(Handle, WM_UNDO, 0, 0);
}
void __fastcall TLineEdit::ClearUndo()
{
SendMessage(Handle, EM_EMPTYUNDOBUFFER, 0, 0);
}
void __fastcall TLineEdit::SelectAll()
{
SendMessage(Handle, EM_SETSEL, 0, -1);
}
String __fastcall TLineEdit::GetText()
{
if(HandleAllocated())
{
SendMessageW(Handle, WM_GETTEXT, 1024, (LPARAM)m_TextBuf);
}
else
{
wcscpy( m_TextBuf, FText.c_str() );
}
return String(m_TextBuf);
}
bool __fastcall TLineEdit::GetCanUndo()
{
if(HandleAllocated())
{
return (SendMessage(Handle, EM_CANUNDO, 0, 0) != 0);
}
else
{
return false;
}
}
int __fastcall TLineEdit::GetSelLength()
{
TSelection Selection;
SendMessage(Handle, EM_GETSEL, (WPARAM)&Selection.StartPos, (LPARAM)&Selection.EndPos);
return Selection.EndPos - Selection.StartPos;
}
int __fastcall TLineEdit::GetSelStart()
{
int var_Result;
SendMessage(Handle, EM_GETSEL, (WPARAM)&var_Result, 0);
return var_Result;
}
String __fastcall TLineEdit::GetSelText()
{
int var_Start, var_Length;
var_Start = GetSelStart();
var_Length = GetSelLength();
return Text.SubString(var_Start + 1, var_Length);
}
void __fastcall TLineEdit::SetMaxLength(int Value)
{
if(Value > 500 || Value <= 0)
{
Value = 500;
}
if(FMaxLength != Value)
{
FMaxLength = Value;
}
}
void __fastcall TLineEdit::SetSelLength(int Value)
{
TSelection Selection;
SendMessage(Handle, EM_GETSEL, (WPARAM)&Selection.StartPos, (LPARAM)&Selection.EndPos);
Selection.EndPos = Selection.StartPos + Value;
SendMessage(Handle, EM_SETSEL, Selection.StartPos, Selection.EndPos);
SendMessage(Handle, EM_SCROLLCARET, 0, 0);
}
void __fastcall TLineEdit::SetSelStart(int Value)
{
SendMessage(Handle, EM_SETSEL, Value, Value);
}
void __fastcall TLineEdit::SetAlignment(TAlignment Value)
{
if(FAlignment != Value)
{
FAlignment = Value;
m_HintLabel->Alignment = Value;
if(HandleAllocated())
{
RecreateWnd();
}
}
}
void __fastcall TLineEdit::SetCharCase(TEditCharCase Value)
{
if(FCharCase != Value)
{
FCharCase = Value;
if(HandleAllocated())
{
RecreateWnd();
}
}
}
void __fastcall TLineEdit::SetHideSelection(bool Value)
{
if(FHideSelection != Value)
{
FHideSelection = Value;
if(HandleAllocated())
{
RecreateWnd();
}
}
}
void __fastcall TLineEdit::SetHintText(String Value)
{
if(FHintText != Value)
{
FHintText = Value;
m_HintLabel->Caption = Value;
}
}
void __fastcall TLineEdit::SetHintColor(TColor Value)
{
if(FHintColor != Value)
{
FHintColor = Value;
m_HintLabel->Font->Color = Value;
}
}
void __fastcall TLineEdit::SetNumbersOnly(bool Value)
{
if(FNumbersOnly != Value)
{
FNumbersOnly = Value;
if(HandleAllocated())
{
RecreateWnd();
}
}
}
void __fastcall TLineEdit::SetOEMConvert(bool Value)
{
if(FOEMConvert != Value)
{
FOEMConvert = Value;
if(HandleAllocated())
{
RecreateWnd();
}
}
}
void __fastcall TLineEdit::SetPasswordChar(WideChar Value)
{
if(FPasswordChar != Value)
{
FPasswordChar = Value;
if(HandleAllocated())
{
RecreateWnd();
}
}
}
void __fastcall TLineEdit::SetReadOnly(bool Value)
{
if(FReadOnly != Value)
{
FReadOnly = Value;
if(HandleAllocated())
{
RecreateWnd();
}
}
}
void __fastcall TLineEdit::SetText(String Value)
{
FText = Value;
if(HandleAllocated())
{
//SetWindowText(Handle, Value.c_str());
//SetWindowText(Handle, FText.c_str());
if(Value.IsEmpty())
{
m_HintLabel->SetDesignVisible(true);
m_HintLabel->Visible = true;
}
else
{
m_HintLabel->SetDesignVisible(false);
m_HintLabel->Visible = false;
}
SendMessageW(Handle, WM_SETTEXT, 0, (LPARAM)Value.c_str());
if(FOnChange) FOnChange(this);
}
}
void __fastcall TLineEdit::SetNumberMax(int Value)
{
if(FNumberMax != Value) {
FNumberMax = Value;
}
}
void __fastcall TLineEdit::SetNumberMin(int Value)
{
if(FNumberMin != Value) {
if(Value > FNumberMax) {
Value = FNumberMax;
}
FNumberMin = Value;
}
}
/******************************************************************************/
+186
View File
@@ -0,0 +1,186 @@
//---------------------------------------------------------------------------
#ifndef LineEditH
#define LineEditH
//---------------------------------------------------------------------------
#include <vcl.h>
//---------------------------------------------------------------------------
class PACKAGE TLineEdit : public TWinControl
{
private:
TEditCharCase FCharCase;
TColor FBorderColor, // 边框颜色
FShadowColor; // 阴影颜色
TAlignment FAlignment;
WideChar FPasswordChar;
String FText;
String FHintText;
TColor FHintColor;
bool FHideSelection,
FNumbersOnly,
FOEMConvert,
FReadOnly;
int FMaxLength,
FNumberMax,
FNumberMin;
TNotifyEvent FOnChange;
TControlCanvas *m_Canvas;
int m_ShadowColorArray[4]; // 阴影颜色数组
int m_FontHeight; // 备份字体高度
bool m_IsCreated;
TLabel *m_HintLabel;
TColor m_FontColor; // 备份字体颜色
TRect m_TextRect;
WCHAR m_TextBuf[512];
void __fastcall AdjustThisSize();
int __fastcall CalcColorValue(TColor BgColor, TColor FrColor, int Level, int Alpha);
int __fastcall CalcFontHeight();
void __fastcall CreateShadowColor(); // 创建阴影颜色
void __fastcall SetBorderColor(TColor Color);
void __fastcall SetOnChange(TNotifyEvent OnChange);
void __fastcall SetShadowColor(TColor Color);
void __fastcall ShowHintText();
/******************************************************************************/
// 编辑框操作
/******************************************************************************/
void __fastcall DoHintLabelMouseDown(TObject *Sender,
TMouseButton Button,
TShiftState Shift, int X, int Y);
UnicodeString __fastcall GetText();
bool __fastcall GetCanUndo();
int __fastcall GetSelLength();
int __fastcall GetSelStart();
String __fastcall GetSelText();
void __fastcall SetAlignment(TAlignment Value);
void __fastcall SetCharCase(TEditCharCase Value);
void __fastcall SetHideSelection(bool Value);
void __fastcall SetHintText(String Value);
void __fastcall SetHintColor(TColor Value);
void __fastcall SetNumbersOnly(bool Value);
void __fastcall SetOEMConvert(bool Value);
void __fastcall SetPasswordChar(WideChar Value);
void __fastcall SetReadOnly(bool Value);
void __fastcall SetText(UnicodeString Value);
void __fastcall SetMaxLength(int Value);
void __fastcall SetSelLength(int Value);
void __fastcall SetSelStart(int Value);
void __fastcall SetNumberMax(int Value);
void __fastcall SetNumberMin(int Value);
/******************************************************************************/
MESSAGE void __fastcall CMColorChanged(TMessage &Message);
MESSAGE void __fastcall CMFontChanged(TWMFontChange &Message);
MESSAGE void __fastcall WMChar(TWMChar &Message);
MESSAGE void __fastcall WMCommand(TWMCommand &Message);
MESSAGE void __fastcall WMCtlColorEdit(TWMCtlColorEdit &Message);
MESSAGE void __fastcall WMCtlColorStatic(TWMCtlColorStatic &Message);
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMKeyDown(TWMKeyDown &Message);
MESSAGE void __fastcall WMKillFocus(TWMKillFocus &Message);
MESSAGE void __fastcall WMPaint(TWMPaint &Message);
MESSAGE void __fastcall WMSetFocus(TWMSetFocus &Message);
MESSAGE void __fastcall WMSize(TWMSize &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_COLORCHANGED, TMessage, CMColorChanged)
MESSAGE_HANDLER(CM_FONTCHANGED, TWMFontChange, CMFontChanged)
MESSAGE_HANDLER(CN_COMMAND, TWMCommand, WMCommand)
MESSAGE_HANDLER(CN_CTLCOLOREDIT, TWMCtlColorEdit, WMCtlColorEdit)
MESSAGE_HANDLER(CN_CTLCOLORSTATIC, TWMCtlColorStatic, WMCtlColorStatic)
MESSAGE_HANDLER(WM_CHAR, TWMChar, WMChar)
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_KEYDOWN, TWMKeyDown, WMKeyDown)
MESSAGE_HANDLER(WM_KILLFOCUS, TWMKillFocus, WMKillFocus)
MESSAGE_HANDLER(WM_PAINT, TWMPaint, WMPaint)
MESSAGE_HANDLER(WM_SETFOCUS, TWMSetFocus, WMSetFocus)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP(TWinControl)
__property Hint;
protected:
virtual void __fastcall CreateParams(TCreateParams &Params);
virtual void __fastcall CreateWindowHandle(const TCreateParams &Params);
virtual void __fastcall CreateWnd();
public:
__fastcall TLineEdit(TComponent* Owner);
__fastcall ~TLineEdit();
void __fastcall SetFocus();
void __fastcall SetCursorPos(int Pos);
void __fastcall SetTextFont(String name, int size);
/******************************************************************************/
// 编辑框操作
/******************************************************************************/
void __fastcall Clear();
void __fastcall ClearSelection();
void __fastcall CopyToClipboard();
void __fastcall CutToClipboard();
void __fastcall PasteFromClipboard();
void __fastcall Undo();
void __fastcall ClearUndo();
void __fastcall SelectAll();
__property bool CanUndo = {read = GetCanUndo, nodefault};
__property int SelLength = {read = GetSelLength, write = SetSelLength, nodefault};
__property int SelStart = {read = GetSelStart, write = SetSelStart, nodefault};
__property String SelText = {read = GetSelText};
__property AlignWithMargins = {default = false};
__property HelpContext;
__property HelpKeyword;
__property HelpType;
__property Margins;
__property Cursor;
/******************************************************************************/
__published:
__property TColor BorderColor = {read = FBorderColor, write = SetBorderColor, default = TColor(0x5F5954)};
__property TColor ShadowColor = {read = FShadowColor, write = SetShadowColor, default = TColor(0x4C463F)};
__property TNotifyEvent OnChange = {read = FOnChange, write = SetOnChange};
__property TAlignment Alignment = {read = FAlignment, write = SetAlignment};
__property TEditCharCase CharCase = {read = FCharCase, write = SetCharCase};
__property bool HideSelection = {read = FHideSelection, write = SetHideSelection};
__property String HintText = {read = FHintText, write = SetHintText};
__property TColor HintColor = {read = FHintColor, write = SetHintColor, default = TColor(0x594D43)};
__property int MaxLength = {read = FMaxLength, write = SetMaxLength, default = 500};
__property bool NumbersOnly = {read = FNumbersOnly, write = SetNumbersOnly};
__property bool OEMConvert = {read = FOEMConvert, write = SetOEMConvert};
__property WideChar PasswordChar = {read = FPasswordChar, write = SetPasswordChar};
__property bool ReadOnly = {read = FReadOnly, write = SetReadOnly};
__property int NumberMax = {read = FNumberMax, write = SetNumberMax};
__property int NumberMin = {read = FNumberMin, write = SetNumberMin};
__property UnicodeString Text = {read = GetText, write = SetText};
__property Color = {default = TColor(0xC4B4A8)};
__property Font;
__property TabOrder = {default = -1};
__property TabStop = {default = true};
__property OnKeyDown;
__property OnKeyPress;
__property OnKeyUp;
};
//---------------------------------------------------------------------------
#endif
+17
View File
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
+156
View File
@@ -0,0 +1,156 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "RadioBtn.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
static inline void ValidCtrCheck(TRadioBtn *)
{
new TRadioBtn(NULL);
}
//---------------------------------------------------------------------------
namespace Radiobtn
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TRadioBtn)};
RegisterComponents(L"Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
__fastcall TRadioBtn::TRadioBtn(System::Classes::TComponent* AOwner) : TPanel(AOwner)
{
m_pRaBtn = new TRadioButton(this);
m_pRaBtn->Parent = this;
m_pRaBtn->ControlStyle>>csOpaque;
m_pRaBtn->Caption= L"";
m_pRaBtn->OnClick = Onclicked;
m_lbCaption = new TLabel(this);
m_lbCaption->Parent = this;
m_lbCaption->ControlStyle>>csOpaque;
m_lbCaption->OnClick = Onclicked;
m_lbCaption->OnMouseMove = MouseMoveEvent;
this->OnMouseMove = MouseMoveEvent;
FChecked = false;
FEnabled = true;
SetChildBounds();
SetCaption(L"TRadioBtn");
SetFont(Font);
ControlStyle >> csOpaque;
Width = 100;
Height = 17;
}
//---------------------------------------------------------------------------
__fastcall TRadioBtn::~TRadioBtn(void)
{
if(m_lbCaption) delete m_lbCaption;
if(m_pRaBtn) delete m_pRaBtn;
}
//---------------------------------------------------------------------------
void __fastcall TRadioBtn::SetChildBounds()
{
int nEdge = GetSystemMetrics(SM_CXMENUCHECK);
int mHgt = m_lbCaption->Height;
if( mHgt>Height ) Height = mHgt;
m_lbCaption->SetBounds(nEdge+1, (Height-m_lbCaption->Height)/2,
m_lbCaption->Width, m_lbCaption->Height);
m_pRaBtn->SetBounds(0, 0, nEdge, Height);
}
//---------------------------------------------------------------------------
void __fastcall TRadioBtn::CreateWnd(void)
{
Vcl::Extctrls::TPanel::CreateWnd();
SetWindowLong( Parent->Handle, GWL_STYLE,
GetWindowLong(Parent->Handle, GWL_STYLE) & ~WS_CLIPCHILDREN );
}
//---------------------------------------------------------------------------
void __fastcall TRadioBtn::CreateParams(Controls::TCreateParams &Params)
{
Vcl::Extctrls::TPanel::CreateParams(Params);
Params.ExStyle |= WS_EX_TRANSPARENT;
}
//---------------------------------------------------------------------------
void __fastcall TRadioBtn::Paint()
{
SetBkMode( Canvas->Handle, TRANSPARENT );
StyleServices()->DrawParentBackground( Handle, Canvas->Handle, NULL, true);
}
//---------------------------------------------------------------------------
void __fastcall TRadioBtn::WMSize(Winapi::Messages::TWMSize &Message)
{
SetChildBounds();
}
//--------------------------------------------------------------------------
void __fastcall TRadioBtn::SetCaption(String FCaptionTmp)
{
m_lbCaption->Caption = FCaptionTmp;
FCaption = FCaptionTmp;
}
//--------------------------------------------------------------------------
void __fastcall TRadioBtn::SetFont(TFont *FFontTmp)
{
m_lbCaption->Font = FFontTmp;
SetChildBounds();
this->Invalidate();
}
//--------------------------------------------------------------------------
void __fastcall TRadioBtn::SetChecked(bool bChecked)
{
m_pRaBtn->Checked = bChecked;
FChecked = bChecked;
}
//--------------------------------------------------------------------------
void __fastcall TRadioBtn::SetEnabled(bool bEnabled)
{
FEnabled = bEnabled;
m_lbCaption->Enabled = bEnabled;
m_pRaBtn->Enabled = bEnabled;
}
//--------------------------------------------------------------------------
void __fastcall TRadioBtn::SetCheckedSameparent(TWinControl* pCtrl)
{
if( pCtrl->ClassNameIs( TRadioBtn::ClassName() ) ){
TRadioBtn *pTRadioBtn = (TRadioBtn *)pCtrl;
if( pTRadioBtn->Checked && pTRadioBtn!=this )
pTRadioBtn->Checked = false;
}
}
//--------------------------------------------------------------------------
void __fastcall TRadioBtn::Onclicked(TObject *Sender)
{
if(!FChecked) {
SetChecked(true);
for( int i=0; i<this->Parent->ControlCount; i++ ){
SetCheckedSameparent( (TWinControl*)(this->Parent->Controls[i]) );
}
if( OnClick ) OnClick(this);
}
}
//--------------------------------------------------------------------------
void __fastcall TRadioBtn::Click(void)
{
if( !FEnabled ) return;
Onclicked(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TRadioBtn::MouseMoveEvent(System::TObject* Sender, System::Classes::TShiftState Shift, int X, int Y)
{
if( !FEnabled ) return;
}
//---------------------------------------------------------------------------
+55
View File
@@ -0,0 +1,55 @@
//---------------------------------------------------------------------------
#ifndef RadioBtnH
#define RadioBtnH
//---------------------------------------------------------------------------
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TRadioBtn :public TPanel {
private:
bool FChecked;
bool FEnabled;
String FCaption;
void __fastcall SetCaption(String FCaptionTmp);
void __fastcall SetFont(TFont *FFontTmp);
void __fastcall SetChecked(bool bChecked);
void __fastcall SetEnabled(bool bEnabled);
TLabel *m_lbCaption;
TRadioButton *m_pRaBtn;
void __fastcall Onclicked(TObject *Sender);
void __fastcall SetCheckedSameparent(TWinControl* pCtrl);
void __fastcall SetChildBounds();
COLORREF __fastcall TransformColor(COLORREF icolor, int nNum, bool bplus=true);
void __fastcall MouseMoveEvent(System::TObject* Sender, System::Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall CreateWnd();
virtual void __fastcall CreateParams(Controls::TCreateParams &Params);
virtual void __fastcall Paint(void);
DYNAMIC void __fastcall Click(void);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP( TPanel )
public:
__fastcall TRadioBtn(System::Classes::TComponent* AOwner);
__fastcall ~TRadioBtn(void);
__published:
__property Font = {write=SetFont};
__property String Caption = {read=FCaption, write=SetCaption};
__property bool Checked = {read=FChecked, write=SetChecked, default=false};
__property bool Enabled = {read=FEnabled, write=SetEnabled, default=true};
};
#endif
+17
View File
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
+467
View File
@@ -0,0 +1,467 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "SkinTrackBar.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#define trHorizontal 1 //横向滑块
#define trVertical 0 //纵向滑块
#define SLIDER_MAX_H 25 //滑块长度
#define SLIDER_MIN_H 10
#define SLIDER_W 10 //滑块宽度
#define PANEL_MIN_W 30 //Panel最小宽度
#define CHANNEL_LEFT 5
#define CHANNEL_W 2 //滑槽宽度
static const COLORREF
CLR_BACK_ENABLE = RGB(22,33,44), //d5dde8
CLR_BACK_DISABLE = RGB(112,130,154), //d5dde8
CLR_SLIDER_DOWN = RGB(77,88,99), //d5dde8
CLR_SLIDER_HOVER = RGB(55,66,77), //d5dde8
CLR_SLIDER_NORMAL = RGB(44,55,77); //d5dde8
static inline void ValidCtrCheck(TSkinTrackBar *)
{
new TSkinTrackBar(NULL);
}
namespace Skintrackbar
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TSkinTrackBar)};
RegisterComponents(L"Samples", classes, 0);
}
}
__fastcall TSkinTrackBar::TSkinTrackBar(System::Classes::TComponent* AOwner)
: TPanel(AOwner)
{
bDown = false;
bMouse = false;
FEnabled = true;
FOrientation = 1; //默认横向滑块
FMax = 100;
FMin = 0;
FPosition = 0;
FPageSize = 1;
Hint = IntToStr(FPosition);
ParentBackground = true;
Slider = new TPaintBox(this);
Slider->Parent = this;
Slider->ParentShowHint = false;
Slider->ShowHint = false;
Slider->OnMouseEnter = CMMouseEnter;
Slider->OnMouseLeave = CMMouseLeave;
Slider->OnMouseDown = CMMouseDown;
Slider->OnPaint = SliderPaint;
ParentColor = true;
}
//-----------------------------------------------------------------------------
__fastcall TSkinTrackBar::~TSkinTrackBar()
{
delete Slider;
Slider = NULL;
}
void __fastcall TSkinTrackBar::SetMax(int Value)
{
if(Value <= FMin)
{
// if(ComponentState.Contains(csDesigning))
// {
// MessageBox(Handle, "Max:必须大于Min!!!", "错误", MB_OK | MB_ICONERROR);
// }
}
else
{
if(FMax != Value)
{
FMax = Value;
if(FPosition > FMax){
FPosition = FMax;
if(FOnChange)
FOnChange(this);
}
if( FOrientation ){
Slider->Left = CHANNEL_LEFT+(double)(FPosition-FMin)*(Width-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin);
}
else{
Slider->Top = Height-CHANNEL_LEFT-(double)(FPosition-FMin)*(Height-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin)-SLIDER_W;
}
}
}
}
void __fastcall TSkinTrackBar::SetMin(int Value)
{
if(Value >= FMax)
{
// if(ComponentState.Contains(csDesigning))
// {
// MessageBox(Handle, "Min:必须小于Max!!!", "错误", MB_OK | MB_ICONERROR);
// }
}
else
{
if(FMin != Value)
{
FMin = Value;
if(FPosition < FMin){
FPosition = FMin;
if(FOnChange)
FOnChange(this);
}
if( FOrientation ){
Slider->Left = CHANNEL_LEFT+(double)(FPosition-FMin)*(Width-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin);
}
else{
Slider->Top = Height-CHANNEL_LEFT-(double)(FPosition-FMin)*(Height-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin)-SLIDER_W;
}
}
}
}
void __fastcall TSkinTrackBar::SetPosition(int iPosition)
{
if(iPosition>FMax)
iPosition = FMax;
if(iPosition<FMin)
iPosition = FMin;
if(FPosition!=iPosition){
FPosition = iPosition;
Hint = IntToStr(FPosition);
if( FOrientation ){
Slider->Left = CHANNEL_LEFT+(double)(FPosition-FMin)*(Width-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin);
}
else{
Slider->Top = Height-CHANNEL_LEFT-(double)(FPosition-FMin)*(Height-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin)-SLIDER_W;
}
if(FOnChange)
FOnChange(this);
Invalidate();
// Slider->Invalidate();
}
}
void __fastcall TSkinTrackBar::SetOrientation(bool bOrientation)
{
if(FOrientation != bOrientation)
{
FOrientation = bOrientation;
TWMSize msg;
WMSize(msg);
Invalidate();
// Slider->Invalidate();
}
}
void __fastcall TSkinTrackBar::SetEnabled(bool bEnabled)
{
if( FEnabled!=bEnabled ){
FEnabled = bEnabled;
Invalidate();
}
}
void __fastcall TSkinTrackBar::CMMouseEnter(System::TObject* Sender)
{
if( FEnabled ){
bMouse = true;
Slider->Invalidate();
}
}
void __fastcall TSkinTrackBar::CMMouseLeave(System::TObject* Sender)
{
if( FEnabled ){
bMouse = false;
Slider->Invalidate();
}
}
void __fastcall TSkinTrackBar::CMMouseDown(System::TObject* Sender, System::Uitypes::TMouseButton Button,
System::Classes::TShiftState Shift, int X, int Y)
{
if( FEnabled && Button==mbLeft ){
bDown = true;
MouseCapture = true;
Slider->Invalidate();
SetFocus();
}
}
void __fastcall TSkinTrackBar::WMMouseMove(TWMMouse &Message)
{
if( FEnabled && bDown ){
if( FOrientation ){ // trHorizontal 1 //横向滑块
DrawH(Message);
}
else{
DrawV(Message);
}
}
TPanel::Dispatch(&Message);
}
void __fastcall TSkinTrackBar::WMLButtonDown(TWMLButtonDown &Message)
{
if( FEnabled ){
if( FOrientation && Message.YPos>Slider->Top
&& Message.YPos<Slider->Top+Slider->Height
&& Message.XPos>0 && Message.XPos<Width){
//横向
DrawH(Message);
bDown = true;
MouseCapture = true;
}
else if( !FOrientation && Message.XPos>Slider->Left
&& Message.XPos<Slider->Left + Slider->Width
&& Message.YPos>0 && Message.YPos<Height){
//纵向
DrawV(Message);
bDown = true;
MouseCapture = true;
}
SetFocus();
}
TPanel::Dispatch(&Message);
}
void __fastcall TSkinTrackBar::WMLButtonUp(TWMLButtonUp &Message)
{
if( FEnabled ){
bDown = false;
bMouse = false;
MouseCapture = false;
Slider->Invalidate();
}
TPanel::Dispatch(&Message);
}
void __fastcall TSkinTrackBar::WMMouseWheel(TWMMouseWheel &Message)
{
if( FEnabled ){
int iPos = FPosition;
if( Message.WheelDelta>0 ){
iPos += FPageSize;
if( iPos>FMax )
iPos = FMax;
}
else{
iPos -= FPageSize;
if( iPos<FMin )
iPos = FMin;
}
Position = iPos;
}
}
void __fastcall TSkinTrackBar::WMEraseBkgnd(TWMEraseBkgnd &Message)
{
TPanel::Dispatch(&Message);
TRect Channel;
if( Orientation )
Channel.init( CHANNEL_LEFT,
Height/2-CHANNEL_W,
Width-CHANNEL_LEFT,
Height/2+CHANNEL_W);
else
Channel.init(
Width/2-CHANNEL_W,
CHANNEL_LEFT,
Width/2+CHANNEL_W,
Height-CHANNEL_LEFT
);
TCanvas* tempCanvas = new TCanvas;
tempCanvas->Handle = Message.DC;
if( Enabled ){
tempCanvas->Brush->Color = CLR_BACK_ENABLE;
tempCanvas->FillRect(Channel);
}
else{
tempCanvas->Brush->Color = CLR_BACK_DISABLE;
tempCanvas->FillRect(Channel);
}
delete tempCanvas;
}
void __fastcall TSkinTrackBar::SliderPaint(System::TObject* Sender)
{
TRect rect = Slider->ClientRect;
if ( !FEnabled ) {
Slider->Canvas->Brush->Color = CLR_BACK_DISABLE;
Slider->Canvas->FillRect(rect);
// TRect rct(rect);
// Frame3D( Slider->Canvas, rect, clBlack,clGray,1 );
// rect = rct;
}
else if(bDown){//鼠标按下
Slider->Canvas->Brush->Color = CLR_SLIDER_DOWN;
Slider->Canvas->FillRect(rect);
// TRect rct(rect);
Frame3D( Slider->Canvas, rect, clBlack,clGray,1 );
// rect = rct;
}
else if(bMouse){//鼠标移动到滑块上
Slider->Canvas->Brush->Color = CLR_SLIDER_HOVER;
Slider->Canvas->FillRect(rect);
// TRect rct(rect);
Frame3D( Slider->Canvas, rect, clGray,clBlack, 1 );
// rect = rct;
}
else{ //平常
Slider->Canvas->Brush->Color = CLR_SLIDER_NORMAL;
Slider->Canvas->FillRect(rect);
// TRect rct(rect);
Frame3D( Slider->Canvas, rect, clGray,clBlack, 1 );
// rect = rct;
}
}
void __fastcall TSkinTrackBar::DrawH(TWMMouse &Message) // 横向
{
int oldPosition = FPosition;
if(Message.XPos<CHANNEL_LEFT+SLIDER_W/2){
if(Slider->Left==CHANNEL_LEFT)
return;
Slider->Left = CHANNEL_LEFT;
FPosition = FMin;
}
else if(Message.XPos>Width-CHANNEL_LEFT-SLIDER_W/2){
if(Slider->Left==Width-CHANNEL_LEFT - SLIDER_W)
return;
Slider->Left = Width-CHANNEL_LEFT - SLIDER_W;
FPosition = FMax;
}
else{
FPosition = FMin+(double)(Message.XPos - CHANNEL_LEFT - SLIDER_W/2)/(Width-2*CHANNEL_LEFT-SLIDER_W)*(FMax-FMin) +0.5;
Slider->Left = CHANNEL_LEFT+(double)(FPosition-FMin)*(Width-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin);
}
Hint = IntToStr(FPosition);
if( oldPosition!=FPosition && FOnChange )
FOnChange(this);
}
void __fastcall TSkinTrackBar::DrawV(TWMMouse &Message)
{
int oldPosition = FPosition;
if(Message.YPos<CHANNEL_LEFT+SLIDER_W/2){
if(Slider->Top==CHANNEL_LEFT)
return;
Slider->Top = CHANNEL_LEFT;
FPosition = FMax;
}
else if(Message.YPos>Height-CHANNEL_LEFT-SLIDER_W/2){
if(Slider->Top==Height-CHANNEL_LEFT - SLIDER_W)
return;
Slider->Top = Height-CHANNEL_LEFT - SLIDER_W;
FPosition = FMin;
}
else{
FPosition = FMax-(double)(Message.YPos - CHANNEL_LEFT - SLIDER_W/2)/(Height-2*CHANNEL_LEFT-SLIDER_W)*(FMax-FMin);
Slider->Top = Height-CHANNEL_LEFT-(double)(FPosition-FMin)*(Height-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin)-SLIDER_W;
}
if( oldPosition!=FPosition && FOnChange )
FOnChange(this);
}
void __fastcall TSkinTrackBar::WMSize(TWMSize &Message)
{
if(FOrientation){
//确定横向滑块区域
if( Width<PANEL_MIN_W )
Width = PANEL_MIN_W; //20
if( Height<SLIDER_MIN_H )
Height = SLIDER_MIN_H;
if( Height>=SLIDER_MAX_H ){
Slider->Left = CHANNEL_LEFT+(double)(FPosition-FMin)* (Width-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin);
Slider->Top = Height/2-SLIDER_MAX_H/2;
Slider->Width = SLIDER_W;
Slider->Height = SLIDER_MAX_H;
}
else{
Slider->Left = CHANNEL_LEFT+(double)(FPosition-FMin)*(Width-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin);
Slider->Top = 1;
Slider->Width = SLIDER_W;
Slider->Height = Height-2;
}
}
else
{
//确定纵向滑块区域
if( Height<PANEL_MIN_W )
Height = PANEL_MIN_W; //20
if( Width<SLIDER_MIN_H )
Width = SLIDER_MIN_H;
if( Width>=SLIDER_MAX_H ){
Slider->Left = Width/2-SLIDER_MAX_H/2;
Slider->Top = Height-CHANNEL_LEFT-(double)(FPosition-FMin)*(Height-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin)-SLIDER_W;
Slider->Width = SLIDER_MAX_H;
Slider->Height = SLIDER_W;
}
else{
Slider->Left = 1;
Slider->Top = Height-CHANNEL_LEFT-(double)(FPosition-FMin)*(Height-2*CHANNEL_LEFT-SLIDER_W)/(FMax-FMin)-SLIDER_W;
Slider->Width = Width-2;
Slider->Height = SLIDER_W;
}
}
}
+105
View File
@@ -0,0 +1,105 @@
//---------------------------------------------------------------------------
#ifndef SkinTrackBarH
#define SkinTrackBarH
#include "vcl.h"
//---------------------------------------------------------------------------
class PACKAGE TSkinTrackBar : public TPanel
{
private:
TPaintBox *Slider;
int FPosition;
bool FOrientation,
FEnabled;
TNotifyEvent FOnChange;
int FMax,
FMin;
int FPageSize;
bool bDown;
bool bMouse;
void __fastcall Paint(void){};
void __fastcall DrawH(TWMMouse &Message);
void __fastcall DrawV(TWMMouse &Message);
void __fastcall SetMax(int Value);
void __fastcall SetMin(int Value);
void __fastcall SetPosition(int iPosition);
void __fastcall SetOrientation(bool bOrientation);
void __fastcall SetEnabled(bool bEnabled);
void __fastcall SliderPaint(System::TObject* Sender);
void __fastcall CMMouseEnter(System::TObject* Sender);
void __fastcall CMMouseLeave(System::TObject* Sender);
void __fastcall CMMouseDown(System::TObject* Sender, System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
MESSAGE void __fastcall WMSize(TWMSize &Message);
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMLButtonDown(TWMLButtonDown &Message);
MESSAGE void __fastcall WMLButtonUp(TWMLButtonUp &Message);
MESSAGE void __fastcall WMMouseMove(TWMMouse &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
MESSAGE_HANDLER(WM_LBUTTONDOWN, TWMLButtonDown, WMLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONUP, TWMLButtonUp, WMLButtonUp)
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_MOUSEMOVE, TWMMouseMove, WMMouseMove)
END_MESSAGE_MAP(TPanel)
public:
void __fastcall TMouseWheelEvent(System::TObject* Sender, System::Classes::TShiftState Shift, int WheelDelta, const System::Types::TPoint &MousePos, bool &Handled);
__fastcall TSkinTrackBar(System::Classes::TComponent* AOwner);
__fastcall ~TSkinTrackBar();
__published:
__property bool Orientation = {read=FOrientation, write=SetOrientation, default=true};
__property TNotifyEvent OnChange = {read = FOnChange, write = FOnChange ,default = NULL};
__property bool Enabled = {read = FEnabled, write = SetEnabled, default=true };
__property int Max = {read = FMax, write = SetMax, default = 100};
__property int Min = {read = FMin, write = SetMin, default = 0};
__property int PageSize = {read = FPageSize, write = FPageSize, default = 1};
__property int Position = {read = FPosition, write = SetPosition, stored=FPosition, default = 0};
};
#endif
/************************************************************
使
1
OrientationMax,Min,Position
2
OnChange TNotifyEvent类型
3使
p_Track = new TSkinTrackBar(GeneralDialogPanel1);
p_Track->Parent = GeneralDialogPanel1;
p_Track->Top = 50;
p_Track->Left = 100;
p_Track->Width = 100;
p_Track->Height = 100;
p_Track->Position = 30; //初始位置
p_Track->ParentBackground = true; //是否背景透明,为true则背景为 Parent的背景---默认为true
p_Track->Orientation = false; //滑块方向 横向为 true ,纵向为false 默认为 true 横向
p_Track->OnChange = Change; //外部接口Change
p_Track->Show();
************************************************************/
+17
View File
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+17
View File
@@ -0,0 +1,17 @@
//---------------------------------------------------------------------------
#include <System.hpp>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
return 1;
}
//---------------------------------------------------------------------------
+494
View File
@@ -0,0 +1,494 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#pragma package(smart_init)
#include "TextButton.h"
////////////////////////////////////////////////////////////////////////////////////
#define PIXEL_EXTERNAL_FRAME 1 //外边界大小
#define PIXEL_INTERNAL_FARME 1 //内边界大小
#define PIXEL_INTERNAL_BOUND 1 //圆角大小
#define PIXLE_TEXT_LEFT_OFFSET 3 //文字左边偏移距离
#define PIXEL_TEXT_X Width - 2*PIXLE_TEXT_LEFT_OFFSET
static const COLORREF
CLR_TXT_NOR = RGB( 156, 170, 189 ),
CLR_TXT_HOT = RGB( 201, 214, 229 ),
CLR_TXT_DIS = RGB( 75, 77, 79 ),
clrFrameExBound = RGB(65,70,77),
clrFrameExNormal = RGB(125,128,131),
clrFrameExEnter = RGB(145,156,170),
clrFrameExDisable = RGB(109,114,120),
clrFrameBoundNormal = RGB(68,70,73),
clrFrameBoundEnter = RGB(70,72,76),
clrFrameNormal = RGB(44,46,48),
clrLineNormal = RGB(44,46,48),
clrRectNormal = RGB(74,80,88),
clrRectDisable = RGB(100,106,113),
//角从左到右,从上到下
clrCapArrowOpenBound[10]=
{ RGB(50,54,60),RGB(54,58,64),RGB(57,61,67),RGB(58,63,69),
RGB(58,63,69),RGB(62,67,74),RGB(64,69,76),
RGB(66,71,78),RGB(68,74,81),
RGB(71,77,85)},
clrCapArrowOpenLine[4] =
{ RGB(59,64,70),
RGB(65,70,77),
RGB(69,75,82),
RGB(73,78,86)},
clrExFrameBound[4] =
{ RGB(81,87,94),
RGB(94,100,107),
RGB(113,118,124),
RGB(126,130,136)
},
clrExFrameBoundDisable[4] =
{ RGB(77,83,91),
RGB(86,91,99),
RGB(98,103,110),
RGB(105,110,117)
};
//---------------------------------------------------------------------------
static inline void ValidCtrCheck(TTextButton *)
{
new TTextButton(NULL);
}
//---------------------------------------------------------------------------
namespace Textbutton
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TTextButton)};
RegisterComponents(L"Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
__fastcall TTextButton::TTextButton(TComponent* Owner)
: TGraphicControl(Owner)
{
Height = 25; //a default Height
Width = 75; //a default Width
FStateCount = 4; //default state count
FDown = false;
ShowHint = true;
}
//---------------------------------------------------------------------------
__fastcall TTextButton::~TTextButton(void)
{
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::Paint(void)
{
if( FDown ) EtatBtn = 2;
if( !Enabled ) EtatBtn = 3;
PaintCustomer();
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::MouseDown(System::Uitypes::TMouseButton Button,
System::Classes::TShiftState Shift, int X, int Y)
{
TGraphicControl::MouseDown( Button, Shift, X, Y );
if( Button==mbLeft && Enabled && FStateCount>2){
EtatBtn = 2; // Pressed
Paint();
Refresh();
}
TCustomForm * parentForm = GetParentForm( this );
if( parentForm && parentForm==Application->MainForm ){
TPoint pt(X,Y);
pt = ClientToParent( pt, parentForm );
Application->MainForm->OnMouseDown( NULL, Button, Shift, pt.X, pt.Y );
}
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::MouseUp(System::Uitypes::TMouseButton Button,
System::Classes::TShiftState Shift, int X, int Y)
{
TGraphicControl::MouseUp( Button, Shift, X, Y );
if( Button==mbLeft && Enabled ){
if( X>=0 && X<Width && Y>=0 && Y<Height )
EtatBtn = 1; //Mouse Entered
else
EtatBtn = 0; //normal;
Paint();
Refresh(); //repaint component
}
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::CMMouseEnter(Winapi::Messages::TMessage &Msg)
{
if( Enabled && !ComponentState.Contains(csDesigning) ){
EtatBtn = 1; // Mouse Entered
Paint();
Refresh(); //repainting the component
}
if( FOnMouseEnter )
FOnMouseEnter(this); //if user set a mouse enter procedure then we execute it
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::CMMouseLeave(Winapi::Messages::TMessage &Msg)
{
if( Enabled && !ComponentState.Contains(csDesigning) ) {
EtatBtn = 0; //Normal
Paint();
Refresh(); //repainting the component
}
if( FOnMouseLeave )
FOnMouseLeave(this); //if user set a mouse leave procedure then we execute it
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::Click(void)
{
TCustomForm * parentForm = GetParentForm( this );
if( parentForm ){
parentForm->ModalResult = FModalResult;
}
TGraphicControl::Click();
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::SetEnabled(bool Value)
{
if(FStateCount<4) //can't be disable
Value = true;
TGraphicControl::SetEnabled(Value);
if( Enabled )
EtatBtn = 0;
else
EtatBtn = 3;
Paint();
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::SetStateCount( int count )
{
if( count>4 ) count = 4;
if( count<2 ) count = 2;
FStateCount = count;
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::SetDown(bool value)
{
if( FStateCount<3 )
value = false;
FDown = value;
if( FDown==False )
EtatBtn = 0; //is the mouse down is false then we reset the component state to normal
Paint();
Refresh(); //we repaint the componet)
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::SetFontSize( int value )
{
Canvas->Font->Size = value;
Paint();
Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::SetFontName(System::Uitypes::TFontName value)
{
Canvas->Font->Name = value;
Paint();
Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::SetTextFont(String name, int size)
{
Canvas->Font->Name = name;
Canvas->Font->Size = size;
Paint();
Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::PaintCustomer(void)
{
TRect rectDraw = GetClientRect();
TRect tmpRet = rectDraw;
//================画外边框
if(EtatBtn == 0){
Canvas->Brush->Color = clrFrameExNormal;
Canvas->Pen->Color = clrFrameExNormal;
}else if(EtatBtn == 3){
Canvas->Brush->Color = clrFrameExDisable;
Canvas->Pen->Color = clrFrameExDisable;
}else {
Canvas->Brush->Color = clrFrameExEnter;
Canvas->Pen->Color = clrFrameExEnter;
}
int X,Y;
//上
Y = 0;
X = PIXEL_EXTERNAL_FRAME ;
Canvas->MoveTo( X, Y );
X = Width - PIXEL_EXTERNAL_FRAME ;
Canvas->LineTo( X, Y );
//下
Y = Height - PIXEL_EXTERNAL_FRAME ;
X = PIXEL_EXTERNAL_FRAME ;
Canvas->MoveTo( X, Y );
X = Width - PIXEL_EXTERNAL_FRAME ;
Canvas->LineTo( X, Y );
//左
X = 0 ;
Y = PIXEL_EXTERNAL_FRAME ;
Canvas->MoveTo( X, Y );
Y = Height - PIXEL_EXTERNAL_FRAME ;
Canvas->LineTo( X, Y );
//右
X = Width - PIXEL_EXTERNAL_FRAME ;
Y = PIXEL_EXTERNAL_FRAME ;
Canvas->MoveTo( X, Y );
Y = Height - PIXEL_EXTERNAL_FRAME ;
Canvas->LineTo( X, Y );
//画外边框圆角
int iLPixl, iTPixl, iRPixl, iBPixl ;
TRect tmpRetPic = rectDraw; //画内部区域渐变图像
int iDistant = 1; //画点right和bottom - 1
for(int i=0;i<4;i++)
{
//角 4*4 上左右 下左右
iLPixl = tmpRetPic.Left + i;
iTPixl = tmpRetPic.Top;
iRPixl = tmpRetPic.Right - i - iDistant;
iBPixl = tmpRetPic.Bottom - iDistant;
if(EtatBtn == 3)
Canvas->Pen->Color = clrExFrameBoundDisable[i];
else
Canvas->Pen->Color = clrExFrameBound[i];
Canvas->Pixels[iLPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iLPixl][iBPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iBPixl] = Canvas->Pen->Color;
if(i>0){ //每个角对称
iLPixl = tmpRetPic.Left;
iTPixl = tmpRetPic.Top + i;
iRPixl = tmpRetPic.Right - iDistant;
iBPixl = tmpRetPic.Bottom - i - iDistant;
Canvas->Pixels[iLPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iLPixl][iBPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iBPixl] = Canvas->Pen->Color;
}
}
//=================画内边框
//画圆角
if(EtatBtn == 0) Canvas->Pen->Color = clrFrameBoundNormal;
else Canvas->Pen->Color = clrFrameBoundEnter;
tmpRet.Top = PIXEL_EXTERNAL_FRAME;
tmpRet.left = PIXEL_EXTERNAL_FRAME;
Canvas->Pixels[tmpRet.left][tmpRet.top] = Canvas->Pen->Color;
tmpRet.left = Width - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
Canvas->Pixels[tmpRet.left][tmpRet.top] = Canvas->Pen->Color;
//////////////
tmpRet.Top = Height - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
tmpRet.left = PIXEL_EXTERNAL_FRAME;
Canvas->Pixels[tmpRet.left][tmpRet.top] = Canvas->Pen->Color;
tmpRet.left = Width - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
Canvas->Pixels[tmpRet.left][tmpRet.top] = Canvas->Pen->Color;
//画线
Canvas->Pen->Color = clrFrameNormal;
// int X,Y;
//上
Y = PIXEL_EXTERNAL_FRAME;
X = PIXEL_EXTERNAL_FRAME + PIXEL_INTERNAL_FARME;
Canvas->MoveTo( X, Y );
X = Width - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
Canvas->LineTo( X, Y );
//下
Y = Height - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
X = PIXEL_EXTERNAL_FRAME + PIXEL_INTERNAL_FARME;
Canvas->MoveTo( X, Y );
X = Width - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
Canvas->LineTo( X, Y );
//左
X = PIXEL_EXTERNAL_FRAME ;
Y = PIXEL_EXTERNAL_FRAME + PIXEL_INTERNAL_FARME;
Canvas->MoveTo( X, Y );
Y = Height - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
Canvas->LineTo( X, Y );
//右
X = Width - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
Y = PIXEL_EXTERNAL_FRAME + PIXEL_INTERNAL_FARME;
Canvas->MoveTo( X, Y );
Y = Height - PIXEL_EXTERNAL_FRAME - PIXEL_INTERNAL_FARME;
Canvas->LineTo( X, Y );
//==============画内部区域
if(3 == EtatBtn){
Canvas->Brush->Color = clrRectDisable;
Canvas->Pen->Color = clrRectDisable;
}else{
Canvas->Brush->Color = clrRectNormal;
Canvas->Pen->Color = clrRectNormal;
}
tmpRet.Left = PIXEL_EXTERNAL_FRAME + PIXEL_INTERNAL_FARME;
tmpRet.Top = PIXEL_EXTERNAL_FRAME + PIXEL_INTERNAL_FARME;
tmpRet.Right = Width - tmpRet.Left;
tmpRet.Bottom = Height - tmpRet.Top;
Canvas->Rectangle(tmpRet.Left, tmpRet.Top,
tmpRet.Right, tmpRet.Bottom);
if(3 != EtatBtn)
{
if(2 == EtatBtn) // down
{
tmpRetPic = rectDraw; //画内部区域渐变图像
iDistant = PIXEL_EXTERNAL_FRAME + PIXEL_INTERNAL_FARME;
tmpRetPic.Left += iDistant;
tmpRetPic.Top += iDistant;
tmpRetPic.Right -= iDistant;
tmpRetPic.Bottom -= iDistant;
iDistant = 1; //画点right和bottom - 1
int iTmpAdd = 0;//clrCapArrowOpenBound 当前位置
for(int i=0; i<4; i++)
{
//边线
Canvas->Brush->Color = clrCapArrowOpenLine[i];
Canvas->FrameRect(tmpRetPic);
int iadd = 0;//clrCapArrowOpenBound 当前位置增加
for(int j=0; j<4-i; j++) {
//角 4*4 上左右 下左右
iLPixl = tmpRetPic.Left + j;
iTPixl = tmpRetPic.Top;
iRPixl = tmpRetPic.Right - j - iDistant;
iBPixl = tmpRetPic.Bottom - iDistant;
Canvas->Pen->Color = clrCapArrowOpenBound[iTmpAdd+j];
Canvas->Pixels[iLPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iLPixl][iBPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iBPixl] = Canvas->Pen->Color;
if(j>0){ //每个角对称
iLPixl = tmpRetPic.Left;
iTPixl = tmpRetPic.Top + j;
iRPixl = tmpRetPic.Right - iDistant;
iBPixl = tmpRetPic.Bottom - j - iDistant;
Canvas->Pixels[iLPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iTPixl] = Canvas->Pen->Color;
Canvas->Pixels[iLPixl][iBPixl] = Canvas->Pen->Color;
Canvas->Pixels[iRPixl][iBPixl] = Canvas->Pen->Color;
}
iadd++;
}
iTmpAdd += iadd;
tmpRetPic.Left += iDistant;
tmpRetPic.Top += iDistant;
tmpRetPic.Right -= iDistant;
tmpRetPic.Bottom -= iDistant;
}
}
}
PaintCustomerText();
}
//---------------------------------------------------------------------------
void __fastcall TTextButton::PaintCustomerText(void)
{
int X,Y;
if( !Text.IsEmpty() ){
if( EtatBtn==0 ){
Canvas->Font->Color = CLR_TXT_NOR;
}
else if( EtatBtn==3 ){
Canvas->Font->Color = CLR_TXT_DIS;
}
else{
Canvas->Font->Color = CLR_TXT_HOT;
}
Canvas->Brush->Style = bsClear;
String strText = FText;
TSize size = Canvas->TextExtent( strText );
int nLen = strText.Length();
if( size.Width > PIXEL_TEXT_X)
{
nLen = nLen*(PIXEL_TEXT_X)/size.Width;
nLen -= 1;
if(nLen <= 0){
strText = strText.SubString(0, 1);
}else{
strText = strText.SubString(0, nLen);
strText += "..";
}
size = Canvas->TextExtent( strText );
}
X = PIXLE_TEXT_LEFT_OFFSET + ( PIXEL_TEXT_X - size.Width )/2;
Y = ( Height -size.Height )/2;
Canvas->TextOut( X, Y, strText );
}
}
//---------------------------------------------------------------------------
+101
View File
@@ -0,0 +1,101 @@
//---------------------------------------------------------------------------
#ifndef TextButtonH
#define TextButtonH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.pnglang.hpp>
#include <Vcl.Graphics.hpp>
//---------------------------------------------------------------------------
class PACKAGE TTextButton : public TGraphicControl
{
public:
enum TModalResult{
mrNone = System::Int8(0x0),
mrOk = System::Int8(0x1),
mrCancel = System::Int8(0x2),
mrAbort = System::Int8(0x3),
mrRetry = System::Int8(0x4),
mrIgnore = System::Int8(0x5),
mrYes = System::Int8(0x6),
mrNo = System::Int8(0x7),
mrClose = System::Int8(0x8),
mrHelp = System::Int8(0x9),
mrTryAgain = System::Int8(0xa),
mrContinue = System::Int8(0xb),
mrAll = System::Int8(0xc),
mrNoToAll = System::Int8(0xd),
mrYesToAll = System::Int8(0xe)
};
private:
TNotifyEvent FOnMouseEnter;//on mouse enter notify event
TNotifyEvent FOnMouseLeave;//on mouse leave notify event
// System::Uitypes::TModalResult FModalResult;
TModalResult FModalResult;
MESSAGE void __fastcall CMMouseEnter(Winapi::Messages::TMessage &Msg); // to know when mouse is entered
MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Msg); // to know when mouse is leaved
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
END_MESSAGE_MAP(TGraphicControl)
protected:
bool FDown; // value to know if we painting mouse down
int EtatBtn; // 0=Normal 1=Mouse entered 2=Pressed 3=Disabled
int FStateCount;
String FText;
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall SetEnabled(bool Value);
__published:
__property Action;
__property Anchors = {default=3};
// __property System::Uitypes::TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=0};
__property TModalResult ModalResult = {read=FModalResult, write=FModalResult, default=mrNone};
__property ParentShowHint = {default=1};
__property PopupMenu;
__property ShowHint;
__property Visible = {default=1};
__property OnClick;
__property OnContextPopup;
__property OnMouseDown;
__property OnMouseMove;
__property OnMouseUp;
__property System::Classes::TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter};
__property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave};
__property bool Down = {read=FDown, write=SetDown, default=False};
__property Enabled = {default=1};
__property int ImgStates = {read=FStateCount, write=SetStateCount, default=4};
__property String Text = {read=FText, write=FText};
__property int FontSize = {write=SetFontSize, default=8};
__property System::Uitypes::TFontName FontName = {write=SetFontName};
private:
void __fastcall PaintCustomer(void);
void __fastcall PaintCustomerText(void);
public:
__fastcall virtual TTextButton(System::Classes::TComponent* AOwner);
__fastcall virtual ~TTextButton(void);
virtual void __fastcall Paint(void); // override the painting of the component
DYNAMIC void __fastcall Click(void);
void __fastcall SetStateCount( int count );
void __fastcall SetDown(bool value); // to know if mouse is down or not
void __fastcall SetFontSize( int value );
void __fastcall SetFontName(System::Uitypes::TFontName value);
void __fastcall SetTextFont(String name, int size);
};
//---------------------------------------------------------------------------
#endif
+1043
View File
File diff suppressed because it is too large Load Diff
+247
View File
@@ -0,0 +1,247 @@
//---------------------------------------------------------------------------
#ifndef ComposeH
#define ComposeH
//---------------------------------------------------------------------------
#include <vector>
#include "ProCommon.h"
using namespace std;
#define POINTS_PER_BAR 120 //每小节点数
#define SEGTYPE_VAR 0
#define SEGTYPE_FILL 1
#define SEGTYPE_INTRO 2
#define SEGTYPE_ENDING 3
#define CHECK_GET 0x0000
#define CHECK_STAGE 0x0001
#define CHECK_TRACK 0x0002
#define CHECK_CHORD 0x0004
#define CHECK_KEY 0x0008
#define CHECK_PROG 0x0010
#define CHECK_STAGEALL 0x001F
#define CHECK_VOL 0x0020
#define CHECK_ALL 0x00FF
/***************************************************************************************/
// 全局类定义
/***************************************************************************************/
// TCompose
typedef struct tagBar0
{
//每小节最多POINTS_PER_BAR个音量值
DWORD aVols[POINTS_PER_BAR];
bool aRecording[POINTS_PER_BAR];
TBarChords aChords;
bool bInvalid; // 是否无效
tagBar0()
{
bInvalid = false;
memset( this, 0, sizeof(tagBar0) );
}
tagBar0( tagBar0* pSrc )
{
memcpy( this, pSrc, sizeof(tagBar0));
}
} TBarOld, *PTBarOld;
typedef struct tagBar
{
TBarChords aChords; //和弦
char iBarKey; // 小节的调号
char reserved[3]; // 保留字段,对齐字节
tagBar()
{
memset( this, 0, sizeof(tagBar) );
iBarKey = -1;
}
tagBar( tagBar* pSrc )
{
memcpy( this, pSrc, sizeof(tagBar));
}
} TBar, *PTBar;
typedef vector<TTrack*> TTrackList;
typedef vector<TBar*> TBarList;
typedef struct tagOpusStage //曲式分段信息
{
char iSegType; //片段类型 0=VAR, 1=FILL, 2=INTRO, 3=ENDING
char iSegNo; //最初片段号
char iSegKey; //分段调号
char nVol; //段落音量
TBarList aBars; //小节列表
TTrackList aTracks; //轨道数列表
tagOpusStage(){
iSegKey = iSegType = iSegNo = -1;
nVol = 100;
}
tagOpusStage( tagOpusStage* pSrc ){
iSegType = pSrc->iSegType;
iSegNo = pSrc->iSegNo;
iSegKey = pSrc->iSegKey;
nVol = pSrc->nVol;
}
~tagOpusStage(){
while( !aBars.empty() ){
delete aBars.back();
aBars.pop_back();
}
while( !aTracks.empty() ){
delete aTracks.back();
aTracks.pop_back();
}
}
} TOpusStage, *PTOpusStage;
typedef vector<TOpusStage*> TOpusStageList;
typedef vector<TPROSTYLE*> STYLELIST;
typedef vector<TStage*> TStageList;
typedef struct{
UINT idLoc;
UINT idStyle;
vector<DWORD> aSegs;
} TLocSegment;
typedef vector<TLocSegment*> LOCSEGLIST;
typedef struct{
BYTE iBankOld;
BYTE iBankNew;
} TBankMap;
typedef vector<TBankMap*> BANKMAPLIST;
class TCompose
{
protected:
UINT m_idLoc, m_idStyle;
int m_nBarCount;
TOpusStageList m_lstStages;
void ClearStages();
public:
virtual void Clear();
int StageCount() { return m_lstStages.size(); };
TOpusStage* CopyStageAt( int iStage );
TOpusStageList& StageList() { return m_lstStages; };
virtual void Set( UINT idLoc, UINT idStyle, TOpusStageList& lstStages );
virtual void Get( UINT& idLoc, UINT& idStyle, TOpusStageList& lstStages );
int BarCount() { return m_nBarCount; };
virtual void WriteProj( LOCSEGLIST& lstLocSeg, FILE* pFile );
virtual int ReadProj( STYLELIST& aUnsolvedStyles, FILE* pFile, DWORD dwVersion );
void SetTempStyle( UINT idLoc, UINT idStyle, int idSet );
void GetSpecBanks( vector<BYTE>& lstBank );
void SetSpecBanks( BANKMAPLIST& lstMap );
TCompose() {
m_idLoc = m_idStyle = -1;
m_nBarCount = 0;
};
~TCompose() {
Clear();
};
};
class TTheme : public TCompose
{
private:
bool m_bWeakup;
int m_iKey;
public:
bool Empty() { return m_lstStages.empty(); };
bool IsWeadup() { return m_bWeakup; };
TBar* GetFirstBar() { return m_lstStages[0]->aBars[0]; };
int GetKey(){ return m_iKey; };
virtual void Clear();
virtual void Set( UINT idLoc, UINT idStyle, TOpusStageList& lstStages );
virtual void WriteProj( LOCSEGLIST& lstLocSeg, FILE* pFile );
virtual int ReadProj( STYLELIST& aUnsolvedStyles, FILE* pFile, DWORD dwVersion );
void Build( TBarList& lstBars, vector<int>&lstStages );
int GetFirstChord();
int GetLastChord();
void Set( TOpusStageList& lstStages );
TTheme();
};
class TOpus : public TCompose
{
private:
BOOL m_bModified;
TOpusStageList m_lstStagesBk;
int m_iKeyBk;
vector<DWORD> m_aStageBars;
public:
TOpus();
~TOpus();
virtual void Clear();
virtual void Set( UINT idLoc, UINT idStyle, TOpusStageList& lstStages );
virtual void WriteProj( LOCSEGLIST& lstLocSeg, FILE* pFile );
virtual int ReadProj( STYLELIST& aUnsolvedStyles, FILE* pFile, DWORD dwVersion );
void ClearBackup();
void CopyStages( int iStartBar, int iEndBar, TOpusStageList* lstStages );
void Backup();
void Restore();
BOOL CheckModified( int iCheckType );
void BuildStyleItem();
void ChangeKey( int iBarStart, int iBarEnd, int iKey, int keys[] );
void CountBars();
int FindStage( int iBar, int *piFirstBar );
int StageFirstBar( int iStage );
int StageLastBar( int iStage );
DWORD StageRange( int iStage );
void InsertStage( int iIns, TOpusStage* pStage );
void RemoveStage( int iDel );
void CutStage( int iStage, int iCutBar );
void ChangeStageBar( int iStage, int nBar, bool bCount );
};
/***************************************************************************************/
// 全局变量
/***************************************************************************************/
extern int g_iPreStage, // 预设段落模式
g_iMelodyKey; // 主旋律调号
extern float g_fMusicVolume; //伴奏音量
extern bool g_bComposeMute; //伴奏静音
extern TTheme g_Theme; //主旋律对象
extern TOpus g_Opus; //全曲对象
extern TOpusStageList& g_lstOpusStages; //曲式结构段落表
extern vector<UINT> g_lstPaidStyleIDs; //当前工程本次使用已支付风格ID列表
/***************************************************************************************/
// 全局函数
/***************************************************************************************/
int FindStage( int iBar, int *piFirstBar=NULL );
int FirstBar( int iStage );
int GetBarCount();
int GetBarKey( int iBar );
TOpusStage* DuplicateStage( TOpusStage* pSrc );
void ProduceTracks( TOpusStage* pStage, void* pSegItem );
bool DiffStages( TOpusStage* pStage1, TOpusStage* pStage2, bool bPassSegNo=false,
bool bPassFile=true );
#endif
+7456
View File
File diff suppressed because it is too large Load Diff
+326
View File
@@ -0,0 +1,326 @@
//---------------------------------------------------------------------------
#ifndef ContentPanelUnitH
#define ContentPanelUnitH
#include "SkinScrollBarUnit.h"
#include "ToolpalPanel.h"
#include "StyleItem.h"
#include "MenuUnit.h"
#include "BaseTrack.h"
#define BAR_CURSOR 0x00
#define BAR_TITLE 0x100
#define BAR_DATA 0x200
#define BAR_TRACK 0x400
#define BAR_LEFT 0x1000
#define MIN_HDR_WIDTH 120
#define MAX_HDR_WIDTH 240
typedef struct tagShowTrack
{
BYTE type;
BYTE index;
BYTE iHover;
TBaseTrack* pTrack;
tagShowTrack( BYTE ty, BYTE ind, TBaseTrack* p )
{
type = ty;
index = ind;
iHover = 0;
pTrack = p;
};
}TShowTrack, *PTShowTrack;
typedef vector<TShowTrack*> TShowTrackList;
//---------------------------------------------------------------------------
class TContentPanel : public Extctrls::TPanel
{
private:
//显示相关
HRGN m_rgnClip;
bool m_bVertical; //竖版/横版
int m_iMode, //0=音频模式 1=和弦模式 2=风格模式
m_nRowShow,
m_nTrackShow,
m_nColumnNum,
m_nRowNum,
m_nBarNum,
m_iBeginShowRow,
m_iBeginShowBar,
m_iBeginShowTrack,
m_nBarWidth,
m_nBarHeight,
m_nDataWidth,
m_nBarDrawHeight,
m_nRowGapHeight, //播放区
m_nTitleHeight, //小节区
m_nChordHeight, //和弦区
m_nTrackHeight, //轨道区
m_nTrkHdrWidth, //轨道头宽度
m_nLeftBound,
m_nLeftOriBound,
m_nRightBound,
m_nTopBound,
m_nBottomBound;
TShowTrackList m_aTracks; //显示的轨道
TSkinScrollBar *m_sbVert,
*m_sbHoriz;
TToolpalPanel *m_pStylePanel, //风格面板
*m_pChordPanel, //和弦面板
*m_pTrackPanel; //轨道面板
//选择相关
int m_iSelBarStart,
m_iSelBarEnd,
m_iSelPointStart,
m_iSelPointEnd,
m_iSelTrackBar,
m_iSelTrackPoint,
m_iSelTrack;
//录音/播放相关
bool m_bPlaying;
int m_iPlayBar,
m_iPlayPoint;
TBitmap *m_imgPlayCursor,
*m_imgMidiIcon,
*m_imgWaveIcon;
TPngImage * m_imgBeatHint[4],
*m_pngChordUp,
*m_pngChordDown,
*m_pngChord2,
*m_pngChord4,
*m_pngChord6,
*m_pngChord7,
*m_pngChordI,
*m_pngChordV,
*m_pngChordMaj,
*m_pngChordMin,
*m_pngChordSus;
int m_iBeatHint,
m_lBeatHint,
m_tBeatHint,
m_wBeatHint,
m_hBeatHint;
//和弦相关
int m_nChordTxtWidth,
m_nChordTxtHeight,
m_iMinSelBar,
m_iMaxSelBar,
m_iSelCellStart,
m_iSelCellEnd;
//复制剪切相关
int m_iCopyBarStart,
m_iCopyBarEnd,
m_iCopyCellStart,
m_iCopyCellEnd,
m_iCopyPointStart,
m_iCopyPointEnd,
m_iCopyAudio;
bool m_bCut;
//拖动相关
int m_iDropBar,
m_iMouseDownBar,
m_iMouseDownPoint,
m_iDragingStage,
m_iDragAudio; //拖动的音频轨
bool m_bDragReady, //鼠标拖动进行选择操作
m_bDraging,
m_bBrush;
TPoint ptDown;
TCommonItem *m_pItem;
TTimer *m_pTimer; //自动滚屏定时器
TMenuPanel *m_PopupMenu; //右键菜单 //add
TApplicationEvents *m_ApplicationEvents;
void ChordPaste( int key[], int type[], int len, bool bAddUndo=true );
// void ChangeMelodyKey( int Index );
void ChangeBarsKey( int iBarStart, int iBarEnd, int iKey, int keys[] );
void AudioMove( int iSrcTrack, int iBarStart, int iPointStart,
int iBarEnd, int iPointEnd, bool bCut );
void GetBarKeys( int iBarStart, int iBarEnd, int keys[] );
void ChangeMidiTrack( int iMT=-1, int iSBar=-1, int iEBar=-1 );
void ClearShowTracks();
void ShowTrackChangeState( int iTrack, int iType );
void ShowPlayPoint();
void CalcViewArea();
bool SetScrollView( int iFirstShowBar );
void DrawBars();
void DrawBarTitle( int l, int r, int t, bool bSel );
void DrawBarData( int iBar, int iStage, int iFirstBar, int left, int top );
void DrawTrack( int iBar, int nBarNum, int left, int top, int iTrack );
void DrawRowWave( int iBar, int nBarNum, int left, int top, int iWave );
void DrawRowMidi( int iBar, int nBarNum, int left, int top, int iMidi );
void DrawChord( TRect& rcDraw, int iBarKey, int iKey, int iType );
//HitTest返回iHitType值 -1=无效区域 0=行间空白 1=小节栏 2=和弦区 >=3 波形区
DWORD HitTest( int X, int Y, int& iHitType, bool bHead=false );
void SelectRange( int iBarStart, int iPointStart, int iBarEnd, int iPointEnd, bool bInvalid=false );
void SelectCopyBars( int iBarStart, int iBarEnd, bool bCut=false );
void SelectCopyCells( int iBarStart, int iCellStart, int iBarEnd, int iCellEnd );
void SelectCopyPos( int iBarStart, int iPointStart, int iBarEnd, int iPointEnd );
void SetDropBar( int iBar );
void SelectRangeByWave( int iHitBar, int iHitPoint );
int GetCell( int iPoint );
void GetSelectChord( int& iBarKey, int& iChordKey, int& iChordType );
void DrawDragImg( int mode );
void SetScrollTimer(TPoint ptMouse, bool bVertical=true);
void HandleDropEvent( int iState=0 );
bool HandleHoverEvent(TPoint ptMouse);
void HandleBrush();
void OnAudioEffectProcess( int iFxType );
void OnAudioEffectAdd( int iFxType );
void OnWMScroll(TWMScroll &Message, bool bVertical);
void __fastcall DoHandleMessage(MSG &Msg, bool &Handled); //鼠标消息处理
void __fastcall TimerProc(TObject* Sender);
void __fastcall DoubleClick(TObject* sender);
void __fastcall DoSetSelPosStart(System::TObject* Sender);
void __fastcall DoSetSelPosEnd(System::TObject* Sender);
void __fastcall DoDelSelPosStart(System::TObject* Sender);
void __fastcall DoDelSelPosEnd(System::TObject* Sender);
void __fastcall DoAudioFxProcess(System::TObject* Sender);
void __fastcall DoAudioVstProcess(System::TObject* Sender);
void __fastcall DoAudioAddFx(System::TObject* Sender);
void __fastcall DoAudioAddVst(System::TObject* Sender);
MESSAGE void __fastcall OnMidiSwitch(TMessage &msg);
MESSAGE void __fastcall UMMouseMove(TWMMouse &Message);
MESSAGE void __fastcall UMMouseUp(TWMMouse &Message);
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMSize(TWMSize &Message);
MESSAGE void __fastcall WMVScroll(TWMScroll &Message);
MESSAGE void __fastcall WMHScroll(TWMScroll &Message);
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
MESSAGE void __fastcall WMMouseDown(TWMMouse &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
MESSAGE_HANDLER(WM_VSCROLL, TWMVScroll, WMVScroll)
MESSAGE_HANDLER(WM_HSCROLL, TWMHScroll, WMHScroll)
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
MESSAGE_HANDLER(WM_LBUTTONDOWN, TWMMouse, WMMouseDown)
MESSAGE_HANDLER(WM_RBUTTONDOWN, TWMMouse, WMMouseDown)
MESSAGE_HANDLER(UM_MOUSEMOVE, TWMMouseMove, UMMouseMove)
MESSAGE_HANDLER(UM_MOUSEUP, TWMMouse, UMMouseUp)
MESSAGE_HANDLER(UM_MIDISWITCH, TMessage, OnMidiSwitch)
END_MESSAGE_MAP(Vcl::Extctrls::TPanel)
protected:
virtual void __fastcall CreateWnd();
virtual void __fastcall Paint(void);
public:
inline void SetStylePanel( TToolpalPanel* pPanel ){ m_pStylePanel=pPanel; };
inline void SetChordPanel( TToolpalPanel* pPanel ){ m_pChordPanel=pPanel; };
inline void SetTrackPanel( TToolpalPanel* pPanel ){ m_pTrackPanel=pPanel; };
inline void SetPopMenu( TMenuPanel* pMenu ){ m_PopupMenu = pMenu; };
void InitialVars( bool bClear = false );
inline int GetBarNum(){ return m_nBarNum; };
void AddNewBar( int iBar );
void ShowBeatHint( int iBeat );
void SetMode( int iMode );
void SetScrollMode( bool bVertical=true );
inline bool IsVertical() { return m_bVertical; };
inline void Play( bool bPlay ) { m_bPlaying=bPlay; };
inline bool IsPlaying() { return m_bPlaying; };
void SetPlayPoint( int iBar, int iPoint );
int GetShowTrackId( int type, int index );
void SelectTrack( int iTrack, int iBar, int iPoint, bool bClear=true );
void ShowTrack( int type, int index, bool bShow );
void DeleteTrack( int type, int index );
void SetSelectRange( int iStartBar, int iStartPoint, int iEndBar, int iEndPoint, bool bInvalid=false );
void GetSelectRange( int& iStartBar, int& iStartPoint, int& iEndBar, int& iEndPoint );
inline bool IsModifyMode() { return !(m_iSelBarStart<0 && m_iSelBarEnd<0); };
bool SetSelectChord( int iKey, int iChordType );
void GetChordDispalyKey( int iKey, int iBarKey, int& iMainKey, int& iAjustKey );
void SelectCells( int iBarStart, int iCellStart, int iBarEnd, int iCellEnd );
void SelectStage( int iStage );
void SelectBars( int iStartBar, int iEndBar );
void GetSelectBars( int& iStartBar, int& iEndBar );
void InvalidateBar( int iBar, int iBeginPoint, int iEndPoint, int iArea=BAR_DATA );
void InvalidateBars( int iBarStart, int iBarEnd, int iArea=BAR_DATA );
void InvalidateShowBars( int iArea=BAR_TITLE|BAR_DATA|BAR_TRACK );
void InvalidateStage( int iStage, int iArea=BAR_DATA );
void ScrollView( int nPos, bool bVertical=true, bool bRedraw=true );
bool ShowDragImg( bool bShow=true, int iState=0 );
TCommonItem* GetDropItem(){ return m_pItem; };
void SetDropItem( TCommonItem* pItem ){ m_pItem = pItem; };
void BeginBrush( TCommonItem* pBrushItem );
void CancelBrush();
bool IsStyleBrush() { return m_bBrush; };
void Undo( bool bUndo );
void __fastcall OnTrackStateChanged( int iType, int iIndex, BYTE iState, bool bUnset );
void __fastcall OnStageChanged( int iStage, int iMode );
void __fastcall OnChangeMelodyKey( int Index );
void __fastcall OnDirectionKey( WORD key );
void __fastcall DoCancelAll(System::TObject* Sender);
void __fastcall DoSelectAll(System::TObject* Sender);
void __fastcall DoInsertBlankBar(System::TObject* Sender);
void __fastcall DoBarsCopy(System::TObject* Sender);
void __fastcall DoBarsCut(System::TObject* Sender);
void __fastcall DoBarsDelete(System::TObject* Sender);
void __fastcall DoBarsInsert(System::TObject* Sender);
void __fastcall DoBarsChangeKey(System::TObject* Sender);
void __fastcall DoChordCopy(System::TObject* Sender);
void __fastcall DoChordPaste(System::TObject* Sender);
void __fastcall DoChordDelete(System::TObject* Sender);
void __fastcall DoAudioDelete(System::TObject* Sender);
void __fastcall DoAudioCopy(System::TObject* Sender);
void __fastcall DoAudioCut(System::TObject* Sender);
void __fastcall DoAudioPaste(System::TObject* Sender);
void __fastcall DoAudioLoad(System::TObject* Sender);
void __fastcall DoTrackAdd(System::TObject* Sender);
void __fastcall DoTrackDel(System::TObject* Sender);
void __fastcall DoTrackShow(System::TObject* Sender);
void __fastcall DoTrackHide(System::TObject* Sender);
void __fastcall DoTrackSave(System::TObject* Sender);
void __fastcall DoTrackMute(System::TObject* Sender);
void __fastcall DoTrackSolo(System::TObject* Sender);
void __fastcall DoInsertTexture(TObject* Sender);
void __fastcall DoDeleteTexture(TObject* Sender);
void __fastcall DoSwitchTexture(TObject* Sender);
void __fastcall DoSwitchFontProg(TObject* Sender);
void __fastcall DoTrackSwitchTexture(TObject* Sender);
void __fastcall DoTrackSwitchFontProg(TObject* Sender);
void __fastcall CreateEditMenu(TMenuPanel *Menu, bool bEnabled);
void __fastcall CreateTrackMenu(TMenuPanel *Menu, bool bEnabled);
__fastcall virtual TContentPanel(System::Classes::TComponent* AOwner);
__fastcall ~TContentPanel();
};
#endif
+53
View File
@@ -0,0 +1,53 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CustomerSettingFormUnit.h"
#include "GlobalUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GeneralDialogPanel"
#pragma link "TextButton"
#pragma resource "*.dfm"
TCustomerSettingForm *CustomerSettingForm;
//---------------------------------------------------------------------------
__fastcall TCustomerSettingForm::TCustomerSettingForm(TComponent* Owner)
: TForm(Owner)
{
m_pBKGGeneralDialogPanel->Font->Size = g_szFont9;
m_pCSPanel = new TCustmerSettingPanel(m_pBKGGeneralDialogPanel);
m_pCSPanel->Font->Size = g_szFont9;
m_pCSPanel->Parent = m_pBKGGeneralDialogPanel;
int nHeightTmp = m_pTextButtonOK->Top - PANEL_START - PANEL_HEIGHT;
m_pCSPanel->SetBounds( PANEL_LEFT,
PANEL_START + nHeightTmp/2,
Width - PANEL_LEFT - PANEL_RIGHT,
PANEL_HEIGHT );
m_pTextButtonOK->FontSize = g_szFont9;
m_pTextButtonCancel->FontSize = g_szFont9;
}
//---------------------------------------------------------------------------
__fastcall TCustomerSettingForm::~TCustomerSettingForm()
{
if( m_pCSPanel ){
delete m_pCSPanel;
m_pCSPanel = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TCustomerSettingForm::FormShow(TObject *Sender)
{
m_bAlphaKeyOrig = g_bAlphaKey;
m_iSegColorOrig = g_iSegColorMode;
m_pCSPanel->SetContent();
}
//---------------------------------------------------------------------------
+49
View File
@@ -0,0 +1,49 @@
object CustomerSettingForm: TCustomerSettingForm
Left = 0
Top = 0
BorderStyle = bsNone
Caption = 'CustomerSettingForm'
ClientHeight = 351
ClientWidth = 433
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearTypeNatural
Position = poMainFormCenter
Scaled = False
OnShow = FormShow
TextHeight = 14
object m_pBKGGeneralDialogPanel: TGeneralDialogPanel
Left = 0
Top = 0
Width = 433
Height = 351
Caption = #20559#22909#35774#32622
Color = 5064257
ParentBackground = False
TabOrder = 0
object m_pTextButtonOK: TTextButton
Left = 149
Top = 315
Width = 56
Height = 25
ModalResult = mrYes
ParentShowHint = False
ShowHint = True
Text = #30830#23450
end
object m_pTextButtonCancel: TTextButton
Left = 224
Top = 315
Width = 56
Height = 25
ModalResult = mrCancel
ParentShowHint = False
ShowHint = True
Text = #21462#28040
end
end
end
+40
View File
@@ -0,0 +1,40 @@
//---------------------------------------------------------------------------
#ifndef CustomerSettingFormUnitH
#define CustomerSettingFormUnitH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include "GeneralDialogPanel.h"
#include <Vcl.ExtCtrls.hpp>
#include "CustomerSettingPanelUnit.h"
#include "TextButton.h"
//---------------------------------------------------------------------------
class TCustomerSettingForm : public TForm
{
__published: // IDE-managed Components
TGeneralDialogPanel *m_pBKGGeneralDialogPanel;
TTextButton *m_pTextButtonOK;
TTextButton *m_pTextButtonCancel;
void __fastcall FormShow(TObject *Sender);
private: // User declarations
public: // User declarations
TCustmerSettingPanel *m_pCSPanel;
bool m_bAlphaKeyOrig;
int m_iSegColorOrig;
__fastcall TCustomerSettingForm(TComponent* Owner);
__fastcall ~TCustomerSettingForm();
};
//---------------------------------------------------------------------------
extern PACKAGE TCustomerSettingForm *CustomerSettingForm;
//---------------------------------------------------------------------------
#endif
+420
View File
@@ -0,0 +1,420 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CustomerSettingPanelUnit.h"
#include "GlobalUnit.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(171, 186, 207),
// CLR_BKG_INTERNAL = RGB(65, 70, 77),
CLR_BKG_INTERNAL = RGB(47, 50, 56),
CLR_BKG_INTERNAL_LIGHT = RGB(73, 77, 86),
CLR_CONTENT_DB_LINE_DARK = RGB(32, 35, 39),
CLR_CONTENT_DB_LINE_LIGHT = RGB(76, 81, 87);
//---------------------------------------------------------------------------
__fastcall TCustmerSettingPanel::TCustmerSettingPanel( TComponent* Owner)
: Vcl::Extctrls::TPanel( Owner )
{
Color = CLR_BKG_INTERNAL;
m_ScrollBar = NULL;
m_iTopLine =0;
m_iShowLine = 1;
}
//---------------------------------------------------------------------------
void __fastcall TCustmerSettingPanel::CreateWnd()
{
Vcl::Extctrls::TPanel::CreateWnd();
m_ckInitProject = new TCKBox(this);
m_ckDownloadStyle = new TCKBox(this);
m_ckPreBeat = new TCKBox(this);
m_ckSegColor = new TCKBox(this);
m_cbChordMode = new TComboBoxComponent(this);
m_cbPreStage = new TComboBoxComponent(this);
m_ckInitProject->Parent = this;
m_ckDownloadStyle->Parent = this;
m_ckPreBeat->Parent = this;
m_ckSegColor->Parent = this;
m_cbChordMode->Parent = this;
m_cbPreStage->Parent = this;
m_ckInitProject->Font->Size = g_szFont9;
m_ckDownloadStyle->Font->Size = g_szFont9;
m_ckPreBeat->Font->Size = g_szFont9;
m_ckSegColor->Font->Size = g_szFont9;
m_cbChordMode->SetFontSize(g_szFont9);
m_cbPreStage->SetFontSize(g_szFont9);
m_ckInitProject->Font->Color = CLR_TXT_HOT;
m_ckDownloadStyle->Font->Color = CLR_TXT_HOT;
m_ckPreBeat->Font->Color = CLR_TXT_HOT;
m_ckSegColor->Font->Color = CLR_TXT_HOT;
Canvas->Font->Assign(m_ckPreBeat->Font);
m_ckInitProject->Caption = L"启动时自动打开上次工程";
m_ckDownloadStyle->Caption = L"自动下载风格";
m_ckPreBeat->Caption = L"录音时使用预设风格节拍提示";
m_ckSegColor->Caption = L"按乐器数显示段落颜色";
m_ckInitProject->Width = 180;
m_ckDownloadStyle->Width = 120;
m_ckPreBeat->Width = 180;
m_ckSegColor->Width = 180;
m_cbChordMode->AddItem(L"级数");
m_cbChordMode->AddItem(L"英文");
m_cbChordMode->Height = 24;
m_cbPreStage->AddItem(L"M");
m_cbPreStage->AddItem(L"IME");
m_cbPreStage->AddItem(L"IMIME");
m_cbPreStage->Height = 24;
m_ckInitProject->OnChange = CKBoxChange;
m_ckDownloadStyle->OnChange = CKBoxChange;
m_ckPreBeat->OnChange = CKBoxChange;
m_ckSegColor->OnChange = CKBoxChange;
m_cbChordMode->OnChange = ChordModeChange;
m_cbPreStage->OnChange = PreStageChange;
if( SOFTWARE_ID==e_Pro_Lite )
m_ckDownloadStyle->Enabled = false;
SetShowLine();
}
//---------------------------------------------------------------------------
__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_ckSegColor ){
delete m_ckSegColor;
m_ckSegColor = NULL;
}
if( m_cbChordMode ){
delete m_cbChordMode;
m_cbChordMode = NULL;
}
if( m_cbPreStage ){
delete m_cbPreStage;
m_cbPreStage = 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( 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 = LINE_NUM;
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;
}
}
//---------------------------------------------------------------------------
void __fastcall TCustmerSettingPanel::SetContent()
{
/* m_ckInitProject->Width = 155;
m_ckDownloadStyle->Width = 95;
m_ckPreBeat->Width = 180;
*/
m_bAutoOpenProject = g_bAutoOpenProject;
m_bDownloadStyle = g_bAutoDownloadStyle;
m_bPreBeat = g_bPrebeat;
m_bAlphaKey = g_bAlphaKey;
m_bSegColor = g_iSegColorMode==1;
m_cPreStage = g_iPreStageDefault;
m_ckInitProject->Checked = m_bAutoOpenProject;
m_ckDownloadStyle->Checked = m_bDownloadStyle;
m_ckPreBeat->Checked = m_bPreBeat;
m_ckSegColor->Checked = m_bSegColor;
m_cbChordMode->DefItemIndex = g_bAlphaKey;
m_cbPreStage->DefItemIndex = g_iPreStageDefault;
if(m_ScrollBar) {
m_ScrollBar->SetRange( 0,LINE_NUM-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;
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 + 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;
curY = contentStart;
m_ckSegColor->Left = curX;
m_ckSegColor->Top = curY + (contentHeight - m_ckSegColor->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);
curX += sizeFont.Width;
TFont *fntOld = new TFont;
fntOld->Assign( Canvas->Font );
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;
strText = m_bAlphaKey ? L"A" : L"VI";
sizeFont = Canvas->TextExtent(strText);
curY = contentStart + (contentHeight - sizeFont.Height)/2;
Canvas->TextOutW(curX, curY, strText);
curX += sizeFont.Width;
curY += 7;
strText = L"m";
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);
}
//---------------------------------------------------------------------------
void __fastcall TCustmerSettingPanel::CKBoxChange(TObject* Sender)
{
TCKBox *tmpCK = (TCKBox *)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;
else if( tmpCK == m_ckSegColor ){
m_bSegColor = m_ckSegColor->Checked;
Application->MainForm->Perform( UM_PREFERCHANGED, 0, m_bSegColor ? 1 : 0 );
}
}
//---------------------------------------------------------------------------
void __fastcall TCustmerSettingPanel::ChordModeChange(TComboBoxItem* Sender, int Index)
{
m_bAlphaKey = Index!=0;
this->Invalidate();
Application->MainForm->Perform( UM_PREFERCHANGED, 1, m_bAlphaKey );
}
//---------------------------------------------------------------------------
void __fastcall TCustmerSettingPanel::PreStageChange(TComboBoxItem* Sender, int Index)
{
m_cPreStage = Index;
}
//---------------------------------------------------------------------------
+68
View File
@@ -0,0 +1,68 @@
//---------------------------------------------------------------------------
#ifndef CustomerSettingPanelUnitH
#define CustomerSettingPanelUnitH
#include "SkinScrollBarUnit.h"
#include "CKBox.h"
#include "ComboBoxComponent.h"
//#include "GlobalUnit.h"
//---------------------------------------------------------------------------
#define LINE_NUM (5)
#define LINE_HEIGHT (40)
#define PANEL_START (26)
#define PANEL_LEFT (10)
#define PANEL_RIGHT (PANEL_LEFT)
#define PANEL_HEIGHT (260)
//---------------------------------------------------------------------------
class TCustmerSettingPanel : public Vcl::Extctrls::TPanel
{
private:
int m_iShowLine;
int m_iTopLine;
TSkinScrollBar *m_ScrollBar;
TCKBox *m_ckInitProject;
TCKBox *m_ckDownloadStyle;
TCKBox *m_ckPreBeat;
TCKBox *m_ckSegColor;
TComboBoxComponent *m_cbChordMode;
TComboBoxComponent *m_cbPreStage;
void __fastcall CKBoxChange(TObject* Sender);
void __fastcall ChordModeChange(TComboBoxItem* Sender, int Index);
void __fastcall PreStageChange(TComboBoxItem* Sender, int Index);
void __fastcall SetShowLine();
virtual void __fastcall CreateWnd();
virtual void __fastcall Paint(void);
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMVScroll(Winapi::Messages::TWMScroll &Message);
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_VSCROLL, TWMVScroll, WMVScroll)
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
END_MESSAGE_MAP( Vcl::Extctrls::TPanel )
public:
bool m_bAutoOpenProject;
bool m_bDownloadStyle;
bool m_bPreBeat;
bool m_bAlphaKey;
bool m_bSegColor;
char m_cPreStage;
void __fastcall SetContent();
__fastcall TCustmerSettingPanel( TComponent* Owner);
__fastcall ~TCustmerSettingPanel();
};
//---------------------------------------------------------------------------
#endif
+279
View File
@@ -0,0 +1,279 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "FavorTextureUnit.h"
#include "GlobalUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
#define TCF_VERSION 0x01
typedef struct tTextureCollectionFileHeader{
char head[4];
UINT idNum;
tTextureCollectionFileHeader(){
head[0] = 'T';
head[1] = 'X';
head[2] = 'T';
head[3] = TCF_VERSION;
idNum = 0;
}
} TTCFHEADER; //织体收藏文件头
typedef struct tagFavorTexture
{
UINT idLoc;
UINT idStyle;
char segType; //片段类型
char segNo; //片段号
char chan; //通道号
char iTS; //拍号
tagFavorTexture()
{
idLoc = 0;
idStyle = 0;
segType = segNo = chan = -1;
};
tagFavorTexture( UINT loc, UINT sty, char st, char sn, char cn, char ts )
{
idLoc = loc;
idStyle = sty;
segType = st;
segNo = sn;
chan = cn;
iTS = ts;
};
} TFavorTexture; //织体收藏项
typedef vector<TFavorTexture*> FAVORTXTRLIST;
FAVORTXTRLIST u_lstFavorTextures,
u_lstFTSItems;
//////////////////////////////////////////////////////////////////////////////////////
void WriteFTSItems()
{
AnsiString strPath = g_strUserPath.c_str();
strPath += L"\\profile\\dt_eerp\\colIns.daj";
//读取收藏列表
FILE* fp = fopen( strPath.c_str(), "wb" );
if( fp ){
TTCFHEADER header;
header.idNum = u_lstFTSItems.size();
fseek( fp, 0, SEEK_SET );
fwrite( (void*)&header, sizeof(header), 1, fp );
for( int i=0; i<u_lstFTSItems.size(); i++ ){
fwrite( u_lstFTSItems[i], sizeof(TFavorTexture), 1, fp );
}
fclose( fp );
}
}
//////////////////////////////////////////////////////////////////////////////////////
void ReadFTSItems()
{
AnsiString strPath = g_strUserPath.c_str();
strPath += L"\\profile\\dt_eerp\\colIns.daj";
//读取收藏列表
FILE* fp = fopen( strPath.c_str(), "rb" );
if( fp ){
TTCFHEADER head;
char buf[128];
bool bChanged = false;
int ret = fread( (void*)buf, 1, sizeof(head), fp );
if( ret==sizeof(head) && !strncmp( buf, (char*)&head.head, sizeof(head.head))){
int num = ((TTCFHEADER*)buf)->idNum;
for( int i=0; i<num; i++ ){
TFavorTexture* pItem = new TFavorTexture;
fread( pItem, sizeof(TFavorTexture), 1, fp );
TPROSTYLE* pStyle = GetStyleInfo( pItem->idLoc, pItem->idStyle );
if( !pStyle ){
delete pItem;
bChanged = true;
}
else{
u_lstFTSItems.push_back( pItem );
}
}
}
fclose( fp );
if( bChanged )
WriteFTSItems();
}
}
//////////////////////////////////////////////////////////////////////////////////////
int FindListItem( UINT idLoc, UINT idStyle, char sType, char sNo, char cno, bool bAll )
{
TFavorTexture *pTemp = NULL;
FAVORTXTRLIST& lstItems = bAll ? u_lstFTSItems : u_lstFavorTextures;
int middle, front = 0,
rear = lstItems.size() - 1;
while( front<=rear ){
pTemp = lstItems[front];
if( pTemp->idLoc==idLoc && pTemp->idStyle==idStyle && pTemp->segType==sType
&& pTemp->segNo==sNo && pTemp->chan==cno )
return front;
pTemp = lstItems[rear];
if( pTemp->idLoc==idLoc && pTemp->idStyle==idStyle && pTemp->segType==sType
&& pTemp->segNo==sNo && pTemp->chan==cno )
return rear;
middle = (front+rear)/2;
pTemp = lstItems[middle];
if( pTemp->idLoc==idLoc && pTemp->idStyle==idStyle && pTemp->segType==sType
&& pTemp->segNo==sNo && pTemp->chan==cno )
return middle;
else if( pTemp->idLoc>idLoc || pTemp->idLoc==idLoc && pTemp->idStyle>idStyle
|| pTemp->idLoc==idLoc && pTemp->idStyle==idStyle
&& pTemp->segType>sType
|| pTemp->idLoc==idLoc && pTemp->idStyle==idStyle
&& pTemp->segType==sType
&& pTemp->segNo>sNo
|| pTemp->idLoc==idLoc && pTemp->idStyle==idStyle
&& pTemp->segType==sType
&& pTemp->segNo==sNo
&& pTemp->chan>cno )
front=middle+1;
else
rear=middle-1;
}
if( front>rear ){
return front;
}
return -1;
}
//////////////////////////////////////////////////////////////////////////////////////
void ClearFavorTextures( bool bAll )
{
u_lstFavorTextures.clear();
if( bAll ){
for( int i=0; i<u_lstFTSItems.size(); i++ ){
delete u_lstFTSItems[i];
}
u_lstFTSItems.clear();
}
}
//////////////////////////////////////////////////////////////////////////////////////
void GetFavorTextures()
{
ClearFavorTextures();
if( u_lstFTSItems.empty() ){
ReadFTSItems();
}
for( int i=0; i<u_lstFTSItems.size(); i++ ){
if( u_lstFTSItems[i]->iTS==g_iMelodyTimeSignature ){
u_lstFavorTextures.push_back( u_lstFTSItems[i] );
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
bool IsFavorTexture( UINT idLoc, UINT idStyle, char sType, char sNo, char cno )
{
int ind = FindListItem( idLoc, idStyle, sType, sNo, cno );
if( ind>=0 && ind<u_lstFavorTextures.size() ){
TFavorTexture *pTemp = u_lstFavorTextures[ind];
if( pTemp->idLoc==idLoc && pTemp->idStyle==idStyle && pTemp->segType==sType
&& pTemp->segNo==sNo && pTemp->chan==cno )
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////////////////
void AddFavorTextures( UINT idLoc, UINT idStyle, char sType, char sNo, char cno )
{
int ind = FindListItem( idLoc, idStyle, sType, sNo, cno );
TFavorTexture * pItem = NULL;
if( u_lstFavorTextures.empty() || ind<0 || ind>=u_lstFavorTextures.size() ){
pItem = new TFavorTexture( idLoc, idStyle, sType, sNo, cno, g_iMelodyTimeSignature );
u_lstFavorTextures.push_back( pItem );
}
else{
TFavorTexture * pTemp = u_lstFavorTextures[ind];
if( pTemp->idLoc==idLoc && pTemp->idStyle==idStyle && pTemp->segType==sType
&& pTemp->segNo==sNo && pTemp->chan==cno )
return; //已收藏
else{
pItem = new TFavorTexture( idLoc, idStyle, sType, sNo, cno, g_iMelodyTimeSignature );
u_lstFavorTextures.insert( u_lstFavorTextures.begin()+ind, pItem);
}
}
if( pItem ){
ind = FindListItem( idLoc, idStyle, sType, sNo, cno, true );
u_lstFTSItems.insert( u_lstFTSItems.begin()+ind, pItem );
WriteFTSItems();
}
}
//////////////////////////////////////////////////////////////////////////////////////
void DelFavorTextures( UINT idLoc, UINT idStyle, char sType, char sNo, char cno )
{
if( !u_lstFavorTextures.empty() ){
int ind = FindListItem( idLoc, idStyle, sType, sNo, cno );
if( ind>=0 && ind<u_lstFavorTextures.size() ){
TFavorTexture *pTemp = u_lstFavorTextures[ind];
if( pTemp->idLoc==idLoc && pTemp->idStyle==idStyle && pTemp->segType==sType
&& pTemp->segNo==sNo && pTemp->chan==cno ){
u_lstFavorTextures.erase( u_lstFavorTextures.begin()+ind );
ind = FindListItem( idLoc, idStyle, sType, sNo, cno, true );
delete u_lstFTSItems[ind];
u_lstFTSItems.erase( u_lstFTSItems.begin()+ind );
WriteFTSItems();
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
void SetFavorTexture( UINT idLoc, UINT idStyle, char sType, char sNo, char cno, bool bSet )
{
if( bSet ){
AddFavorTextures( idLoc, idStyle, sType, sNo, cno );
}
else{
DelFavorTextures( idLoc, idStyle, sType, sNo, cno );
}
}
//////////////////////////////////////////////////////////////////////////////////////
+15
View File
@@ -0,0 +1,15 @@
//---------------------------------------------------------------------------
#ifndef FavorTextureUnitH
#define FavorTextureUnitH
//---------------------------------------------------------------------------
int FindListItem( UINT idLoc, UINT idStyle, char sType, char sNo, char cno, bool bAll=false );
void ClearFavorTextures( bool bAll=false );
void GetFavorTextures();
void AddFavorTextures( UINT idLoc, UINT idStyle, char sType, char sNo, char cno );
void DelFavorTextures( UINT idLoc, UINT idStyle, char sType, char sNo, char cno );
bool IsFavorTexture( UINT idLoc, UINT idStyle, char sType, char sNo, char cno );
void SetFavorTexture( UINT idLoc, UINT idStyle, char sType, char sNo, char cno, bool bSet=true );
#endif
+1311
View File
File diff suppressed because it is too large Load Diff
+105
View File
@@ -0,0 +1,105 @@
//---------------------------------------------------------------------------
#ifndef FxDefH
#define FxDefH
//---------------------------------------------------------------------------
#define MAX_FX_NUM 10
#define FX_ECHO 0x00
#define FX_DISTORTION 0x01
#define FX_ROTATE 0x02
#define FX_REVERB 0x03
#define FX_COMPRESSOR 0x04
#define FX_WAH 0x05
#define FX_CHORUS 0x06
#define FX_PARAMEQ 0x07
#define FX_PHASER 0x08
#define FX_PITCH 0x100
//#define FX_APR 0x101
//#define FX_VOLUME 0x102
#define FX_VST 0x10000
/***************************************************************************************/
// 全局结构定义
/***************************************************************************************/
#include <memory>
typedef struct tagAudioFx
{
int iFx;
int iPreset;//iPlugins
WORD bBypass;
WORD nParamSize;
void* pParam;
tagAudioFx( int iF, int iP, void* pP, int nSize, bool bB=false ){
iFx = iF;
iPreset = iP;
nParamSize = nSize;
pParam = pP;
bBypass = bB;
}
tagAudioFx( tagAudioFx* pSrc ){
memcpy( this, pSrc, sizeof(tagAudioFx) );
if( pSrc->nParamSize ){
pParam = new float[pSrc->nParamSize];
memcpy( pParam, pSrc->pParam, sizeof(float)*nParamSize );
}
}
~tagAudioFx(){
if( pParam )
delete[] pParam;
}
} TAudioFx;
/***************************************************************************************/
// 全局常量
/***************************************************************************************/
extern const char *g_strEffect[MAX_FX_NUM],
*g_strEffectPreset[MAX_FX_NUM][3],
*g_strEffectParamName[MAX_FX_NUM][6];
extern const DWORD g_aAudioEffectTypes[MAX_FX_NUM]; //音效类型
extern const float g_aEffectParamLimit[MAX_FX_NUM][6][2];//音效参数映射
/***************************************************************************************/
// 全局变量
/***************************************************************************************/
//extern PTEffect g_aAudioEffects[MAX_FX_NUM], //启用的音效
// g_aAudioEffects_SVD[MAX_FX_NUM];//保存工程比较
/***************************************************************************************/
// 全局函数
/***************************************************************************************/
int GetFxPresetCount( int iFxType );
void GetFxPreset( int iFxType, int iPreset, float fParams[] );
int GetFxParamNum( int iFxType );
float Pos2Param( int iFx, int iParam, int Pos );
int Param2Pos( int iFx, int iParam, float fParam );
HRESULT AudioApplyEffect( int iWave, int ind, TAudioFx* pFx );
void AudioEffectsClear( int iWave, bool bApply=true );
void AudioEffectsDefault( int iWave, bool bApply=true );
void AudioEffectsSet( int iWave );
/*
void SetAudioEffects( bool bOn=true );
void ResetAudioEffects( int nLastBarNum=0 );
void SortAudioEffects( int iFx=-1 );
void ClearAudioEffects( TEffect** aEffects );
void MoveAudioEffects( int iStartBar, int iEndBar, int iInsertBar, int iMode );
void AudioEffectsDefault( int iWave, bool bApply=true );
void AudioEffectsClear( int iWave, bool bApply=true );
bool AudioEffectsSort( int iWave, int iFx=-1 );
void AudioEffectsSet( int iWave, bool bOn=true );
bool AudioEffectsMove( int iSrc, double dblStart, double dblEnd, int iDest, double dblInsert, int iMode );
void ClearAudioEffects( TEffect* lstDest[] );
void CopyAudioEffects( TEffect* lstDest[], TEffect* lstSrc[], double dblStart, double dblEnd );
void InsertAudioEffetcts( TEffect* lstDest[], TEffect* lstSrc[], double dblInsert, double dblLen );
void SortAudioEffects( TEffect** lstEffect );
void RemoveAudioEffects( TEffect* lstEffects[], double dblStart, double dblEnd );
TEffect* DuplicateEffects( TEffect* lstSrc );
*/
#endif
+54
View File
@@ -0,0 +1,54 @@
//---------------------------------------------------------------------------
/////////////////////////////////
////////安装 记得在生成编译包的工程和使用工程中加图片 Res\System\close.png -->L"PngImage_Close"
/////////////////////////////////
#ifndef GeneralDialogPanelH
#define GeneralDialogPanelH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.jpeg.hpp>
#include <Vcl.Graphics.hpp>
//---------------------------------------------------------------------------
class CBTPNButton;
#define LEN_BKG_EXTERNAL_ROUND 1
#define LEN_BKG_EXTERNAL_FRMAE 1
#define LEN_BKG_INTERNAL_LINE 23
//---------------------------------------------------------------------------
class PACKAGE TGeneralDialogPanel : public TPanel
{
private:
TNotifyEvent FOnCanceled; // 关闭窗口事件
TPngImage *m_imgClose;
CBTPNButton *m_btnClose;
void __fastcall CloseClick(TObject *Sender);
MESSAGE void __fastcall WMEraseBkgnd(Winapi::Messages::TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP(Vcl::Extctrls::TPanel)
protected:
virtual void __fastcall Paint(void);
virtual void __fastcall CreateWnd();
DYNAMIC void __fastcall MouseDown(System::Uitypes::TMouseButton Button,
System::Classes::TShiftState Shift, int X, int Y);
public:
__fastcall TGeneralDialogPanel(TComponent* Owner);
__fastcall ~TGeneralDialogPanel();
__published:
__property TNotifyEvent OnCanceled = {write = FOnCanceled, read = FOnCanceled};
};
//---------------------------------------------------------------------------
#endif
+2822
View File
File diff suppressed because it is too large Load Diff
+1630
View File
File diff suppressed because it is too large Load Diff
+483
View File
@@ -0,0 +1,483 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "HelpFormUnit.h"
#include "GlobalUnit.h"
#include "MessageDef.h"
#include "MessageFormUnit.h"
#include "ProgressFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GeneralDialogPanel"
#pragma link "PNGButton"
#pragma link "CapButton"
#pragma resource "*.dfm"
THelpForm *HelpForm;
//---------------------------------------------------------------------------
#define WINDOW_MAX 0
#define WINDOW_NORMAL 1
#define WINDOW_MIN 2
#define WNDOW_CLOSE 3
//---------------------------------------------------------------------------
__fastcall TTabButton::TTabButton(System::Classes::TComponent* AOwner)
: TPNGButton( AOwner )
{
Caption = "";
}
//---------------------------------------------------------------------------
__fastcall TTabButton::~TTabButton(void)
{
}
//---------------------------------------------------------------------------
void __fastcall TTabButton::SetFontSize(int sz)
{
Canvas->Font->Size = sz;
}
//---------------------------------------------------------------------------
void __fastcall TTabButton::Paint(void)
{
TPNGButton::Paint();
Canvas->Brush->Style = bsClear;
Canvas->Font->Color = RGB( 184,188,189 );
Canvas->Font->Name = g_strTxtFontName;
Canvas->Font->Quality = TFontQuality::fqClearTypeNatural;
// if( !strcmp( g_strTxtFontName, "微软雅黑" ) ){
// Canvas->Font->Size = 10;
// }
// else{
// Canvas->Font->Size = 9;
// }
int nLength = Canvas->TextWidth( Caption );
int nHeight = Canvas->TextHeight( Caption );
Canvas->TextOutW( Width/2 - nLength/2 - 5,Height/2 - nHeight/2,Caption );
}
//---------------------------------------------------------------------------
__fastcall THelpForm::THelpForm(TComponent* Owner)
: TForm(Owner)
{
Window_state = WINDOW_NORMAL;
m_nUserNoticeNum = 0;
m_PngImage = new TPngImage();
m_PngImage->LoadFromResourceName(int(HInstance), L"HelpPNG");
m_PanelShow = NULL;
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormClose(TObject *Sender, TCloseAction &Action)
{
PostMessage( Application->MainForm->Handle, UM_SHOWHELP, false, 0 );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::RestClick(TObject *Sender)
{
SetSize( HLP_WINDOW_NORMAL );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MinClick(TObject *Sender)
{
SetSize( HLP_WINDOW_MIN );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MaxClick(TObject *Sender)
{
SetSize( HLP_WINDOW_MAX );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SetSize( int iState )
{
Window_state = iState;
switch( iState )
{
case HLP_WINDOW_MAX:
SetBounds( Application->MainForm->Left, Application->MainForm->Top + 44,
Application->MainForm->Width, Application->MainForm->Height - 44 );
break;
case HLP_WINDOW_MIN:
SetBounds( Application->MainForm->Left + Application->MainForm->Width - 160,
Application->MainForm->Top + Application->MainForm->Height - 34,
150, 24 );
break;
case HLP_WINDOW_NORMAL:
SetBounds( Application->MainForm->Left + Application->MainForm->Width/2 - 389,
Application->MainForm->Top + Application->MainForm->Height/2 - 220,
778, 440 );
break;
}
m_btnMax->Visible = iState==HLP_WINDOW_NORMAL;
m_btnMin->Visible = iState!= HLP_WINDOW_MIN;
m_btnRest->Visible = iState!=HLP_WINDOW_NORMAL;
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormResize(TObject *Sender)
{
switch( Window_state ){
case HLP_WINDOW_MIN:
m_lblGroupLabel->Top = 50;
m_lblGroup->Top = 50;
m_lblVideoLabel->Top = 50;
m_lblVideo->Top = 50;
m_lblUrlLabel->Top = 50;
m_lblUrl->Top = 50;
break;
case HLP_WINDOW_MAX:
case HLP_WINDOW_NORMAL:
m_PanelShow->SetBounds( 40, 67, Width - 80, Height - 120 );
m_memMsg->SetBounds( 15, 15, m_PanelShow->Width - 45, 130 );
m_btnSubmit->Top = m_memMsg->Top + m_memMsg->Height + 5;
m_btnSubmit->Left = m_memMsg->Left + m_memMsg->Width - m_btnSubmit->Width;
m_lblGroupLabel->Top = Height - 35;
m_lblGroup->Top = m_lblGroupLabel->Top;
m_lblVideoLabel->Top = m_lblGroupLabel->Top;
m_lblVideo->Top = m_lblGroupLabel->Top;
m_lblUrlLabel->Top = m_lblGroupLabel->Top;
m_lblUrl->Top = m_lblGroupLabel->Top;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormCreate(TObject *Sender)
{
m_GenerPanel->Font->Size = g_szFont9;
for( int i=0;i<TAB_NUM;i++ ){
m_arrTabs[i] = new TTabButton(this);
m_arrTabs[i]->Parent = m_GenerPanel;
m_arrTabs[i]->ImgStates = 4;
m_arrTabs[i]->PngImg = m_PngImage;//LoadFromResourceName( int(HInstance), L"HelpPNG" );
m_arrTabs[i]->Top = 40;
m_arrTabs[i]->SetFontSize(g_szFont10);
m_arrTabs[i]->OnClick = TabClick;
m_arrTabs[i]->Tag = i;
if(i==2){
m_arrTabs[i]->Left = 78;
m_arrTabs[i]->Visible = false;
}
else if(i>2)
m_arrTabs[i]->Left = 78 + 70*(i-1);
else
m_arrTabs[i]->Left = 78 + 70*i;
// if( i<=TAB_SW )
// m_arrTabs[i]->OnClick = TabClick;
// else if( i==TAB_MN )
// m_arrTabs[i]->OnClick = HelpClick;
// else if ( i==TAB_AB )
// m_arrTabs[i]->OnClick = AboutClick;
m_arrTabs[i]->SendToBack();
}
m_arrTabs[TAB_QA]->Caption = "常见问题";
m_arrTabs[TAB_FB]->Caption = "我要提问";
m_arrTabs[TAB_NT]->Caption = "网站消息";
m_arrTabs[TAB_CN]->Caption = "唱作音符";
m_arrTabs[TAB_SW]->Caption = "更多软件";
m_arrTabs[TAB_MN]->Caption = "用户手册";
m_arrTabs[TAB_AB]->Caption = "关于";
m_arrTabs[TAB_QA]->Down = true;
m_PanelShow = new THelpPanel(this);
m_PanelShow->Parent = this;
m_PanelShow->Left = 40;
m_PanelShow->Top = 67;
m_PanelShow->Width = 697;
m_PanelShow->Height = 320;
m_PanelShow->OnClick = panelShowClick;
m_PanelShow->Visible = true;
m_PanelShow->SetTextFontSize(m_memMsg->Font->Size);
m_memMsg->Parent = m_PanelShow;
m_memMsg->Left = 15;
m_memMsg->Top = 15;
m_memMsg->Width = m_PanelShow->Width - 45;
m_memMsg->Height = 130;
m_memMsg->Enabled = !g_bUpdateMandatory;
m_btnSubmit->Parent = m_PanelShow;
m_btnSubmit->Left = m_memMsg->Left + m_memMsg->Width - m_btnSubmit->Width;
m_btnSubmit->Top = m_memMsg->Top + m_memMsg->Height + 5;
m_btnSubmit->FontSize = m_memMsg->Font->Size;
m_lblMsgHead->Parent = m_PanelShow;
m_lblMsgHead->Left = m_PanelShow->Left + 15;
m_lblMsgHead->Top = 15;
m_lblMsgNum->Parent = m_PanelShow;
m_lblMsgNum->Left = m_lblMsgHead->Left + m_lblMsgHead->Width+1;
m_lblMsgNum->Top = 15;
m_lblMsgMiddle->Parent = m_PanelShow;
m_lblMsgMiddle->Left = m_lblMsgNum->Left + m_lblMsgNum->Width+1;
m_lblMsgMiddle->Top = 15;
m_lblMsgURL->Parent = m_PanelShow;
m_lblMsgURL->Left = m_lblMsgMiddle->Left + m_lblMsgMiddle->Width+1;
m_lblMsgURL->Top = 15;
m_lblMsgTail->Parent = m_PanelShow;
m_lblMsgTail->Left = m_lblMsgURL->Left + m_lblMsgURL->Width+1;
m_lblMsgTail->Top = 15;
m_pImgNoticeTip = new TPngImage();
m_pImgNoticeTip->LoadFromResourceName(int(HInstance), "NoticeBK");
m_PanelShow->SetMode(0);
SetTransparent( this );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormActivate(TObject *Sender)
{
// m_lblUrl->Caption = g_strServerURL;
// m_pbUserNoticeNum->Visible = (m_nUserNoticeNum>0);
m_PanelShow->InitialVars();
m_PanelShow->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormDeactivate(TObject *Sender)
{
// m_PanelShow->SaveFirstRow();
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::panelShowClick(TObject *Sender)
{
m_PanelShow->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SetNoticeNum( int num, int iType )
{
// if( iType==1 && m_nUserNoticeNum!=num ){
// m_nUserNoticeNum = num;
//
// m_pbUserNoticeNum->Visible = (num>0);
// if( num>0 ){
// m_pbUserNoticeNum->Invalidate();
// }
//
// if( m_arrTabs[TAB_NT]->Down ){
// m_lblMsgNum->Caption = m_nUserNoticeNum;
//
// m_lblMsgHead->Visible = (num>0);
// m_lblMsgMiddle->Visible = (num>0);
// m_lblMsgNum->Visible = (num>0);
// m_lblMsgURL->Visible = (num>0);
// m_lblMsgTail->Visible = (num>0);
//
// m_PanelShow->InitialVars();
// }
// }
}
//---------------------------------------------------------------------------
int __fastcall THelpForm::GetNoticeNum( int iType )
{
if( iType!=0 )
return m_nUserNoticeNum;
return 0;
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SetPage( int iPage )
{
for( int i=0; i<TAB_NUM; i++ ){
if( i==iPage ){
m_arrTabs[i]->Down = true;
m_arrTabs[i]->BringToFront();
}
else{
if( m_arrTabs[i]->Down )
m_arrTabs[i]->Down = false;
m_arrTabs[i]->SendToBack();
}
}
// m_pbUserNoticeNum->BringToFront();
if( iPage==TAB_NT ){
m_lblMsgNum->Caption = m_nUserNoticeNum;
}
else if( iPage==TAB_FB && ( m_memMsg->Text.IsEmpty()
|| m_memMsg->Font->Color==clGray )){
m_bMemoHint = true;
m_memMsg->Text = "请在此处输入您的问题";
m_memMsg->Font->Color = clGray;
}
m_lblMsgHead->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgMiddle->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgNum->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgURL->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgTail->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_btnSubmit->Visible = (iPage==TAB_FB);
m_memMsg->Visible = (iPage==TAB_FB);
m_PanelShow->SetMode( iPage );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::NoticeNumPaint(TObject *Sender)
{
TPaintBox* pPB = (TPaintBox*)Sender;
String strText = IntToStr( m_nUserNoticeNum );
pPB->Canvas->Draw(0, 0, m_pImgNoticeTip);
pPB->Canvas->Brush->Style = bsClear;
pPB->Canvas->Font->Color = clWhite;
int txtWidth = pPB->Canvas->TextWidth( strText );
int txtHeight = pPB->Canvas->TextHeight( strText );
pPB->Canvas->TextOut( (pPB->Width - txtWidth)/2.0+0.5,
(pPB->Height -txtHeight)/2.0,
strText );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::TabClick(TObject *Sender)
{
int mode = ((TTabButton*)Sender)->Tag;
if(mode==TAB_SW){
PostMessage(Application->MainForm->Handle, UM_SHOWMORE, 0, 0);
}
else if(mode==TAB_MN){
PostMessage(Application->MainForm->Handle, UM_OPENMANUAL, 0, 0);
}
else if(mode==TAB_AB){
PostMessage(Application->MainForm->Handle, UM_SHOWABOUT, 0, 0);
}
else{
SetPage( mode );
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::UrlClick(TObject *Sender)
{
if( Sender==m_lblUrl && m_lblUrl->Caption.Length()>0 ){
ShellExecute(Handle,NULL, m_lblUrl->Caption.c_str(), NULL,NULL,SW_SHOWNORMAL);
}
else if( Sender==m_lblVideo ){
ShellExecute(Handle,NULL, L"http://v.qq.com/boke/page/t/8/p/t01266qkg8p.html",
NULL,NULL,SW_SHOWNORMAL);
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SubmitClick(TObject *Sender)
{
TProgressForm *frmProgress = new TProgressForm(NULL);
int ret = frmProgress->User_SubmitQuestin( GBToUTF8(AnsiString(m_memMsg->Text.Trim().c_str()).c_str()).c_str() );
int eExtra = frmProgress->GetOpertaionResult();
delete frmProgress;
if( ret==mrOk && eExtra==0 ){
m_PanelShow->AddFeedback( m_memMsg->Text.Trim().c_str() );
m_memMsg->Text = "";
}
else if( eExtra!=0 && eExtra!=e_UserCanceled ){
MessageForm->ShowMessage( "由于网络故障,信息提交失败。\n\n请稍后重试!",
MB_ICONERROR|MB_OK );
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MemoMsgChange(TObject *Sender)
{
//
if( !m_bMemoHint && !m_memMsg->Text.Trim().IsEmpty() ){
m_btnSubmit->Enabled = true;
}
else{
m_btnSubmit->Enabled = false;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MemoMsgClick(TObject *Sender)
{
//
if( m_bMemoHint ){
m_memMsg->Text = "";
m_memMsg->Font->Color = clBlack;
m_bMemoHint = false;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MsgURLClick(TObject *Sender)
{
char strURL[256];
f_CS_GetWebPageURL( URL_USERNOTICE, strURL );
ShellExecute(Handle, NULL, ((String)strURL).c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
switch( Key ){
case VK_ESCAPE:
{
PostMessage( Application->MainForm->Handle, UM_SHOWHELP, false, 0 );
}
break;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::WMNCLButtonDown(Winapi::Messages::TWMNCLButtonDown &Message)
{
if( Window_state==HLP_WINDOW_NORMAL )
TForm::Dispatch( &Message );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::GenerPanelMouseEnter(TObject *Sender)
{
THelpForm::SetFocus();
Screen->Cursor = crDefault;
}
//---------------------------------------------------------------------------
+673
View File
@@ -0,0 +1,673 @@
object HelpForm: THelpForm
Left = 0
Top = 0
BorderIcons = []
BorderStyle = bsNone
ClientHeight = 440
ClientWidth = 777
Color = 5064257
DoubleBuffered = True
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Position = poMainFormCenter
Scaled = False
Visible = True
OnActivate = FormActivate
OnClose = FormClose
OnCreate = FormCreate
OnDeactivate = FormDeactivate
OnKeyDown = FormKeyDown
OnResize = FormResize
DesignSize = (
777
440)
TextHeight = 13
object m_GenerPanel: TGeneralDialogPanel
Left = 0
Top = 0
Width = 777
Height = 440
Anchors = [akLeft, akTop, akRight, akBottom]
BevelEdges = [beLeft, beRight]
BevelOuter = bvNone
Caption = #24110#21161
Color = 5064257
DoubleBuffered = True
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentBackground = False
ParentDoubleBuffered = False
ParentFont = False
TabOrder = 0
OnMouseEnter = GenerPanelMouseEnter
DesignSize = (
777
440)
object m_lblGroupLabel: TLabel
Left = 77
Top = 405
Width = 90
Height = 14
Align = alCustom
AutoSize = False
Caption = #25216#26415#20132#27969'QQ'#32676#65306
Font.Charset = DEFAULT_CHARSET
Font.Color = 12434616
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_lblGroup: TLabel
Left = 171
Top = 405
Width = 63
Height = 14
Align = alCustom
AutoSize = False
Caption = '271573952'
Font.Charset = DEFAULT_CHARSET
Font.Color = 12434616
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ParentFont = False
ShowAccelChar = False
end
object m_lblVideoLabel: TLabel
Left = 545
Top = 405
Width = 60
Height = 14
Align = alCustom
AutoSize = False
Caption = #35270#39057#25945#31243#65306
Font.Charset = DEFAULT_CHARSET
Font.Color = 12434616
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_lblVideo: TLabel
Left = 611
Top = 405
Width = 59
Height = 14
Cursor = crHandPoint
Align = alCustom
AutoSize = False
BiDiMode = bdLeftToRight
Caption = #22312#32447#35266#30475
Font.Charset = DEFAULT_CHARSET
Font.Color = 15299907
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ParentBiDiMode = False
ParentFont = False
ShowAccelChar = False
OnClick = UrlClick
end
object m_lblUrlLabel: TLabel
Left = 278
Top = 405
Width = 72
Height = 14
Align = alCustom
AutoSize = False
BiDiMode = bdLeftToRight
Caption = #21809#20316#32593#35770#22363#65306
Font.Charset = DEFAULT_CHARSET
Font.Color = 12434616
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentBiDiMode = False
ParentFont = False
Visible = False
end
object m_lblUrl: TLabel
Left = 356
Top = 405
Width = 157
Height = 14
Cursor = crHandPoint
Align = alCustom
AutoSize = False
BiDiMode = bdLeftToRight
Caption = 'http://bbs.iChangzuo.com'
Font.Charset = GB2312_CHARSET
Font.Color = 15299907
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ParentBiDiMode = False
ParentFont = False
ShowAccelChar = False
Visible = False
OnClick = UrlClick
end
object m_btnMin: TPNGButton
Left = 701
Top = 6
Width = 23
Height = 13
ParentCustomHint = False
Anchors = [akTop, akRight]
ImgStates = 3
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D49484452000000450000000D0806000000FF86A3
28000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F330000018D4944415478DAED97CB4AC34018
852769ED458D552BD28D5DD69550C4B50FE0C28775E103B81629B8D2A56E44BC
D5A8BD99C4F39B3332849A964C2A54FAC3E10CB3383DF93A4D52278A22358B09
82402F1DC8355CAF9D2962222AA422C35522C735D6D3662B23F3E7F31C138A71
21798D942B4045AA6CAC0B13CA4B3129F4490D8C7590C8778D4C0D7ED268D0FA
33F47AE650A4E412612C43ABF432F7D3CA4BC911617C406FF401F72303788999
A5049CB46C0D63C8CCA1069E842285EB503503801EF4C8E27AA46005F2A07568
8BEE71BF98922705FB900FBD400F749FFB21C156D8D7B300EEB3BFE48E925076
DAFB073719807C4FE7E2BC09BB35B64A2CBB0935907D66917D08BB839E781121
01AC4035645F5B64B7605DE85D4025A1B4107E6511BE0B33CBC9B7B8066D4302
FCD422FB48C5C0EFA157151F7F9DBF81EC4B8BEC3DD83373FB7F01A50635A026
B24F2CB28F61728AE5B47409A54A287564772CB2DB2AFEE90B94DEE2A4A8C927
65714F19734F593C7DC63C7DB2C2FE6DFEC57B4ADE50E6FF8D36CF99E7FF3E5F
B19A31A2907770F30000000049454E44AE426082}
ShowHint = False
OnClick = MinClick
end
object m_btnMax: TPNGButton
Left = 728
Top = 4
Width = 21
Height = 18
ParentCustomHint = False
Anchors = [akTop, akRight]
ImgStates = 3
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D494844520000003F000000120806000000EC6D06
37000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F330000029D4944415478DAED98CB4F534114
C66F4B0BC5DA4041C4F7A2822ED8106835F11F30C68D3182AC4C342A2C5918B7
C62D71E1529448C20AC11837C6F80F98688B61E342C52E7CE30B0D8F8278BD7E
C7FB8D39DE78C15E6051CB245F663A9D7EF7FCCE9C195A428EE358ABD56CDBD6
2F435058F5661C5AC2C2A17E508EEA2DCFE7C36ABC9CA7A5BC7E3F27A4E13DC1
AFA44930155084AA52E30A9F60251009E03BB5A0C6B6C737ACBC4C62FD9A49A4
F136E3358397A0A284AE86E2500CAA54F0BAE4CC6B09E01B340FCD4205266191
EF9B841AEFA84A809FA7815D545EBF12EA85DF80AE9E01FF6B93003F41736A2E
42D88D500D94E4B84AED92CDE0CC6E9A5D920067A029E82BC7F37CCF9B505351
61F579E3A9E74C25FD91502FFCCED6B6F48B62B779FC516E17BA976A4A763841
E80678DE0FE07900DD0726619A10022B1B9480E7F3009EBBE9251BB5E085DF03
D327014CF7A27BAAA664D765C737435BE1792F80E741746FA1F7965B015229D5
4C6A0D3C1F07F06CA19724A0E00BDFDCD474777464F82233EF6DC98ECEAE0BCF
26260EF9C04B9075D01668073C6FCB6426937E78ADFFCA301F2E41C8F9AE64A2
1267BA7BBAB2D9DC3E7A1E41F70A7A077DB6DCD28D736D2D3CC7655D2A95BA73
EBE6C865CB3D1A05AE8B3086D8D1639DBDF97CFE303D5BD17DE1B36797833F89
E1E45FE01B013FB804BC94E626681BE14765329D6E7F3070B57F88301F19708C
6BEB4E9FED3E91CB8DEDA76707E1DF70AD40C9BD514BF831057FC972CFB3DC0F
72A145B9360EF8730ABE9DF0A299B5846F80B613FE8682BF4E984905DF280900
FC29057F9CF0AF2DF7EC1B78B94792F0CC2AF83E56D3B4AA26391E09C09F57F0
1956F2D43AFC7AD9FBC397E785574CFB5FFED495F5979CB2FE7A5B6C32FD5A49
FEB0592DF8D2FB49BBD2566AFFCCF80990017597BCE4EA990000000049454E44
AE426082}
ShowHint = False
OnClick = MaxClick
end
object m_btnRest: TPNGButton
Left = 729
Top = 2
Width = 22
Height = 22
ParentCustomHint = False
Anchors = [akTop, akRight]
ImgStates = 3
ParentShowHint = False
PngImg.Data = {
89504E470D0A1A0A0000000D4948445200000042000000160806000000744B4A
09000000097048597300000B1300000B1301009A9C1800000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000005D84944415478DACD98596C546514
C7CFEC4B67A69556B08D1A7868AB8911A10B2856D29652048AB410E3B3FAA4AF
FAE2032F2E212A2E0F466254822F060D04DBB2D4053586D46E208440AD0FB884
D20296765A8AED6C9E33FD7F9D6FBEDE990E50083739F9BEB973EFFF9EFBBBE7
9C6FB1251209BA13472C1693C6C666D75AD5B7199727607158426BC9E17058E9
2A0DBBD6B7D2254D6FF659B63B08429C923770C23C5ADFA1392D0EC9DB456153
5A5FCE270C100A8203109C5ADF6EB8A1C02A7DD55F7810F842568738E76273B3
F9D8F2D0BA34C795B3221261BBCE760DED34CE990FB0E37E07B43D86A60E58D7
9E82A6FC8E6505C12FE5E7A6100E673BC4D17FD926B35C235FCA0B0021B67BD0
77E33FDDE1289C140857D9C2E8FF87FF4C102E00107D3FA5A2CD0A848AB249E8
493F321F88071E5B59F937E570FC76A2F7416EFE314EEB35C10B00056C45ACFB
738EBAABB8B9C236C6360E407A4D706B00F258772047DD65802B40A6D2405884
75190BFF9EA3703937BA13664D10088B0402DB62D6DD97A36E1D379734185394
5E13549A05E419ACDB9DA3EE43003BC1763D67107CE33A9AFBC52562BECF00C2
AC090261B1CD662BE2674A44ECC67DAFD3CC57D60BA28DFFDF85FF377033CC76
996D0420F49A200082CAF8BE63B86F3BA58AA2B4C95187FFEFC0FF8FD04CCA09
8C6B2608B3262CD56E6CE4E64F9C5735E17E0D9409C2AC094B0484E8338C82E5
2B2ADE968B4E9DECDB4933B91A615FA4884500E23DE86EE6660820AEE05ABD26
88763E8004F8BE76E83E074D05380ADDA3D07D540331618248AB092525253438
3838A70F21A909BE2C20DCF84AE26451F5EA27BAFC7E3F0503010A068374F6DC
B9E445D5D555343D3D4D0C873C6E0FEDFEF8A357E53CEBBE03DD2644C425C098
0684644DA8A85A75DEE3F1909897EDE2D0505277D9D2A5B311EE743AE9C0FEAF
3721220E4377394084AD40A4D5047138140A25FBE17098C6C7C77510E5703813
08AF8220915059BDFA98D7EB25311F5B3C1E279BDD96FC1D8D4693CE0618D2DE
3D9FBFC63EC5597767061011446C3225565656F7BB5C2E5226BA76D6753A5D94
903ECF393C6E37B5B77DB385750544DB0D81404D18ECEDED9354A1CACA0A4985
12A3266403A1EAC2BD9216ECF05171B4ABF3F82BF2288E2E1F4781BDB8B85872
DEFD4CF3B6370BF2F3E98BBD7B7600C41B195223827493680BB1EE19BBDD4EBD
DDBF4A2D490C0C0C0424BCCA4A4B653470D637AC6FF5F97C74A8ADB519200EE6
921A65C68BFD41E9E370D9E36B6AFA254A3A8E1C5ACFBFE3598AA51FD12020EE
6387DBE1F04BA83112B7768479B0B965FBBB858585F4D9A79FBC2579CDBA3BA0
6B16CB18A50A64684545D56949AB13BDDDB5949A70A9B9856F5D43E3913C8EB4
D683079E65DD18EBEE876ED6625996E50BCBF1F0868D9BCF8E8C8C24F35A3F32
801008522097B0C36D70F8053C5C9C76E0EB2EDADAB2EDFD0B170629128998BA
E6F0190708C959192E4F89EEC9BE9E1A2BC0F50D8D1DA3A3A37346C4F986CF5B
01614EA8D240486EC2E1E7F125D430282F55D4B465EB0743C3C35620CC091599
2070DD930011256D025757DFF0ED18D7370B10592754F381283752E32F9CB79A
62A7A5861AD658F7453810A1D484A8E0E94D4D1F86B8387FB5EF4BA92161F66B
14297191D2A7D8763D3558F734746B28B540936B64D4CA5B5B5BF79DD7EB137F
37C2CF09401DA34C536C8B6279231328F3482B96DAF8FD321EAEE7725E6D7DC3
2E296A87DB5B05D45580BD8C565F74C93DB3C59275CF40B796522B4AB510F3AC
A979AAC3C523C84F3FFEB01630553A4C50A64597397C663B741016FB0344C6F0
A9667CFA21C553D2C5C9F73B5D4E82C32D7879B11138AECF3A9DA40D9FACDB6F
EA8AA698E83BD86408ED3CFE4B8506621270AD97E137BBC8CA00226D42C5BA5D
563AE2AC725EFA3D5D9D358020A12B2921E1AB6FCCA8BD0CB5C83A6FA5AB60A8
7E5F4F572900A855A72A727337666E76D99D01C45DBDECA6D40ED50CAC79165D
391D1940DCD51B310A84F2FD768258B0AD39E3710BB23547C6FEE7EDDEAA5B90
CD5A8BE396376BCD8FF83F04188E95BC34C8D60000000049454E44AE426082}
ShowHint = False
Visible = False
OnClick = RestClick
end
object m_pbUserNoticeNum: TPaintBox
Left = 270
Top = 36
Width = 20
Height = 20
ParentCustomHint = False
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -9
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
ParentShowHint = False
ShowHint = True
Visible = False
OnPaint = NoticeNumPaint
end
object m_btnSubmit: TTextButton
Left = 582
Top = 219
Width = 83
Height = 30
ParentShowHint = False
ShowHint = True
Visible = False
OnClick = SubmitClick
Text = #25552#20132
end
object m_lblMsgHead: TLabel
Left = 76
Top = 81
Width = 30
Height = 18
Anchors = []
Caption = #24744#26377
Font.Charset = DEFAULT_CHARSET
Font.Color = 13158340
Font.Height = -15
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ParentFont = False
Visible = False
end
object m_lblMsgNum: TLabel
Left = 106
Top = 81
Width = 24
Height = 18
Alignment = taCenter
Anchors = []
AutoSize = False
Caption = '000'
Font.Charset = DEFAULT_CHARSET
Font.Color = 327893
Font.Height = -15
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ParentFont = False
Visible = False
end
object m_lblMsgMiddle: TLabel
Left = 130
Top = 81
Width = 105
Height = 18
Anchors = []
Caption = #26465#26410#35835#28040#24687#65292#35831
Font.Charset = DEFAULT_CHARSET
Font.Color = 13158340
Font.Height = -15
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ParentFont = False
Visible = False
end
object m_lblMsgURL: TLabel
Left = 238
Top = 81
Width = 90
Height = 18
Cursor = crHandPoint
Anchors = []
Caption = #36827#20837#20010#20154#31354#38388
Font.Charset = DEFAULT_CHARSET
Font.Color = 15299907
Font.Height = -15
Font.Name = 'Tahoma'
Font.Style = [fsUnderline]
Font.Quality = fqClearType
ParentFont = False
Visible = False
OnClick = MsgURLClick
end
object m_lblMsgTail: TLabel
Left = 330
Top = 81
Width = 45
Height = 18
Anchors = []
Caption = #26597#38405#12290
Font.Charset = DEFAULT_CHARSET
Font.Color = 13158340
Font.Height = -15
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ParentFont = False
Visible = False
end
object m_memMsg: TMemo
Left = 78
Top = 115
Width = 587
Height = 130
Font.Charset = DEFAULT_CHARSET
Font.Color = clGray
Font.Height = -15
Font.Name = 'Tahoma'
Font.Style = []
Font.Quality = fqClearType
ImeName = #20013#25991'('#31616#20307') - '#25628#29399#25340#38899#36755#20837#27861
Lines.Strings = (
#35831#22312#27492#22788#36755#20837#24744#30340#38382#39064)
MaxLength = 106
ParentFont = False
ParentShowHint = False
ShowHint = False
TabOrder = 0
Visible = False
OnChange = MemoMsgChange
OnClick = MemoMsgClick
end
end
end
+118
View File
@@ -0,0 +1,118 @@
//---------------------------------------------------------------------------
#ifndef HelpFormUnitH
#define HelpFormUnitH
#define HLP_WINDOW_MAX 0
#define HLP_WINDOW_NORMAL 1
#define HLP_WINDOW_MIN 2
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include "GeneralDialogPanel.h"
#include "PNGButton.hpp"
#include "MessageDef.h"
#include "HelpPanelUnit.h"
#include "TextButton.h"
#include "CapButton.h"
#define TAB_NUM 7
#define TAB_QA 0
#define TAB_FB 1
#define TAB_NT 2
#define TAB_CN 3
#define TAB_SW 4
#define TAB_MN 5
#define TAB_AB 6
//---------------------------------------------------------------------------
class TTabButton : public TPNGButton
{
private:
virtual void __fastcall Paint(void);
public:
String Caption;
void __fastcall SetFontSize(int sz);
__fastcall virtual TTabButton(System::Classes::TComponent* AOwner);
__fastcall virtual ~TTabButton(void);
};
class THelpForm : public TForm
{
__published: // IDE-managed Components
TGeneralDialogPanel *m_GenerPanel;
TLabel *m_lblGroupLabel;
TLabel *m_lblGroup;
TLabel *m_lblVideoLabel;
TLabel *m_lblVideo;
TLabel *m_lblUrlLabel;
TLabel *m_lblUrl;
TPNGButton *m_btnMin;
TPNGButton *m_btnMax;
TPNGButton *m_btnRest;
TPaintBox *m_pbUserNoticeNum;
TMemo *m_memMsg;
TTextButton *m_btnSubmit;
TLabel *m_lblMsgHead;
TLabel *m_lblMsgNum;
TLabel *m_lblMsgMiddle;
TLabel *m_lblMsgURL;
TLabel *m_lblMsgTail;
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall RestClick(TObject *Sender);
void __fastcall MinClick(TObject *Sender);
void __fastcall MaxClick(TObject *Sender);
void __fastcall FormResize(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormActivate(TObject *Sender);
void __fastcall FormDeactivate(TObject *Sender);
void __fastcall NoticeNumPaint(TObject *Sender);
void __fastcall UrlClick(TObject *Sender);
void __fastcall SubmitClick(TObject *Sender);
void __fastcall MemoMsgChange(TObject *Sender);
void __fastcall MemoMsgClick(TObject *Sender);
void __fastcall MsgURLClick(TObject *Sender);
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
void __fastcall GenerPanelMouseEnter(TObject *Sender);
private:
// void __fastcall AboutClick(TObject *Sender);
// void __fastcall HelpClick(TObject *Sender);
void __fastcall TabClick(TObject *Sender);
void __fastcall panelShowClick(TObject *Sender);
private: // User declarations
THelpPanel* m_PanelShow;
TPngImage* m_PngImage;
bool m_bMemoHint;
int m_nUserNoticeNum;
TTabButton* m_arrTabs[8]; //8¸ö°´Å¥µÄÖ¸Õë
TPngImage * m_pImgNoticeTip;
MESSAGE void __fastcall WMNCLButtonDown(Winapi::Messages::TWMNCLButtonDown &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NCLBUTTONDOWN, TWMNCLButtonDown, WMNCLButtonDown)
END_MESSAGE_MAP(TForm)
public: // User declarations
int Window_state;
void __fastcall SetSize( int iState );
void __fastcall SetNoticeNum( int num, int iType ); //iTyp: 0=public, 1=user
int __fastcall GetNoticeNum( int iType ); //iTyp: -1=all, 0=public, 1=user
void __fastcall SetPage( int iPage );
__fastcall THelpForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE THelpForm *HelpForm;
//---------------------------------------------------------------------------
#endif
+769
View File
@@ -0,0 +1,769 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "HelpPanelUnit.h"
#include "GlobalUnit.h"
char u_strURLAndroid[256] = "/ichangzuo/File/Software/App/Ac/Android/Ac_Android.apk",
u_strURLiOS[256] = "http://itunes.apple.com/cn/app/id928747575";
const static COLORREF clrEnter = RGB( 100,180,236 ),
clrLeave = RGB( 67,117,233 );
//---------------------------------------------------------------------------
#pragma package(smart_init)
__fastcall THelpPanel::THelpPanel(TComponent* AOwner)
: Vcl::Extctrls::TPanel(AOwner)
{
m_sbVert = NULL;
m_nLeftBound = 15;
m_nRightBound = 48;
m_nTopBound = 15;
m_nBottomBound = 25;
m_nRowWidth = 0;
m_nRowHight = 22;
m_iMode = 0;
m_nBeginShowRow = 0;
for( int i=0; i<MODE_NUM; i++ ){
m_aFirstRow[i] = m_aFirstTitle[i] = 0;
}
// Canvas->Font->Size = 11; //字母字体大小
Canvas->Font->Quality = TFontQuality::fqClearTypeNatural;
for( int i=0; i<SOFTWARE_NUM; i++ ){
m_aLblSWName[i] = NULL;
m_aLblSWLink[i] = NULL;
}
m_lblCoinPage = NULL;
m_pQRPanelAndroid = NULL;
m_pQRPaneliOS = NULL;
m_pQRdataAndroid = NULL;
m_pQRdataiOS = NULL;
Color = RGB( 53,56,63 );
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::CreateWnd(void)
{
Vcl::Extctrls::TPanel::CreateWnd();
m_sbVert = new TSkinScrollBar(this);
m_sbVert->Parent = this;
m_sbVert->m_pWndCtrl = this;
m_sbVert->Visible = false;
m_sbVert->Left = Width - m_sbVert->Width - 1; //change
m_sbVert->Top = 1;
m_sbVert->Height = Height-2;
m_sbVert->Visible = false;
CalcViewArea();
m_lblCoinPage = new TLabel( NULL );
m_lblCoinPage->Visible = false;
m_lblCoinPage->Parent = this;
m_lblCoinPage->Font->Name = "Tahoma";
m_lblCoinPage->Font->Size = Canvas->Font->Size;
m_lblCoinPage->Font->Style = TFontStyles()<<fsUnderline;
m_lblCoinPage->Font->Color = clrLeave;
m_lblCoinPage->Caption = "官网详细说明";
m_lblCoinPage->OnClick = LinkClick;
m_lblCoinPage->OnMouseEnter = LinkMouseEnter;
m_lblCoinPage->OnMouseLeave = LinkMouseLeave;
m_lblCoinPage->Left = m_nLeftBound + 20;
// m_lblCoinPage->Top = 1;
for( int i=0; i<SOFTWARE_NUM; i++ ){
m_aLblSWName[i] = new TLabel( NULL );
m_aLblSWName[i]->Visible = false;
m_aLblSWName[i]->Parent = this;
m_aLblSWName[i]->Font->Name = g_strTxtFontName;
m_aLblSWName[i]->Font->Color = COLOR_ANSWER;
// if( !strcmp( g_strTxtFontName, "微软雅黑" ) )
// m_aLblSWName[i]->Font->Size = 11;
// else
// m_aLblSWName[i]->Font->Size = 10;
m_aLblSWName[i]->Font->Size = g_szFont10;
m_aLblSWName[i]->Left = m_nLeftBound + 10;
if( i==0 ){
m_aLblSWName[i]->Top = m_nTopBound + 10;
}
else if( i==1 ){
m_aLblSWName[i]->Top = m_aLblSWName[i-1]->Top + 90;
}
else{
m_aLblSWName[i]->Top = m_aLblSWName[i-1]->Top + 110;
}
m_aLblSWLink[i] = new TLabel( NULL );
m_aLblSWLink[i]->Visible = false;
m_aLblSWLink[i]->Parent = this;
m_aLblSWLink[i]->Tag = i;
m_aLblSWLink[i]->Font->Name = "Tahoma";
m_aLblSWLink[i]->Font->Size = g_szFont9;
m_aLblSWLink[i]->Font->Style = TFontStyles()<<fsUnderline;
m_aLblSWLink[i]->Font->Color = clrLeave;
m_aLblSWLink[i]->Caption = "官网免费下载";
m_aLblSWLink[i]->OnClick = LinkClick;
m_aLblSWLink[i]->OnMouseEnter = LinkMouseEnter;
m_aLblSWLink[i]->OnMouseLeave = LinkMouseLeave;
m_aLblSWLink[i]->Left = 250;
m_aLblSWLink[i]->Top = m_aLblSWName[i]->Top + 1;
}
m_aLblSWName[0]->Caption = "唱作魔方 for Windows";
m_aLblSWName[1]->Caption = "唱作魔方App for Android";
m_aLblSWName[2]->Caption = "唱作魔方App for iOS";
if( f_QR_Encode ){
char strURL[256] = "";
f_CS_GetWebPageURL( URL_HOMEPAGE, strURL );
strcat( strURL, u_strURLAndroid );
m_pQRdataAndroid = new unsigned char[100*100];
m_pQRdataiOS = new unsigned char[100*100];
int qrWidthA = f_QR_Encode( strURL, m_pQRdataAndroid ),
qrWidthI = f_QR_Encode( u_strURLiOS, m_pQRdataiOS );
m_pQRPanelAndroid = new TQRcodePanel( NULL, "扫描下载" );
if( m_pQRPanelAndroid ){
m_pQRPanelAndroid->Hide();
m_pQRPanelAndroid->Parent = this;
m_pQRPanelAndroid->SetBounds( 350, 75, 100, 100 );
m_pQRPanelAndroid->SetQRData( qrWidthA, m_pQRdataAndroid );
}
m_pQRPaneliOS = new TQRcodePanel( NULL, "扫描下载" );
if( m_pQRPaneliOS ){
m_pQRPaneliOS->Hide();
m_pQRPaneliOS->Parent = this;
m_pQRPaneliOS->SetBounds( 350, 195, 100, 100 );
m_pQRPaneliOS->SetQRData( qrWidthI, m_pQRdataiOS );
}
}
}
//---------------------------------------------------------------------------
__fastcall THelpPanel::~THelpPanel()
{
for( int i=0; i<SOFTWARE_NUM; i++ ){
delete m_aLblSWName[i];
m_aLblSWName[i] = NULL;
delete m_aLblSWLink[i];
m_aLblSWLink[i] = NULL;
}
if( m_lblCoinPage ){
delete m_lblCoinPage;
m_lblCoinPage = NULL;
}
if( m_pQRPanelAndroid ){
delete m_pQRPanelAndroid;
m_pQRPanelAndroid = NULL;
}
if( m_pQRdataAndroid ){
delete[] m_pQRdataAndroid;
m_pQRdataAndroid = NULL;
}
if( m_pQRPaneliOS ){
delete m_pQRPaneliOS;
m_pQRPaneliOS = NULL;
}
if( m_pQRdataiOS ){
delete[] m_pQRdataiOS;
m_pQRdataiOS = NULL;
}
if( m_sbVert )
delete m_sbVert;
while( !m_lstLines.empty() ){
delete m_lstLines[0];
m_lstLines.erase(m_lstLines.begin());
}
}
//---------------------------------------------------------------------------
void THelpPanel::SetTextFontSize(int sz)
{
Canvas->Font->Size = sz;
if( m_lblCoinPage )
m_lblCoinPage->Font->Size = sz;
}
//---------------------------------------------------------------------------
void THelpPanel::InitialVars()
{
RefreshTextLines();
CalcViewArea();
Invalidate();
}
//---------------------------------------------------------------------------
void THelpPanel::ScrollView( int nPos, bool bRedraw )
{
if( m_nBeginShowRow!=nPos ){
m_nBeginShowRow = nPos;
Invalidate();
}
if( bRedraw ){
m_sbVert->SetPosition( nPos );
}
}
//---------------------------------------------------------------------------
void THelpPanel::CalcViewArea()
{
if( !m_sbVert )
return;
m_nRowNum = m_lstLines.size();
if( m_nRowNum>0 ){
int iFirstRow = m_aFirstRow[m_iMode];
if( iFirstRow<0 ){
int iFirstTitle = m_aFirstTitle[m_iMode];
for( iFirstRow=0; iFirstRow<m_nRowNum && iFirstTitle>0; iFirstRow++ ){
if( m_lstLines[iFirstRow]->strText.empty() ){
iFirstTitle--;
}
}
}
m_nBeginShowRow = iFirstRow;
}
if( m_nRowNum>m_nRowShow ){ //显示滚动条
m_sbVert->Visible = true;
m_sbVert->SetRange( 0, m_nRowNum-1 );
m_sbVert->SetPageSize( m_nRowShow );
m_sbVert->SetPosition( 0 );
//计算显示的第一行
int iRowScroll = 0;
if( m_nBeginShowRow>0 ){
iRowScroll = min( m_nBeginShowRow, m_nRowNum-m_nRowShow );
if( iRowScroll<0 ){
iRowScroll = 0;
}
}
ScrollView( iRowScroll );
}
else{
m_nBeginShowRow = 0;
m_sbVert->Visible = false;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::Paint()
{
if( m_iMode<5 && !m_lstLines.empty() ){
int xPos = m_nLeftBound,
yPos = m_nTopBound;
TColor clrOld = Canvas->Font->Color;
Canvas->Brush->Style = bsClear;
int flag = 0;
for( int i=0; i<m_lstLines.size(); i++ ){
TLineString* pLine = m_lstLines[i];
if( pLine->flag>0 && pLine->flag!=flag ){
flag = pLine->flag;
if( flag==1 ){
Canvas->Font->Color = COLOR_QUESTION;
if( m_iMode<2 )
Canvas->Font->Style = TFontStyles()<<fsBold;
}
else{
Canvas->Font->Color = COLOR_ANSWER;
Canvas->Font->Style = TFontStyles();
}
}
if( i>=m_nBeginShowRow ){
char strFlag[10];
if( pLine->flag==1 ){
if( m_iMode<2 )
strcpy( strFlag, "Q:" );
else{
strcpy( strFlag, "" );
}
Canvas->TextOut( xPos, yPos, strFlag );
}
else if( pLine->flag==2 ){
if( m_iMode<2 )
strcpy( strFlag, "A:" );
else{
strcpy( strFlag, " " );
}
Canvas->TextOut( xPos, yPos, strFlag );
}
else if(pLine->flag == 3)
{
strcpy( strFlag, "" );
Canvas->Font->Color = RGB( 207,169,207 ); //question Color
Canvas->Font->Style = TFontStyles() << fsBold;
Canvas->TextOut( xPos, yPos, strFlag );
//Canvas->Font->Color = RGB(0, 0, 255);
}
Canvas->TextOut( xPos+20, yPos, pLine->strText.c_str() );
yPos += m_nRowHight;
}
if( i-m_nBeginShowRow >= m_nRowShow ){
break;
}
}
Canvas->Font->Color = clrOld;
Canvas->Font->Style = TFontStyles();
}
Canvas->Pen->Color = RGB( 53,56,63 );
Canvas->MoveTo( 39 + m_iMode*70 ,0 );
Canvas->LineTo( 39 + m_iMode*70 + 78,0 );
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::WMEraseBkgnd(Winapi::Messages::TWMEraseBkgnd &Message)
{
TCanvas* tempCanvas = new TCanvas;
tempCanvas->Handle = Message.DC;
TRect rect = GetClientRect();
//绘制底图
tempCanvas->Brush->Color = RGB( 53,56,63 );
tempCanvas->FillRect(rect);
//绘制外边框
tempCanvas->Brush->Color = RGB( 43,47,50 );
tempCanvas->FrameRect(rect);
delete tempCanvas;
Message.Result = true;
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::WMSize(Winapi::Messages::TWMSize &Message)
{
DefaultHandler( &Message );
if( m_sbVert ){
m_sbVert->Left = Width - m_sbVert->Width - 1;
m_sbVert->Top = 1;
m_sbVert->Height = Height - 2;
}
m_nRowWidth = Width - m_nLeftBound - m_nRightBound;
m_nRowShow = (Height - m_nTopBound - m_nBottomBound) / m_nRowHight;
SaveFirstRow();
for(int i=0; i<MODE_NUM; i++ ){
m_aFirstRow[i] = -1; //第一行无效
}
RefreshTextLines();
CalcViewArea();
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::WMVScroll(Winapi::Messages::TWMScroll &Message)
{
int minpos, maxpos, page, curpos;
m_sbVert->GetScrollRange(&minpos, &maxpos);
page = m_sbVert->GetPageSize();
// Get the current position of scroll box.
curpos = m_sbVert->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( Message.ScrollBar!=m_sbVert->Handle )
m_sbVert->SetPosition(curpos);
ScrollView(curpos, FALSE);
Message.Result = true;
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::WMMouseWheel(TWMMouseWheel &Message)
{
if( m_sbVert->Visible ){
UINT nSBCode;
if( Message.WheelDelta>0 ) nSBCode = SB_LINEUP;
else nSBCode = SB_LINEDOWN;
Perform( WM_VSCROLL, MAKELONG(nSBCode,0), NULL );
}
}
//---------------------------------------------------------------------------
void THelpPanel::SetMode( int iMode )
{
if( iMode>4 )
return;
if( m_iMode != iMode ){
SaveFirstRow();
if( iMode==0 || iMode==3){
m_nTopBound = 15;
}
else if( iMode==2 ){
m_nTopBound = 60;
}
else{
m_nTopBound = 160;
}
m_nRowShow = (ClientHeight - m_nTopBound - m_nBottomBound) / m_nRowHight;
m_iMode = iMode;
RefreshTextLines();
CalcViewArea();
Invalidate();
}
if( m_pQRPanelAndroid )
m_pQRPanelAndroid->Visible = m_iMode==4;
if( m_pQRPaneliOS )
m_pQRPaneliOS->Visible = m_iMode==4;
for( int i=0; i<SOFTWARE_NUM; i++ ){
if( m_aLblSWName[i] )
m_aLblSWName[i]->Visible = m_iMode==4;
if( m_aLblSWLink[i] )
m_aLblSWLink[i]->Visible = m_iMode==4;
}
m_lblCoinPage->Visible = m_iMode==3;
}
//---------------------------------------------------------------------------
void THelpPanel::RefreshTextLines()
{
int i;
//清空列表
for( i=0; i<m_lstLines.size(); i++ ){
delete m_lstLines[i];
}
m_lstLines.clear();
//读取字符串
int idUser = g_bLogon ? g_infoUser.accountInfo.ID : 0;
int num = 0;
if( m_iMode==0 )
f_CS_GetQnA( num, NULL, false, 0 );
else if( m_iMode==1 )
f_CS_GetQnA( num, NULL, true, idUser );
else if( m_iMode==2 && idUser )
f_CS_GetNotice( num, NULL, idUser );
else if(m_iMode == 3)
ReadData();
if( num>0 ){
TSTRINGPAIR* arrString = new TSTRINGPAIR[num];
bool bRevert = true;
if( m_iMode==0 ){
f_CS_GetQnA( num, arrString, false, 0 );
bRevert = false;
}
else if( m_iMode==1 )
f_CS_GetQnA( num, arrString, true, idUser );
else if( m_iMode==2 )
f_CS_GetNotice( num, arrString, idUser );
for( i=(bRevert?num-1:0); bRevert?i>=0:i<num; bRevert?i--:i++ ){
//处理提问
wstring strQ = str2wstr( UTF8ToMBCS( arrString[i].str1 ) );
TLineString * pLine = new TLineString;
pLine->flag = 1; //question
int nWidth = 0;
int iStart = 0;
for(int j=0; j<strQ.size(); j++ ){
nWidth += Canvas->TextWidth( strQ[j] );
if( nWidth>=m_nRowWidth || strQ[j]=='\n' ){
pLine->strText = strQ.substr( iStart, j-iStart );
if( strQ[j]=='\n' ) j++;
iStart = j;
nWidth = 0;
m_lstLines.push_back( pLine );
if( iStart<strQ.size() ){
pLine = new TLineString;
}
}
}
if( iStart<strQ.size() ){
pLine->strText = strQ.substr( iStart, strQ.size()-iStart );
m_lstLines.push_back( pLine );
}
wstring strA;
if( m_iMode==2 ){
AnsiString strSpace= L"&nbsp;";
AnsiString anStr = arrString[i].str2;
int pos = 0;
while( pos = anStr.Pos( strSpace ) ){
anStr.Delete( pos, strSpace.Length() );
anStr.Insert( L" ", pos );
}
strA = str2wstr( UTF8ToMBCS( anStr.c_str() ) );
}
else{
strA = str2wstr( UTF8ToMBCS( arrString[i].str2 ) );
}
pLine = new TLineString;
pLine->flag = 2; //answer
if( strA.size()>0 ){
nWidth = 0;
iStart = 0;
for(int j=0; j<strA.size(); j++ ){
nWidth += Canvas->TextWidth( strA[j] );
if( nWidth>=m_nRowWidth || strA[j]=='\n' ){
pLine->strText = strA.substr( iStart, j-iStart );
if( strA[j]=='\n' ) j++;
iStart = j;
nWidth = 0;
m_lstLines.push_back( pLine );
if( iStart<strA.size() ){
pLine = new TLineString;
}
}
}
if( iStart<strA.size() ){
pLine->strText = strA.substr( iStart, strA.size()-iStart );
m_lstLines.push_back( pLine );
}
}
else{
if( m_iMode==2 ){
pLine->strText = L"";
}
else{
pLine->strText = L"暂时还没有答复";
}
m_lstLines.push_back( pLine );
}
if( bRevert ? i>0 : i<num-1 ){ //break
pLine = new TLineString;
m_lstLines.push_back( pLine );
}
}
delete[] arrString;
}
}
//---------------------------------------------------------------------------
void THelpPanel::AddFeedback( wstring str )
{
RefreshTextLines();
m_nBeginShowRow = 0;
CalcViewArea();
Invalidate();
}
//---------------------------------------------------------------------------
void THelpPanel::SaveFirstRow()
{
int iFirstRow = m_nBeginShowRow;
int iFirstTitle = 0;
for( int i=0; i<m_lstLines.size() && i<=iFirstRow; i++ ){
if( m_lstLines[i]->strText.empty() ){
iFirstTitle++;
}
}
m_aFirstRow[m_iMode] = iFirstRow;
m_aFirstTitle[m_iMode] = iFirstTitle;
}
//---------------------------------------------------------------------------
void THelpPanel::ReadData()
{
String str = L"@说明:\n 唱作音符是唱作网的虚拟货币,在唱作魔方软件使用中会\
\n@\n \
\n \n";
//String(m_CharBuf);
wchar_t *data = str.c_str();
TLineString *pLine = new TLineString;
int nWidth = 0;
int iStart = 0;
for(int i = 0; i < str.Length(); i++)
{
nWidth += Canvas->TextWidth(String(data[i]));
if( nWidth >= m_nRowWidth || data[i] == '\n' ){
if(data[iStart] == L'@'){
pLine->strText = (str.SubString(iStart + 2, i - iStart + 1)).c_str();
pLine->flag = 3;
}
else{
pLine->flag = 4;
pLine->strText = (str.SubString(iStart + 1, i - iStart + 1)).c_str();
}
if(data[i] == '\n'){
i++;
}
iStart = i;
nWidth = 0;
m_lstLines.push_back(pLine);
pLine = new TLineString;
}
}
pLine->strText = (str.SubString(iStart, str.Length() - iStart + 1)).c_str();
pLine->flag = 4;
m_lstLines.push_back(pLine);
m_lblCoinPage->Top = m_nTopBound + ( m_lstLines.size() + 1 ) * m_nRowHight;
}
//---------------------------------------------------------------------------
bool THelpPanel::HasScrollBar()
{
return m_sbVert?m_sbVert->Visible:0;
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::LinkClick(TObject *Sender)
{
char strURL[256];
if( m_iMode==4 ){
char strPage[256], os[16];
f_CS_GetWebPageURL( URL_SOFTWARE, strPage );
TLabel* pLabel = (TLabel*)Sender;
switch( pLabel->Tag ){
case 0:
strcpy( os, "pc" );
break;
case 1:
strcpy( os, "android" );
break;
case 2:
strcpy( os, "ios" );
break;
}
sprintf( strURL, "%s?id=2&os=%s", strPage, os );
}
else if( m_iMode==3 ){
f_CS_GetWebPageURL( URL_COINSPEC, strURL );
}
ShellExecute(Handle, NULL, ((String)strURL).c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::LinkMouseEnter(TObject *Sender)
{
((TLabel*)Sender)->Font->Color = clrEnter;
Screen->Cursor = crHandPoint;
}
//---------------------------------------------------------------------------
void __fastcall THelpPanel::LinkMouseLeave(TObject *Sender)
{
((TLabel*)Sender)->Font->Color = clrLeave;
Screen->Cursor = crDefault;
}
//---------------------------------------------------------------------------
+123
View File
@@ -0,0 +1,123 @@
//---------------------------------------------------------------------------
#ifndef HelpPanelUnitH
#define HelpPanelUnitH
//---------------------------------------------------------------------------
#include <vcl.h>
#include <vector>
//------------------------
#include "SkinScrollBarUnit.h"
#include <Vcl.Imaging.pngimage.hpp>
#include "QRcodePanel.h"
#define MODE_NUM 6
#define SOFTWARE_NUM 3
#define COLOR_BORDER RGB(164,115,70)
#define COLOR_QUESTION RGB( 207,169,207 )
#define COLOR_ANSWER RGB( 249,246,229 )
#include <vector>
using namespace std;
typedef struct{
wstring str1;
wstring str2;
} TWSPAIR;
typedef vector< TWSPAIR* > TWSPAIRLIST;
typedef struct tagLineString{
int flag;
wstring strText;
tagLineString(){
flag = 0;
}
} TLineString;
typedef vector< TLineString* > TTEXTLINE;
//--------
class THelpPanel : public Extctrls::TPanel
{
private:
TQRcodePanel *m_pQRPanelAndroid, *m_pQRPaneliOS;
unsigned char *m_pQRdataAndroid, *m_pQRdataiOS;
TLabel *m_aLblSWName[SOFTWARE_NUM],
*m_aLblSWLink[SOFTWARE_NUM],
*m_lblCoinPage;
TTEXTLINE m_lstLines;
int m_iMode; //显示模式 0=常见问题,1=我要提问,2=网站公告,3=空间消息
int m_iLastMode; //上次显示模式
// char m_CharBuf[2048];
void CalcViewArea();
void ReadData();
void __fastcall LinkClick(TObject *Sender);
void __fastcall LinkMouseEnter(TObject *Sender);
void __fastcall LinkMouseLeave(TObject *Sender);
MESSAGE void __fastcall WMEraseBkgnd(Winapi::Messages::TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
MESSAGE void __fastcall WMVScroll(Winapi::Messages::TWMScroll &Message);
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
MESSAGE_HANDLER(WM_VSCROLL, TWMVScroll, WMVScroll)
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
END_MESSAGE_MAP(Vcl::Extctrls::TPanel)
//protected:
//显示相关
int m_nRowShow,
m_nBeginShowRow,
m_nRowNum,
m_nPosFlag,
m_nPosText,
/* m_iFirstRowMode0,
m_iFirstRowMode1,
m_iFirstQAMode0,
m_iFirstQAMode1,
*/
m_aFirstRow[MODE_NUM],
m_aFirstTitle[MODE_NUM],
m_nRowWidth,
m_nRowHight,
m_nLeftBound,
m_nRightBound,
m_nTopBound,
m_nBottomBound;
TSkinScrollBar *m_sbVert;
// TMemo* m_memoMsg;
virtual void __fastcall CreateWnd();
virtual void __fastcall Paint(void);
void RefreshTextLines();
public:
void ScrollView( int nPos, bool bRedraw=true );
void SetMode( int iMode );
void AddFeedback( wstring str );
void SaveFirstRow();
void InitialVars();
bool HasScrollBar();
void SetTextFontSize(int sz);
__fastcall virtual THelpPanel(System::Classes::TComponent* AOwner);
__fastcall ~THelpPanel();
};
#endif
+379
View File
@@ -0,0 +1,379 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <IdHTTP.hpp>
#include "GlobalUnit.h"
#include "ImgCopperExUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
bool GetPicType(String &name, TMemoryStream *tmpMemoryStream, bool bBac)
{
bool bReturn = true;
tmpMemoryStream->Position = 0;
WORD wType = 0;
tmpMemoryStream->ReadBuffer(&wType, 2);
String tmpName = name;
if( wType==0x4D42 ){ //bmp
if( bBac )
name = ChangeFileExt(name, L".bmp");
}else if( wType==0x5089 ){ //png
if( bBac )
name = ChangeFileExt(name, L".png");
}else if( wType==0xD8FF ) { //jpg
if( bBac )
name = ChangeFileExt(name, L".jpg");
}else bReturn = false;
if( bReturn && bBac )
CopyFile(tmpName.c_str(), name.c_str(), false);
return bReturn;
}
//---------------------------------------------------------------------------
VCBMPEDGE g_VCBMPEDGE;
TBitmap* resizableImage(TBitmap *imgDest, TRect rectDest,
int tagSrc, String resourceNameSrc,
UIEdgeInsets insetsSrc,
System::Uitypes::TColor TransparentColor)
{
// ------judge the image is handled
bool bFindBMPEDGE = false;
BMPEDGE *pBMPEDGE = NULL;
for( VCBMPEDGE::iterator vc_pFindVCBMPEDGE = g_VCBMPEDGE.begin();
vc_pFindVCBMPEDGE != g_VCBMPEDGE.end();
vc_pFindVCBMPEDGE++ )
{
if( tagSrc==(*vc_pFindVCBMPEDGE)->iTag ) {
pBMPEDGE = *vc_pFindVCBMPEDGE;
bFindBMPEDGE = true;
break;
}
}
// ------l r t b cl cr ct cb c cn get bitmap
if( NULL==pBMPEDGE ) {
pBMPEDGE = new BMPEDGE(tagSrc, resourceNameSrc);
pBMPEDGE->pImgLeftT = new TBitmap();
pBMPEDGE->pImgLeftB = new TBitmap();
pBMPEDGE->pImgRightT = new TBitmap();
pBMPEDGE->pImgRightB = new TBitmap();
pBMPEDGE->pImgCenterL = new TBitmap();
pBMPEDGE->pImgCenterR = new TBitmap();
pBMPEDGE->pImgCenterT = new TBitmap();
pBMPEDGE->pImgCenterB = new TBitmap();
pBMPEDGE->pImgCenter = new TBitmap();
pBMPEDGE->pImgBMPSrc = new TBitmap();
pBMPEDGE->pImgBMPSrc->LoadFromResourceName(int(HInstance), resourceNameSrc);
}
TBitmap *imgSrc = pBMPEDGE->pImgBMPSrc;
// ------ l r t b cl cr ct cb c cn rect
int iLeft, iTop, iWidth, iHeight;
int iLeftNew, iTopNew, iWidthNew, iHeightNew;
iLeft = 0;
iTop = 0;
iWidth = imgSrc->Width;
iHeight = imgSrc->Height;
TRect rectSrc = TRect(0, 0, iWidth, iHeight);
iLeftNew = 0;
iTopNew = 0;
iWidthNew = rectDest.Width();
iHeightNew = rectDest.Height();
UIEdgeInsets insets;
if( !bFindBMPEDGE ) {
pBMPEDGE->insetsDest.left = insetsSrc.left;
pBMPEDGE->insetsDest.right = insetsSrc.right;
pBMPEDGE->insetsDest.top = insetsSrc.top;
pBMPEDGE->insetsDest.bottom = insetsSrc.bottom;
insets = insetsSrc;
}else{
insets = pBMPEDGE->insetsDest;
}
int LEFTT_WIDTH = insets.left;
int LEFTT_HEIGHT = insets.top;
int LEFTB_WIDTH = insets.left;
int LEFTB_HEIGHT = insets.bottom;
int RIGHTT_WIDTH = insets.right;
int RIGHTT_HEIGHT = insets.top;
int RIGHTB_WIDTH = insets.right;
int RIGHTB_HEIGHT = insets.bottom;
int CENTERL_WIDTH = insets.left;
int CENTERL_HEIGHT = rectSrc.Height() - (LEFTT_HEIGHT+LEFTB_HEIGHT);
int CENTERR_WIDTH = insets.right;
int CENTERR_HEIGHT = iHeight - (RIGHTT_HEIGHT+RIGHTB_HEIGHT);
int CENTERT_WIDTH = iWidth - (LEFTT_WIDTH+RIGHTT_WIDTH);
int CENTERT_HEIGHT = insets.top;
int CENTERB_WIDTH = iWidth - (LEFTB_WIDTH+RIGHTB_WIDTH);
int CENTERB_HEIGHT = insets.bottom;
int CENTER_WIDTH = CENTERT_WIDTH;
int CENTER_HEIGHT = iHeight - (CENTERT_HEIGHT+CENTERB_HEIGHT);
int CENTERL_NEW_WIDTH = insets.left;
int CENTERL_NEW_HEIGHT = iHeightNew - (LEFTT_HEIGHT+LEFTB_HEIGHT);
int CENTERR_NEW_WIDTH = insets.right;
int CENTERR_NEW_HEIGHT = CENTERL_NEW_HEIGHT;
int CENTERT_NEW_WIDTH = iWidthNew - (LEFTT_WIDTH+RIGHTT_WIDTH);
int CENTERT_NEW_HEIGHT = insets.top;
int CENTERB_NEW_WIDTH = CENTERT_NEW_WIDTH;
int CENTERB_NEW_HEIGHT = insets.bottom;
int CENTER_NEW_WIDTH = CENTERT_NEW_WIDTH;
int CENTER_NEW_HEIGHT = CENTERL_NEW_HEIGHT;
// ------ size transparent
TBitmap *pImgLeftT = pBMPEDGE->pImgLeftT;
TBitmap *pImgLeftB = pBMPEDGE->pImgLeftB;
TBitmap *pImgRightT = pBMPEDGE->pImgRightT;
TBitmap *pImgRightB = pBMPEDGE->pImgRightB;
TBitmap *pImgCenterL = pBMPEDGE->pImgCenterL;
TBitmap *pImgCenterR = pBMPEDGE->pImgCenterR;
TBitmap *pImgCenterT = pBMPEDGE->pImgCenterT;
TBitmap *pImgCenterB = pBMPEDGE->pImgCenterB;
TBitmap *pImgCenter = pBMPEDGE->pImgCenter;
if( !bFindBMPEDGE ) {
pImgLeftT->SetSize( LEFTT_WIDTH, LEFTT_HEIGHT );
pImgLeftB->SetSize( LEFTB_WIDTH, LEFTB_HEIGHT );
pImgRightT->SetSize( RIGHTT_WIDTH, RIGHTT_HEIGHT );
pImgRightB->SetSize( RIGHTB_WIDTH, RIGHTB_HEIGHT );
pImgCenterL->SetSize( CENTERL_WIDTH, CENTERL_HEIGHT);
pImgCenterR->SetSize( CENTERR_WIDTH, CENTERR_HEIGHT);
pImgCenterT->SetSize( CENTERT_WIDTH, CENTERT_HEIGHT);
pImgCenterB->SetSize( CENTERB_WIDTH, CENTERB_HEIGHT);
pImgCenter->SetSize( CENTER_WIDTH, CENTER_HEIGHT );
pBMPEDGE->SetTransparent(TransparentColor);
}
if( NULL==imgDest ) {
imgDest = new TBitmap();
imgDest->SetSize(iWidthNew, iHeightNew);
}
imgDest->Transparent = true;
imgDest->TransparentColor = clWhite;
// ------new bitmap
if( !bFindBMPEDGE ) {
// -----
StretchBlt(pImgLeftT->Canvas->Handle, 0, 0, LEFTT_WIDTH, LEFTT_HEIGHT,
imgSrc->Canvas->Handle, 0, 0, LEFTT_WIDTH, LEFTT_HEIGHT,
SRCCOPY);
StretchBlt(pImgLeftB->Canvas->Handle, 0, 0, LEFTB_WIDTH, LEFTB_HEIGHT,
imgSrc->Canvas->Handle, 0, iHeight-LEFTB_HEIGHT, LEFTB_WIDTH, LEFTB_HEIGHT,
SRCCOPY);
StretchBlt(pImgRightT->Canvas->Handle, 0, 0, RIGHTT_WIDTH, RIGHTT_HEIGHT,
imgSrc->Canvas->Handle, iWidth-RIGHTT_WIDTH, 0, RIGHTT_WIDTH, RIGHTT_HEIGHT,
SRCCOPY);
StretchBlt(pImgRightB->Canvas->Handle, 0, 0, RIGHTB_WIDTH, RIGHTB_HEIGHT,
imgSrc->Canvas->Handle, iWidth-RIGHTB_WIDTH, iHeight-RIGHTB_HEIGHT, RIGHTB_WIDTH, RIGHTB_HEIGHT,
SRCCOPY);
StretchBlt(pImgCenterL->Canvas->Handle, 0, 0, CENTERL_WIDTH, CENTERL_HEIGHT,
imgSrc->Canvas->Handle, 0, LEFTT_HEIGHT, CENTERL_WIDTH, CENTERL_HEIGHT,
SRCCOPY);
StretchBlt(pImgCenterR->Canvas->Handle, 0, 0, CENTERR_WIDTH, CENTERR_HEIGHT,
imgSrc->Canvas->Handle, iWidth-RIGHTT_WIDTH, RIGHTT_HEIGHT, CENTERR_WIDTH, CENTERR_HEIGHT,
SRCCOPY);
StretchBlt(pImgCenterT->Canvas->Handle, 0, 0, CENTERT_WIDTH, CENTERT_HEIGHT,
imgSrc->Canvas->Handle, LEFTT_WIDTH, 0, CENTERT_WIDTH, CENTERT_HEIGHT,
SRCCOPY);
StretchBlt(pImgCenterB->Canvas->Handle, 0, 0, CENTERB_WIDTH, CENTERB_HEIGHT,
imgSrc->Canvas->Handle, LEFTB_WIDTH, iHeight-LEFTB_HEIGHT, CENTERB_WIDTH, CENTERB_HEIGHT,
SRCCOPY);
StretchBlt(pImgCenter->Canvas->Handle, 0, 0, CENTER_WIDTH, CENTER_HEIGHT,
imgSrc->Canvas->Handle, LEFTT_WIDTH, LEFTT_HEIGHT, CENTER_WIDTH, CENTER_HEIGHT,
SRCCOPY);
}
// -----
StretchBlt(imgDest->Canvas->Handle, 0, 0, LEFTT_WIDTH, LEFTT_HEIGHT,
pImgLeftT->Canvas->Handle, 0, 0, LEFTT_WIDTH, LEFTT_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, 0, iHeightNew-LEFTB_HEIGHT, LEFTB_WIDTH, LEFTB_HEIGHT,
pImgLeftB->Canvas->Handle, 0, 0, LEFTB_WIDTH, LEFTB_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, iWidthNew-RIGHTT_WIDTH, 0, RIGHTT_WIDTH, RIGHTT_HEIGHT,
pImgRightT->Canvas->Handle, 0, 0, RIGHTT_WIDTH, RIGHTT_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, iWidthNew-RIGHTB_WIDTH, iHeightNew-RIGHTB_HEIGHT, RIGHTB_WIDTH, RIGHTB_HEIGHT,
pImgRightB->Canvas->Handle, 0, 0, RIGHTB_WIDTH, RIGHTB_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, 0, LEFTT_HEIGHT, CENTERL_NEW_WIDTH, CENTERL_NEW_HEIGHT,
pImgCenterL->Canvas->Handle,0, 0, CENTERL_WIDTH, CENTERL_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, iWidthNew-RIGHTT_WIDTH, RIGHTT_HEIGHT, CENTERR_NEW_WIDTH, CENTERR_NEW_HEIGHT,
pImgCenterR->Canvas->Handle,0, 0, CENTERR_WIDTH, CENTERR_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, LEFTT_WIDTH, 0, CENTERT_NEW_WIDTH, CENTERT_NEW_HEIGHT,
pImgCenterT->Canvas->Handle,0, 0, CENTERT_WIDTH, CENTERT_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, LEFTT_WIDTH, iHeightNew-LEFTB_HEIGHT, CENTERB_NEW_WIDTH, CENTERB_NEW_HEIGHT,
pImgCenterB->Canvas->Handle,0, 0, CENTERB_WIDTH, CENTERB_HEIGHT,
SRCCOPY);
StretchBlt(imgDest->Canvas->Handle, LEFTT_WIDTH, LEFTT_HEIGHT, CENTER_NEW_WIDTH, CENTER_NEW_HEIGHT,
pImgCenter->Canvas->Handle, 0, 0, CENTER_WIDTH, CENTER_HEIGHT,
SRCCOPY);
if( !bFindBMPEDGE ) {
g_VCBMPEDGE.push_back(pBMPEDGE);
}
return imgDest;
}
//---------------------------------------------------------------------------
TThreadMusciCover *g_pTThreadMusciCover = NULL;
__fastcall TThreadMusciCover::TThreadMusciCover(bool CreateSuspended, TForm *Form)
: TThread(CreateSuspended)
{
m_pForm = Form;
}
//---------------------------------------------------------------------------
void __fastcall TThreadMusciCover::Execute()
{
TStringStream *strStream = new TStringStream(NULL, 65001);
String strUrl = g_strServerURL;
strUrl += L"/index.php/Client/getUserMusicCover/userId/";
strUrl += IntToStr(g_infoUser.accountInfo.ID);
String dir = MUSIC_COVER_DIR;
String file = L"tmp";
HRESULT result = GetUrlData(strUrl, dir, file, strStream, true, UrlDown_ImageCover);
strUrl = strStream->DataString;
delete strStream;
if( !(result==S_OK && strUrl.Length() > 1) ){
return;
}
file = MUSIC_COVER_FILE;
if( S_OK==GetUrlData(strUrl, dir, file, NULL, false, UrlDown_ImageCover) ) {
PostMessage(m_pForm->Handle, UM_MUSICCOVER, 0, 0 );
}
}
//---------------------------------------------------------------------------
TThreadHttpPostUsrIcon *g_pTThreadHttpPostUsrIcon = NULL;
__fastcall TThreadHttpPostUsrIcon::TThreadHttpPostUsrIcon(bool CreateSuspended, TWinControl *pWnCtrl, String strPath)
: TThread(CreateSuspended)
{
m_pWnCtrl = pWnCtrl;
m_strPath = strPath;
}
//---------------------------------------------------------------------------
void __fastcall TThreadHttpPostUsrIcon::Execute()
{
String strFileName = L"";
bool bSucess = true;
String strUrl = g_strServerURL;
strUrl += L"/index.php/Client/uploadUserPortrait";
String struserId = IntToStr(g_infoUser.accountInfo.ID);
String strusername = g_infoUser.strUserName;
String strpassword = g_infoUser.strPassword;
String strCopperPath = m_strPath;
TIdMultiPartFormDataStream *stream = new TIdMultiPartFormDataStream();
stream->AddFormField(L"userId", struserId);
stream->AddFormField(L"username", strusername, L"UTF-8")->ContentTransfer = L"8bit";
stream->AddFormField(L"password", strpassword, L"UTF-8")->ContentTransfer = L"8bit";
stream->AddFile(L"Filedata", strCopperPath, L"image/jpg");
String strResJson;
TIdHTTP *httpPost = NULL;
try{
httpPost = new TIdHTTP();
httpPost->Request->ContentType = L"multipart/form-data;";
strResJson = httpPost->Post(strUrl, stream);
}catch(Exception &e) {
SAFE_DELETE(httpPost);
SAFE_DELETE(stream);
return;
}
TJSONObject *jsonOri = NULL;
int nState = -1;
try
{
jsonOri = GetJsonContext(strResJson);
if( jsonOri!=NULL ) {
TJSONObject *ValueState = GetJsonValue(jsonOri, 0);
if( ValueState!=NULL ) {
nState = StrToInt(ValueState->Value());
if( 1==nState ) {
TJSONObject *ValueFileName = GetJsonValue(jsonOri, 1);
if( ValueFileName!=NULL )
strFileName = ValueFileName->Value();
}
}
}
SAFE_DELETE(jsonOri);
}catch(Exception &e){
SAFE_DELETE(jsonOri);
SAFE_DELETE(httpPost);
SAFE_DELETE(stream);
return;
}
SAFE_DELETE(httpPost);
SAFE_DELETE(stream);
m_strFileName = strFileName;
// PostMessage(m_pWnCtrl->Handle, UM_UPLOADUSRICON, 0, 0 );
if( m_strFileName.Length() ) {
String strHeaderPath = g_strUserPath.c_str();
strHeaderPath += L"header\\";
strHeaderPath += strFileName;
CopyFile(strCopperPath.c_str(), strHeaderPath.c_str(), true);
DeleteFile(strCopperPath);
strcpy(g_infoUser.strIconFile, wstr2str(strFileName.c_str()).c_str());
}
}
//---------------------------------------------------------------------------
+126
View File
@@ -0,0 +1,126 @@
//---------------------------------------------------------------------------
#ifndef ImgCopperExUnitH
#define ImgCopperExUnitH
#include "NotificationExUnit.h"
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#define MUSIC_COVER_DIR L"MusicCover\\"
#define MUSIC_COVER_FILE L"MusicCover"
#define MUSIC_COVER_COPPER L"MusicCoverCopper.jpg"
//---------------------------------------------------------------------------
bool GetPicType(String &name, TMemoryStream *tmpMemoryStream, bool bBac);
//---------------------------------------------------------------------------
typedef struct UIEdgeInsets {
int left, right, top, bottom;
UIEdgeInsets(int ileft, int iright, int itop, int ibottom) {
left = ileft;
right = iright;
top = itop;
bottom = ibottom;
}
UIEdgeInsets(){
left = -1;
right = -1;
top = -1;
bottom = -1;
}
} UIEdgeInsets;
typedef struct tagUIEdgeInsetsBMP{
TBitmap *pImgLeftT,*pImgLeftB,*pImgRightT,*pImgRightB;
TBitmap *pImgCenterL, *pImgCenterR, *pImgCenterT, *pImgCenterB, *pImgCenter;
TBitmap *pImgBMPSrc;
UIEdgeInsets insetsDest;
int iTag;
String strResourceName;
tagUIEdgeInsetsBMP(int tag, String resourceName) {
iTag = tag;
strResourceName = resourceName;
pImgLeftT = pImgLeftB = pImgRightT = pImgRightB = NULL;
pImgCenterL = pImgCenterR = pImgCenterT = pImgCenterB = pImgCenter = NULL;
pImgBMPSrc = NULL;
}
~tagUIEdgeInsetsBMP() {
SAFE_DELETE(pImgLeftT)
SAFE_DELETE(pImgLeftB)
SAFE_DELETE(pImgRightT)
SAFE_DELETE(pImgRightB)
SAFE_DELETE(pImgCenterL)
SAFE_DELETE(pImgCenterR)
SAFE_DELETE(pImgCenterT)
SAFE_DELETE(pImgCenterB)
SAFE_DELETE(pImgCenter)
SAFE_DELETE(pImgBMPSrc)
}
void SetTransparent(System::Uitypes::TColor TransparentColor) {
pImgLeftT->Transparent = true;
pImgLeftT->TransparentColor = TransparentColor;
pImgLeftB->Transparent = true;
pImgLeftB->TransparentColor = TransparentColor;
pImgRightT->Transparent = true;
pImgRightT->TransparentColor = TransparentColor;
pImgRightB->Transparent = true;
pImgRightB->TransparentColor = TransparentColor;
pImgCenterL->Transparent = true;
pImgCenterL->TransparentColor = TransparentColor;
pImgCenterR->Transparent = true;
pImgCenterR->TransparentColor = TransparentColor;
pImgCenterT->Transparent = true;
pImgCenterT->TransparentColor = TransparentColor;
pImgCenterB->Transparent = true;
pImgCenterB->TransparentColor = TransparentColor;
pImgCenter->Transparent = true;
pImgCenter->TransparentColor = TransparentColor;
}
}BMPEDGE;
typedef vector<BMPEDGE*> VCBMPEDGE;
TBitmap* resizableImage(TBitmap *imgDest, TRect rectDest,
int tagSrc, String resourceNameSrc,
UIEdgeInsets insetsSrc,
System::Uitypes::TColor TransparentColor=clWhite);
//---------------------------------------------------------------------------
class TThreadMusciCover : public TThread
{
private:
TForm *m_pForm;
protected:
void __fastcall Execute();
public:
__fastcall TThreadMusciCover(bool CreateSuspended, TForm *Form);
};
extern TThreadMusciCover *g_pTThreadMusciCover;
//---------------------------------------------------------------------------
class TThreadHttpPostUsrIcon : public TThread
{
private:
TWinControl *m_pWnCtrl;
String m_strPath;
protected:
void __fastcall Execute();
public:
String m_strFileName;
__fastcall TThreadHttpPostUsrIcon(bool CreateSuspended, TWinControl *pWnCtrl, String strPath);
};
extern TThreadHttpPostUsrIcon *g_pTThreadHttpPostUsrIcon;
//---------------------------------------------------------------------------
#endif
+562
View File
@@ -0,0 +1,562 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ImgCopperFormUnit.h"
#include "GlobalUnit.h"
#include <System.IOUtils.hpp>
//---------------------------------------------------------------------------
static const COLORREF CLR_LINE_D = RGB( 18, 19, 21 ),
CLR_LINE_L = RGB( 140, 141, 145 );
#define TOP_LEFT 0
#define TOP_RIGHT 1
#define BOTTOM_LEFT 2
#define BOTTOM_RIGHT 3
#define TOP 4
#define BOTTOM 5
#define LEFT 6
#define RIGHT 7
#define CENTER 8
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PNGButton"
#pragma link "GeneralDialogPanel"
#pragma link "TextButton"
#pragma resource "*.dfm"
TImgCopperForm *ImgCopperForm;
//---------------------------------------------------------------------------
__fastcall TImgCopperForm::TImgCopperForm(TComponent* Owner, TRect rtCopper, TPicture *pPicSrc)
: TForm(Owner)
{
m_rtCopper = rtCopper;
m_pPicSrc = new TPicture();
if(pPicSrc && pPicSrc->Graphic->Width && pPicSrc->Graphic->Height ) {
m_pPicSrc->Assign(pPicSrc);
}
m_pTBitmapLine = new TBitmap();
m_pTBitmapLine->SetSize(4, 4);
m_pTBitmapLine->Canvas->Brush->Style = bsClear;
for( int indexY=0; indexY<4; indexY++ )
{
bool bLine = (indexY%2==0)?true:false;
for( int indexX=0; indexX<4; indexX++ )
{
bool bEven = (indexX%2==0)?true:false;
if(bLine) bEven = !bEven;
m_pTBitmapLine->Canvas->Pixels[indexX][indexY] =
(bEven==true)?CLR_LINE_D:CLR_LINE_L;
}
}
// -----
m_bPicDown = false;
m_nResize = 1;
DragAcceptFiles(this->Handle, true);
m_pTransSkinScollBar = new TTransSkinScollBar(m_pPanelBKG);
m_pTransSkinScollBar->Parent = m_pPanelBKG;
m_pTransSkinScollBar->SetBounds(0, 0, 14, 100);
m_pTransSkinScollBar->Vertial = false;
m_pTransSkinScollBar->ThumbWidth = 12;
m_pTransSkinScollBar->OnChangePos = SizeChange;
m_pTransSkinScollBar->BringToFront();
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::FormCreate(TObject *Sender)
{
//绘制圆角窗体
FormResize(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::FormClose(TObject *Sender, TCloseAction &Action)
{
SAFE_DELETE(m_pTBitmapLine)
SAFE_DELETE(m_pPicSrc)
SAFE_DELETE(m_pTransSkinScollBar)
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::FormResize(TObject *Sender)
{
m_pPanelBKG->Width = Width;
m_pPanelBKG->Height = Height;
m_pPanelBKG->Left = 0;
m_pPanelBKG->Top = 0;
// -----
TRect rtBKG = TRect(1, 26, Width-1, 26+(Height-68));
m_rtBKG = rtBKG;
m_pPaintBoxSrc->Left = 1;
m_pPaintBoxSrc->Top = rtBKG.Top;
m_pPaintBoxSrc->Width = Width-2;
m_pPaintBoxSrc->Height = rtBKG.Height();
m_rtCopperEdge.Left = rtBKG.Left+(rtBKG.Width()-m_rtCopper.Width())/2-4;
m_rtCopperEdge.Top = rtBKG.Top+(rtBKG.Height()-m_rtCopper.Height())/2-4;
m_rtCopperEdge.Right = m_rtCopperEdge.Left+m_rtCopper.Width()+8;
m_rtCopperEdge.Bottom = m_rtCopperEdge.Top+m_rtCopper.Height()+8;
m_pTransSkinScollBar->Width = Width/3;
m_pTransSkinScollBar->Left
= m_pPaintBoxSrc->Left+(m_pPaintBoxSrc->Width-m_pTransSkinScollBar->Width)/2;
m_pTransSkinScollBar->Top
= m_pPaintBoxSrc->Top+m_pPaintBoxSrc->Height -
m_pTransSkinScollBar->Height-8;
HRGN hRgnSize =
CreateRoundRectRgn( 0, 0,
m_pTransSkinScollBar->Width+1,
m_pTransSkinScollBar->Height+1,
3, 3 );
SetWindowRgn( m_pTransSkinScollBar->Handle, hRgnSize, false );
DeleteObject( hRgnSize );
m_pBtnCancel->Left = Width-m_pBtnCancel->Width-10;
m_pBtnCancel->Top = Height-m_pBtnCancel->Height-10;
m_pBtnOk->Left = m_pBtnCancel->Left-m_pBtnOk->Width-10;
m_pBtnOk->Top = m_pBtnCancel->Top;
m_btnChoose->Left = 10;
m_btnChoose->Top =
m_pBtnCancel->Top+(m_pBtnCancel->Height-m_btnChoose->Height)/2;
m_pPanelBKG->Caption = Caption;
SetSrcPicRect();
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::SetCaption(String strCaption)
{
m_pPanelBKG->Caption = strCaption;
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::m_pPaintBoxSrcPaint(TObject *Sender)
{
int nWidth = m_pPaintBoxSrc->Width;
int nHeight = m_pPaintBoxSrc->Height;
// 创建一个与显示设备兼容的内存设备
HDC BufDC = CreateCompatibleDC(m_pPaintBoxSrc->Canvas->Handle);
// 创建一个与显示设备兼容的位图
HBITMAP BufBitmap = CreateCompatibleBitmap(m_pPaintBoxSrc->Canvas->Handle, nWidth, nHeight);
// 将设备与位图关联
SelectObject(BufDC, BufBitmap);
// CreateCompatibleBitmap创建位图后数据初始化为0,而RGB(0,0,0)则表示是黑色
// 这里需要清除其黑色背景,使其变为透明
PerformEraseBackground(this, BufDC);
// 临时的Canvas,用来画图用,但它并不是必须的,可以直接使用GDI函数来画图
TCanvas *CanvasDraw = new TCanvas();
// 关联到内存设备
CanvasDraw->Handle = BufDC;
//--------------------------------------
CanvasDraw->Brush->Color = RGB(52, 56, 63);
CanvasDraw->FillRect(TRect(0, 0, nWidth, nHeight));
CanvasDraw->StretchDraw(m_rtSrc, m_pPicSrc->Graphic);
int iLeft, iTop, iWidth, iHeight;
CanvasDraw->Brush->Bitmap = m_pTBitmapLine;
//left
iLeft = m_rtCopperEdge.Left-m_rtBKG.Left;
iTop = m_rtCopperEdge.Top-m_rtBKG.Top;
iWidth = 4;
iHeight = m_rtCopperEdge.Height();
CanvasDraw->FillRect( TRect(iLeft, iTop, iLeft+iWidth, iTop+iHeight) );
//right
iLeft = m_rtCopperEdge.Left+m_rtCopperEdge.Width()-4-m_rtBKG.Left;
iTop = m_rtCopperEdge.Top-m_rtBKG.Top;
iWidth = 4;
iHeight = m_rtCopperEdge.Height();
CanvasDraw->FillRect( TRect(iLeft, iTop, iLeft+iWidth, iTop+iHeight) );
//top
iLeft = m_rtCopperEdge.Left-m_rtBKG.Left;
iTop = m_rtCopperEdge.Top-m_rtBKG.Top;
iWidth = m_rtCopperEdge.Width();
iHeight = 4;
CanvasDraw->FillRect( TRect(iLeft, iTop, iLeft+iWidth, iTop+iHeight) );
//bottom
iLeft = m_rtCopperEdge.Left-m_rtBKG.Left;
iTop = m_rtCopperEdge.Top+m_rtCopperEdge.Height()-4-m_rtBKG.Top;
iWidth = m_rtCopperEdge.Width();
iHeight = 4;
CanvasDraw->FillRect( TRect(iLeft, iTop, iLeft+iWidth, iTop+iHeight) );
// 一次性将内存图像数据覆盖过去,因为跳过了擦除背景过程,所以避免了闪烁的问题
BitBlt(m_pPaintBoxSrc->Canvas->Handle, 0, 0, nWidth, nHeight,
CanvasDraw->Handle, 0, 0, SRCCOPY);
// 释放资源
DeleteDC(BufDC);
DeleteObject(BufBitmap);
SAFE_DELETE(CanvasDraw)
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::m_pPaintBoxSrcMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
m_bPicDown = true;
m_ptDown = TPoint(X, Y);
m_rtSrcMove = m_rtSrc;
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::m_pPaintBoxSrcMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if( m_bPicDown ) {
int nLeft, nTop, nWidth, nHeight;
nWidth = m_rtSrcMove.Width();
nHeight = m_rtSrcMove.Height();
nLeft = m_rtSrcMove.Left+X-m_ptDown.X;
nTop = m_rtSrcMove.Top+Y-m_ptDown.Y;
m_rtSrc.Left = nLeft;
m_rtSrc.Top = nTop;
m_rtSrc.Right = m_rtSrc.Left+nWidth;
m_rtSrc.Bottom = m_rtSrc.Top+nHeight;
m_pPaintBoxSrcPaint(NULL);
}
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::m_pPaintBoxSrcMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
m_bPicDown = false;
m_rtSrcMove = m_rtSrc;
m_pTransSkinScollBar->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::SizeChange(TObject *Sender)
{
int nSize = m_pTransSkinScollBar->SBTop + 1;
if(m_nResize==nSize) return;
m_nResize = nSize;
int nLMove, nTMove, nWMove, nHMove;
nLMove = m_rtSrcMove.Left;
nTMove = m_rtSrcMove.Top;
nWMove = m_rtSrcMove.Width();
nHMove = m_rtSrcMove.Height();
int nLBac, nTBac, nWBac, nHBac;
nLBac = m_rtSrcBac.Left;
nTBac = m_rtSrcBac.Top;
nWBac = m_rtSrcBac.Width();
nHBac = m_rtSrcBac.Height();
//方向
int nStatusLoc;
TPoint ptCenterSrcMove = TPoint(nLMove+nWMove/2, nTMove+nHMove/2);
if( ptCenterSrcMove.X>m_rtSrcBac.Right &&
ptCenterSrcMove.Y<m_rtSrcBac.Top )
{
nStatusLoc = TOP_RIGHT;
}else if( ptCenterSrcMove.X>m_rtSrcBac.Right &&
ptCenterSrcMove.Y>m_rtSrcBac.Bottom )
{
nStatusLoc = BOTTOM_RIGHT;
}else if( ptCenterSrcMove.X<m_rtSrcBac.Left &&
ptCenterSrcMove.Y>m_rtSrcBac.Bottom )
{
nStatusLoc = BOTTOM_LEFT;
}else if( ptCenterSrcMove.X<m_rtSrcBac.Left &&
ptCenterSrcMove.Y<m_rtSrcBac.Top )
{
nStatusLoc = TOP_LEFT;
}else if( ptCenterSrcMove.X>m_rtSrcBac.Right &&
ptCenterSrcMove.Y>m_rtSrcBac.Top &&
ptCenterSrcMove.Y<m_rtSrcBac.Bottom )
{
nStatusLoc = RIGHT;
}else if( ptCenterSrcMove.X<m_rtSrcBac.Left &&
ptCenterSrcMove.Y>m_rtSrcBac.Top &&
ptCenterSrcMove.Y<m_rtSrcBac.Bottom )
{
nStatusLoc = LEFT;
}else if( ptCenterSrcMove.Y>m_rtSrcBac.Bottom &&
ptCenterSrcMove.X>m_rtSrcBac.Left &&
ptCenterSrcMove.X<m_rtSrcBac.Right )
{
nStatusLoc = BOTTOM;
}else if( ptCenterSrcMove.Y<m_rtSrcBac.Top &&
ptCenterSrcMove.X>m_rtSrcBac.Left &&
ptCenterSrcMove.X<m_rtSrcBac.Right )
{
nStatusLoc = TOP;
}else{
nStatusLoc = CENTER;
}
//得到缩放焦点
TPoint ptFocus;
if( CENTER==nStatusLoc ) {
ptFocus = ptCenterSrcMove;
}else if( TOP_RIGHT==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove/4, nTMove+nHMove*3/4);
}else if( BOTTOM_RIGHT==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove/4, nTMove+nHMove/4);
}else if( BOTTOM_LEFT==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove*3/4, nTMove+nHMove/4);
}else if( TOP_LEFT==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove*3/4, nTMove+nHMove*3/4);
}else if( RIGHT==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove/4, nTMove+nHMove/2);
}else if( LEFT==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove*3/4, nTMove+nHMove/2);
}else if( BOTTOM==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove/2, nTMove+nHMove/4);
}else if( TOP==nStatusLoc ) {
ptFocus = TPoint(nLMove+nWMove/2, nTMove+nHMove*3/4);
}
//进行缩放处理
int nLSrc, nTSrc, nWSrc, nHSrc;
nWSrc = nWBac*nSize;
nHSrc = nHBac*nSize;
if( CENTER==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc/2;
nTSrc = ptFocus.Y - nHSrc/2;
}else if( TOP_RIGHT==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc/4;
nTSrc = ptFocus.Y - nHSrc*3/4;
}else if( BOTTOM_RIGHT==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc/4;
nTSrc = ptFocus.Y - nHSrc/4;
}else if( BOTTOM_LEFT==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc*3/4;
nTSrc = ptFocus.Y - nHSrc/4;
}else if( TOP_LEFT==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc*3/4;
nTSrc = ptFocus.Y - nHSrc*3/4;
}else if( RIGHT==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc/4;
nTSrc = ptFocus.Y - nHSrc/2;
}else if( LEFT==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc*3/4;
nTSrc = ptFocus.Y - nHSrc/2;
}else if( BOTTOM==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc/2;
nTSrc = ptFocus.Y - nHSrc/4;
}else if( TOP==nStatusLoc ) {
nLSrc = ptFocus.X - nWSrc/2;
nTSrc = ptFocus.Y - nHSrc*3/4;
}
m_rtSrc.Left = nLSrc;
m_rtSrc.Top = nTSrc;
m_rtSrc.Right = m_rtSrc.Left+nWSrc;
m_rtSrc.Bottom = m_rtSrc.Top+nHSrc;
m_pPaintBoxSrcPaint(NULL);
m_pTransSkinScollBar->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::SetSrcPicRect()
{
int nLeft, nTop, nWidth, nHeight;
if( m_pPicSrc ) {
int nWidthLarge = -1;
int nWidthCopper = m_rtCopper.Width();
int nHeightCopper = m_rtCopper.Height();
nWidth = m_pPicSrc->Width;
nHeight = m_pPicSrc->Height;
if( nWidth<m_rtCopper.Width() ) {
nLeft = (nWidthCopper-nWidth)/2;
}else{
nWidthLarge = nWidth;
nLeft = 0;
nWidth = nWidthCopper;
}
if( -1!=nWidthLarge ) {
nHeight = nHeight*nWidth/nWidthLarge;
}
nTop = (nHeightCopper-nHeight)/2;
m_rtSrc.Left = nLeft+(m_rtCopperEdge.Left-m_pPaintBoxSrc->Left)+4;
m_rtSrc.Top = nTop+(m_rtCopperEdge.Top-m_pPaintBoxSrc->Top)+4;
m_rtSrc.Right = m_rtSrc.Left+nWidth;
m_rtSrc.Bottom = m_rtSrc.Top+nHeight;
m_rtSrcBac = m_rtSrc;
m_rtSrcMove = m_rtSrc;
if( -1!=nWidthLarge )
m_pTransSkinScollBar->SBTotal = m_pPicSrc->Width*5/m_rtSrc.Width();
else
m_pTransSkinScollBar->SBTotal = 5;
m_pTransSkinScollBar->SBShow = 2;
m_pTransSkinScollBar->SBTop = 0;
m_nResize = 1;
}
}
//---------------------------------------------------------------------------
bool __fastcall TImgCopperForm::SetSrcPic(String fileName)
{
TMemoryStream *memoryStream = new TMemoryStream();
memoryStream->Position = 0;
memoryStream->LoadFromFile(fileName);
if( !GetPicType(fileName, memoryStream, true) ){
SAFE_DELETE(memoryStream)
return false;
}else {
TPicture *pTPicture = new TPicture();
try{
pTPicture->LoadFromFile(fileName);
}catch(Exception &e){
SAFE_DELETE(pTPicture)
SAFE_DELETE(memoryStream)
return false;
}
if( m_pPicSrc ) {
m_pPicSrc->Assign(pTPicture);
SetSrcPicRect();
m_pPaintBoxSrcPaint(NULL);
m_pTransSkinScollBar->Invalidate();
SAFE_DELETE(pTPicture)
}
}
SAFE_DELETE(memoryStream)
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::WMDRopFiles (TMessage& Msg)
{
wchar_t wcFileName[256];
int iCount = DragQueryFile((HDROP)Msg.WParam, 0xffffffff, wcFileName , 256);
for (int index=0; index<iCount; index++)
{
DragQueryFile((HDROP )Msg.WParam, index, wcFileName , 256);
String fileName = wstr2str(wcFileName).c_str();
if( SetSrcPic(fileName) ) break;
}
DragFinish((HDROP)Msg.WParam);
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::m_btnChooseClick(TObject *Sender)
{
String strPicPath;
// -----
TOpenDialog *pDlg = new TOpenDialog(NULL);
pDlg->Title = "打开图片";
pDlg->Options << ofFileMustExist;
// pDlg->FileName = ExtractFileName(L"");
// pDlg->InitialDir = ExtractFilePath(L"");
pDlg->Filter = "jpg文件 (*.jpg)|*.JPG|png文件 (*.png)|*.PNG|bmp文件 (*.bmp)|*.BMP";
pDlg->DefaultExt = "jpg";
if ( pDlg->Execute(Handle) ) {
strPicPath = pDlg->FileName.c_str();
}
SAFE_DELETE(pDlg);
if( !strPicPath.IsEmpty() ){
SetSrcPic(strPicPath);
}
}
//---------------------------------------------------------------------------
void __fastcall TImgCopperForm::m_pBtnOkClick(TObject *Sender)
{
int iLeft, iTop, iWidth, iHeight;
iLeft = 0;
iTop = 0;
iWidth = m_rtCopper.Width();
iHeight = m_rtCopper.Height();
TBitmap *pTBitmapCopper = new TBitmap();
pTBitmapCopper->SetSize(iWidth, iHeight);
pTBitmapCopper->Canvas->Brush->Color = RGB(0, 0, 0);
pTBitmapCopper->Canvas->FillRect(TRect(iLeft, iTop, iLeft+iWidth, iTop+iHeight));
iWidth = m_rtSrc.Width();
iHeight = m_rtSrc.Height();
m_rtSrc.Left -= m_rtCopperEdge.Left-m_pPaintBoxSrc->Left+4;
m_rtSrc.Top -= m_rtCopperEdge.Top-m_pPaintBoxSrc->Top+4;
m_rtSrc.Right = m_rtSrc.Left+iWidth;
m_rtSrc.Bottom = m_rtSrc.Top+iHeight;
pTBitmapCopper->Canvas->StretchDraw(m_rtSrc, m_pPicSrc->Graphic);
m_strCopperPath = g_strUserPath.c_str();
m_strCopperPath += L"temp\\";
if(!DirectoryExists(m_strCopperPath, false))
ForceDirectories(m_strCopperPath);
m_strCopperPath += L"copper.jpg";
TJPEGImage *pTJPEGImage = new TJPEGImage();
pTJPEGImage->Assign(pTBitmapCopper);
pTJPEGImage->SaveToFile( m_strCopperPath );
SAFE_DELETE(pTJPEGImage);
SAFE_DELETE(pTBitmapCopper);
}
//---------------------------------------------------------------------------
+71
View File
@@ -0,0 +1,71 @@
object ImgCopperForm: TImgCopperForm
Left = 0
Top = 0
BorderStyle = bsNone
Caption = #32534#36753#23553#38754
ClientHeight = 338
ClientWidth = 309
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Position = poMainFormCenter
Scaled = False
OnClose = FormClose
OnCreate = FormCreate
OnResize = FormResize
TextHeight = 13
object m_pPanelBKG: TGeneralDialogPanel
Left = 0
Top = 1
Width = 309
Height = 337
Caption = #32534#36753#23553#38754
Color = 5064257
ParentBackground = False
TabOrder = 0
object m_pPaintBoxSrc: TPaintBox
Left = 0
Top = 29
Width = 309
Height = 252
OnMouseDown = m_pPaintBoxSrcMouseDown
OnMouseMove = m_pPaintBoxSrcMouseMove
OnMouseUp = m_pPaintBoxSrcMouseUp
OnPaint = m_pPaintBoxSrcPaint
end
object m_pBtnOk: TTextButton
Left = 167
Top = 300
Width = 52
Height = 25
ModalResult = mrOk
ParentShowHint = False
ShowHint = True
OnClick = m_pBtnOkClick
Text = #30830#23450
end
object m_pBtnCancel: TTextButton
Left = 240
Top = 300
Width = 52
Height = 25
ModalResult = mrCancel
ParentShowHint = False
ShowHint = True
Text = #21462#28040
end
object m_btnChoose: TTextButton
Left = 21
Top = 300
Width = 56
Height = 25
ParentShowHint = False
ShowHint = True
OnClick = m_btnChooseClick
Text = #36873#21462#22270#29255
end
end
end
+79
View File
@@ -0,0 +1,79 @@
//---------------------------------------------------------------------------
#ifndef ImgCopperFormUnitH
#define ImgCopperFormUnitH
//---------------------------------------------------------------------------
#include "ImgCopperExUnit.h"
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Imaging.jpeg.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Graphics.hpp>
#include "PNGButton.hpp"
#include "TransSkinScrollBar.h"
#include "GeneralDialogPanel.h"
#include "TextButton.h"
//---------------------------------------------------------------------------
class TImgCopperForm : public TForm
{
__published: // IDE-managed Components
TGeneralDialogPanel *m_pPanelBKG;
TTextButton *m_pBtnOk;
TTextButton *m_pBtnCancel;
TPaintBox *m_pPaintBoxSrc;
TTextButton *m_btnChoose;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall m_pPaintBoxSrcMouseMove(TObject *Sender, TShiftState Shift, int X,
int Y);
void __fastcall m_pPaintBoxSrcMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall m_pPaintBoxSrcMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall m_pPaintBoxSrcPaint(TObject *Sender);
void __fastcall m_pBtnOkClick(TObject *Sender);
void __fastcall FormResize(TObject *Sender);
void __fastcall m_btnChooseClick(TObject *Sender);
private: // User declarations
TRect m_rtBKG;
TRect m_rtCopper;
TRect m_rtCopperEdge;
TBitmap *m_pTBitmapLine;
TPicture *m_pPicSrc;
TRect m_rtSrc;
TRect m_rtSrcBac;
TRect m_rtSrcMove;
bool m_bPicDown;
TPoint m_ptDown;
int m_nResize;
TTransSkinScollBar *m_pTransSkinScollBar;
void __fastcall SizeChange(TObject *Sender);
bool __fastcall SetSrcPic(String fileName);
void __fastcall SetSrcPicRect();
MESSAGE void __fastcall WMDRopFiles (TMessage& Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TMessage, WMDRopFiles)
END_MESSAGE_MAP(TForm)
public: // User declarations
__fastcall TImgCopperForm(TComponent* Owner, TRect rtCopper, TPicture *pPicSrc);
String m_strCopperPath;
void __fastcall SetCaption(String strCaption);
};
//---------------------------------------------------------------------------
extern PACKAGE TImgCopperForm *ImgCopperForm;
//---------------------------------------------------------------------------
#endif
+258
View File
@@ -0,0 +1,258 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "GlobalUnit.h"
#include "ImportFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GeneralDialogPanel"
#pragma link "LineEdit"
#pragma link "TextButton"
#pragma link "ComboBoxComponent"
#pragma link "SkinTrackBar"
#pragma link "CapButton"
#pragma resource "*.dfm"
TImportForm *ImportForm;
//---------------------------------------------------------------------------
__fastcall TImportForm::TImportForm(TComponent* Owner, String DefaultFile,
int TS, int Tempo, int iMode)
: TForm(Owner)
{
m_iMode = iMode;
m_MediaFilePath->Text = DefaultFile;
MediaFilePath = DefaultFile;
DoFilePathChange(NULL);
m_RetrunValue = 0;
this->TS = TS;
this->Tempo = Tempo;
this->m_TSTrackBar->Position = TS;
this->m_TempoTrackBar->Position = Tempo;
if( iMode==1 )
m_panGeneral->Caption = "插入音频片段";
for( int i=0; i<ComponentCount; i++ ){
if(Components[i]->ClassNameIs( TLabel::ClassName() ) )
((TLabel*)Components[i])->ControlStyle>>csOpaque;
}
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoBrows(TObject *Sender)
{
TOpenDialog * pDlg = new TOpenDialog(NULL);
pDlg->Options << ofFileMustExist;
pDlg->Title = L"打开";
pDlg->FileName = ExtractFileName(m_MediaFilePath->Text);
pDlg->InitialDir = ExtractFilePath(m_MediaFilePath->Text);
pDlg->Filter = "mp3文件 (*.mp3)|*.MP3|Wave文件 (*.wav)|*.WAV";
if( m_iMode==0 )
pDlg->Filter += "|midi文件 (*.mid)|*.MID";
if(ExtractFileExt(m_MediaFilePath->Text).CompareIC(".mid") == 0)
{
pDlg->FilterIndex = 3;
}
else if(ExtractFileExt(m_MediaFilePath->Text).CompareIC(".wav") == 0)
{
pDlg->FilterIndex = 2;
}
else
{
pDlg->FilterIndex = 1;
}
if(pDlg->Execute(Handle))
{
m_MediaFilePath->Text = pDlg->FileName;
MediaFilePath = pDlg->FileName;
//DoFilePathChange(NULL);
}
delete pDlg;
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoFilePathChange(TObject *Sender)
{
UnicodeString var_FilePath(m_MediaFilePath->Text);
MediaFilePath = var_FilePath;
//检查文件是否存在
if(System::Ioutils::TFile::Exists(MediaFilePath))
m_OKButton->Enabled = true;
else
m_OKButton->Enabled = false;;
if( m_iMode==0 && ( ExtractFileExt(var_FilePath).CompareIC(".wav") == 0
|| ExtractFileExt(var_FilePath).CompareIC(".mp3") == 0)){
///////////
m_panGeneral->Height = 206;
Height = 206;
m_TipsLabel->Top = 162;
m_OKButton->Top = 155;
m_CancelButton->Top = 155;
m_TSTrackBar->Visible = true;
m_TempoTrackBar->Visible = true;
m_TSLabel->Visible = true;
m_TempoLabel->Visible = true;
m_TipsLabel->Visible = true;
m_ShowTempo->Visible = true;
ts_44->Visible = true;
ts_34->Visible = true;
ts_24->Visible = true;
ts_68->Visible = true;
m_ShowTempoMin->Visible = true;
m_ShowTempoMax->Visible = true;
m_TempoUpDown->Visible = true;
}
else{
m_TSTrackBar->Visible = false;
m_TempoTrackBar->Visible = false;
m_ShowTempo->Visible = false;
m_TSLabel->Visible = false;
m_TempoLabel->Visible = false;
m_TipsLabel->Visible = false;
ts_44->Visible = false;
ts_34->Visible = false;
ts_24->Visible = false;
ts_68->Visible = false;
m_ShowTempoMin->Visible = false;
m_ShowTempoMax->Visible = false;
m_TempoUpDown->Visible = false;
///////////
m_panGeneral->Height = 140;
Height = 140;
m_TipsLabel->Top = 96;
m_OKButton->Top = 89;
m_CancelButton->Top = 89;
}
}
//---------------------------------------------------------------------------
int __fastcall TImportForm::ShowModal()
{
int var_Result = TForm::ShowModal();
TS = m_TSTrackBar->Position;
Tempo = m_TempoTrackBar->Position;
MediaFilePath = m_MediaFilePath->Text;
return var_Result;
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoOK(TObject *Sender)
{
m_RetrunValue = 1;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoTempoTrackBar(TObject *Sender)
{
String var_Tempo(m_TempoTrackBar->Position);
m_ShowTempo->Text = var_Tempo;
//m_ShowTempo->Caption = var_Tempo;
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoTSTrackBar(TObject *Sender)
{
TS = m_TSTrackBar->Position;
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoCancel(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoShowTempoChange(TObject *Sender)
{
if(m_ShowTempo->Text == "")
{
return;
}
int var_Tempo = m_ShowTempo->Text.ToInt();
if(var_Tempo < 50/*m_TSTrackBar->Min*/ || var_Tempo > 200/*m_TSTrackBar->Max*/)
{
//m_ShowTempo->Text = String(m_TSTrackBar->Position);
}
else
{
m_TempoTrackBar->Position = var_Tempo;
m_TempoUpDown->Position = var_Tempo;
}
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::DoTempoUpDown(TObject *Sender, TUDBtnType Button)
{
if(Button == btNext)
{
m_TempoUpDown->Position += 1;
m_TempoTrackBar->Position += 1;
}
else
{
m_TempoUpDown->Position -= 1;
m_TempoTrackBar->Position -= 1;
}
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
switch( Key ){
case VK_RETURN:
if(m_OKButton->Enabled)
ModalResult = mrOk;
break;
case VK_ESCAPE:
ModalResult = mrCancel;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TImportForm::FormCreate(TObject *Sender)
{
m_panGeneral->Font->Size = g_szFont9;
m_BrowsButton->FontSize = g_szFont9;
m_OKButton->FontSize = g_szFont9;
m_CancelButton->FontSize = g_szFont9;
m_MediaFilePath->SetTextFont(g_strTxtFontName, g_szFont9);
m_ShowTempo->SetTextFont(g_strTxtFontName, g_szFont9);
}
//---------------------------------------------------------------------------
+286
View File
@@ -0,0 +1,286 @@
object ImportForm: TImportForm
Left = 0
Top = 0
BorderStyle = bsNone
Caption = 'ImportForm'
ClientHeight = 206
ClientWidth = 410
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = 12569562
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
KeyPreview = True
Position = poMainFormCenter
Scaled = False
OnCreate = FormCreate
OnKeyDown = FormKeyDown
TextHeight = 16
object m_panGeneral: TGeneralDialogPanel
Left = 0
Top = 0
Width = 410
Height = 206
ParentCustomHint = False
Caption = #23548#20837#21333#26059#24459#25991#20214
Color = 5064257
UseDockManager = False
Font.Charset = DEFAULT_CHARSET
Font.Color = 12569562
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentBackground = False
ParentFont = False
ParentShowHint = False
ShowHint = False
TabOrder = 0
object m_MediaFilePathLabel: TLabel
Left = 29
Top = 53
Width = 36
Height = 14
Caption = #25991#20214#21517
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_TSLabel: TLabel
Left = 29
Top = 113
Width = 24
Height = 14
Caption = #33410#25293
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_TempoLabel: TLabel
Left = 158
Top = 113
Width = 24
Height = 14
Caption = #36895#24230
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_TipsLabel: TLabel
Left = 29
Top = 162
Width = 132
Height = 14
Caption = #25552#31034#65306#35831#35774#32622#36895#24230#19982#33410#25293
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_BrowsButton: TTextButton
Left = 313
Top = 50
Width = 60
Height = 25
ParentShowHint = False
ShowHint = True
OnClick = DoBrows
Text = #27983#35272
end
object m_CancelButton: TTextButton
Left = 298
Top = 157
Width = 75
Height = 27
ModalResult = mrCancel
ParentShowHint = False
ShowHint = True
Text = #21462#28040
end
object m_OKButton: TTextButton
Left = 217
Top = 157
Width = 75
Height = 27
ModalResult = mrOk
ParentShowHint = False
ShowHint = True
Text = #30830#23450
end
object ts_44: TLabel
Left = 60
Top = 90
Width = 19
Height = 16
Caption = '4/4'
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object ts_34: TLabel
Left = 82
Top = 90
Width = 19
Height = 16
Caption = '3/4'
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object ts_24: TLabel
Left = 104
Top = 90
Width = 19
Height = 16
Caption = '2/4'
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object ts_68: TLabel
Left = 127
Top = 90
Width = 19
Height = 16
Caption = '6/8'
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_ShowTempoMin: TLabel
Left = 190
Top = 90
Width = 14
Height = 16
Caption = '50'
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_ShowTempoMax: TLabel
Left = 295
Top = 90
Width = 21
Height = 16
Caption = '200'
Font.Charset = DEFAULT_CHARSET
Font.Color = 14339007
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object m_MediaFilePath: TLineEdit
Left = 80
Top = 50
Width = 230
Height = 23
OnChange = DoFilePathChange
HintText = #35831#36873#25321#25991#20214
NumberMax = -1
NumberMin = -1
Color = 15591652
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
TabOrder = 0
end
object m_ShowTempo: TLineEdit
Left = 325
Top = 110
Width = 33
Height = 24
OnChange = DoShowTempoChange
Alignment = taCenter
NumbersOnly = True
NumberMax = 200
NumberMin = 50
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
TabOrder = 1
end
object m_TempoTrackBar: TSkinTrackBar
Left = 187
Top = 112
Width = 132
Height = 20
Hint = '50'
Caption = 'm_TempoTrackBar'
FullRepaint = False
Font.Charset = DEFAULT_CHARSET
Font.Color = 12569562
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentColor = True
ParentFont = False
TabOrder = 2
OnChange = DoTempoTrackBar
Max = 200
Min = 50
Position = 50
end
object m_TSTrackBar: TSkinTrackBar
Left = 60
Top = 112
Width = 85
Height = 20
Hint = '2'
Caption = 'm_TSTrackBar'
FullRepaint = False
Font.Charset = DEFAULT_CHARSET
Font.Color = 12569562
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = []
ParentColor = True
ParentFont = False
TabOrder = 3
OnChange = DoTSTrackBar
Max = 3
Position = 2
end
object m_TempoUpDown: TUpDown
Left = 357
Top = 111
Width = 16
Height = 22
Min = 50
Max = 200
Position = 50
TabOrder = 4
OnClick = DoTempoUpDown
end
end
end
+70
View File
@@ -0,0 +1,70 @@
//---------------------------------------------------------------------------
#ifndef ImportFormUnitH
#define ImportFormUnitH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <System.IOUtils.hpp>
#include <Vcl.ComCtrls.hpp>
#include "GeneralDialogPanel.h"
#include "LineEdit.h"
#include "SkinTrackBar.h"
#include "TextButton.h"
#include "CapButton.h"
#include "ComboBoxComponent.h"
#include "UpDownUnit.h"
//---------------------------------------------------------------------------
class TImportForm : public TForm
{
__published: // IDE-managed Components
TGeneralDialogPanel *m_panGeneral;
TLabel *m_MediaFilePathLabel;
TLabel *m_TSLabel;
TLabel *m_TempoLabel;
TLabel *m_TipsLabel;
TTextButton *m_BrowsButton;
TTextButton *m_CancelButton;
TTextButton *m_OKButton;
TLineEdit *m_MediaFilePath;
TLabel *ts_44;
TLabel *ts_34;
TLabel *ts_24;
TLabel *ts_68;
TLineEdit *m_ShowTempo;
TSkinTrackBar *m_TempoTrackBar;
TSkinTrackBar *m_TSTrackBar;
TLabel *m_ShowTempoMin;
TLabel *m_ShowTempoMax;
UpDownUnit::TUpDown *m_TempoUpDown;
void __fastcall DoBrows(TObject *Sender);
void __fastcall DoFilePathChange(TObject *Sender);
void __fastcall DoOK(TObject *Sender);
void __fastcall DoCancel(TObject *Sender);
void __fastcall DoTempoTrackBar(TObject *Sender);
void __fastcall DoTSTrackBar(TObject *Sender);
void __fastcall DoShowTempoChange(TObject *Sender);
void __fastcall DoTempoUpDown(TObject *Sender, TUDBtnType Button);
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
int m_RetrunValue;
int m_iMode; //0 = 导入单旋律文件 1 = 导入旋律片段
int m_TopOk, m_TopCancel, m_TopTips, m_Height;
public: // User declarations
String MediaFilePath;
int TS;
int Tempo;
__fastcall TImportForm(TComponent* Owner, String DefaultFile,
int TS=-1, int Tempo=-1, int iMode=1 );
virtual int __fastcall ShowModal();
};
//---------------------------------------------------------------------------
extern PACKAGE TImportForm *ImportForm;
//---------------------------------------------------------------------------
#endif

Some files were not shown because too many files have changed in this diff Show More