Initial commit
This commit is contained in:
+11
@@ -0,0 +1,11 @@
|
||||
#排除所有的编译目录
|
||||
**/Win32/
|
||||
|
||||
#排除历史和恢复目录
|
||||
__history/
|
||||
__recovery/
|
||||
|
||||
#排除本地设置
|
||||
*.~dsk
|
||||
*.cbpr
|
||||
*.local
|
||||
@@ -0,0 +1,3 @@
|
||||
#include <vcl.h>
|
||||
#include <tchar.h>
|
||||
|
||||
+2343
File diff suppressed because it is too large
Load Diff
+410
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@@ -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"
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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 );
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
@@ -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
@@ -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;
|
||||
*******************************************
|
||||
*******************************************
|
||||
*******************************************/
|
||||
|
||||
@@ -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
@@ -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
@@ -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 );
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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
|
||||
@@ -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,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
|
||||
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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();
|
||||
}
|
||||
*/
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
|
||||
*/
|
||||
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
// }
|
||||
//}
|
||||
////---------------------------------------------------------------------------
|
||||
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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、内部参数
|
||||
设置方向Orientation,最大值Max,最小值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();
|
||||
|
||||
************************************************************/
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+1630
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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" ";
|
||||
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
@@ -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
|
||||
@@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
@@ -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
Reference in New Issue
Block a user