¶Ô±ÈÐÂÎļþ |
| | |
| | |  |
| | | Microsoft Visual Studio Solution File, Format Version 12.00 |
| | | # Visual Studio Version 16 |
| | | VisualStudioVersion = 16.0.33027.164 |
| | | MinimumVisualStudioVersion = 10.0.40219.1 |
| | | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Actuator", "Actuator\Actuator.vcxproj", "{D4F1D04E-459B-4129-895F-8C4498181670}" |
| | | EndProject |
| | | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ActuatorDemo", "ActuatorDemo\ActuatorDemo.vcxproj", "{5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}" |
| | | ProjectSection(ProjectDependencies) = postProject |
| | | {D4F1D04E-459B-4129-895F-8C4498181670} = {D4F1D04E-459B-4129-895F-8C4498181670} |
| | | EndProjectSection |
| | | EndProject |
| | | Global |
| | | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
| | | Debug|x64 = Debug|x64 |
| | | Debug|x86 = Debug|x86 |
| | | Release|x64 = Release|x64 |
| | | Release|x86 = Release|x86 |
| | | EndGlobalSection |
| | | GlobalSection(ProjectConfigurationPlatforms) = postSolution |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Debug|x64.ActiveCfg = Debug|x64 |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Debug|x64.Build.0 = Debug|x64 |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Debug|x86.ActiveCfg = Debug|Win32 |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Debug|x86.Build.0 = Debug|Win32 |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Release|x64.ActiveCfg = Release|x64 |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Release|x64.Build.0 = Release|x64 |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Release|x86.ActiveCfg = Release|Win32 |
| | | {D4F1D04E-459B-4129-895F-8C4498181670}.Release|x86.Build.0 = Release|Win32 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Debug|x64.ActiveCfg = Debug|x64 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Debug|x64.Build.0 = Debug|x64 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Debug|x86.ActiveCfg = Debug|Win32 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Debug|x86.Build.0 = Debug|Win32 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Release|x64.ActiveCfg = Release|x64 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Release|x64.Build.0 = Release|x64 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Release|x86.ActiveCfg = Release|Win32 |
| | | {5D3C7800-F22D-43F8-B9DA-C3F8F68A1B2E}.Release|x86.Build.0 = Release|Win32 |
| | | EndGlobalSection |
| | | GlobalSection(SolutionProperties) = preSolution |
| | | HideSolutionNode = FALSE |
| | | EndGlobalSection |
| | | GlobalSection(ExtensibilityGlobals) = postSolution |
| | | SolutionGuid = {19B3C640-C439-4777-B059-4F000B348506} |
| | | EndGlobalSection |
| | | EndGlobal |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // Actuator.cpp : å®ä¹ DLL ç导åºå½æ°ã |
| | | // |
| | | |
| | | #include "pch.h" |
| | | #include "framework.h" |
| | | #include "Actuator.h" |
| | | |
| | | #include <stdio.h> |
| | | #include <errno.h> |
| | | #include <stdlib.h> |
| | | #include <string.h> |
| | | |
| | | #include "../../libmodbus-3.1.10/src/modbus.h" |
| | | |
| | | int nGoodtype = 1; |
| | | |
| | | ACTUATOR_API void* __stdcall CreatePlcDevice(const char* strIp, int nPort) |
| | | { |
| | | modbus_t* ctx = modbus_new_tcp(strIp, nPort); |
| | | |
| | | modbus_set_slave(ctx, 1); |
| | | //modbus_set_debug(ctx, TRUE); |
| | | modbus_set_error_recovery(ctx, MODBUS_ERROR_RECOVERY_LINK); |
| | | |
| | | return ctx; |
| | | } |
| | | |
| | | //å建水åä»ªå¥æ |
| | | ACTUATOR_API void* __stdcall CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit) |
| | | { |
| | | modbus_t* ctx = modbus_new_rtu(szSerialPort, baud, parity, data_bit, stop_bit); |
| | | modbus_set_slave(ctx, 1); |
| | | //modbus_set_debug(ctx, TRUE); |
| | | modbus_set_error_recovery(ctx, MODBUS_ERROR_RECOVERY_LINK); |
| | | |
| | | return ctx; |
| | | } |
| | | |
| | | ACTUATOR_API int __stdcall Disconnect(void* ctxDev) |
| | | { |
| | | if (NULL == ctxDev) return 1; |
| | | modbus_t* ctx = (modbus_t*)ctxDev; |
| | | |
| | | if (NULL == ctx) return 1; |
| | | |
| | | modbus_close(ctx); |
| | | |
| | | return 1; |
| | | } |
| | | |
| | | //æå¼è®¾å¤çè¿æ¥ |
| | | ACTUATOR_API int __stdcall DestroyDevice(void* ctxDev) |
| | | { |
| | | if (NULL == ctxDev) return 1; |
| | | modbus_t* ctx = (modbus_t*)ctxDev; |
| | | |
| | | if (NULL == ctx) return 1; |
| | | |
| | | modbus_free(ctx); |
| | | |
| | | return 1; |
| | | } |
| | | |
| | | ACTUATOR_API int __stdcall ConnectDevice(void* ctxDev) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | |
| | | modbus_t* ctx = (modbus_t*)ctxDev; |
| | | |
| | | return modbus_connect(ctx); |
| | | } |
| | | |
| | | //ä»å®¢æ·PLCè·åç²®ç§ä¿¡æ¯åç¶æä¿¡æ¯ |
| | | ACTUATOR_API int __stdcall ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | |
| | | uint16_t tab_rp_registers[8] = { 0 }; |
| | | int rc = modbus_read_registers((modbus_t*)ctxDev, 0, 3, tab_rp_registers); |
| | | |
| | | if (rc > 0) |
| | | { |
| | | *nGrainType = tab_rp_registers[0]; //ç²®ç§ä¿¡æ¯ |
| | | switch (tab_rp_registers[0]) |
| | | {//PLC ç²®é£ ID 转 è£
ç½® ç²®é£ ID |
| | | case 1: //PLC稻谷 |
| | | *nGrainType = 2; |
| | | break; |
| | | case 2: //PLCçç±³ |
| | | *nGrainType = 4; |
| | | break; |
| | | case 3: //PLCé»è± |
| | | *nGrainType = 3; |
| | | break; |
| | | case 4: //PLCå°éº¦ |
| | | *nGrainType = 1; |
| | | break; |
| | | } |
| | | |
| | | *nState = tab_rp_registers[2]; //交äºå¯åå¨ |
| | | } |
| | | return rc; |
| | | } |
| | | |
| | | //åç¶æç»å®¢æ·PLC |
| | | ACTUATOR_API int __stdcall ResponseState(void* ctxDev, unsigned short nState) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | unsigned short nStates[1] = { nState }; |
| | | |
| | | int rc = modbus_write_registers((modbus_t*)ctxDev, 2, 1, nStates); |
| | | |
| | | return rc; |
| | | } |
| | | |
| | | //ä¸ä¼ æ°æ®å°å®¢æ·PLC |
| | | ACTUATOR_API int __stdcall UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize) |
| | | { |
| | | if (NULL == ctxDev && nSize < 3) return -1; |
| | | |
| | | switch(nDatas[0]) |
| | | {//设å¤ç²®ç§ä¿¡æ¯ï¼è½¬PLC两ç§ä¿¡æ¯ |
| | | case 1: //å°éº¦ |
| | | nDatas[0] = 4; |
| | | break; |
| | | case 2: //水稻 |
| | | nDatas[0] = 1; |
| | | break; |
| | | case 3: //é»è± |
| | | nDatas[0] = 3; |
| | | break; |
| | | case 4: //çç±³ |
| | | nDatas[0] = 2; |
| | | break; |
| | | } |
| | | |
| | | //2 å 1交æ¢ã |
| | | unsigned short nVal = nDatas[1]; //æ°´å |
| | | nDatas[1] = nDatas[2];//æ°´åå容éäº¤æ¢ |
| | | nDatas[2] = nVal; |
| | | |
| | | int rc = modbus_write_registers((modbus_t*)ctxDev, 1, 1, nDatas); |
| | | rc = modbus_write_registers((modbus_t*)ctxDev, 3, 2, &nDatas[1]); |
| | | |
| | | return rc; |
| | | } |
| | | |
| | | int ExeCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | |
| | | unsigned char cmdType = (unsigned char)nCmdType; |
| | | unsigned char grainType = (unsigned char)nGrainType; |
| | | |
| | | uint16_t val = (cmdType << 8) | grainType; |
| | | //int val = (grainType << 8) | cmdType; |
| | | |
| | | uint32_t nOldSeconds = 0; |
| | | uint32_t nOldUSeonds = 0; |
| | | |
| | | //è·åæ§æ¶é´ |
| | | modbus_get_response_timeout((modbus_t*)ctxDev, &nOldSeconds, &nOldUSeonds); |
| | | |
| | | //è®¾ç½®æ°æ¶é´ |
| | | modbus_set_response_timeout((modbus_t*)ctxDev, nResponseSeconds, nResponseUSeconds); |
| | | |
| | | int rc = modbus_write_register((modbus_t*)ctxDev, 0, val); |
| | | |
| | | //æ¢å¤æ§æ¶é´ |
| | | modbus_set_response_timeout((modbus_t*)ctxDev, nOldSeconds, nOldUSeonds); |
| | | |
| | | return rc; |
| | | } |
| | | |
| | | |
| | | //åæ°´å仪åå½ä»¤ |
| | | ACTUATOR_API int __stdcall SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType, unsigned int nResponseSeconds, unsigned int nResponseUSeconds) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | |
| | | int ret = 0; |
| | | //unsigned char cmdType = (unsigned char)nCmdType; |
| | | //unsigned char grainType = (unsigned char)nGrainType; |
| | | |
| | | if (nGrainType > 0) //ä¿æç²®é£åç§ä¿¡æ¯ |
| | | nGoodtype = nGrainType; |
| | | |
| | | if (nCmdType == WR_VERIFY) |
| | | {//æ ¡åæ£æµæ¶åä¸åç²®é£åç§ä¿¡æ¯ |
| | | ret = ExeCommands(ctxDev, WR_GOODS, nGoodtype); |
| | | if (ret < 0) |
| | | printf("ä¸åç²®ç§å¤±è´¥!\n"); |
| | | else |
| | | ret = ExeCommands(ctxDev, WR_DETECT, nGrainType, nResponseSeconds, nResponseUSeconds); |
| | | |
| | | return ret; |
| | | } |
| | | else |
| | | ret = ExeCommands(ctxDev, nCmdType, nGrainType, nResponseSeconds, nResponseUSeconds); |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | //åæ°´å仪ååæ° |
| | | ACTUATOR_API int __stdcall WriteParams(void* ctxDev, |
| | | unsigned short nStartFreq, |
| | | unsigned short nStopFreq, |
| | | unsigned short nStepFreq, |
| | | unsigned short nDecayCode, |
| | | unsigned short nAscValid ) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | unsigned short nParams[10] = {nStartFreq,nStopFreq,nStepFreq,nDecayCode,nAscValid }; |
| | | |
| | | int rc = modbus_write_registers((modbus_t*)ctxDev, 5, 5, nParams); |
| | | |
| | | return rc; |
| | | } |
| | | |
| | | //仿°´å仪ååæ° ï¼ä»0å·å¯åå¨å¼å§ï¼0å·å¯åå¨ä¸ºçµå¹³ï¼1å·ä¸ºééï¼2å·ä¸ºæ¸©åº¦ï¼3å·ä¸ºæ¹¿åº¦ ï¼ |
| | | ACTUATOR_API int __stdcall ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | |
| | | int rc = modbus_read_registers((modbus_t*)ctxDev, 0, nSize, nDatas); |
| | | |
| | | return rc; |
| | | } |
| | | |
| | | //è¯»æ ¡åæ°æ® ï¼10å·å¯åå¨ï¼ |
| | | ACTUATOR_API int __stdcall ReadVcc(void* ctxDev, unsigned short* nVcc) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | |
| | | //int rc = modbus_read_registers((modbus_t*)ctxDev, 10, 1, nVcc); |
| | | int rc = modbus_read_registers((modbus_t*)ctxDev, 0, 1, nVcc); |
| | | |
| | | return rc; |
| | | } |
| | | |
| | | //åç¬è¯»ééæ°æ® ï¼1å·å¯åå¨ï¼ |
| | | ACTUATOR_API int __stdcall ReadWeight(void* ctxDev, unsigned short* nWeight) |
| | | { |
| | | if (NULL == ctxDev) return -1; |
| | | |
| | | uint32_t nOldSeconds = 0; |
| | | uint32_t nOldUSeonds = 0; |
| | | |
| | | //è·åæ§æ¶é´ |
| | | modbus_get_response_timeout((modbus_t*)ctxDev, &nOldSeconds, &nOldUSeonds); |
| | | |
| | | //è®¾ç½®æ°æ¶é´ |
| | | modbus_set_response_timeout((modbus_t*)ctxDev, 10, 0); |
| | | |
| | | int rc = modbus_read_registers((modbus_t*)ctxDev, 1, 1, nWeight); |
| | | |
| | | //æ¢å¤æ§æ¶é´ |
| | | modbus_set_response_timeout((modbus_t*)ctxDev, nOldSeconds, nOldUSeonds); |
| | | |
| | | return rc; |
| | | } |
| | | |
| | | |
| | | ACTUATOR_API int __stdcall Linearize(float x[], float y[], double Coefficient[], const int n, const int nSampleNumber) |
| | | { |
| | | float A[2] = { 0 }, B[2] = { 0 }, C; |
| | | //float Y[3][nSampleNumber] = { 0 }; |
| | | float* yAlt = new float[3 * nSampleNumber]; |
| | | float (*Y)[3] = (float (*)[3])yAlt; |
| | | float temp; |
| | | //float Co[3][n + 1] = { 0 }; |
| | | float* coAlt = new float[3 * (n + 1)]; |
| | | float (*Co)[3] = (float(*)[3])coAlt; |
| | | |
| | | memset(yAlt, 0, sizeof(float) * (3 * nSampleNumber)); |
| | | memset(coAlt, 0, sizeof(float) * (3 * (n + 1))); |
| | | |
| | | unsigned char i, j; |
| | | // float x[]={0,1,2,3,4,5,6,7,8,9,10,11}; |
| | | // float y[]={2506,2200,1846,1440,1004,548,79,-387,-847,-1288,-1700,-2066}; |
| | | int ret = 1; |
| | | try |
| | | { |
| | | C = 0; |
| | | for (i = 0; i < nSampleNumber; i++) |
| | | { |
| | | Y[0][i] = 1; |
| | | C += y[i]; |
| | | A[0] += x[i]; |
| | | } |
| | | A[0] /= nSampleNumber; |
| | | C /= nSampleNumber; |
| | | Co[0][0] = 1; |
| | | Coefficient[0] = C; |
| | | C = 0; |
| | | for (i = 0; i < nSampleNumber; i++) |
| | | { |
| | | Y[1][i] = x[i] - A[0]; |
| | | C += Y[1][i] * y[i]; |
| | | B[0] += Y[1][i] * Y[1][i]; |
| | | A[1] += x[i] * Y[1][i] * Y[1][i]; |
| | | } |
| | | A[1] /= B[0]; |
| | | C /= B[0]; |
| | | B[0] /= nSampleNumber; |
| | | Co[1][0] = -1 * A[0]; |
| | | Co[1][1] = 1; |
| | | A[0] = A[1]; |
| | | Coefficient[0] += Co[1][0] * C; |
| | | Coefficient[1] = Co[1][1] * C; |
| | | for (i = 2; i <= n; i++) |
| | | { |
| | | temp = 0; |
| | | C = 0; |
| | | A[1] = 0; |
| | | B[1] = 0; |
| | | for (j = 0; j < nSampleNumber; j++) |
| | | { |
| | | Y[2][j] = Y[1][j]; |
| | | Y[2][j] *= (x[j] - A[0]); |
| | | Y[2][j] -= (B[0] * Y[0][j]); |
| | | C += Y[2][j] * y[j]; |
| | | temp += Y[2][j] * Y[2][j]; |
| | | if (i < n) |
| | | { |
| | | A[1] += x[j] * Y[2][j] * Y[2][j]; |
| | | B[1] += Y[1][j] * Y[1][j]; |
| | | } |
| | | Y[0][j] = Y[1][j]; |
| | | Y[1][j] = Y[2][j]; |
| | | } |
| | | C /= temp; |
| | | for (j = i; j >= 1; j--) |
| | | { |
| | | Co[2][j] = Co[1][j - 1]; |
| | | } |
| | | for (j = 0; j < i; j++) |
| | | { |
| | | Co[2][j] -= Co[1][j] * A[0]; |
| | | } |
| | | for (j = 0; j <= i - 2; j++) |
| | | { |
| | | Co[0][j] *= B[0]; |
| | | Co[2][j] -= Co[0][j]; |
| | | } |
| | | for (j = 0; j <= i; j++) |
| | | { |
| | | Co[0][j] = Co[1][j]; |
| | | Co[1][j] = Co[2][j]; |
| | | Co[2][j] = 0; |
| | | } |
| | | for (j = 0; j <= i; j++) |
| | | { |
| | | Coefficient[j] += C * Co[1][j]; |
| | | } |
| | | if (i < n) |
| | | { |
| | | B[0] = temp / B[1]; |
| | | A[0] = A[1] / temp; |
| | | } |
| | | } |
| | | } |
| | | catch(...) |
| | | { |
| | | ret = -1; |
| | | } |
| | | |
| | | if(yAlt) delete yAlt; |
| | | if(coAlt) delete coAlt; |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | ACTUATOR_API double __stdcall CalcValue(unsigned short nDValue, double Coef0, double Coef1, double Coef2, double Coef3, double Coef4) |
| | | { |
| | | return ( |
| | | Coef0 + |
| | | Coef1 * nDValue + |
| | | Coef2 * nDValue * nDValue + |
| | | Coef3 * nDValue * nDValue * nDValue + |
| | | Coef4 * nDValue * nDValue * nDValue * nDValue |
| | | ); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | LIBRARY |
| | | EXPORTS |
| | | CreatePlcDevice |
| | | CreateWrDevice |
| | | ConnectDevice |
| | | ReadState |
| | | ResponseState |
| | | UploadData |
| | | SendCommands |
| | | WriteParams |
| | | ReadDatas |
| | | ReadVcc |
| | | ReadWeight |
| | | Disconnect |
| | | DestroyDevice |
| | | Linearize |
| | | CalcValue |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ä¸å ifdef 忝åå»ºä½¿ä» DLL å¯¼åºæ´ç®åç |
| | | // å®çæ åæ¹æ³ãæ¤ DLL ä¸çæææä»¶é½æ¯ç¨å½ä»¤è¡ä¸å®ä¹ç ACTUATOR_EXPORTS |
| | | // 符å·ç¼è¯çãå¨ä½¿ç¨æ¤ DLL ç |
| | | // ä»»ä½é¡¹ç®ä¸ä¸åºå®ä¹æ¤ç¬¦å·ãè¿æ ·ï¼æºæä»¶ä¸å
嫿¤æä»¶çä»»ä½å
¶ä»é¡¹ç®é½ä¼å° |
| | | // ACTUATOR_API 彿°è§ä¸ºæ¯ä» DLL 导å
¥çï¼èæ¤ DLL åå°ç¨æ¤å®å®ä¹ç |
| | | // 符å·è§ä¸ºæ¯è¢«å¯¼åºçã |
| | | #ifdef ACTUATOR_EXPORTS |
| | | #define ACTUATOR_API __declspec(dllexport) |
| | | #else |
| | | #define ACTUATOR_API __declspec(dllimport) |
| | | #endif |
| | | |
| | | typedef enum |
| | | { |
| | | //ç²®ç§åå¤å½ä»¤ä»£ç ï¼ç²®ç§å·²ä¿®æ¹ï¼ |
| | | READY_GRAIN = 0x01, |
| | | |
| | | //è¿ååå¤å®æ |
| | | READY_FINISH = 0x02, |
| | | |
| | | //æ£æµå¯å¨å½ä»¤ |
| | | DETECT_START = 0x03, |
| | | |
| | | //è¿åæ£æµå®æ¯ |
| | | DETECT_FINISH = 0x04, |
| | | |
| | | //è®¾å¤æ°´å仪å¤ä½å½ä»¤ |
| | | DEVICE_WR_RESET = 0xFE, |
| | | |
| | | //è¿åæ°´å仪æ
é代ç |
| | | DEVICE_WR_FAULT = 0xFF |
| | | }PLCWORD; |
| | | |
| | | typedef enum |
| | | { |
| | | //æ°´å仪å夿令 |
| | | WR_READY = 0x01, |
| | | |
| | | //æ°´åä»ªæ£æµæä»¤ |
| | | WR_DETECT = 0x02, |
| | | |
| | | //æ°´åä»ªæ ¡éªæä»¤ |
| | | WR_VERIFY = 0x03, |
| | | |
| | | //æ°´å仪å¤ä½æä»¤ |
| | | WR_RESET = 0x04, |
| | | |
| | | //ç²®é£åæ´æä»¤ |
| | | WR_GOODS = 0x05 |
| | | }WRWORD; |
| | | |
| | | |
| | | //å建åå§å客æ·PLC设å¤å¥æctx |
| | | //strIp: IPå°å |
| | | //nPort: ç½ç»ç«¯å£ |
| | | ACTUATOR_API void* __stdcall CreatePlcDevice(const char* strIp, int nPort); |
| | | |
| | | //å建水åä»ªå¥æctx |
| | | //szSerialPort: 串å£å |
| | | //baud: æ³¢ç¹ç |
| | | //parity: æ ¡éªç±»å |
| | | //data_bit: æ°æ®ä½ |
| | | //stop_bit: åæ¢ä½ |
| | | ACTUATOR_API void* __stdcall CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit); |
| | | |
| | | |
| | | //è¿æ¥å®¢æ·è®¾å¤ææ°´å仪è£
ç½® |
| | | //ctxDev : 设å¤å¥æ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ConnectDevice(void* ctxDev); |
| | | |
| | | //è·åç¶ææç²®ç§æ´æ¹ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x03: å¼å§æµè¯ |
| | | // 0xFE: å¤ä½å½ä»¤ï¼ä¼å
级æé« |
| | | // å
¶ä»ï¼ 为åå
¥ç¶æ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType); |
| | | |
| | | //ååç¶æ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x02: åå¤å·²å®æ |
| | | // 0x04: æ£æµå®æ |
| | | // 0xFF: æ°´å仪æ
é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ResponseState(void* ctxDev, unsigned short nState); |
| | | |
| | | //åä¼ æ£æµæ°æ® |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // ç²®ç§ç¼ç |
| | | // 嫿°´çï¼ åæ´ = åå¼*100 |
| | | // å®¹éæ¯ï¼ åæ´ = åå¼*100 |
| | | //nSize : æ°æ®ä¸ªæ° |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3); |
| | | |
| | | |
| | | |
| | | |
| | | //ä¸åå½ä»¤ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nCmdType ï¼å½ä»¤åï¼å¦ä¸æè¿° |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x02: å¼å§æµè¯ |
| | | // 0x03: æ ¡åå½ä»¤ï¼å³ä¸ºæ å®é¡µé¢æ£æµæé®å½ä»¤ï¼ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | // å½nCmdType 为0x02ï¼0x03æ¶ï¼ä¸ç¨èèç²®ç§ç¼å· |
| | | // nResponseSeconds: ååºæ¶é´ï¼ä»¥ç§è®¡ç® |
| | | // nResponseUSeconds: ååºæ¶é´ï¼ä»¥å¾®å¦è®¡ç®ï¼è¥å°äºç§ï¼å
¨é¨ç¨å¾®å¦è¡¨ç¤ºã |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000); |
| | | |
| | | |
| | | //ä¸ååæ° |
| | | //ctxDev : 设å¤å¥æ |
| | | //nStartFreq ï¼èµ·å§é¢ç |
| | | //nStopFreq ï¼ ç»æ¢é¢ç |
| | | //nStepFreq ï¼ æ¥é¿ |
| | | //nDecayCode ï¼è¡°åç |
| | | //nAscValid ï¼ ASC å
é¨/å¤é¨ææï¼ åå¼ä¸º 0ï¼å
鍿æï¼ 1ï¼å¤é¨ææ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall WriteParams(void* ctxDev, unsigned short nStartFreq, unsigned short nStopFreq, |
| | | unsigned short nStepFreq, unsigned short nDecayCode, unsigned short nAscValid); |
| | | |
| | | |
| | | //è¯»åæ£æµä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // çµåå¼ |
| | | // éé |
| | | // 温度 |
| | | // 湿度 |
| | | // nSize : 读å4个å¯åå¨ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4); |
| | | |
| | | |
| | | //è¯»åæ«é¢å¼,å
¶å®ä¸ºçµå¹³å¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nVcc ï¼çµå¹³å¼æé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadVcc(void* ctxDev, unsigned short* nVcc); |
| | | |
| | | //读ééå¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nWeight ï¼ééå¼ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadWeight(void* ctxDev, unsigned short* nWeight); |
| | | |
| | | //æå¼æ°´å仪æå®¢æ·è®¾å¤çè¿æ¥ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall Disconnect(void* ctxDev); |
| | | |
| | | //éæ¯èµæº |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall DestroyDevice(void* ctxDev); |
| | | |
| | | //ç®æ³å½æ° |
| | | //x 为æµéå¼ |
| | | //y 为å®é
å¼ |
| | | //n 为æåæ¬¡æ° |
| | | //nSampleNumber æ ·æ¬æ°é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5); |
| | | |
| | | |
| | | //计ç®å½æ° |
| | | ACTUATOR_API double __stdcall CalcValue(unsigned short nDValue, double Coef0, double Coef1, double Coef2, double Coef3, double Coef4); |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // Microsoft Visual C++ generated resource script. |
| | | // |
| | | #include "resource.h" |
| | | |
| | | #define APSTUDIO_READONLY_SYMBOLS |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | // |
| | | // Generated from the TEXTINCLUDE 2 resource. |
| | | // |
| | | #include "winres.h" |
| | | |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | #undef APSTUDIO_READONLY_SYMBOLS |
| | | |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | // 䏿(ç®ä½ï¼ä¸å½) resources |
| | | |
| | | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) |
| | | LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED |
| | | #pragma code_page(936) |
| | | |
| | | #ifdef APSTUDIO_INVOKED |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | // |
| | | // TEXTINCLUDE |
| | | // |
| | | |
| | | 1 TEXTINCLUDE |
| | | BEGIN |
| | | "resource.h\0" |
| | | END |
| | | |
| | | 2 TEXTINCLUDE |
| | | BEGIN |
| | | "#include ""winres.h""\r\n" |
| | | "\0" |
| | | END |
| | | |
| | | 3 TEXTINCLUDE |
| | | BEGIN |
| | | "\r\n" |
| | | "\0" |
| | | END |
| | | |
| | | #endif // APSTUDIO_INVOKED |
| | | |
| | | |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | // |
| | | // Version |
| | | // |
| | | |
| | | VS_VERSION_INFO VERSIONINFO |
| | | FILEVERSION 2,0,3,0 |
| | | PRODUCTVERSION 2,0,3,0 |
| | | FILEFLAGSMASK 0x3fL |
| | | #ifdef _DEBUG |
| | | FILEFLAGS 0x1L |
| | | #else |
| | | FILEFLAGS 0x0L |
| | | #endif |
| | | FILEOS 0x40004L |
| | | FILETYPE 0x2L |
| | | FILESUBTYPE 0x0L |
| | | BEGIN |
| | | BLOCK "StringFileInfo" |
| | | BEGIN |
| | | BLOCK "080404b0" |
| | | BEGIN |
| | | VALUE "CompanyName", "䏿µ·å
°å®ä¼ æç§æè¡ä»½æéå
¬å¸" |
| | | VALUE "FileDescription", "Shanghai Lanbao Sensing Technology" |
| | | VALUE "FileVersion", "2.0.3.0" |
| | | VALUE "InternalName", "Actuator.dll" |
| | | VALUE "LegalCopyright", "Copyright (C) 2023 Lanbao Sensing Technology" |
| | | VALUE "OriginalFilename", "Actuator.dll" |
| | | VALUE "ProductName", "Actuator Library" |
| | | VALUE "ProductVersion", "2.0.3.0" |
| | | END |
| | | END |
| | | BLOCK "VarFileInfo" |
| | | BEGIN |
| | | VALUE "Translation", 0x804, 1200 |
| | | END |
| | | END |
| | | |
| | | #endif // 䏿(ç®ä½ï¼ä¸å½) resources |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | |
| | | |
| | | |
| | | #ifndef APSTUDIO_INVOKED |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | // |
| | | // Generated from the TEXTINCLUDE 3 resource. |
| | | // |
| | | |
| | | |
| | | ///////////////////////////////////////////////////////////////////////////// |
| | | #endif // not APSTUDIO_INVOKED |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| | | <ItemGroup Label="ProjectConfigurations"> |
| | | <ProjectConfiguration Include="Debug|Win32"> |
| | | <Configuration>Debug</Configuration> |
| | | <Platform>Win32</Platform> |
| | | </ProjectConfiguration> |
| | | <ProjectConfiguration Include="Release|Win32"> |
| | | <Configuration>Release</Configuration> |
| | | <Platform>Win32</Platform> |
| | | </ProjectConfiguration> |
| | | <ProjectConfiguration Include="Debug|x64"> |
| | | <Configuration>Debug</Configuration> |
| | | <Platform>x64</Platform> |
| | | </ProjectConfiguration> |
| | | <ProjectConfiguration Include="Release|x64"> |
| | | <Configuration>Release</Configuration> |
| | | <Platform>x64</Platform> |
| | | </ProjectConfiguration> |
| | | </ItemGroup> |
| | | <PropertyGroup Label="Globals"> |
| | | <VCProjectVersion>16.0</VCProjectVersion> |
| | | <Keyword>Win32Proj</Keyword> |
| | | <ProjectGuid>{d4f1d04e-459b-4129-895f-8c4498181670}</ProjectGuid> |
| | | <RootNamespace>Actuator</RootNamespace> |
| | | <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
| | | </PropertyGroup> |
| | | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
| | | <ConfigurationType>DynamicLibrary</ConfigurationType> |
| | | <UseDebugLibraries>true</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
| | | <ConfigurationType>DynamicLibrary</ConfigurationType> |
| | | <UseDebugLibraries>false</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <WholeProgramOptimization>true</WholeProgramOptimization> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
| | | <ConfigurationType>DynamicLibrary</ConfigurationType> |
| | | <UseDebugLibraries>true</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
| | | <ConfigurationType>DynamicLibrary</ConfigurationType> |
| | | <UseDebugLibraries>false</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <WholeProgramOptimization>true</WholeProgramOptimization> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
| | | <ImportGroup Label="ExtensionSettings"> |
| | | </ImportGroup> |
| | | <ImportGroup Label="Shared"> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <PropertyGroup Label="UserMacros" /> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
| | | <LinkIncremental>true</LinkIncremental> |
| | | <TargetName>Actuator</TargetName> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
| | | <LinkIncremental>false</LinkIncremental> |
| | | <TargetName>Actuator</TargetName> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
| | | <LinkIncremental>true</LinkIncremental> |
| | | <TargetName>Actuator</TargetName> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
| | | <LinkIncremental>false</LinkIncremental> |
| | | <TargetName>Actuator</TargetName> |
| | | </PropertyGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>WIN32;_DEBUG;ACTUATOR_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | <PrecompiledHeader>Use</PrecompiledHeader> |
| | | <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Windows</SubSystem> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | <EnableUAC>false</EnableUAC> |
| | | <AdditionalLibraryDirectories>../../libmodbus-3.1.10/src/win32</AdditionalLibraryDirectories> |
| | | <AdditionalDependencies>modbus.lib;ws2_32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> |
| | | <ModuleDefinitionFile>Actuator.def</ModuleDefinitionFile> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <FunctionLevelLinking>true</FunctionLevelLinking> |
| | | <IntrinsicFunctions>true</IntrinsicFunctions> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>WIN32;NDEBUG;ACTUATOR_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | <PrecompiledHeader>Use</PrecompiledHeader> |
| | | <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Windows</SubSystem> |
| | | <EnableCOMDATFolding>true</EnableCOMDATFolding> |
| | | <OptimizeReferences>true</OptimizeReferences> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | <EnableUAC>false</EnableUAC> |
| | | <AdditionalLibraryDirectories>../../libmodbus-3.1.10/src/win32</AdditionalLibraryDirectories> |
| | | <AdditionalDependencies>modbus.lib;ws2_32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> |
| | | <ModuleDefinitionFile>Actuator.def</ModuleDefinitionFile> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>_DEBUG;ACTUATOR_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | <PrecompiledHeader>Use</PrecompiledHeader> |
| | | <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Windows</SubSystem> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | <EnableUAC>false</EnableUAC> |
| | | <ModuleDefinitionFile>Source.def</ModuleDefinitionFile> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <FunctionLevelLinking>true</FunctionLevelLinking> |
| | | <IntrinsicFunctions>true</IntrinsicFunctions> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>NDEBUG;ACTUATOR_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | <PrecompiledHeader>Use</PrecompiledHeader> |
| | | <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Windows</SubSystem> |
| | | <EnableCOMDATFolding>true</EnableCOMDATFolding> |
| | | <OptimizeReferences>true</OptimizeReferences> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | <EnableUAC>false</EnableUAC> |
| | | <ModuleDefinitionFile>Source.def</ModuleDefinitionFile> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemGroup> |
| | | <None Include="cpp.hint" /> |
| | | <None Include="Actuator.def" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClInclude Include="Actuator.h" /> |
| | | <ClInclude Include="framework.h" /> |
| | | <ClInclude Include="pch.h" /> |
| | | <ClInclude Include="resource.h" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClCompile Include="Actuator.cpp" /> |
| | | <ClCompile Include="dllmain.cpp" /> |
| | | <ClCompile Include="pch.cpp"> |
| | | <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> |
| | | <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> |
| | | <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> |
| | | <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> |
| | | </ClCompile> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ResourceCompile Include="Actuator.rc" /> |
| | | </ItemGroup> |
| | | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
| | | <ImportGroup Label="ExtensionTargets"> |
| | | </ImportGroup> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| | | <ItemGroup> |
| | | <Filter Include="æºæä»¶"> |
| | | <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> |
| | | <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> |
| | | </Filter> |
| | | <Filter Include="头æä»¶"> |
| | | <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> |
| | | <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> |
| | | </Filter> |
| | | <Filter Include="èµæºæä»¶"> |
| | | <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> |
| | | <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> |
| | | </Filter> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <None Include="cpp.hint" /> |
| | | <None Include="Actuator.def"> |
| | | <Filter>æºæä»¶</Filter> |
| | | </None> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClInclude Include="framework.h"> |
| | | <Filter>头æä»¶</Filter> |
| | | </ClInclude> |
| | | <ClInclude Include="Actuator.h"> |
| | | <Filter>头æä»¶</Filter> |
| | | </ClInclude> |
| | | <ClInclude Include="pch.h"> |
| | | <Filter>头æä»¶</Filter> |
| | | </ClInclude> |
| | | <ClInclude Include="resource.h"> |
| | | <Filter>头æä»¶</Filter> |
| | | </ClInclude> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClCompile Include="Actuator.cpp"> |
| | | <Filter>æºæä»¶</Filter> |
| | | </ClCompile> |
| | | <ClCompile Include="dllmain.cpp"> |
| | | <Filter>æºæä»¶</Filter> |
| | | </ClCompile> |
| | | <ClCompile Include="pch.cpp"> |
| | | <Filter>æºæä»¶</Filter> |
| | | </ClCompile> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ResourceCompile Include="Actuator.rc"> |
| | | <Filter>èµæºæä»¶</Filter> |
| | | </ResourceCompile> |
| | | </ItemGroup> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
| | | <LocalDebuggerCommand>ActuatorDemo.exe</LocalDebuggerCommand> |
| | | <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> |
| | | <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory> |
| | | </PropertyGroup> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | #define ACTUATOR_API __declspec(dllexport) |
| | | #define ACTUATOR_API __declspec(dllimport) |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // dllmain.cpp : å®ä¹ DLL åºç¨ç¨åºçå
¥å£ç¹ã |
| | | #include "pch.h" |
| | | |
| | | BOOL APIENTRY DllMain( HMODULE hModule, |
| | | DWORD ul_reason_for_call, |
| | | LPVOID lpReserved |
| | | ) |
| | | { |
| | | switch (ul_reason_for_call) |
| | | { |
| | | case DLL_PROCESS_ATTACH: |
| | | case DLL_THREAD_ATTACH: |
| | | case DLL_THREAD_DETACH: |
| | | case DLL_PROCESS_DETACH: |
| | | break; |
| | | } |
| | | return TRUE; |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | |
| | | #define WIN32_LEAN_AND_MEAN // ä» Windows 头æä»¶ä¸æé¤æå°ä½¿ç¨çå
容 |
| | | // Windows 头æä»¶ |
| | | #include <windows.h> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // pch.cpp: ä¸é¢ç¼è¯æ 头对åºçæºæä»¶ |
| | | |
| | | #include "pch.h" |
| | | |
| | | // å½ä½¿ç¨é¢ç¼è¯ç头æ¶ï¼éè¦ä½¿ç¨æ¤æºæä»¶ï¼ç¼è¯æè½æåã |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // pch.h: è¿æ¯é¢ç¼è¯æ 头æä»¶ã |
| | | // 䏿¹ååºçæä»¶ä»
ç¼è¯ä¸æ¬¡ï¼æé«äºå°æ¥çæççææ§è½ã |
| | | // è¿è¿å°å½±å IntelliSense æ§è½ï¼å
æ¬ä»£ç 宿å许å¤ä»£ç æµè§åè½ã |
| | | // 使¯ï¼å¦ææ¤å¤ååºçæä»¶ä¸çä»»ä½ä¸ä¸ªå¨çæä¹é´ææ´æ°ï¼å®ä»¬å
¨é¨é½å°è¢«éæ°ç¼è¯ã |
| | | // 请å¿å¨æ¤å¤æ·»å è¦é¢ç¹æ´æ°çæä»¶ï¼è¿å°ä½¿å¾æ§è½ä¼å¿æ æã |
| | | |
| | | #ifndef PCH_H |
| | | #define PCH_H |
| | | |
| | | // æ·»å è¦å¨æ¤å¤é¢ç¼è¯çæ 头 |
| | | #include "framework.h" |
| | | |
| | | #endif //PCH_H |
¶Ô±ÈÐÂÎļþ |
| | |
| | | //{{NO_DEPENDENCIES}} |
| | | // Microsoft Visual C++ generated include file. |
| | | // Used by Actuator.rc |
| | | |
| | | // æ°å¯¹è±¡çä¸ä¸ç»é»è®¤å¼ |
| | | // |
| | | #ifdef APSTUDIO_INVOKED |
| | | #ifndef APSTUDIO_READONLY_SYMBOLS |
| | | #define _APS_NEXT_RESOURCE_VALUE 101 |
| | | #define _APS_NEXT_COMMAND_VALUE 40001 |
| | | #define _APS_NEXT_CONTROL_VALUE 1001 |
| | | #define _APS_NEXT_SYMED_VALUE 101 |
| | | #endif |
| | | #endif |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ActuatorDemo.cpp : æ¤æä»¶å
å« "main" 彿°ãç¨åºæ§è¡å°å¨æ¤å¤å¼å§å¹¶ç»æã |
| | | // |
| | | |
| | | #include <iostream> |
| | | #include "../Actuator//Actuator.h" |
| | | |
| | | //ç³»æ° |
| | | const double coef[5] = { -6.204673384923,0.025161776479,-0.000014765722,0.000000003440,0 }; |
| | | |
| | | void ExeTest() |
| | | { |
| | | void* hPlcDev = CreatePlcDevice("192.168.0.10", 502); |
| | | void* hWrDev = CreateWrDevice("COM1", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hPlcDev) ret = ConnectDevice(hPlcDev); |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | char ch = 0; |
| | | |
| | | while ('c' != (ch = getchar())) //æ c éåºèªå¨æ£æµ |
| | | { |
| | | //读PLCç¶æå |
| | | ret = ReadState(hPlcDev, &nState, &nGrainType); |
| | | if (ret <= 0) |
| | | { |
| | | printf("读åPLCç¶æåå¼å¸¸ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | //代表读åå°æ°æ® |
| | | if (nGrainType > 0 && nState > 0) |
| | | { |
| | | //ä¸é¢æ¯ä¸»æµç¨çå¤ç |
| | | switch (nState) |
| | | { |
| | | case READY_GRAIN: //ç²®é£åç§ä¿®æ¹äº |
| | | { |
| | | //åæ°´å仪åç²®ç§æ´æ¹ï¼å¯å¨åå¤ |
| | | ret = SendCommands(hWrDev, WR_READY, nGrainType, 20, 0); |
| | | if (ret <= 0) |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹å¤±è´¥ï¼æ°´å仪æ
éï¼\n"); |
| | | ret = ResponseState(hPlcDev, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹æåï¼åå¤å°±ç»ª\n"); |
| | | ret = ResponseState(hPlcDev, READY_FINISH); |
| | | } |
| | | |
| | | } |
| | | break; |
| | | case DETECT_START: //å¼å§æµè¯ |
| | | { |
| | | ret = SendCommands(hWrDev, WR_DETECT, 0, 30, 0); |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | ret = ResponseState(hPlcDev, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | unsigned short nSendData[3] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | printf("æ§è¡æ£æµæåï¼\n"); |
| | | ret = ResponseState(hPlcDev, DETECT_FINISH); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | |
| | | nSendData[0] = 0x01; // ç²®é£åç§ |
| | | nSendData[1] = 100 * v; // 21.30% //嫿°´ç |
| | | nSendData[2] = 100 * nDatas[1] / 0.52; // 51.50; //容鿝 |
| | | |
| | | printf("Get Vals: wr:%f, weight:%f, temperatur:%f, humidity:%f", |
| | | v, |
| | | nDatas[1], |
| | | nDatas[2] / 100.f, |
| | | nDatas[3] / 100.f); |
| | | |
| | | ret = UploadData(hPlcDev, nSendData); |
| | | } |
| | | } |
| | | break; |
| | | case DEVICE_WR_RESET: //å¤ä½å½ä»¤ |
| | | { |
| | | |
| | | ret = SendCommands(hWrDev, WR_RESET, 0, 20, 0); |
| | | if (ret <= 0) |
| | | { |
| | | printf("å¤ä½å¤±è´¥ï¼\n"); |
| | | ret = ResponseState(hPlcDev, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | printf("å¤ä½æå!\n"); |
| | | } |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (hPlcDev) Disconnect(hPlcDev); |
| | | if (hPlcDev) DestroyDevice(hPlcDev); |
| | | if (hWrDev) Disconnect(hWrDev); |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | |
| | | //æå¨ååæ° |
| | | void ExeWriteParam() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = WriteParams(hWrDev, 10500, 12000, 50, 1, 1); |
| | | if (ret <= 0) |
| | | printf("ä¸ååæ°å¤±è´¥ï¼\n"); |
| | | |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | void ExeManReady() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, WR_READY, 0x01, 20, 0); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | printf("åå¤å¤±è´¥ï¼\n"); |
| | | else |
| | | { |
| | | printf("åå¤å°±ç»ªï¼OKï¼\n"); |
| | | } |
| | | |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | //æå¨æ£æµ |
| | | void ExeManTest() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, WR_DETECT, 0, 30, 0); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | //第ä¸ä¸ªå¼ä¸ºçµå¹³å¼ï¼ç¨æ¥è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | v = CalcValue(nDatas[0], coef[0], coef[1], coef[2], coef[3], coef[4]); |
| | | |
| | | printf(" After Detection,"); |
| | | printf(" %d %d %d %d", nDatas[0], nDatas[1], nDatas[2], nDatas[3]); |
| | | printf(" Water Rate:%lf", v); |
| | | printf(" \n"); |
| | | printf("æ£æµæ§è¡OK!\n"); |
| | | |
| | | } |
| | | |
| | | |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | void DirectDetect(char nType) |
| | | { |
| | | |
| | | void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = nType-48; |
| | | int ret = 0; |
| | | |
| | | if (nGrainType < 1 && nGrainType>4) |
| | | { |
| | | printf("ç²®é£ä¿¡æ¯éæ³!\r\n"); |
| | | return; |
| | | } |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | |
| | | ret = SendCommands(hWrDev, WR_GOODS, nGrainType); //æ§è¡å¯å¨å½ä»¤ |
| | | if (ret <= 0) |
| | | { |
| | | printf("ä¸åç²®ç§ä¿¡æ¯å¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | ret = SendCommands(hWrDev, WR_DETECT, 0, 30, 0); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | //第ä¸ä¸ªå¼ä¸ºçµå¹³å¼ï¼ç¨æ¥è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | v = CalcValue(nDatas[0], coef[0], coef[1], coef[2], coef[3], coef[4]); |
| | | |
| | | printf(" After Detection,"); |
| | | printf(" Orig Val: %d %d %d %d", nDatas[0], nDatas[1], nDatas[2], nDatas[3]); |
| | | printf(" -->Water Rate:%lf", v); |
| | | printf(" \n"); |
| | | printf("æ£æµæ§è¡OK!\n"); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | |
| | | } |
| | | // |
| | | void ExeVerifyTest() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, WR_VERIFY, 0, 30, 0); //æ§è¡æ ¡åå½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ ¡åæ§è¡å¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nVcc = 0; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadVcc(hWrDev, &nVcc); |
| | | |
| | | printf(" Detected Val: %d", nVcc); |
| | | printf(" \n"); |
| | | printf("æ ¡åæ§è¡OK!\n"); |
| | | } |
| | | |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | void ExeZero() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, WR_RESET, 0, 15, 0); //ä¸åå¤ä½ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("å¤ä½å¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | printf("å¤ä½æåï¼\n"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | void ReadWeight() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM1", 115200, 'N', 8, 1); |
| | | |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | |
| | | unsigned short nWeight = 0; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadWeight(hWrDev, &nWeight); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | printf(" Weight Val: %d", nWeight); |
| | | printf(" \n"); |
| | | printf("ç§°éæ§è¡OK!\n"); |
| | | } |
| | | else |
| | | { |
| | | printf("ç§°éæ§è¡å¤±è´¥!\n"); |
| | | } |
| | | |
| | | |
| | | if (hWrDev) DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | void TestLinearize() |
| | | { |
| | | int nSampeCount = 12; |
| | | |
| | | float x[]={0,1,2,3,4,5,6,7,8,9,10,11}; //realval |
| | | float y[]={2506,2200,1846,1440,1004,548,79,-387,-847,-1288,-1700,-2066}; //input |
| | | double coef[5] = { 0 }; |
| | | |
| | | int ret = Linearize(x, y, coef, 2, nSampeCount); |
| | | if (ret > 0) |
| | | { |
| | | printf("Coef: %f, %f, %f, %f, %f\n", coef[0], coef[1], coef[2], coef[3], coef[4]); |
| | | |
| | | float v = 3.0f; |
| | | printf("Input %lf, Cal Val:%lf\n", v, |
| | | (coef[0] + |
| | | coef[1] * v + |
| | | coef[2] * v * v + |
| | | coef[3] * v * v * v + |
| | | coef[4] * v * v * v * v) |
| | | ); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | int main() |
| | | { |
| | | std::cout << "Hello World!\n"; |
| | | |
| | | //double val = 11531998.626; |
| | | //unsigned char sval[32] = { 0 }; |
| | | |
| | | //memcpy(sval, &val, 8); |
| | | |
| | | //unsigned char sv2[] = { 0x27, 0x31, 0x08, 0xd4, 0xdb, 0xfe, 0x65, 0x41 }; |
| | | //val = *(double*)sv2; |
| | | // |
| | | //unsigned short sv3[] = { 0x3127, 0xd408, 0xfedb, 0x4165 }; |
| | | //val = *(double*)sv3; |
| | | |
| | | //unsigned short sv4[] = { 0x2731, 0x08d4, 0xdbfe, 0x6541 }; |
| | | //val = *(double*)sv4; |
| | | |
| | | //unsigned short sv5[] = { 0x4165, 0xfedb, 0xd408, 0x3127 }; |
| | | //val = *(double*)sv5; |
| | | |
| | | char ch = 0; |
| | | while ('x' != ( ch = getchar() )) //æ x éåºç¨åº |
| | | { |
| | | switch (ch) |
| | | { |
| | | case 'a': //èªå¨æµè¯ |
| | | ExeTest(); |
| | | break; |
| | | case 'p': //åæ°´ä»½ä»ªä¸ååæ° |
| | | ExeWriteParam(); |
| | | break; |
| | | case 'r': //æå¨æ£æµ,éè¦åå¤ |
| | | ExeManReady(); |
| | | break; |
| | | case 'd': //æå¨æ£æµï¼ä¸è®¸åå¤ |
| | | ExeManTest(); |
| | | break; |
| | | case 'v': //æ ¡å |
| | | ExeVerifyTest(); |
| | | break; |
| | | case 'z': //å¤ä½æ¸
é¶ |
| | | ExeZero(); |
| | | break; |
| | | case 'l': //æåæµè¯ |
| | | TestLinearize(); |
| | | break; |
| | | case '1': |
| | | case '2': |
| | | case '3': |
| | | case '4': |
| | | DirectDetect(ch); |
| | | break; |
| | | case 'w': |
| | | ReadWeight(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | // è¿è¡ç¨åº: Ctrl + F5 æè°è¯ >âå¼å§æ§è¡(ä¸è°è¯)âèå |
| | | // è°è¯ç¨åº: F5 æè°è¯ >âå¼å§è°è¯âèå |
| | | |
| | | // å
¥é¨ä½¿ç¨æå·§: |
| | | // 1. 使ç¨è§£å³æ¹æ¡èµæºç®¡çå¨çªå£æ·»å /管çæä»¶ |
| | | // 2. 使ç¨å¢éèµæºç®¡çå¨çªå£è¿æ¥å°æºä»£ç 管ç |
| | | // 3. 使ç¨è¾åºçªå£æ¥ççæè¾åºåå
¶ä»æ¶æ¯ |
| | | // 4. 使ç¨é误å表çªå£æ¥çé误 |
| | | // 5. 转å°â项ç®â>âæ·»å æ°é¡¹â以å建æ°çä»£ç æä»¶ï¼æè½¬å°â项ç®â>âæ·»å ç°æé¡¹â以å°ç°æä»£ç æä»¶æ·»å å°é¡¹ç® |
| | | // 6. å°æ¥ï¼è¥è¦å次æå¼æ¤é¡¹ç®ï¼è¯·è½¬å°âæä»¶â>âæå¼â>â项ç®âå¹¶éæ© .sln æä»¶ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| | | <ItemGroup Label="ProjectConfigurations"> |
| | | <ProjectConfiguration Include="Debug|Win32"> |
| | | <Configuration>Debug</Configuration> |
| | | <Platform>Win32</Platform> |
| | | </ProjectConfiguration> |
| | | <ProjectConfiguration Include="Release|Win32"> |
| | | <Configuration>Release</Configuration> |
| | | <Platform>Win32</Platform> |
| | | </ProjectConfiguration> |
| | | <ProjectConfiguration Include="Debug|x64"> |
| | | <Configuration>Debug</Configuration> |
| | | <Platform>x64</Platform> |
| | | </ProjectConfiguration> |
| | | <ProjectConfiguration Include="Release|x64"> |
| | | <Configuration>Release</Configuration> |
| | | <Platform>x64</Platform> |
| | | </ProjectConfiguration> |
| | | </ItemGroup> |
| | | <PropertyGroup Label="Globals"> |
| | | <VCProjectVersion>16.0</VCProjectVersion> |
| | | <Keyword>Win32Proj</Keyword> |
| | | <ProjectGuid>{5d3c7800-f22d-43f8-b9da-c3f8f68a1b2e}</ProjectGuid> |
| | | <RootNamespace>ActuatorDemo</RootNamespace> |
| | | <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
| | | </PropertyGroup> |
| | | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
| | | <ConfigurationType>Application</ConfigurationType> |
| | | <UseDebugLibraries>true</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
| | | <ConfigurationType>Application</ConfigurationType> |
| | | <UseDebugLibraries>false</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <WholeProgramOptimization>true</WholeProgramOptimization> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
| | | <ConfigurationType>Application</ConfigurationType> |
| | | <UseDebugLibraries>true</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
| | | <ConfigurationType>Application</ConfigurationType> |
| | | <UseDebugLibraries>false</UseDebugLibraries> |
| | | <PlatformToolset>v142</PlatformToolset> |
| | | <WholeProgramOptimization>true</WholeProgramOptimization> |
| | | <CharacterSet>Unicode</CharacterSet> |
| | | </PropertyGroup> |
| | | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
| | | <ImportGroup Label="ExtensionSettings"> |
| | | </ImportGroup> |
| | | <ImportGroup Label="Shared"> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
| | | <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| | | </ImportGroup> |
| | | <PropertyGroup Label="UserMacros" /> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
| | | <LinkIncremental>true</LinkIncremental> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
| | | <LinkIncremental>false</LinkIncremental> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
| | | <LinkIncremental>true</LinkIncremental> |
| | | </PropertyGroup> |
| | | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
| | | <LinkIncremental>false</LinkIncremental> |
| | | </PropertyGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Console</SubSystem> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | <AdditionalDependencies>Actuator.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> |
| | | <AdditionalLibraryDirectories>..\..\Actuator\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <FunctionLevelLinking>true</FunctionLevelLinking> |
| | | <IntrinsicFunctions>true</IntrinsicFunctions> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Console</SubSystem> |
| | | <EnableCOMDATFolding>true</EnableCOMDATFolding> |
| | | <OptimizeReferences>true</OptimizeReferences> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | <AdditionalDependencies>Actuator.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> |
| | | <AdditionalLibraryDirectories>..\..\Actuator\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Console</SubSystem> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
| | | <ClCompile> |
| | | <WarningLevel>Level3</WarningLevel> |
| | | <FunctionLevelLinking>true</FunctionLevelLinking> |
| | | <IntrinsicFunctions>true</IntrinsicFunctions> |
| | | <SDLCheck>true</SDLCheck> |
| | | <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <ConformanceMode>true</ConformanceMode> |
| | | </ClCompile> |
| | | <Link> |
| | | <SubSystem>Console</SubSystem> |
| | | <EnableCOMDATFolding>true</EnableCOMDATFolding> |
| | | <OptimizeReferences>true</OptimizeReferences> |
| | | <GenerateDebugInformation>true</GenerateDebugInformation> |
| | | </Link> |
| | | </ItemDefinitionGroup> |
| | | <ItemGroup> |
| | | <ClCompile Include="ActuatorDemo.cpp" /> |
| | | </ItemGroup> |
| | | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
| | | <ImportGroup Label="ExtensionTargets"> |
| | | </ImportGroup> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| | | <ItemGroup> |
| | | <Filter Include="æºæä»¶"> |
| | | <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> |
| | | <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> |
| | | </Filter> |
| | | <Filter Include="头æä»¶"> |
| | | <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> |
| | | <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> |
| | | </Filter> |
| | | <Filter Include="èµæºæä»¶"> |
| | | <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> |
| | | <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> |
| | | </Filter> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClCompile Include="ActuatorDemo.cpp"> |
| | | <Filter>æºæä»¶</Filter> |
| | | </ClCompile> |
| | | </ItemGroup> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| | | <PropertyGroup /> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\vc142.pdb |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\vc142.idb |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.obj |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.ilk |
| | | f:\workspace_lssf\actuator\debug\actuatordemo.exe |
| | | f:\workspace_lssf\actuator\debug\actuatordemo.pdb |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.tlog\cl.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.tlog\cl.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.tlog\cl.write.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.tlog\link.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.tlog\link.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\debug\actuatordemo.tlog\link.write.1.tlog |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project> |
| | | <ProjectOutputs> |
| | | <ProjectOutput> |
| | | <FullPath>F:\workspace_LSSF\Actuator\Debug\ActuatorDemo.exe</FullPath> |
| | | </ProjectOutput> |
| | | </ProjectOutputs> |
| | | <ContentFiles /> |
| | | <SatelliteDlls /> |
| | | <NonRecipeFileRefs /> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | |  ActuatorDemo.cpp |
| | | F:\workspace_LSSF\Actuator\ActuatorDemo\ActuatorDemo.cpp(81,40): warning C4244: â=â: ä»âdoubleâ转æ¢å°âunsigned shortâï¼å¯è½ä¸¢å¤±æ°æ® |
| | | F:\workspace_LSSF\Actuator\ActuatorDemo\ActuatorDemo.cpp(82,52): warning C4244: â=â: ä»âdoubleâ转æ¢å°âunsigned shortâï¼å¯è½ä¸¢å¤±æ°æ® |
| | | F:\workspace_LSSF\Actuator\ActuatorDemo\ActuatorDemo.cpp(84,28): warning C4477: âprintfâ: æ ¼å¼å符串â%fâéè¦ç±»åâdoubleâçåæ°ï¼ä½å¯ååæ° 2 æ¥æäºç±»åâintâ |
| | | ActuatorDemo.vcxproj -> F:\workspace_LSSF\Actuator\Debug\ActuatorDemo.exe |
¶Ô±ÈÐÂÎļþ |
| | |
| | | PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0: |
| | | Debug|Win32|F:\workspace_LSSF\Actuator\| |
¶Ô±ÈÐÂÎļþ |
| | |
| | | f:\workspace_lssf\actuator\actuatordemo\release\vc142.pdb |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.obj |
| | | f:\workspace_lssf\actuator\release\actuatordemo.exe |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.ipdb |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.iobj |
| | | f:\workspace_lssf\actuator\release\actuatordemo.pdb |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.tlog\cl.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.tlog\cl.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.tlog\cl.write.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.tlog\link.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.tlog\link.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuatordemo\release\actuatordemo.tlog\link.write.1.tlog |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project> |
| | | <ProjectOutputs> |
| | | <ProjectOutput> |
| | | <FullPath>F:\workspace_LSSF\Actuator\Release\ActuatorDemo.exe</FullPath> |
| | | </ProjectOutput> |
| | | </ProjectOutputs> |
| | | <ContentFiles /> |
| | | <SatelliteDlls /> |
| | | <NonRecipeFileRefs /> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | |  ActuatorDemo.cpp |
| | | F:\workspace_LSSF\Actuator\ActuatorDemo\ActuatorDemo.cpp(81,40): warning C4244: â=â: ä»âdoubleâ转æ¢å°âunsigned shortâï¼å¯è½ä¸¢å¤±æ°æ® |
| | | F:\workspace_LSSF\Actuator\ActuatorDemo\ActuatorDemo.cpp(82,52): warning C4244: â=â: ä»âdoubleâ转æ¢å°âunsigned shortâï¼å¯è½ä¸¢å¤±æ°æ® |
| | | F:\workspace_LSSF\Actuator\ActuatorDemo\ActuatorDemo.cpp(84,28): warning C4477: âprintfâ: æ ¼å¼å符串â%fâéè¦ç±»åâdoubleâçåæ°ï¼ä½å¯ååæ° 2 æ¥æäºç±»åâintâ |
| | | æ£å¨çæä»£ç |
| | | Previous IPDB not found, fall back to full compilation. |
| | | All 22 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. |
| | | 已宿代ç ççæ |
| | | ActuatorDemo.vcxproj -> F:\workspace_LSSF\Actuator\Release\ActuatorDemo.exe |
¶Ô±ÈÐÂÎļþ |
| | |
| | | PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0: |
| | | Release|Win32|F:\workspace_LSSF\Actuator\| |
¶Ô±ÈÐÂÎļþ |
| | |
| | | f:\workspace_lssf\actuator\debug\actuator.lib |
| | | f:\workspace_lssf\actuator\debug\actuator.exp |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.pch |
| | | f:\workspace_lssf\actuator\actuator\debug\vc142.pdb |
| | | f:\workspace_lssf\actuator\actuator\debug\vc142.idb |
| | | f:\workspace_lssf\actuator\actuator\debug\pch.obj |
| | | f:\workspace_lssf\actuator\actuator\debug\dllmain.obj |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.obj |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.ilk |
| | | f:\workspace_lssf\actuator\debug\actuator.dll |
| | | f:\workspace_lssf\actuator\debug\actuator.pdb |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.res |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\actuator.write.1u.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\cl.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\cl.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\cl.write.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\link.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\link.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\link.write.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\rc.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\rc.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\debug\actuator.tlog\rc.write.1.tlog |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project> |
| | | <ProjectOutputs> |
| | | <ProjectOutput> |
| | | <FullPath>F:\workspace_LSSF\Actuator\Debug\Actuator.dll</FullPath> |
| | | </ProjectOutput> |
| | | </ProjectOutputs> |
| | | <ContentFiles /> |
| | | <SatelliteDlls /> |
| | | <NonRecipeFileRefs /> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | |  pch.cpp |
| | | Actuator.cpp |
| | | dllmain.cpp |
| | | æ£å¨çæä»£ç ... |
| | | æ£å¨åå»ºåº F:\workspace_LSSF\Actuator\Debug\Actuator.lib å对象 F:\workspace_LSSF\Actuator\Debug\Actuator.exp |
| | | LINK : warning LNK4098: é»è®¤åºâLIBCMTDâä¸å
¶ä»åºç使ç¨å²çªï¼è¯·ä½¿ç¨ /NODEFAULTLIB:library |
| | | Actuator.vcxproj -> F:\workspace_LSSF\Actuator\Debug\Actuator.dll |
¶Ô±ÈÐÂÎļþ |
| | |
| | | PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0: |
| | | Debug|Win32|F:\workspace_LSSF\Actuator\| |
¶Ô±ÈÐÂÎļþ |
| | |
| | | f:\workspace_lssf\actuator\release\actuator.lib |
| | | f:\workspace_lssf\actuator\release\actuator.exp |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.pch |
| | | f:\workspace_lssf\actuator\actuator\release\vc142.pdb |
| | | f:\workspace_lssf\actuator\actuator\release\pch.obj |
| | | f:\workspace_lssf\actuator\actuator\release\dllmain.obj |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.obj |
| | | f:\workspace_lssf\actuator\release\actuator.dll |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.ipdb |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.iobj |
| | | f:\workspace_lssf\actuator\release\actuator.pdb |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.res |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\actuator.write.1u.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\cl.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\cl.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\cl.write.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\link.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\link.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\link.write.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\rc.command.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\rc.read.1.tlog |
| | | f:\workspace_lssf\actuator\actuator\release\actuator.tlog\rc.write.1.tlog |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <Project> |
| | | <ProjectOutputs> |
| | | <ProjectOutput> |
| | | <FullPath>F:\workspace_LSSF\Actuator\Release\Actuator.dll</FullPath> |
| | | </ProjectOutput> |
| | | </ProjectOutputs> |
| | | <ContentFiles /> |
| | | <SatelliteDlls /> |
| | | <NonRecipeFileRefs /> |
| | | </Project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | |  pch.cpp |
| | | Actuator.cpp |
| | | dllmain.cpp |
| | | æ£å¨åå»ºåº F:\workspace_LSSF\Actuator\Release\Actuator.lib å对象 F:\workspace_LSSF\Actuator\Release\Actuator.exp |
| | | Previous IPDB not found, fall back to full compilation. |
| | | LINK : warning LNK4098: é»è®¤åºâLIBCMTâä¸å
¶ä»åºç使ç¨å²çªï¼è¯·ä½¿ç¨ /NODEFAULTLIB:library |
| | | æ£å¨çæä»£ç |
| | | All 20 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. |
| | | 已宿代ç ççæ |
| | | Actuator.vcxproj -> F:\workspace_LSSF\Actuator\Release\Actuator.dll |
¶Ô±ÈÐÂÎļþ |
| | |
| | | PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0: |
| | | Release|Win32|F:\workspace_LSSF\Actuator\| |
¶Ô±ÈÐÂÎļþ |
| | |
| | | #é
ç½®æä»¶å主ç¨åºå¨åä¸ç®å½.没æè¿ä¸ªæä»¶æä¸å¨ä¸»ç®å½ä¸åä¸åæ¥å¿ |
| | | |
| | | [log4me] |
| | | #path,æ¥å¿çåæ¾ç®å½.å¿
é¡»æ¯ä¸»ç¨åºç®å½ååç®å½. |
| | | path=log |
| | | |
| | | #level,æ¥å¿ç级ï¼error,info,debug |
| | | #为erroræ¶,åªælog4erroræå°çæ¥å¿è¢«è¾åº. |
| | | #为infoæ¶,log4errorålog4infoæå°çæ¥å¿è¢«è¾åº. |
| | | #为debugæ¶,log4error,log4info,log4debugæå°çæ¥å¿é½è¢«è¾åº. |
| | | level=debug |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ä¸å ifdef 忝åå»ºä½¿ä» DLL å¯¼åºæ´ç®åç |
| | | // å®çæ åæ¹æ³ãæ¤ DLL ä¸çæææä»¶é½æ¯ç¨å½ä»¤è¡ä¸å®ä¹ç ACTUATOR_EXPORTS |
| | | // 符å·ç¼è¯çãå¨ä½¿ç¨æ¤ DLL ç |
| | | // ä»»ä½é¡¹ç®ä¸ä¸åºå®ä¹æ¤ç¬¦å·ãè¿æ ·ï¼æºæä»¶ä¸å
嫿¤æä»¶çä»»ä½å
¶ä»é¡¹ç®é½ä¼å° |
| | | // ACTUATOR_API 彿°è§ä¸ºæ¯ä» DLL 导å
¥çï¼èæ¤ DLL åå°ç¨æ¤å®å®ä¹ç |
| | | // 符å·è§ä¸ºæ¯è¢«å¯¼åºçã |
| | | #ifdef ACTUATOR_EXPORTS |
| | | #define ACTUATOR_API __declspec(dllexport) |
| | | #else |
| | | #define ACTUATOR_API __declspec(dllimport) |
| | | #endif |
| | | |
| | | typedef enum |
| | | { |
| | | //ç²®ç§åå¤å½ä»¤ä»£ç ï¼ç²®ç§å·²ä¿®æ¹ï¼ |
| | | READY_GRAIN = 0x01, |
| | | |
| | | //è¿ååå¤å®æ |
| | | READY_FINISH = 0x02, |
| | | |
| | | //æ£æµå¯å¨å½ä»¤ |
| | | DETECT_START = 0x03, |
| | | |
| | | //è¿åæ£æµå®æ¯ |
| | | DETECT_FINISH = 0x04, |
| | | |
| | | //è®¾å¤æ°´å仪å¤ä½å½ä»¤ |
| | | DEVICE_WR_RESET = 0xFE, |
| | | |
| | | //è¿åæ°´å仪æ
é代ç |
| | | DEVICE_WR_FAULT = 0xFF |
| | | }PLCWORD; |
| | | |
| | | typedef enum |
| | | { |
| | | //æ°´å仪å夿令 |
| | | WR_READY = 0x01, |
| | | |
| | | //æ°´åä»ªæ£æµæä»¤ |
| | | WR_DETECT = 0x02, |
| | | |
| | | //æ°´åä»ªæ ¡éªæä»¤ |
| | | WR_VERIFY = 0x03, |
| | | |
| | | //æ°´å仪å¤ä½æä»¤ |
| | | WR_RESET = 0x04, |
| | | |
| | | //ç²®é£åæ´æä»¤ |
| | | WR_GOODS = 0x05, |
| | | |
| | | //ä¸éé¨å¼ |
| | | WR_VALV01 = 0x07, |
| | | //ä¸éé¨å
³ |
| | | WR_VALV02 = 0x08, |
| | | //ä¸éé¨å¼ |
| | | WR_VALV03 = 0x09, |
| | | //ä¸éé¨å
³ |
| | | WR_VALV04 = 0x0A, |
| | | //åéé¨å¼ |
| | | WR_VALV05 = 0x0B, |
| | | //åéé¨å
³ |
| | | WR_VALV06 = 0x0C, |
| | | //æ¯å¨å¼ |
| | | WR_VIBRATE_01 = 0x0D, |
| | | //æ¯å¨å
³ |
| | | WR_VIBRATE_02 = 0x0E, |
| | | |
| | | }WRWORD; |
| | | |
| | | //å建åå§å客æ·PLC设å¤å¥æctx |
| | | //strIp: IPå°å |
| | | //nPort: ç½ç»ç«¯å£ |
| | | ACTUATOR_API void* __stdcall CreatePlcDevice(const char* strIp, int nPort); |
| | | |
| | | //å建水åä»ªå¥æctx |
| | | //szSerialPort: 串å£å |
| | | //baud: æ³¢ç¹ç |
| | | //parity: æ ¡éªç±»å |
| | | //data_bit: æ°æ®ä½ |
| | | //stop_bit: åæ¢ä½ |
| | | ACTUATOR_API void* __stdcall CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit); |
| | | |
| | | //è¿æ¥å®¢æ·è®¾å¤ææ°´å仪è£
ç½® |
| | | //ctxDev : 设å¤å¥æ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ConnectDevice(void* ctxDev); |
| | | |
| | | //è·åç¶ææç²®ç§æ´æ¹ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x03: å¼å§æµè¯ |
| | | // 0xFE: å¤ä½å½ä»¤ï¼ä¼å
级æé« |
| | | // å
¶ä»ï¼ 为åå
¥ç¶æ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType); |
| | | |
| | | //ååç¶æ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x02: åå¤å·²å®æ |
| | | // 0x04: æ£æµå®æ |
| | | // 0xFF: æ°´å仪æ
é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ResponseState(void* ctxDev, unsigned short nState); |
| | | |
| | | //åä¼ æ£æµæ°æ® |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // ç²®ç§ç¼ç |
| | | // 嫿°´çï¼ åæ´ = åå¼*100 |
| | | // å®¹éæ¯ï¼ åæ´ = åå¼*100 |
| | | //nSize : æ°æ®ä¸ªæ° |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3); |
| | | |
| | | //ä¸åå½ä»¤ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nCmdType ï¼å½ä»¤åï¼å¦ä¸æè¿° |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x02: å¼å§æµè¯ |
| | | // 0x03: æ ¡åå½ä»¤ï¼å³ä¸ºæ å®é¡µé¢æ£æµæé®å½ä»¤ï¼ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | // å½nCmdType 为0x02ï¼0x03æ¶ï¼ä¸ç¨èèç²®ç§ç¼å· |
| | | // nResponseSeconds: ååºæ¶é´ï¼ä»¥ç§è®¡ç® |
| | | // nResponseUSeconds: ååºæ¶é´ï¼ä»¥å¾®å¦è®¡ç®ï¼è¥å°äºç§ï¼å
¨é¨ç¨å¾®å¦è¡¨ç¤ºã |
| | | //è¿åå¼ï¼å¤§äº0 表示 è®¾å¤ææ
éï¼æ
éç 详è§ReadFaultCode彿°ï¼ææè¿° |
| | | // å°äº0 表示 å½ä»¤æ§è¡é误ï¼é误å¯ä»¥éè¿ GetErroræåå¤çã |
| | | // çäº0 表示 å½ä»¤æ§è¡æå |
| | | ACTUATOR_API int __stdcall SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000); |
| | | |
| | | //ä¸ååæ° |
| | | //ctxDev : 设å¤å¥æ |
| | | //nStartFreq ï¼èµ·å§é¢ç |
| | | //nStopFreq ï¼ ç»æ¢é¢ç |
| | | //nStepFreq ï¼ æ¥é¿ |
| | | //nDecayCode ï¼è¡°åç |
| | | //nAscValid ï¼ ASC å
é¨/å¤é¨ææï¼ åå¼ä¸º 0ï¼å
鍿æï¼ 1ï¼å¤é¨ææ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall WriteParams(void* ctxDev, unsigned short nStartFreq, unsigned short nStopFreq, |
| | | unsigned short nStepFreq, unsigned short nDecayCode, unsigned short nAscValid); |
| | | |
| | | //è¯»åæ£æµä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // çµåå¼ |
| | | // éé |
| | | // 温度 |
| | | // 湿度 |
| | | // nSize : 读å4个å¯åå¨ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4); |
| | | |
| | | //读ååºä»¶çæ¬ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nVersions ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // ç¡¬ä»¶çæ¬ |
| | | // è½¯ä»¶çæ¬ |
| | | // nSize : 读å2个å¯åå¨ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadVersion(void* ctxDev, unsigned short* nVersions, unsigned short nSize = 1); |
| | | |
| | | |
| | | //è¯»åæ«é¢å¼,å
¶å®ä¸ºçµå¹³å¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nVcc : çµå¹³å¼æé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadVcc(void* ctxDev, unsigned short* nVcc); |
| | | |
| | | //读ééå¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nWeight : ééå¼ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadWeight(void* ctxDev, unsigned short* nWeight); |
| | | |
| | | //读åæ
éç ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nFaultCode : æ
éç |
| | | // 0 .......... æ£å¸¸ |
| | | // 1 .......... ä¸éé¨å
³å¡ä½ |
| | | // 2 .......... ä¸éé¨å
³å¡ä½ |
| | | // 4 .......... ä¸éé¨å¼å¡ä½ |
| | | // 8 .......... ä¸éé¨å¼å¡ä½ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall ReadFaultCode(void* ctxDev, unsigned short* nFaultCode); |
| | | |
| | | //å¤ä½å½ä»¤ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼æ ï¼ |
| | | ACTUATOR_API int __stdcall ResetCommand(void* ctxDev); |
| | | |
| | | //åé误å符串: |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼æ ï¼ |
| | | //æ§è¡æ¡ä»¶ï¼å¨ä¸é¢å½ä»¤å½æ°æ§è¡è¿å-1çæ¶åè°ç¨ã |
| | | ACTUATOR_API const char* __stdcall GetError(void* ctxDev); |
| | | |
| | | //æå¼æ°´å仪æå®¢æ·è®¾å¤çè¿æ¥ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall Disconnect(void* ctxDev); |
| | | |
| | | //éæ¯èµæº |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall DestroyDevice(void* ctxDev); |
| | | |
| | | |
| | | /***************************è½®å»çº¿åä¼ å½æ°********************************** |
| | | data: æ°æ®ä»¥æ´æ°æ°ç»è¡¨ç¤º |
| | | nsize: æ°æ®å°ºå¯¸ |
| | | **************************************************************************/ |
| | | typedef void(__stdcall* MESSAGE_HANDLER)(unsigned short *data, int nsize); |
| | | |
| | | /* |
| | | nSlavePort: æå¡ç«¯å£ æ¯å¦ 502 |
| | | szDevPort: ä¸²å£ COM1 |
| | | baud, parity, data_bit, stop_bit åèä¸é¢å½æ° |
| | | detectTimeout æ£æµè¶
æ¶æ¶é´ |
| | | resetTimeout æå¡è¶
æ¶æ¶é´ |
| | | handler ï¼ åè°å½æ° |
| | | */ |
| | | |
| | | ACTUATOR_API int __stdcall StartTcpSlaveEx(void* waterDev, int nSlavePort, int detectTimeout = 60, int resetTimeout = 10, MESSAGE_HANDLER handler = NULL); |
| | | |
| | | ACTUATOR_API int __stdcall StartTcpSlave(int nSlavePort, const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit, int, int detectTimeout = 60, int resetTimeout = 10, MESSAGE_HANDLER handler = NULL); |
| | | |
| | | ACTUATOR_API int __stdcall StopTcpSlave(); |
| | | |
| | | //ç®æ³å½æ° |
| | | //x 为æµéå¼ |
| | | //y 为å®é
å¼ |
| | | //n 为æåæ¬¡æ° |
| | | //nSampleNumber æ ·æ¬æ°é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int __stdcall Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5); |
| | | ACTUATOR_API int __stdcall LinearizeX(double x[], double y[], double Coefficient[], const int nDegree = 3, const int nSampleNumber = 5); |
| | | ACTUATOR_API int __stdcall PolyNomialFit(double x[], double y[], double Coefficient[], const int nDegree = 3, const int nSampleNumber = 5); |
| | | |
| | | //计ç®å½æ° |
| | | ACTUATOR_API double __stdcall CalcValue(unsigned short nDValue, double Coef0, double Coef1, double Coef2, double Coef3, double Coef4); |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ActuatorDemo.cpp : æ¤æä»¶å
å« "main" 彿°ãç¨åºæ§è¡å°å¨æ¤å¤å¼å§å¹¶ç»æã |
| | | // |
| | | |
| | | #include <iostream> |
| | | #include <thread> |
| | | #include <windows.h> |
| | | #include "../Actuator//Actuator.h" |
| | | |
| | | /******************* 为PLCèªå¨çæµåå¤ç¸å
³å
¨é¨åé******************************** */ |
| | | static bool plcScan = true; |
| | | static bool devRunning = false; |
| | | /************************************************************************************* |
| | | **************************************************************************************/ |
| | | |
| | | |
| | | //ç³»æ° |
| | | const double coef[5] = { -6.204673384923,0.025161776479,-0.000014765722,0.000000003440,0 }; |
| | | const char sPortName[] = "COM6"; |
| | | |
| | | //æå¨åç²®é£åç§ |
| | | void ManReady() |
| | | { |
| | | if (devRunning){printf("æ°´å仪å¿!"); return;} |
| | | |
| | | devRunning = true; |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | if (hWrDev) |
| | | { |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | |
| | | ret = SendCommands(hWrDev, WR_READY, 0x01, 0, 500000); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | printf("åå¤å¤±è´¥ï¼\n"); |
| | | else |
| | | { |
| | | printf("åå¤å°±ç»ªï¼OKï¼\n"); |
| | | } |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | |
| | | //æå¨æ£æµ |
| | | void ManTest() |
| | | { |
| | | if (devRunning) { printf("æ°´å仪å¿!"); return; } |
| | | |
| | | devRunning = true; |
| | | |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | if (hWrDev) |
| | | { |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | ret = SendCommands(hWrDev, WR_DETECT, 0, 60, 0); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | //第ä¸ä¸ªå¼ä¸ºçµå¹³å¼ï¼ç¨æ¥è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | v = CalcValue(nDatas[0], coef[0], coef[1], coef[2], coef[3], coef[4]); |
| | | |
| | | printf(" After Detection,"); |
| | | printf(" %d %d %d %d", nDatas[0], nDatas[1], nDatas[2], nDatas[3]); |
| | | printf(" Water Rate:%lf", v); |
| | | printf(" \n"); |
| | | printf("æ£æµæ§è¡OK!\n"); |
| | | |
| | | } |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | |
| | | //æå¨å¤ä½ |
| | | void ManReset() |
| | | { |
| | | if (devRunning) { printf("æ°´å仪å¿!"); return; } |
| | | |
| | | devRunning = true; |
| | | |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | |
| | | if (hWrDev) |
| | | { |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | ret = SendCommands(hWrDev, WR_RESET, 0, 15, 0); //ä¸åå¤ä½ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("å¤ä½å¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | printf("å¤ä½æåï¼\n"); |
| | | } |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | |
| | | void GetWeight() |
| | | { |
| | | if (devRunning) { printf("æ°´å仪å¿!"); return; } |
| | | |
| | | devRunning = true; |
| | | |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | |
| | | if (hWrDev) |
| | | { |
| | | |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | |
| | | unsigned short nWeight = 0; |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadWeight(hWrDev, &nWeight); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | printf(" Weight Val: %d", nWeight); |
| | | printf(" \n"); |
| | | printf("ç§°éæ§è¡OK!\n"); |
| | | } |
| | | else |
| | | { |
| | | printf("ç§°éæ§è¡å¤±è´¥!\n"); |
| | | } |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | |
| | | void CurrVersion() |
| | | { |
| | | if (devRunning) { printf("æ°´å仪å¿!"); return; } |
| | | |
| | | devRunning = true; |
| | | |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | if (hWrDev) |
| | | { |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | //unsigned char nVersions[2] = { 0 }; |
| | | unsigned short nVersions; |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadVersion(hWrDev, &nVersions); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | printf(" Version1 Val: %d", nVersions & 0x00FF); |
| | | printf(" \n"); |
| | | printf(" Version2 Val: %d", nVersions >> 8); |
| | | printf(" \n"); |
| | | } |
| | | else |
| | | { |
| | | printf("çæ¬æ§è¡å¤±è´¥!\n"); |
| | | } |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | |
| | | void ExecPlcReady(void* hPlc, int nGrainType) |
| | | { |
| | | if (devRunning) { printf("æ°´å仪å¿!"); return; } |
| | | |
| | | devRunning = true; |
| | | |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | if (hWrDev) |
| | | { |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | //åæ°´å仪åç²®ç§æ´æ¹ï¼å¯å¨åå¤ |
| | | ret = SendCommands(hWrDev, WR_READY, nGrainType, 0, 500000); |
| | | if (ret < 0) |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹å¤±è´¥ï¼æ°´å仪æ
éï¼\n"); |
| | | ret = ResponseState(hPlc, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹æåï¼åå¤å°±ç»ª\n"); |
| | | ret = ResponseState(hPlc, READY_FINISH); |
| | | } |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | void ExecPlcDetect(void* hPlc, int nTimeout /*以ç§è®¡*/) |
| | | { |
| | | if (devRunning) { printf("æ°´å仪å¿!"); return; } |
| | | |
| | | devRunning = true; |
| | | |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | if (hWrDev && hPlc) |
| | | { |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | ret = SendCommands(hWrDev, WR_DETECT, 0, nTimeout, 0); |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | ret = ResponseState(hPlc, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | unsigned short nSendData[3] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | printf("æ§è¡æ£æµæåï¼\n"); |
| | | ret = ResponseState(hPlc, DETECT_FINISH); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | |
| | | nSendData[0] = 0x01; // ç²®é£åç§ |
| | | nSendData[1] = 100 * v; // 21.30% //嫿°´ç |
| | | nSendData[2] = 100 * nDatas[1] / 0.52; // 51.50; //容鿝 |
| | | |
| | | printf("Get Vals: wr:%f, weight:%f, temperatur:%f, humidity:%f", |
| | | v, |
| | | nDatas[1], |
| | | nDatas[2] / 100.f, |
| | | nDatas[3] / 100.f); |
| | | |
| | | ret = UploadData(hPlc, nSendData); |
| | | } |
| | | |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | void ExecPlcReset(void* hPlc, int nTimeout /*以ç§è®¡*/) |
| | | { |
| | | if (devRunning) { printf("æ°´å仪å¿!"); return; } |
| | | |
| | | devRunning = true; |
| | | |
| | | void* hWrDev = CreateWrDevice(sPortName, 115200, 'N', 8, 1); |
| | | if (hWrDev) |
| | | { |
| | | int ret = ConnectDevice(hWrDev); |
| | | |
| | | if (ret >= 0) |
| | | { |
| | | //åæ°´å仪åç²®ç§æ´æ¹ï¼å¯å¨åå¤ |
| | | ret = SendCommands(hWrDev, WR_RESET, 0, nTimeout, 0); |
| | | if (ret <= 0) |
| | | { |
| | | printf("å¤ä½å¤±è´¥ï¼\n"); |
| | | ret = ResponseState(hPlc, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | printf("å¤ä½æå!\n"); |
| | | } |
| | | } |
| | | |
| | | Disconnect(hWrDev); |
| | | DestroyDevice(hWrDev); |
| | | } |
| | | |
| | | devRunning = false; |
| | | } |
| | | |
| | | static void ExecPLCCommand() |
| | | { |
| | | |
| | | unsigned short nPlcCommandState = 0; |
| | | unsigned short nPlcCommandGrainType = 0; |
| | | float fPlcCommandDrift = 0; |
| | | |
| | | bool ret = -1; |
| | | void* hPlcDev = CreatePlcDevice("127.0.0.1", 1502); |
| | | if (hPlcDev) ret = ConnectDevice(hPlcDev); |
| | | |
| | | while (plcScan) //æ c éåºèªå¨æ£æµ |
| | | { |
| | | ret = ReadState(hPlcDev, &nPlcCommandState, &nPlcCommandGrainType); |
| | | if (ret <= 0) |
| | | { |
| | | printf("读åPLCç¶æåå¼å¸¸ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | //读PLCç¶æå |
| | | if (nPlcCommandGrainType > 0 && nPlcCommandState > 0) |
| | | { |
| | | //ä¸é¢æ¯ä¸»æµç¨çå¤ç |
| | | switch (nPlcCommandState) |
| | | { |
| | | case READY_GRAIN: //ç²®é£åç§ä¿®æ¹äº |
| | | ExecPlcReady(hPlcDev, nPlcCommandGrainType); |
| | | break; |
| | | case DETECT_START: //å¼å§æµè¯ |
| | | ExecPlcDetect(hPlcDev, 60); |
| | | break; |
| | | case DEVICE_WR_RESET: //å¤ä½å½ä»¤ |
| | | ExecPlcReset(hPlcDev, 10); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | /*ä¸ç§è¯»åPLC䏿¬¡ä¿¡æ¯*/ |
| | | Sleep(1000); |
| | | } |
| | | |
| | | } |
| | | |
| | | int main() |
| | | { |
| | | |
| | | std::cout << "æ°´å仪æµè¯ç¨åºå·²å¼å¯!\n"; |
| | | |
| | | char ch = 0; |
| | | while ('x' != ( ch = getchar() )) //æ x éåºç¨åº |
| | | { |
| | | switch (ch) |
| | | { |
| | | case 'a': //èªå¨æµè¯ |
| | | { |
| | | std::thread workThread = std::thread(ExecPLCCommand); |
| | | workThread.detach(); |
| | | } |
| | | break; |
| | | case 'r': //æå¨æ£æµ,éè¦åå¤ |
| | | ManReady(); |
| | | break; |
| | | case 'd': //æå¨æ£æµï¼ä¸è®¸åå¤ |
| | | ManTest(); |
| | | break; |
| | | case 'z': //å¤ä½æ¸
é¶ |
| | | ManReset(); |
| | | break; |
| | | case 'w': |
| | | GetWeight(); |
| | | break; |
| | | case 'V': |
| | | CurrVersion(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | return 1; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 2025-07-04 08:22:24 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:22:24 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:22:24 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:22:24 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:22:24 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:22:24 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:22:24 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:22:24 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:22:26 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:22:26 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:22:28 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:22:28 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:25:46 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:25:46 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:25:46 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:25:46 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:25:46 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:25:46 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:25:46 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:25:46 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:25:48 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:25:48 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:25:57 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:25:57 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:26:32 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:26:32 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:26:32 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:26:32 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:26:32 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:26:32 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:26:32 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:26:32 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:26:33 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:26:33 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:26:41 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:26:41 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:26:53 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:26:53 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:26:53 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:26:53 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:26:53 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:26:53 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:26:53 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:26:53 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:26:54 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:26:54 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:27:01 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:27:01 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:27:17 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:27:17 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:27:17 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:27:17 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:27:17 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:27:17 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:27:17 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:27:17 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:27:18 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:27:18 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:29:16 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:29:16 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | . |
| | | 2025-07-04 08:27:23 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:27:23 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:27:23 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:27:23 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:27:23 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:27:23 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:27:24 [error]éè¯¯ï¼æ°´åä»ªè¿æ¥å¤±è´¥, è¿åå¼=[-1]. |
| | | 2025-07-04 08:27:24 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:29:15 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:29:15 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:30:40 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:30:40 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:30:40 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:30:40 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:30:40 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:30:40 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:30:40 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:30:40 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:30:41 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:30:41 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:31:05 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:31:05 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:34:47 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:34:48 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:34:48 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:34:48 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:34:48 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:34:48 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:34:48 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:34:48 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:34:49 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:34:49 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:34:57 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:34:57 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:36:24 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:36:24 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:36:24 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:36:24 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:36:24 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:36:24 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:36:24 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:36:24 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:36:25 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:36:25 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:36:35 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:36:35 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:40:05 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:40:05 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:40:05 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:40:05 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:40:05 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:40:05 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:40:05 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:40:05 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:40:07 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:40:07 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:40:31 [info ]模å¼ï¼æå¨æ£æµæ¨¡å¼ï¼åæ¢ TestThread()线ç¨ï¼å夿卿ä½ï¼ |
| | | 2025-07-04 08:41:02 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:41:02 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:41:48 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:41:48 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:41:48 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:41:48 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:41:48 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:41:48 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:41:48 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:41:48 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:41:49 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:41:49 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:41:54 [info ]模å¼ï¼æå¨æ£æµæ¨¡å¼ï¼åæ¢ TestThread()线ç¨ï¼å夿卿ä½ï¼ |
| | | 2025-07-04 08:41:59 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:41:59 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:42:46 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:42:46 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:42:46 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:42:46 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:42:46 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:42:46 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:42:46 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:42:46 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:42:47 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:42:47 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:42:57 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:42:57 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-04 08:43:45 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-04 08:43:45 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-04 08:43:45 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-04 08:43:45 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-04 08:43:45 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-04 08:43:45 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-04 08:43:45 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-04 08:43:45 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-04 08:43:46 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-04 08:43:46 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-04 08:44:46 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-04 08:44:46 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 2025-07-07 08:46:42 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:46:42 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:46:42 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:46:42 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:46:42 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:46:42 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:46:42 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:46:42 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:46:43 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:46:43 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:46:47 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:46:47 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:47:11 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:47:11 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:47:11 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:47:11 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:47:11 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:47:11 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:47:11 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:47:11 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:47:13 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:47:13 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:47:18 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:47:18 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:49:25 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:49:25 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:49:25 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:49:25 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:49:25 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:49:25 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:49:25 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:49:27 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:49:27 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:49:30 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:49:30 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:51:42 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:51:42 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:51:42 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:51:42 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:51:42 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:51:42 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:51:42 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:51:42 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:51:43 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:51:43 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:51:46 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:51:46 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:53:59 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:53:59 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:53:59 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:53:59 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:53:59 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:53:59 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:53:59 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:53:59 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:54:01 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:54:01 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:54:09 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:54:09 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:54:22 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:54:22 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:54:22 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:54:22 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:54:22 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:54:22 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:54:22 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:54:22 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:54:23 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:54:23 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:54:29 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:54:29 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:54:41 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:54:41 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:54:41 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:54:41 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:54:41 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:54:41 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:54:41 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:54:41 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:54:42 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:54:42 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:54:46 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:54:46 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:55:22 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:55:22 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:55:22 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:55:22 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:55:22 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:55:22 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:55:22 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:55:22 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:55:24 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:55:24 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:55:27 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:55:27 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 08:56:29 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 08:56:29 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 08:56:29 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 08:56:29 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 08:56:29 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 08:56:29 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 08:56:29 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 08:56:29 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 08:56:30 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 08:56:30 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 08:56:43 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 08:56:43 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 09:17:16 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 09:17:17 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 09:17:17 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 09:17:17 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 09:17:17 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 09:17:17 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 09:17:17 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 09:17:17 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 09:17:18 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 09:17:18 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 09:17:45 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 09:17:45 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-07 09:29:23 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-07 09:29:23 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-07 09:29:23 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-07 09:29:23 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-07 09:29:23 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-07 09:29:23 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-07 09:29:23 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-07 09:29:23 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-07 09:29:24 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-07 09:29:24 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-07 09:29:36 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-07 09:29:36 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 2025-07-08 07:46:33 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-08 07:46:33 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-08 07:46:33 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-08 07:46:33 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-08 07:46:33 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-08 07:46:33 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-08 07:46:33 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-08 07:46:33 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-08 07:46:34 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-08 07:46:34 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-08 07:46:40 [info ]模å¼ï¼æå¨æ£æµæ¨¡å¼ï¼åæ¢ TestThread()线ç¨ï¼å夿卿ä½ï¼ |
| | | 2025-07-08 07:47:08 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-08 07:47:08 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-08 07:50:20 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-08 07:50:20 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-08 07:50:20 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-08 07:50:20 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-08 07:50:20 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-08 07:50:20 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-08 07:50:20 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-08 07:50:20 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-08 07:50:21 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-08 07:50:21 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-08 07:50:39 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-08 07:50:39 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-08 07:50:57 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-08 07:50:57 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-08 07:50:57 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-08 07:50:57 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-08 07:50:57 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-08 07:50:57 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-08 07:50:57 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-08 07:50:57 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-08 07:50:58 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-08 07:50:58 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-08 07:51:20 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-08 07:51:20 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-08 07:57:04 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-08 07:57:04 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-08 07:57:04 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-08 07:57:04 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-08 07:57:04 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-08 07:57:04 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-08 07:57:04 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-08 07:57:04 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-08 07:57:05 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-08 07:57:05 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-08 07:57:35 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-08 07:57:35 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-08 09:05:26 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-08 09:05:27 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-08 09:05:27 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-08 09:05:27 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-08 09:05:27 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-08 09:05:27 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-08 09:05:27 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-08 09:05:27 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-08 09:05:28 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-08 09:05:28 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-08 09:05:31 [info ]模å¼ï¼æå¨æ£æµæ¨¡å¼ï¼åæ¢ TestThread()线ç¨ï¼å夿卿ä½ï¼ |
| | | 2025-07-08 09:06:27 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-08 09:06:27 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
| | | 2025-07-08 10:33:06 [info ]log4me: æ¥å¿ç³»ç»å¯å¨. |
| | | 2025-07-08 10:33:06 [info ]ç³»ç»ï¼åå§åå建 data-å卿°æ®åº. |
| | | 2025-07-08 10:33:06 [info ]ç³»ç»ï¼è½½å
¥ config-ç³»ç»åæ° (设å¤åæ°). |
| | | 2025-07-08 10:33:06 [info ]ç³»ç»ï¼è½½å
¥ conn-ç³»ç»åæ° (æ¦æ¡ç³»ç»ãæ°´å仪ãåå¨åæ°). |
| | | 2025-07-08 10:33:06 [info ]ç³»ç»ï¼è½½å
¥ grain-ç²®ç§åæ° (ç²®ç§ä»£ç ãåç§°ãæ ¡åç³»æ°). |
| | | 2025-07-08 10:33:06 [info ]ç³»ç»ï¼è½½å
¥ weight-ç³»ç»åæ° (y=kx+b). |
| | | 2025-07-08 10:33:06 [info ]ç³»ç»ï¼è½½å
¥ manager-管çåæ° (æå¨æ¨¡å¼å£ä»¤). |
| | | 2025-07-08 10:33:06 [info ]å±å¹ï¼æ¢æµå±å¹å辨ç为[1920X1200]ï¼å±å¹ç±»å为[0]. |
| | | 2025-07-08 10:33:07 [info ]è¿æ¥ï¼æ°´å仪设å¤è¿æ¥æåï¼è¿åå¼=[0]. |
| | | 2025-07-08 10:33:07 [info ]模å¼ï¼èªå¨æ£æµæ¨¡å¼ï¼å¯å¨ TestThread()线ç¨ï¼ |
| | | 2025-07-08 10:33:10 [info ]模å¼ï¼æå¨æ£æµæ¨¡å¼ï¼åæ¢ TestThread()线ç¨ï¼å夿卿ä½ï¼ |
| | | 2025-07-08 10:33:24 [info ]ç³»ç»ï¼æ°æ®åº [grain] æ°å¢ä¸æ¡ç²®ç§ä¿¡æ¯. |
| | | 2025-07-08 10:33:33 [info ]ç²®ç§ï¼å½åéä¸[åå], 代ç [1], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:33:38 [info ]æç¤ºï¼æ°æ®åº [grain] ç²®é£åç§° [åå1] æ´æ°æå. |
| | | 2025-07-08 10:33:45 [info ]ç²®ç§ï¼å½åéä¸[大è±], 代ç [3], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:33:55 [info ]ç²®ç§ï¼å½åéä¸[åå1], 代ç [1], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:34:05 [info ]ç²®ç§ï¼å½åéä¸[粳稻], 代ç [5], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:34:09 [info ]ç³»ç»ï¼æ°æ®åº [grain] æ°å¢ä¸æ¡ç²®ç§ä¿¡æ¯. |
| | | 2025-07-08 10:34:17 [info ]ç²®ç§ï¼å½åéä¸[åæ¹], 代ç [5], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:34:29 [info ]ç²®ç§ï¼å½åéä¸[åå1], 代ç [1], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:34:30 [info ]æç¤ºï¼æåå é¤ [å°éº¦-åå1] ç²®ç§ä¿¡æ¯ï¼ |
| | | 2025-07-08 10:35:35 [info ]ç³»ç»ï¼ä¿åæªè·åæ°-[22.6] å° [åå1]ç²®ç§ä¿¡æ¯. |
| | | 2025-07-08 10:35:35 [info ]ç²®ç§ï¼ä¿å [åå1] ç²®ç§ä¿¡æ¯, 代ç -[1], æªè·-[22.6] |
| | | 2025-07-08 10:35:43 [info ]ç²®ç§ï¼å½åéä¸[åæ¹], 代ç [5], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:35:53 [info ]ç³»ç»ï¼å
³é æ¦æ¡ åæ°´å仪设å¤ï¼ |
| | | 2025-07-08 10:35:53 [info ]ç²®ç§ï¼å½åéä¸[粳稻], 代ç [5], æ ¡åç³»æ°[0,0.01,0,0,0] |
| | | 2025-07-08 10:35:53 [info ]log4me: æ¥å¿ç³»ç»åæ¢. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 1. å·¥æ§æºç»å½ |
| | | Administrator/1 |
| | | |
| | | 2.IP设置 |
| | | å·¥æ§æºIPï¼192.168.2.28 |
| | | è°è¯çµèIPï¼192.168.2.100 |
| | | |
| | | 3.é¨ç½²ä½ç½® |
| | | å·¥æ§æº-->D:\LBGZSoft\bin |
| | | |
| | | 4.ç³»ç»è¦æ± |
| | | windows7å以ä¸ç³»ç» |
| | | æ¯æX64ãX86å¹³å° |
| | | |
| | | 5.ç¯å¢ä¾èµ |
| | | snap7.dll |
| | | sqlite3_x64.dll |
| | | sqlite3_x86.dll |
| | | libeay32.dll |
| | | ssleay32.dll |
| | | |
| | | 6.é¨ç½²è¦æ± |
| | | æ·è´è¿è¡ï¼ç¬¬ä¸æ¬¡å®è£
VS2018è¿è¡æ¶åº.exe |
¶Ô±ÈÐÂÎļþ |
| | |
| | | åºå·,æ ·æ¬ä¿¡æ¯,嫿°´ç,温度,湿度,æ¥æ |
| | | 1,稻谷,5.12,0.00,0.00,2025-04-29 08:11:04 |
| | | 2,大è±,256.00,0.00,0.00,2025-04-29 08:11:35 |
| | | 3,çç±³,5.12,0.00,0.00,2025-04-29 08:12:00 |
| | | 4,大è±,256.00,0.00,0.00,2025-04-29 11:07:18 |
| | | 5,稻谷,5.12,0.00,0.00,2025-04-29 11:07:44 |
| | | 6,å°éº¦,0.00,0.00,0.00,2025-04-29 12:33:22 |
| | | 7,稻谷,5.12,0.00,0.00,2025-04-29 12:55:03 |
| | | 8,çç±³,5.12,0.00,0.00,2025-04-29 12:55:13 |
| | | 9,大è±,256.00,0.00,0.00,2025-04-29 12:55:21 |
| | | 10,å°éº¦,5.12,0.00,0.00,2025-04-29 12:55:30 |
| | | 11,稻谷,5.12,0.00,0.00,2025-04-29 13:01:25 |
| | | 12,çç±³,10.24,0.00,0.00,2025-04-29 13:01:33 |
| | | 13,大è±,15.36,0.00,0.00,2025-04-29 13:01:41 |
| | | 14,å°éº¦,20.48,0.00,0.00,2025-04-29 13:01:47 |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -$A8 |
| | | -$B- |
| | | -$C+ |
| | | -$D+ |
| | | -$E- |
| | | -$F- |
| | | -$G+ |
| | | -$H+ |
| | | -$I+ |
| | | -$J- |
| | | -$K- |
| | | -$L+ |
| | | -$M- |
| | | -$N+ |
| | | -$O+ |
| | | -$P+ |
| | | -$Q- |
| | | -$R- |
| | | -$S- |
| | | -$T- |
| | | -$U- |
| | | -$V+ |
| | | -$W- |
| | | -$X+ |
| | | -$YD |
| | | -$Z1 |
| | | -cg |
| | | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | -H+ |
| | | -W+ |
| | | -M |
| | | -$M16384,1048576 |
| | | -K$00400000 |
| | | -LE"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -LN"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -w-UNSAFE_TYPE |
| | | -w-UNSAFE_CODE |
| | | -w-UNSAFE_CAST |
¶Ô±ÈÐÂÎļþ |
| | |
| | | [FileVersion] |
| | | Version=7.0 |
| | | [Compiler] |
| | | A=8 |
| | | B=0 |
| | | C=1 |
| | | D=1 |
| | | E=0 |
| | | F=0 |
| | | G=1 |
| | | H=1 |
| | | I=1 |
| | | J=0 |
| | | K=0 |
| | | L=1 |
| | | M=0 |
| | | N=1 |
| | | O=1 |
| | | P=1 |
| | | Q=0 |
| | | R=0 |
| | | S=0 |
| | | T=0 |
| | | U=0 |
| | | V=1 |
| | | W=0 |
| | | X=1 |
| | | Y=1 |
| | | Z=1 |
| | | ShowHints=1 |
| | | ShowWarnings=1 |
| | | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | NamespacePrefix= |
| | | SymbolDeprecated=1 |
| | | SymbolLibrary=1 |
| | | SymbolPlatform=1 |
| | | UnitLibrary=1 |
| | | UnitPlatform=1 |
| | | UnitDeprecated=1 |
| | | HResultCompat=1 |
| | | HidingMember=1 |
| | | HiddenVirtual=1 |
| | | Garbage=1 |
| | | BoundsError=1 |
| | | ZeroNilCompat=1 |
| | | StringConstTruncated=1 |
| | | ForLoopVarVarPar=1 |
| | | TypedConstVarPar=1 |
| | | AsgToTypedConst=1 |
| | | CaseLabelRange=1 |
| | | ForVariable=1 |
| | | ConstructingAbstract=1 |
| | | ComparisonFalse=1 |
| | | ComparisonTrue=1 |
| | | ComparingSignedUnsigned=1 |
| | | CombiningSignedUnsigned=1 |
| | | UnsupportedConstruct=1 |
| | | FileOpen=1 |
| | | FileOpenUnitSrc=1 |
| | | BadGlobalSymbol=1 |
| | | DuplicateConstructorDestructor=1 |
| | | InvalidDirective=1 |
| | | PackageNoLink=1 |
| | | PackageThreadVar=1 |
| | | ImplicitImport=1 |
| | | HPPEMITIgnored=1 |
| | | NoRetVal=1 |
| | | UseBeforeDef=1 |
| | | ForLoopVarUndef=1 |
| | | UnitNameMismatch=1 |
| | | NoCFGFileFound=1 |
| | | MessageDirective=1 |
| | | ImplicitVariants=1 |
| | | UnicodeToLocale=1 |
| | | LocaleToUnicode=1 |
| | | ImagebaseMultiple=1 |
| | | SuspiciousTypecast=1 |
| | | PrivatePropAccessor=1 |
| | | UnsafeType=0 |
| | | UnsafeCode=0 |
| | | UnsafeCast=0 |
| | | [Linker] |
| | | MapFile=0 |
| | | OutputObjs=0 |
| | | ConsoleApp=1 |
| | | DebugInfo=0 |
| | | RemoteSymbols=0 |
| | | MinStackSize=16384 |
| | | MaxStackSize=1048576 |
| | | ImageBase=4194304 |
| | | ExeDescription= |
| | | [Directories] |
| | | OutputDir= |
| | | UnitOutputDir= |
| | | PackageDLLOutputDir= |
| | | PackageDCPOutputDir= |
| | | SearchPath= |
| | | Packages=vcl;rtl;vclx;dbrtl;vcldb;VclSmp;dbexpress;bdertl;vclie;adortl;vclactnband;vclshlctrls;dclOfficeXP;vcldbx;visualclx;visualdbclx;inet;xmlrtl;inetdbbde;inetdbxpress;IndyCore70;IndySystem70;IndyProtocols70;RaizeComponentsVcl;RaizeComponentsVclDb |
| | | Conditionals= |
| | | DebugSourceDirs= |
| | | UsePackages=0 |
| | | [Parameters] |
| | | RunParams= |
| | | HostApplication= |
| | | Launcher= |
| | | UseLauncher=0 |
| | | DebugCWD= |
| | | [Version Info] |
| | | IncludeVerInfo=0 |
| | | AutoIncBuild=0 |
| | | MajorVer=1 |
| | | MinorVer=0 |
| | | Release=0 |
| | | Build=0 |
| | | Debug=0 |
| | | PreRelease=0 |
| | | Special=0 |
| | | Private=0 |
| | | DLL=0 |
| | | Locale=2052 |
| | | CodePage=936 |
| | | [Version Info Keys] |
| | | CompanyName= |
| | | FileDescription= |
| | | FileVersion=1.0.0.0 |
| | | InternalName= |
| | | LegalCopyright= |
| | | LegalTrademarks= |
| | | OriginalFilename= |
| | | ProductName= |
| | | ProductVersion=1.0.0.0 |
| | | Comments= |
| | | [Excluded Packages] |
| | | d:\program files\borland\delphi7\Bin\dclwbm70.bpl=Borland InternetExpress Components |
| | | D:\Program Files\Borland\Delphi7\Bin\dcltee70.bpl=TeeChart Components |
| | | d:\program files\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components |
| | | d:\program files\borland\delphi7\Bin\DCLIB70.bpl=InterBase Data Access Components |
| | | d:\program files\borland\delphi7\Bin\dclmcn70.bpl=Borland DataSnap Connection Components |
| | | D:\Program Files\Borland\Delphi7\Bin\dclmid70.bpl=Borland MyBase DataAccess Components |
| | | d:\program files\borland\delphi7\Bin\dcldbxcds70.bpl=Borland SimpleDataset Component (DBX) |
| | | d:\program files\borland\delphi7\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package |
| | | d:\program files\borland\delphi7\Bin\dclsoap70.bpl=Borland SOAP Components |
| | | d:\program files\borland\delphi7\Bin\dclwebsnap70.bpl=Borland WebSnap Components |
| | | d:\program files\borland\delphi7\Bin\dclite70.bpl=Borland Integrated Translation Environment |
| | | C:\WINDOWS\SysWOW64\ibevnt70.bpl=Borland Interbase Event Alerter Component |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrx7.bpl=FastReport 4.0 Components |
| | | d:\program files\borland\delphi7\Bin\dclindy70.bpl=Internet Direct (Indy) for D7 Property and Component Editors |
¶Ô±ÈÐÂÎļþ |
| | |
| | | program Keyboard; |
| | | |
| | | uses |
| | | Forms, |
| | | uMain in 'uMain.pas' {frmMain}; |
| | | |
| | | {$R *.res} |
| | | |
| | | begin |
| | | Application.Initialize; |
| | | Application.CreateForm(TfrmMain, frmMain); |
| | | Application.Run; |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | object frmMain: TfrmMain |
| | | Left = 192 |
| | | Top = 131 |
| | | Width = 584 |
| | | Height = 301 |
| | | Caption = #35302#23631#34394#25311#38190#30424 |
| | | Color = clBtnFace |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -21 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | Icon.Data = { |
| | | 000001000700404000000100200028420000760000003030000001002000A825 |
| | | 00009E4200002828000001002000681A0000466800002020000001002000A810 |
| | | 0000AE820000181800000100200088090000569300001414000001002000B806 |
| | | 0000DE9C000010100000010020006804000096A3000028000000400000008000 |
| | | 0000010020000000000000420000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000555555032424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424073F3F |
| | | 3F04000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000003F3F3F042E2E2E2C2B2B2B702B2B2B972B2B |
| | | 2BA42C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C |
| | | 2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C |
| | | 2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C |
| | | 2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C |
| | | 2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C |
| | | 2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52C2C2CA52B2B2BA42B2B |
| | | 2B982D2D2D6B2D2D2D2700000003000000000000000000000000000000000000 |
| | | 00000000000000000000242424072B2B2B5D2B2B2BD82B2B2BFB2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2C2C2CD42B2B2B5D2A2A2A060000000000000000000000000000 |
| | | 000000000000000000012B2B2B522C2C2CE62C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CE62A2A2A4E0000000100000000000000000000 |
| | | 000000000000262626142C2C2CBF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BC03030301500000000000000000000 |
| | | 0000000000002B2B2B3B2C2C2CEC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BEE2D2D2D3D00000000000000000000 |
| | | 0000000000002B2B2B572C2C2CF72C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CF82C2C2CC52C2C2CA82C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CC42C2C2CF92C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF72D2D2D5500000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2B2B2BC22A2A2A1E1F1F1F082424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 24072424240724242407242424072929291F2C2C2CC42C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA524242407000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA524242407000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA81F1F1F08000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000001F1F1F082C2C2CAB2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CD62D2D2D432F2F2F202929291F2929291F2929291F2929 |
| | | 291F2929291F2929291F2929291F2929291F2929291F2929291F2929291F2929 |
| | | 291F2929291F2929291F2929291F2929291F2929291F2929291F2929291F2929 |
| | | 291F2929291F2929291F2F2F2F202C2C2C452B2B2BD92C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFE2C2C2CEC2C2C2CE02B2B2BDF2B2B2BDF2B2B2BDF2B2B |
| | | 2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B |
| | | 2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B |
| | | 2BDF2B2B2BDF2B2B2BDF2C2C2CE02C2C2CEC2C2C2CFE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFE2C2C2CF92C2C2CF82C2C2CF82C2C2CFD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFD2C2C2CF82C2C2CF82C2C2CF92C2C2CFE2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2C2C2CF82C2C |
| | | 2CF82B2B2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFE2C2C2CF92C2C2CF82C2C2CF82C2C2CFD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFD2C2C2CF82C2C2CF82C2C2CF92C2C2CFE2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2B2B |
| | | 2BAA2A2A2A602A2A2A5A2C2C2C5B2B2B2B882B2B2BEE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CEC2C2C2C852C2C2C5B2A2A2A5A2A2A2A5F2B2B2BAB2B2B |
| | | 2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BCE2A2A2A6C2A2A2A5A2A2A |
| | | 2A5A2C2C2C6E2B2B2BD22C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2B2B |
| | | 2BAA2A2A2A602A2A2A5A2C2C2C5B2B2B2B882B2B2BEE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CEC2C2C2C852C2C2C5B2A2A2A5A2A2A2A5F2B2B2BAB2B2B |
| | | 2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CE52D2D |
| | | 2D2D0000000000000000000000002424240E2B2B2BB42C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CB12727270D0000000000000000000000002C2C2C2E2C2C |
| | | 2CE62C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2B2B2B6A00000001000000000000 |
| | | 0000000000022B2B2B6A2B2B2BFA2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CE52D2D |
| | | 2D2D0000000000000000000000002424240E2B2B2BB42C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CB12727270D0000000000000000000000002C2C2C2E2C2C |
| | | 2CE62C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002F2F2F202C2C |
| | | 2CE02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002F2F2F202C2C |
| | | 2CE02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002F2F2F202C2C |
| | | 2CE02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002F2F2F202C2C |
| | | 2CE02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CE62B2B |
| | | 2B2F0000000000000000000000002A2A2A0C2C2C2CB32C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CB22727270D0000000000000000000000002B2B2B2F2C2C |
| | | 2CE62C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2B2B2B6A00000001000000000000 |
| | | 0000000000022C2C2C6E2B2B2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CE62B2B |
| | | 2B2F0000000000000000000000002A2A2A0C2C2C2CB32C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CB22727270D0000000000000000000000002B2B2B2F2C2C |
| | | 2CE62C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2C2C |
| | | 2CA82B2B2B5E2B2B2B582A2A2A592C2C2C7F2B2B2BEC2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CED2C2C2C842A2A2A592B2B2B582B2B2B5E2C2C2CA62B2B |
| | | 2BFA2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CD02B2B2B6A2B2B2B582B2B |
| | | 2B582B2B2B6F2B2B2BD32C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2C2C |
| | | 2CA82B2B2B5E2B2B2B582A2A2A592C2C2C7F2B2B2BEC2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CED2C2C2C842A2A2A592B2B2B582B2B2B5E2C2C2CA62B2B |
| | | 2BFA2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFE2C2C2CF92C2C2CF82C2C2CF82B2B2BFC2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFC2C2C2CF82C2C2CF82C2C2CF92C2C2CFE2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2C2C2CF82C2C |
| | | 2CF82B2B2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFE2C2C2CF92C2C2CF82C2C2CF82B2B2BFC2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFC2C2C2CF82C2C2CF82C2C2CF92C2C2CFE2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BF52C2C2CE22C2C2CE02C2C2CE02C2C2CEC2C2C2CFE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFE2C2C2CED2C2C2CE02C2C2CE02C2C2CE22B2B2BF62C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2C2C2CE62C2C2CE02C2C |
| | | 2CE02C2C2CE62B2B2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BF52C2C2CE22C2C2CE02C2C2CE02C2C2CEC2C2C2CFE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFE2C2C2CED2C2C2CE02C2C2CE02C2C2CE22B2B2BF62C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2B2B2BF42A2A |
| | | 2A712A2A2A242F2F2F202F2F2F202C2C2C452B2B2BD82C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CDA2E2E2E482E2E2E212F2F2F202A2A2A242B2B2B752B2B |
| | | 2BF52C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B2BA92D2D2D2D2F2F2F202F2F |
| | | 2F202B2B2B2F2C2C2CAC2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BF42A2A |
| | | 2A712A2A2A242F2F2F202F2F2F202C2C2C452B2B2BD82C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CDA2E2E2E482E2E2E212F2F2F202A2A2A242B2B2B752B2B |
| | | 2BF52C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CE12B2B |
| | | 2B230000000000000000000000001F1F1F082B2B2BAA2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2D2D2DA91F1F1F080000000000000000000000002B2B2B232C2C |
| | | 2CE12C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF92D2D2D5F00000000000000000000 |
| | | 0000000000002A2A2A612C2C2CF92C2C2CFF2C2C2CFF2C2C2CFF2C2C2CE12B2B |
| | | 2B230000000000000000000000001F1F1F082B2B2BAA2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2D2D2DA91F1F1F080000000000000000000000002B2B2B232C2C |
| | | 2CE12C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002F2F2F202C2C |
| | | 2CE02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002F2F2F202C2C |
| | | 2CE02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002D2D2D222C2C |
| | | 2CE12C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82A2A2A5900000000000000000000 |
| | | 0000000000002929295C2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F000000000000000000000000242424072C2C2CA72C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CA5242424070000000000000000000000002D2D2D222C2C |
| | | 2CE12C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002A2A2A5A2C2C2CF82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CEC2B2B |
| | | 2B471C1C1C0924242407242424072F2F2F202C2C2CC32C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CC22A2A2A1E24242407242424071F1F1F082B2B2B472C2C |
| | | 2CEC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFD2B2B2B862727270D242424072424 |
| | | 24072A2A2A0C2C2C2C842C2C2CFC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CEC2B2B |
| | | 2B471C1C1C0924242407242424072F2F2F202C2C2CC32C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CC22A2A2A1E24242407242424071F1F1F082B2B2B472C2C |
| | | 2CEC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF82B2B2B5800000000000000000000 |
| | | 0000000000002B2B2B572C2C2CF72C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2C2C |
| | | 2CDC2B2B2BAA2C2C2CA52C2C2CA62C2C2CC52C2C2CF82C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CF92C2C2CC22C2C2CA62C2C2CA52C2C2CA72B2B2BD72C2C |
| | | 2CFE2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CEC2C2C2CB22C2C2CA52C2C |
| | | 2CA52C2C2CB22C2C2CEC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2C2C |
| | | 2CDC2B2B2BAA2C2C2CA52C2C2CA62C2C2CC52C2C2CF82C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CF92C2C2CC22C2C2CA62C2C2CA52C2C2CA72B2B2BD72C2C |
| | | 2CFE2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF72D2D2D5500000000000000000000 |
| | | 0000000000002B2B2B3B2C2C2CED2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BEE2D2D2D3E00000000000000000000 |
| | | 0000000000002E2E2E162B2B2BC12C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CBF2E2E2E1600000000000000000000 |
| | | 000000000000000000012C2C2C502C2C2CE72C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CE62A2A2A540000000200000000000000000000 |
| | | 000000000000000000002A2A2A062D2D2D602B2B2BD82B2B2BFB2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2BD72A2A2A5F2A2A2A060000000000000000000000000000 |
| | | 0000000000000000000000000000555555032E2E2E2C2B2B2B6F2B2B2B992C2C |
| | | 2CA62C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C |
| | | 2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA72C2C2CA62C2C |
| | | 2C9A2C2C2C6D2C2C2C283F3F3F04000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000555555032424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424072424 |
| | | 2407242424072424240724242407242424072424240724242407242424073F3F |
| | | 3F04000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000000000000000FFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00 |
| | | 00000000007FF00000000000000FE000000000000007C000000000000003C000 |
| | | 000000000003C000000000000003C000000000000003C000000000000003C000 |
| | | 0FFFFFF00003C0000FFFFFF00003C0000FFFFFF00003C000000000000003C000 |
| | | 000000000003C000000000000003C000000000000003C000000000000003C000 |
| | | 000000000003C000000000000003C0700E0180700E03C0700E03C0700E03C070 |
| | | 0E03C0700E03C0700E0180700E03C000000000000003C000000000000003C000 |
| | | 000000000003C000000000000003C000000000000003C000000000000003C000 |
| | | 000000000003C0700E03C0700E03C0700E03C0700E03C0700E03C0700E03C000 |
| | | 000000000003C000000000000003C000000000000003C000000000000003C000 |
| | | 000000000003E000000000000007F00000000000000FFE0000000000003FFFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2800 |
| | | 0000300000006000000001002000000000008025000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000001C1C1C09282828192D2D |
| | | 2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D |
| | | 2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D |
| | | 2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D |
| | | 2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D |
| | | 2D222D2D2D222D2D2D222D2D2D22282828191F1F1F0800000000000000000000 |
| | | 0000000000000000000000000000000000022C2C2C392C2C2CA62C2C2CD42B2B |
| | | 2BDD2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2C2C2CD42A2A2AA12A2A2A36000000020000 |
| | | 00000000000000000000000000002D2D2D382C2C2CD52C2C2CFE2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2C2C2CD52B2B2B350000 |
| | | 00000000000000000000242424072C2C2CA12C2C2CFE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B2BA31F1F |
| | | 1F0800000000000000003131311A2B2B2BD42C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2C2C2CE02C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C |
| | | 2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C |
| | | 2CDF2C2C2CDF2C2C2CDF2B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CD42727 |
| | | 271A00000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BEE2D2D |
| | | 2D5A2A2A2A242B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232A2A2A242C2C2C5B2B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D22000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000002B2B2B232C2C2CDF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D22000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000002A2A2A242C2C2CE02C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CED2B2B |
| | | 2B57272727202929291F2929291F2929291F2929291F2929291F2929291F2929 |
| | | 291F2929291F2929291F2929291F2929291F2929291F2929291F2929291F2929 |
| | | 291F2929291F272727202A2A2A592B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B |
| | | 2BEE2B2B2BDF2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDF2B2B2BEE2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2B2B2BDE2B2B2BDE2B2B2BF02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2B2B2BDD2B2B2BDD2B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B |
| | | 2BEE2B2B2BDD2B2B2BDE2B2B2BF02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2B2B2BDE2B2B2BDE2B2B2BF02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2B2B2BDD2B2B2BDD2B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2B2B2BEF2A2A |
| | | 2A5A2D2D2D222D2D2D222B2B2B5D2C2C2CEF2C2C2CFF2C2C2CFF2B2B2BEE2D2D |
| | | 2D5A2D2D2D222D2D2D222C2C2C5B2C2C2CF02C2C2CFF2C2C2CFF2B2B2BEE2A2A |
| | | 2A592D2D2D222D2D2D222C2C2C5B2B2B2BEE2C2C2CFF2C2C2CFF2B2B2BEF2A2A |
| | | 2A5A2D2D2D222D2D2D222B2B2B5D2C2C2CEF2C2C2CFF2C2C2CFF2B2B2BEE2D2D |
| | | 2D5A2D2D2D222D2D2D222C2C2C5B2C2C2CF02C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CDF2929 |
| | | 291F00000000000000002B2B2B232C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D2200000000000000002D2D2D222C2C2CE02C2C2CFF2C2C2CFF2B2B2BDD2626 |
| | | 262100000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2B2B2BDE2929 |
| | | 291F00000000000000002B2B2B232C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D2200000000000000002D2D2D222C2C2CE02C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CE02727 |
| | | 272000000000000000002B2B2B232C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D2200000000000000002D2D2D222C2C2CE12C2C2CFF2C2C2CFF2C2C2CDC2626 |
| | | 262100000000000000002D2D2D222B2B2BDE2C2C2CFF2C2C2CFF2B2B2BDF2727 |
| | | 272000000000000000002B2B2B232C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D2200000000000000002D2D2D222C2C2CE12C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2B2B2BEF2A2A |
| | | 2A592E2E2E212F2F2F202B2B2B582C2C2CEF2C2C2CFF2C2C2CFF2B2B2BEE2D2D |
| | | 2D5A2E2E2E212E2E2E212D2D2D592B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEE2A2A |
| | | 2A592E2E2E212E2E2E212C2C2C5C2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEF2A2A |
| | | 2A592E2E2E212F2F2F202B2B2B582C2C2CEF2C2C2CFF2C2C2CFF2B2B2BEE2D2D |
| | | 2D5A2E2E2E212E2E2E212D2D2D592B2B2BEF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2B2B2BDD2C2C2CDC2C2C2CED2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEE2C2C2CDC2C2C2CDC2B2B2BEE2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEE2C2C2CDC2B2B2BDD2B2B2BF02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2B2B2BDD2C2C2CDC2C2C2CED2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEE2C2C2CDC2C2C2CDC2B2B2BEE2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CFE2B2B |
| | | 2BEF2C2C2CE12C2C2CE02B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2C2C2CE12C2C2CE12B2B2BF02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2C2C2CE02C2C2CE12B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B |
| | | 2BEF2C2C2CE12C2C2CE02B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEF2C2C2CE12C2C2CE12B2B2BF02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2B2B2BEE2A2A |
| | | 2A592D2D2D222E2E2E212A2A2A5A2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEF2C2C |
| | | 2C5B2D2D2D222D2D2D222C2C2C5C2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEE2D2D |
| | | 2D5A2E2E2E212D2D2D222C2C2C5B2B2B2BF02C2C2CFF2C2C2CFF2B2B2BEE2A2A |
| | | 2A592D2D2D222E2E2E212A2A2A5A2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEF2C2C |
| | | 2C5B2D2D2D222D2D2D222C2C2C5C2B2B2BEF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CDF2727 |
| | | 272000000000000000002B2B2B232C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDF2B2B |
| | | 2B2300000000000000002E2E2E212C2C2CE02C2C2CFF2C2C2CFF2B2B2BDD2626 |
| | | 262100000000000000002D2D2D222B2B2BDE2C2C2CFF2C2C2CFF2B2B2BDE2727 |
| | | 272000000000000000002B2B2B232C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDF2B2B |
| | | 2B2300000000000000002E2E2E212C2C2CE02C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2C2C2CDF2727 |
| | | 272000000000000000002A2A2A242C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D2200000000000000002D2D2D222C2C2CE12C2C2CFF2C2C2CFF2B2B2BDD2626 |
| | | 262100000000000000002D2D2D222B2B2BDE2C2C2CFF2C2C2CFF2B2B2BDE2727 |
| | | 272000000000000000002A2A2A242C2C2CDF2C2C2CFF2C2C2CFF2B2B2BDE2D2D |
| | | 2D2200000000000000002D2D2D222C2C2CE12C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000002E2E2E212B2B2BDD2C2C2CFF2C2C2CFF2B2B2BEF2A2A |
| | | 2A5B2B2B2B232B2B2B232C2C2C5B2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEE2A2A |
| | | 2A592B2B2B232B2B2B232D2D2D5A2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEF2A2A |
| | | 2A5A2B2B2B232B2B2B232A2A2A5A2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEE2A2A |
| | | 2A5B2B2B2B232B2B2B232C2C2C5B2B2B2BEF2C2C2CFF2C2C2CFF2B2B2BEE2A2A |
| | | 2A592B2B2B232B2B2B232D2D2D5A2B2B2BEF2C2C2CFF2C2C2CFF2C2C2CDC2727 |
| | | 272000000000000000003131311A2C2C2CD52C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BF02B2B2BDF2B2B2BDF2B2B2BEF2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEE2B2B2BDE2B2B2BDE2B2B2BEE2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEE2B2B2BDF2B2B2BDE2B2B2BEF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BF02B2B2BDF2B2B2BDF2B2B2BEF2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BEE2B2B2BDE2B2B2BDE2B2B2BEE2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CD42727 |
| | | 271A00000000000000001F1F1F082B2B2BA42C2C2CFE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B2BA33F3F |
| | | 3F080000000000000000000000002E2E2E372B2B2BD72C2C2CFE2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2C2C2CD62C2C2C390000 |
| | | 0000000000000000000000000000000000022C2C2C392C2C2CA62C2C2CD52B2B |
| | | 2BDE2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C |
| | | 2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C |
| | | 2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C |
| | | 2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C2CDF2C2C |
| | | 2CDF2C2C2CDF2C2C2CDF2B2B2BDF2C2C2CD52B2B2BA32C2C2C39000000020000 |
| | | 00000000000000000000000000000000000000000000383838092727271A2B2B |
| | | 2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232B2B2B232B2B2B232F2F2F1B1F1F1F0800000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF |
| | | FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF |
| | | FFFFFFFF0000FFFFFFFFFFFF0000F0000000000F0000C000000000030000C000 |
| | | 0000000300008000000000010000800000000001000080000000000100008001 |
| | | FFFF800100008001FFFF80010000800000000001000080000000000100008000 |
| | | 0000000100008000000000010000800000000001000080000000000100008181 |
| | | 8181818100008181818181810000800000000001000080000000000100008000 |
| | | 0000000100008000000000010000800000000001000080000000000100008181 |
| | | 8181818100008181818181810000800000000001000080000000000100008000 |
| | | 000000010000C000000000030000C000000000030000F0000000000F0000FFFF |
| | | FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF |
| | | FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF |
| | | FFFFFFFF00002800000028000000500000000100200000000000401A00000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0002333333053333330533333305333333053333330533333305333333053333 |
| | | 3305333333053333330533333305333333053333330533333305333333053333 |
| | | 3305333333053333330533333305333333053333330533333305333333053333 |
| | | 3305333333053333330533333305333333053333330533333305000000020000 |
| | | 000000000000000000000000000000000000000000003333330A2B2B2B532C2C |
| | | 2C952C2C2CA52C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C |
| | | 2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C |
| | | 2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C |
| | | 2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA52C2C2C942D2D |
| | | 2D4F3333330A0000000000000000000000002A2A2A062B2B2B7B2B2B2BF02C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BF02B2B2B7A2A2A2A0600000000000000002C2C2C2E2B2B2BE32C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BE42B2B2B2F00000000000000002A2A2A542C2C2CF92C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BEF2C2C |
| | | 2CB32C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C |
| | | 2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CB32B2B |
| | | 2BF02C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CF82B2B2B5200000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CB13636 |
| | | 360E333333053333330533333305333333053333330533333305333333053333 |
| | | 33053333330533333305333333053333330533333305333333053333330F2C2C |
| | | 2CB32C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CA63333 |
| | | 3305000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000333333052C2C |
| | | 2CA82C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BC22D2D |
| | | 2D2D2F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F |
| | | 2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202C2C2C2E2C2C |
| | | 2CC42C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2B2B |
| | | 2BE42B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BE42B2B |
| | | 2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFD2B2B2BFA2B2B2BFC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BFC2B2B2BFA2C2C2CFD2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B2BFB2B2B |
| | | 2BFB2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFD2B2B2BFA2B2B2BFC2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFC2B2B2BFA2C2C2CFD2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2B2B |
| | | 2BF52B2B2B872A2A2A592A2A2A6B2B2B2BDD2C2C2CFF2C2C2CFF2C2C2CDB2B2B |
| | | 2B692A2A2A592D2D2D882B2B2BF52C2C2CFF2C2C2CFE2B2B2BB02C2C2C5C2B2B |
| | | 2B5D2C2C2CB32C2C2CFE2C2C2CFF2B2B2BF52B2B2B872A2A2A592A2A2A6B2B2B |
| | | 2BDD2C2C2CFF2C2C2CFF2C2C2CDB2B2B2B692A2A2A592D2D2D882B2B2BF52C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2B2B |
| | | 2BDF2D2D2D22000000002A2A2A062B2B2BAA2C2C2CFF2C2C2CFF2C2C2CA82A2A |
| | | 2A06000000002B2B2B232C2C2CE02C2C2CFF2B2B2BFA2C2C2C5B000000000000 |
| | | 00002C2C2C5C2B2B2BFA2C2C2CFF2B2B2BDF2D2D2D22000000002A2A2A062B2B |
| | | 2BAA2C2C2CFF2C2C2CFF2C2C2CA82A2A2A06000000002B2B2B232C2C2CE02C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2B2B |
| | | 2BE02D2D2D22000000002A2A2A062B2B2BAA2C2C2CFF2C2C2CFF2C2C2CA82A2A |
| | | 2A06000000002B2B2B232C2C2CE12C2C2CFF2B2B2BFA2D2D2D5A000000000000 |
| | | 00002B2B2B5D2B2B2BFB2C2C2CFF2B2B2BE02D2D2D22000000002A2A2A062B2B |
| | | 2BAA2C2C2CFF2C2C2CFF2C2C2CA82A2A2A06000000002B2B2B232C2C2CE12C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2B2B |
| | | 2BF42B2B2B862B2B2B582D2D2D662C2C2CDB2C2C2CFF2C2C2CFF2C2C2CDB2C2C |
| | | 2C682B2B2B582C2C2C852B2B2BF42C2C2CFF2C2C2CFE2C2C2CB12C2C2C5B2C2C |
| | | 2C5C2B2B2BB42C2C2CFE2C2C2CFF2B2B2BF42B2B2B862B2B2B582D2D2D662C2C |
| | | 2CDB2C2C2CFF2C2C2CFF2C2C2CDB2C2C2C682B2B2B582C2C2C852B2B2BF42C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFD2B2B2BFA2B2B2BFB2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BFB2B2B2BFA2C2C2CFD2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B2BFA2B2B |
| | | 2BFA2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFD2B2B2BFA2B2B2BFB2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2B2B2BFA2C2C2CFD2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CFE2C2C2CEC2B2B2BDF2B2B2BE42B2B2BFB2C2C2CFF2C2C2CFF2B2B2BFB2B2B |
| | | 2BE52B2B2BDF2C2C2CED2C2C2CFE2C2C2CFF2C2C2CFF2B2B2BF52C2C2CE02C2C |
| | | 2CE12B2B2BF52C2C2CFF2C2C2CFF2C2C2CFE2C2C2CEC2B2B2BDF2B2B2BE42B2B |
| | | 2BFB2C2C2CFF2C2C2CFF2B2B2BFB2B2B2BE52B2B2BDF2C2C2CED2C2C2CFE2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2C2C |
| | | 2CEB2C2C2C502E2E2E212C2C2C2E2C2C2CC42C2C2CFF2C2C2CFF2C2C2CC42B2B |
| | | 2B2F2E2E2E212C2C2C512C2C2CEC2C2C2CFF2C2C2CFD2B2B2B862B2B2B232B2B |
| | | 2B232A2A2A892C2C2CFD2C2C2CFF2C2C2CEB2C2C2C502E2E2E212C2C2C2E2C2C |
| | | 2CC42C2C2CFF2C2C2CFF2C2C2CC42B2B2B2F2E2E2E212C2C2C512C2C2CEC2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2B2B |
| | | 2BDE2F2F2F2000000000333333052C2C2CA82C2C2CFF2C2C2CFF2C2C2CA63333 |
| | | 3305000000002E2E2E212C2C2CDF2C2C2CFF2B2B2BFA2B2B2B58000000000000 |
| | | 00002A2A2A5A2B2B2BFA2C2C2CFF2B2B2BDE2F2F2F2000000000333333052C2C |
| | | 2CA82C2C2CFF2C2C2CFF2C2C2CA633333305000000002E2E2E212C2C2CDF2C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A592B2B2BFA2C2C2CFF2B2B |
| | | 2BE42C2C2C2E333333053636360E2C2C2CB32C2C2CFF2C2C2CFF2C2C2CB13636 |
| | | 360E333333052B2B2B2F2C2C2CE52C2C2CFF2B2B2BFC2C2C2C682A2A2A062A2A |
| | | 2A062B2B2B692B2B2BFB2C2C2CFF2B2B2BE42C2C2C2E333333053636360E2C2C |
| | | 2CB32C2C2CFF2C2C2CFF2C2C2CB13636360E333333052B2B2B2F2C2C2CE52C2C |
| | | 2CFF2B2B2BFA2B2B2B5700000000000000002A2A2A542C2C2CF92C2C2CFF2B2B |
| | | 2BFB2C2C2CC52C2C2CA62C2C2CB22B2B2BF02C2C2CFF2C2C2CFF2B2B2BEF2C2C |
| | | 2CB12C2C2CA62B2B2BC22B2B2BFB2C2C2CFF2C2C2CFF2C2C2CDB2B2B2BA92C2C |
| | | 2CA82C2C2CDB2C2C2CFF2C2C2CFF2B2B2BFB2C2C2CC52C2C2CA62C2C2CB22B2B |
| | | 2BF02C2C2CFF2C2C2CFF2B2B2BEF2C2C2CB12C2C2CA62B2B2BC22B2B2BFB2C2C |
| | | 2CFF2C2C2CF92B2B2B5200000000000000002B2B2B2F2C2C2CE42C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2B2B2BE42A2A2A3000000000000000002A2A2A062B2B2B7C2C2C2CF12C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CF12B2B2B7C242424070000000000000000000000002E2E2E0B2B2B2B532C2C |
| | | 2C962C2C2CA72C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C |
| | | 2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C |
| | | 2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C |
| | | 2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA72C2C2C962C2C |
| | | 2C512E2E2E0B0000000000000000000000000000000000000000000000000000 |
| | | 0002333333053333330533333305333333053333330533333305333333053333 |
| | | 3305333333053333330533333305333333053333330533333305333333053333 |
| | | 3305333333053333330533333305333333053333330533333305333333053333 |
| | | 3305333333053333330533333305333333053333330533333305000000030000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000FFFFFFFFFF000000FFFFFFFFFF000000FFFF |
| | | FFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFF |
| | | FFFFFF000000F00000000F000000C00000000300000080000000010000008000 |
| | | 000001000000800000000100000080000000010000008007FFE0010000008000 |
| | | 0000010000008000000001000000800000000100000080000000010000008000 |
| | | 0000010000008204182041000000820418204100000080000000010000008000 |
| | | 0000010000008000000001000000800000000100000080000000010000008204 |
| | | 1820410000008000000001000000800000000100000080000000010000008000 |
| | | 000001000000C000000003000000F00000000F000000FFFFFFFFFF000000FFFF |
| | | FFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFF |
| | | FFFFFF000000FFFFFFFFFF000000280000002000000040000000010020000000 |
| | | 0000801000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000002C2C |
| | | 2C172A2A2A482A2A2A592D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D |
| | | 2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D |
| | | 2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D2D5A2D2D |
| | | 2D5A2A2A2A592B2B2B47303030150000000000000000000000002D2D2D222C2C |
| | | 2CB72B2B2BF52B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B |
| | | 2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B |
| | | 2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B |
| | | 2BFB2B2B2BFB2B2B2BF42B2B2BB62E2E2E2100000000000000012C2C2C7D2C2C |
| | | 2CFC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2B2B |
| | | 2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B |
| | | 2BFB2B2B2BFB2B2B2BFB2B2B2BFB2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFD2A2A2A7D000000013F3F3F042B2B2BA32C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFE2C2C2CA72B2B |
| | | 2B5D2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C |
| | | 2C5B2C2C2C5B2C2C2C5B2C2C2C5C2B2B2BA92C2C2CFE2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CA23F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2C2C2C5B0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002C2C2C5C2B2B2BFB2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFD2D2D2D7B2727 |
| | | 27202929291F2929291F2929291F2929291F2929291F2929291F2929291F2929 |
| | | 291F2929291F2929291F2F2F2F202C2C2C7E2B2B2BFD2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CF12C2C |
| | | 2CE02B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B |
| | | 2BDF2B2B2BDF2B2B2BDF2C2C2CE02C2C2CF22C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CF92C2C2CBD2C2C2CA72C2C2CD62C2C2CFF2C2C2CFE2C2C2CD52C2C |
| | | 2CA72C2C2CBE2B2B2BFA2C2C2CFF2C2C2CEB2C2C2CAD2B2B2BAE2C2C2CEC2C2C |
| | | 2CFF2C2C2CF92C2C2CBD2C2C2CA72C2C2CD62C2C2CFF2C2C2CFE2C2C2CD52C2C |
| | | 2CA72C2C2CBE2B2B2BFA2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CE22C2C2C28333333052D2D2D652B2B2BFC2B2B2BFC2D2D2D643333 |
| | | 33052B2B2B292C2C2CE32C2C2CFF2C2C2CAC2E2E2E0B2E2E2E0B2A2A2AAD2C2C |
| | | 2CFF2C2C2CE22C2C2C28333333052D2D2D652B2B2BFC2B2B2BFC2D2D2D643333 |
| | | 33052B2B2B292C2C2CE32C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CE32C2C2C283F3F3F042D2D2D642B2B2BFC2B2B2BFC2D2D2D643F3F |
| | | 3F042B2B2B292B2B2BE32C2C2CFF2A2A2AAC3333330A2E2E2E0B2B2B2BAE2C2C |
| | | 2CFF2C2C2CE32C2C2C283F3F3F042D2D2D642B2B2BFC2B2B2BFC2D2D2D643F3F |
| | | 3F042B2B2B292B2B2BE32C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2B2B2BFA2B2B2BBC2B2B2BA52B2B2BD32C2C2CFF2C2C2CFF2C2C2CD42B2B |
| | | 2BA52B2B2BBC2C2C2CF92C2C2CFF2C2C2CEB2C2C2CAC2C2C2CAD2C2C2CED2C2C |
| | | 2CFF2B2B2BFA2B2B2BBC2B2B2BA52B2B2BD32C2C2CFF2C2C2CFF2C2C2CD42B2B |
| | | 2BA52B2B2BBC2C2C2CF92C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CFE2B2B2BEA2C2C2CE12C2C2CF22C2C2CFF2C2C2CFF2C2C2CF22C2C |
| | | 2CE12B2B2BEA2C2C2CFE2C2C2CFF2B2B2BFA2B2B2BE32B2B2BE42B2B2BFA2C2C |
| | | 2CFF2C2C2CFE2B2B2BEA2C2C2CE12C2C2CF22C2C2CFF2C2C2CFF2C2C2CF22C2C |
| | | 2CE12B2B2BEA2C2C2CFE2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2B2B2BE92B2B2B472E2E2E212C2C2C7E2B2B2BFD2B2B2BFD2C2C2C7E2E2E |
| | | 2E212E2E2E482C2C2CEA2C2C2CFF2B2B2BBC2B2B2B292B2B2B292A2A2ABE2C2C |
| | | 2CFF2B2B2BE92B2B2B472E2E2E212C2C2C7E2B2B2BFD2B2B2BFD2C2C2C7E2E2E |
| | | 2E212E2E2E482C2C2CEA2C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA52C2C |
| | | 2CFF2C2C2CDF27272720000000002C2C2C5C2B2B2BFB2B2B2BFB2C2C2C5B0000 |
| | | 00002E2E2E212C2C2CE12C2C2CFF2B2B2BA63F3F3F043F3F3F042A2A2AA72C2C |
| | | 2CFF2C2C2CDF27272720000000002C2C2C5C2B2B2BFB2B2B2BFB2C2C2C5B0000 |
| | | 00002E2E2E212C2C2CE12C2C2CFF2B2B2BA43F3F3F043F3F3F042B2B2BA32C2C |
| | | 2CFF2C2C2CF22C2C2C7E2C2C2C5B2C2C2CA82C2C2CFE2C2C2CFE2C2C2CA72C2C |
| | | 2C5B2C2C2C7D2C2C2CF22C2C2CFF2C2C2CD42B2B2B642B2B2B642C2C2CD52C2C |
| | | 2CFF2C2C2CF22C2C2C7E2C2C2C5B2C2C2CA82C2C2CFE2C2C2CFE2C2C2CA72C2C |
| | | 2C5B2C2C2C7D2C2C2CF22C2C2CFF2C2C2CA23F3F3F04000000012C2C2C7E2C2C |
| | | 2CFD2C2C2CFF2C2C2CFD2B2B2BFB2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFE2B2B |
| | | 2BFB2C2C2CFC2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BFB2B2B2BFB2C2C2CFF2C2C |
| | | 2CFF2C2C2CFF2C2C2CFD2B2B2BFB2C2C2CFE2C2C2CFF2C2C2CFF2C2C2CFE2B2B |
| | | 2BFB2C2C2CFC2C2C2CFF2C2C2CFD2C2C2C7E00000001000000002D2D2D222C2C |
| | | 2CB92B2B2BF52B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B |
| | | 2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B |
| | | 2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B2BFB2B2B |
| | | 2BFB2B2B2BFB2B2B2BF52C2C2CB82D2D2D220000000000000000000000002C2C |
| | | 2C172D2D2D492C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C |
| | | 2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C |
| | | 2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C2C5B2C2C |
| | | 2C5B2C2C2C5B2D2D2D492E2E2E16000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFC0000003800000010000000000000000003F |
| | | FC00000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000004200420000000000000000080000001C0000003FFFF |
| | | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28000000180000003000 |
| | | 0000010020000000000060090000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000002303030152F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F |
| | | 2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F2F202F2F |
| | | 2F202F2F2F202F2F2F202F2F2F202F2F2F203030301500000002000000000000 |
| | | 00022B2B2B572B2B2BCC2B2B2BDE2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B |
| | | 2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B |
| | | 2BDF2B2B2BDF2B2B2BDF2B2B2BDF2B2B2BDE2B2B2BCB2C2C2C56000000023030 |
| | | 30152B2B2BCC2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFD2C2C2CE72C2C |
| | | 2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C |
| | | 2CE72C2C2CFD2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BCB242424152F2F |
| | | 2F202B2B2BDF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CE62E2E2E422E2E |
| | | 2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E2E212D2D |
| | | 2D432C2C2CE72C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BE62F2F2F412727 |
| | | 2720272727202727272027272720272727202727272027272720272727202E2E |
| | | 2E422C2C2CE72C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFD2C2C2CE62B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2C2C |
| | | 2CE62C2C2CFD2C2C2CFF2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CFD2C2C2CE72C2C2CE72C2C2CFD2C2C2CFD2C2C2CE62C2C |
| | | 2CE72C2C2CFD2C2C2CFD2C2C2CE62C2C2CE72C2C2CFD2C2C2CFD2C2C2CE72C2C |
| | | 2CE72C2C2CFD2C2C2CFD2C2C2CE62C2C2CE72C2C2CFD2B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2B2B2BE62E2E2E422D2D2D432C2C2CE72B2B2BE62E2E2E422D2D |
| | | 2D432C2C2CE72C2C2CE62B2B2B412E2E2E422C2C2CE72B2B2BE62E2E2E422D2D |
| | | 2D432C2C2CE72B2B2BE62E2E2E422D2D2D432C2C2CE72B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CE62F2F2F412B2B2B412C2C2CE72B2B2BE62B2B2B412A2A |
| | | 2A422C2C2CE72B2B2BE62B2B2B402E2E2E422C2C2CE72C2C2CE62F2F2F412B2B |
| | | 2B412C2C2CE72B2B2BE62B2B2B412A2A2A422C2C2CE72B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CFD2C2C2CE62C2C2CE52C2C2CFD2C2C2CFD2C2C2CE62C2C |
| | | 2CE62C2C2CFD2C2C2CFD2C2C2CE62C2C2CE62C2C2CFD2C2C2CFD2C2C2CE62C2C |
| | | 2CE52C2C2CFD2C2C2CFD2C2C2CE62C2C2CE62C2C2CFD2B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CFD2C2C2CE72C2C2CE62C2C2CFD2C2C2CFD2C2C2CE72C2C |
| | | 2CE72C2C2CFD2C2C2CFD2C2C2CE62C2C2CE72C2C2CFD2C2C2CFD2C2C2CE72C2C |
| | | 2CE62C2C2CFD2C2C2CFD2C2C2CE72C2C2CE72C2C2CFD2B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CE62E2E2E422D2D2D432C2C2CE72C2C2CE72E2E2E422D2D |
| | | 2D432C2C2CE72C2C2CE62A2A2A422D2D2D432C2C2CE72C2C2CE62E2E2E422D2D |
| | | 2D432C2C2CE72C2C2CE72E2E2E422D2D2D432C2C2CE72B2B2BDE2929291F2F2F |
| | | 2F202B2B2BDF2C2C2CE62E2E2E422E2E2E422C2C2CE72B2B2BE62F2F2F412E2E |
| | | 2E422C2C2CE72B2B2BE62B2B2B412E2E2E422C2C2CE72C2C2CE62E2E2E422E2E |
| | | 2E422C2C2CE72B2B2BE62F2F2F412E2E2E422C2C2CE72B2B2BDE2929291F3030 |
| | | 30152B2B2BCD2C2C2CFD2C2C2CE72C2C2CE62C2C2CFD2C2C2CFD2C2C2CE62C2C |
| | | 2CE62C2C2CFD2C2C2CFD2C2C2CE62C2C2CE62C2C2CFD2C2C2CFD2C2C2CE72C2C |
| | | 2CE62C2C2CFD2C2C2CFD2C2C2CE62C2C2CE62C2C2CFD2B2B2BCC303030150000 |
| | | 00022B2B2B582B2B2BCD2C2C2CDF2C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C |
| | | 2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CE02C2C |
| | | 2CE02C2C2CE02C2C2CE02C2C2CE02C2C2CDF2B2B2BCC2B2B2B58000000020000 |
| | | 0000000000022E2E2E162E2E2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E |
| | | 2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E2E212E2E |
| | | 2E212E2E2E212E2E2E212E2E2E212E2E2E213030301500000002000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000000000000000FFFF |
| | | FF00FFFFFF00FFFFFF00FFFFFF00800001000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000080000100FFFFFF00FFFFFF00FFFFFF00FFFFFF002800 |
| | | 0000140000002800000001002000000000009006000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000032A2A |
| | | 2A0C3333330F3333330F3333330F3333330F3333330F3333330F3333330F3333 |
| | | 330F3333330F3333330F3333330F3333330F3333330F3333330F2A2A2A0C0000 |
| | | 000200000000242424072D2D2D712B2B2BC12B2B2BC62B2B2BC62B2B2BC62B2B |
| | | 2BC62B2B2BC62B2B2BC62B2B2BC62B2B2BC62B2B2BC62B2B2BC62B2B2BC62B2B |
| | | 2BC62B2B2BC62B2B2BC62B2B2BC02B2B2B6F242424072E2E2E2C2C2C2CE62C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2B2B2BF62B2B2BCD2B2B2BC82B2B2BC82B2B2BC82B2B |
| | | 2BC82B2B2BC82B2B2BC82B2B2BCD2B2B2BF62C2C2CFF2C2C2CFF2C2C2CFF2C2C |
| | | 2CE62F2F2F2B2C2C2C392B2B2BF02C2C2CFF2C2C2CFF2C2C2CFF2B2B2BCC3131 |
| | | 311F3333330F3333330F3333330F3333330F3333330F3333330F3131311F2B2B |
| | | 2BCE2C2C2CFF2C2C2CFF2C2C2CFF2B2B2BF02E2E2E372C2C2C392B2B2BF02C2C |
| | | 2CFF2C2C2CFF2C2C2CFF2C2C2CE72C2C2C8A2C2C2C7F2C2C2C7F2C2C2C7F2C2C |
| | | 2C7F2C2C2C7F2C2C2C7F2C2C2C8B2B2B2BE82C2C2CFF2C2C2CFF2C2C2CFF2B2B |
| | | 2BF02E2E2E372C2C2C392B2B2BF02B2B2BFA2C2C2CF32C2C2CFD2C2C2CFD2C2C |
| | | 2CF32B2B2BFA2C2C2CFF2B2B2BF62B2B2BF62C2C2CFF2B2B2BFA2C2C2CF32C2C |
| | | 2CFD2C2C2CFD2C2C2CF32B2B2BFA2B2B2BF02E2E2E372C2C2C392B2B2BF02B2B |
| | | 2BA32D2D2D492B2B2BD92B2B2BD72E2E2E482B2B2BA42B2B2BF52B2B2B6A2D2D |
| | | 2D6B2B2B2BF52B2B2BA32D2D2D492B2B2BD92B2B2BD72E2E2E482B2B2BA42B2B |
| | | 2BF02E2E2E372C2C2C392B2B2BF02B2B2BA32B2B2B472B2B2BD82B2B2BD72B2B |
| | | 2B472B2B2BA32B2B2BF52B2B2B692D2D2D6B2B2B2BF52B2B2BA32B2B2B472B2B |
| | | 2BD82B2B2BD72B2B2B472B2B2BA32B2B2BF02E2E2E372C2C2C392B2B2BF02B2B |
| | | 2BFA2C2C2CF22C2C2CFD2C2C2CFD2C2C2CF22B2B2BFA2C2C2CFF2B2B2BF52B2B |
| | | 2BF52C2C2CFF2B2B2BFA2C2C2CF22C2C2CFD2C2C2CFD2C2C2CF22B2B2BFA2B2B |
| | | 2BF02E2E2E372C2C2C392B2B2BF02B2B2BC72B2B2B8C2B2B2BE82B2B2BE82B2B |
| | | 2B8C2C2C2CC82B2B2BFA2C2C2CA22B2B2BA42B2B2BFA2B2B2BC72B2B2B8C2B2B |
| | | 2BE82B2B2BE82B2B2B8C2C2C2CC82B2B2BF02E2E2E372C2C2C392B2B2BF02B2B |
| | | 2B8C3131311F2B2B2BCE2B2B2BCC3131311F2B2B2B8C2C2C2CF22E2E2E472E2E |
| | | 2E482C2C2CF22B2B2B8C3131311F2B2B2BCE2B2B2BCC3131311F2B2B2B8C2B2B |
| | | 2BF02E2E2E372D2D2D2D2C2C2CE62B2B2BE82B2B2BCD2B2B2BF62B2B2BF52B2B |
| | | 2BCC2B2B2BE82C2C2CFD2B2B2BD72B2B2BD72C2C2CFD2B2B2BE82B2B2BCD2B2B |
| | | 2BF62B2B2BF52B2B2BCC2B2B2BE82C2C2CE62E2E2E2C1F1F1F082C2C2C722C2C |
| | | 2CC22B2B2BC82B2B2BC82B2B2BC82B2B2BC82B2B2BC82B2B2BC82B2B2BC82B2B |
| | | 2BC82B2B2BC82B2B2BC82B2B2BC82B2B2BC82B2B2BC82B2B2BC82B2B2BC22A2A |
| | | 2A711F1F1F0800000000000000032727270D3333330F3333330F3333330F3333 |
| | | 330F3333330F3333330F3333330F3333330F3333330F3333330F3333330F3333 |
| | | 330F3333330F3333330F2727270D000000030000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000FFFFF000FFFFF000FFFFF0008000100000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000080001000FFFFF000FFFFF000FFFFF00028000000100000002000 |
| | | 0000010020000000000040040000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000013F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F |
| | | 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F0400000001000000002A2A |
| | | 2A122C2C2C7D2C2C2CA52C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C |
| | | 2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA62C2C2CA52B2B2B7C2D2D2D112B2B |
| | | 2B4D2B2B2BF62C2C2CFF2C2C2CFF2B2B2BE42B2B2BAA2C2C2CA82C2C2CA82C2C |
| | | 2CA82C2C2CA82B2B2BAA2B2B2BE52C2C2CFF2C2C2CFF2B2B2BF62C2C2C4B2A2A |
| | | 2A592B2B2BFB2C2C2CFF2C2C2CFF2C2C2CB62D2D2D272B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232C2C2C282C2C2CB82C2C2CFF2C2C2CFF2B2B2BFB2B2B2B572A2A |
| | | 2A592B2B2BFB2C2C2CFC2C2C2CFE2B2B2BF52B2B2BDE2B2B2BDF2B2B2BDD2B2B |
| | | 2BDD2B2B2BDF2B2B2BDE2B2B2BF52C2C2CFE2C2C2CFC2B2B2BFB2B2B2B572A2A |
| | | 2A592B2B2BE92B2B2B752B2B2BCB2C2C2CCA2B2B2B762C2C2CEB2B2B2B982B2B |
| | | 2B992C2C2CEB2B2B2B752B2B2BCB2C2C2CCA2B2B2B762B2B2BE92B2B2B572A2A |
| | | 2A592B2B2BE92B2B2B742C2C2CCA2C2C2CC92B2B2B742C2C2CEB2B2B2B972B2B |
| | | 2B982C2C2CEB2B2B2B742C2C2CCA2C2C2CC92B2B2B742B2B2BE92B2B2B572A2A |
| | | 2A592B2B2BF82B2B2BE42B2B2BF52B2B2BF52B2B2BE42B2B2BFC2C2C2CEB2C2C |
| | | 2CEC2B2B2BFC2B2B2BE42B2B2BF52B2B2BF52B2B2BE42C2C2CF82B2B2B572A2A |
| | | 2A592C2C2CE22B2B2B462C2C2CB82C2C2CB72B2B2B472B2B2BE42B2B2B742B2B |
| | | 2B762B2B2BE32B2B2B462C2C2CB82C2C2CB72B2B2B472C2C2CE22B2B2B572B2B |
| | | 2B4D2C2C2CED2B2B2BB72B2B2BE42B2B2BE32B2B2BB62B2B2BF52C2C2CC92C2C |
| | | 2CC92B2B2BF52B2B2BB72B2B2BE42B2B2BE32B2B2BB62C2C2CED2B2B2B4C2A2A |
| | | 2A122C2C2C7F2C2C2CA72C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C |
| | | 2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA82C2C2CA72C2C2C7E2A2A2A120000 |
| | | 0000000000013F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F |
| | | 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F0400000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000000000000000FFFF |
| | | 0000FFFF00008001000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000080010000FFFF0000FFFF0000} |
| | | OldCreateOrder = False |
| | | Position = poDesktopCenter |
| | | PixelsPerInch = 96 |
| | | TextHeight = 28 |
| | | object edtSelect: TEdit |
| | | Left = 15 |
| | | Top = 10 |
| | | Width = 161 |
| | | Height = 36 |
| | | BorderStyle = bsNone |
| | | Color = clBtnFace |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clGray |
| | | Font.Height = -24 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 0 |
| | | end |
| | | object edtText: TEdit |
| | | Left = 180 |
| | | Top = 10 |
| | | Width = 161 |
| | | Height = 39 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -24 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 1 |
| | | end |
| | | object sBitBtn50: TsBitBtn |
| | | Left = 345 |
| | | Top = 5 |
| | | Width = 51 |
| | | Height = 46 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -16 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 2 |
| | | OnClick = sBitBtn50Click |
| | | Glyph.Data = { |
| | | 36100000424D3610000000000000360000002800000020000000200000000100 |
| | | 20000000000000100000C40E0000C40E00000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000003F3F3F04303030152B2B |
| | | 2B1D2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A |
| | | 2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2B2B2B1D303030153F3F3F040000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000002E2E2E162B2B2B862C2C2CCF2C2C |
| | | 2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C |
| | | 2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C2CDB2C2C2CCF2C2C2C852626 |
| | | 2614000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000333333052C2C2C892B2B2BFA2C2C2CF12B2B |
| | | 2BE32C2C2CE22C2C2CE22C2C2CE22C2C2CE22C2C2CE22C2C2CE22C2C2CE22C2C |
| | | 2CE22C2C2CE22C2C2CE22C2C2CE22C2C2CE22B2B2BE32C2C2CF12B2B2BFA2B2B |
| | | 2B863F3F3F040000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002A2A2A182B2B2BD32C2C2CF02B2B2B5D2A2A |
| | | 2A242B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B2B232B2B |
| | | 2B232B2B2B232B2B2B232B2B2B232B2B2B232A2A2A242B2B2B5D2C2C2CF02B2B |
| | | 2BD22C2C2C170000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF272727200000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000002E2E2E212C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 000000000000000000002A2A2A0C2A2A2A0C0000000000000000000000000000 |
| | | 00002A2A2A0C2A2A2A0C0000000000000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F102C2C2CA22C2C2CA03333330F00000000000000002F2F |
| | | 2F102C2C2CA22C2C2CA02222220F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CDF2B2B2BDD3131311F00000000000000002E2E |
| | | 2E212B2B2BDE2C2C2CDE2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDE2F2F2F2000000000000000002E2E |
| | | 2E212B2B2BDF2C2C2CDF2929291F00000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDE2F2F2F200000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002E2E2E212B2B2BDE2C2C2CDE2A2A2A1E0000 |
| | | 0000000000002F2F2F202C2C2CE02B2B2BDD3131311F00000000000000002E2E |
| | | 2E212B2B2BDE2C2C2CDE2A2A2A1E00000000000000003131311F2C2C2CDF2B2B |
| | | 2BDD3131311F0000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002F2F2F102C2C2CA62C2C2CA53333330F0000 |
| | | 0000000000002F2F2F102B2B2BA42C2C2CA13333330F00000000000000002F2F |
| | | 2F102B2B2BA32C2C2CA23333330F00000000000000003333330F2C2C2CA22C2C |
| | | 2C9F3333330F0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000003333330F3333330F000000000000 |
| | | 000000000000000000002727270D2727270D0000000000000000000000000000 |
| | | 00002727270D2727270D000000000000000000000000000000002727270D2A2A |
| | | 2A0C000000000000000000000000000000000000000000000000000000000000 |
| | | 00002F2F2F102929291F27272720272727202727272027272720272727202727 |
| | | 2720272727202727272027272720272727202727272027272720272727202727 |
| | | 2720272727202727272027272720272727202727272027272720272727202727 |
| | | 27202727272027272720272727202F2F2F100000000000000000000000002424 |
| | | 240E2B2B2BA52B2B2BDD2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B2BDE2B2B |
| | | 2BDE2B2B2BDE2B2B2BDE2B2B2BDD2B2B2BA42727270D00000000000000002727 |
| | | 270D2C2C2CA12C2C2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CE12B2B2BFB2B2B |
| | | 2BFA2C2C2CE12C2C2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C |
| | | 2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CE12B2B2BFB2B2B2BFB2C2C2CE12C2C |
| | | 2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CA12727270D00000000000000000000 |
| | | 00003636360E2B2B2B1D2A2A2A1E2A2A2A1E2A2A2A1E2B2B2B3A2C2C2CE42C2C |
| | | 2CE22B2B2B3A2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A2A1E2A2A |
| | | 2A1E2A2A2A1E2A2A2A1E2A2A2A1E2B2B2B3B2B2B2BE32C2C2CE32C2C2C392A2A |
| | | 2A1E2A2A2A1E2A2A2A1E2A2A2A1E3333330F0000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000002F2F2F202C2C2CE02B2B |
| | | 2BDF2E2E2E210000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000002D2D2D222B2B2BDF2C2C2CDF2929291F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000002A2A2A182C2C2CD32B2B |
| | | 2BEF2C2C2C5B2D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D2D222D2D |
| | | 2D222D2D2D222D2D2D222D2D2D222B2B2B582B2B2BEF2B2B2BD32A2A2A180000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000333333052D2D2D882B2B |
| | | 2BFA2C2C2CF12C2C2CE22C2C2CE12C2C2CE12C2C2CE12C2C2CE12C2C2CE12C2C |
| | | 2CE12C2C2CE12C2C2CE12C2C2CE12B2B2BEF2B2B2BFA2B2B2B87333333050000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000002E2E2E162B2B |
| | | 2B862B2B2BD12C2C2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C |
| | | 2CDC2C2C2CDC2C2C2CDC2C2C2CDC2C2C2CD02B2B2B872E2E2E16000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000003F3F |
| | | 3F042E2E2E162A2A2A1E2929291F2929291F2929291F2929291F2929291F2929 |
| | | 291F2929291F2929291F2A2A2A1E2E2E2E163F3F3F0400000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000} |
| | | SkinData.SkinSection = 'BUTTON' |
| | | end |
| | | object sBitBtn51: TsBitBtn |
| | | Left = 400 |
| | | Top = 5 |
| | | Width = 51 |
| | | Height = 46 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -16 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 3 |
| | | OnClick = sBitBtn51Click |
| | | Glyph.Data = { |
| | | 36100000424D3610000000000000360000002800000020000000200000000100 |
| | | 20000000000000100000C40E0000C40E00000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000242424072D2D2D4E2A2A2A2400000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000242424072C2C2C6C2C2C2CEC2B2B2BBB28282826000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000242424072D2D2D6B2B2B2BEE2C2C2CFD2C2C2CFC2B2B2BBB282828260000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000002424 |
| | | 24072A2A2A6B2B2B2BEE2C2C2CF12B2B2B8E2B2B2BC62C2C2CFC2B2B2BBA2828 |
| | | 2826000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000242424072D2D |
| | | 2D6B2C2C2CED2C2C2CF12B2B2B75383838092C2C2C2E2C2C2CC52B2B2BFC2B2B |
| | | 2BBA282828260000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000242424072C2C2C6C2B2B |
| | | 2BEE2B2B2BF12B2B2B751C1C1C0900000000000000012D2D2D2D2C2C2CC52C2C |
| | | 2CFC2B2B2BBB2828282600000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000242424072D2D2D6B2B2B2BEE2C2C |
| | | 2CF12B2B2B751C1C1C09000000000000000000000000000000012C2C2C2E2C2C |
| | | 2CC52C2C2CFC2B2B2BBB28282826000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000002B2B2B582C2C2CED2C2C2CF12B2B |
| | | 2B751C1C1C090000000000000000000000000000000000000000000000012D2D |
| | | 2D2D2C2C2CC52C2C2CFC2B2B2BBA282828260000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000002A2A2A712C2C2CE02B2B2B743838 |
| | | 3809000000000000000000000000000000000000000000000000000000000000 |
| | | 00002C2C2C2E2C2C2CC52B2B2BFC2B2B2BBA2828282600000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000002727270D2D2D2D27242424070000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000012D2D2D2D2C2C2CC52C2C2CFC2B2B2BBB28282826000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000012C2C2C2E2C2C2CC52C2C2CFC2B2B2BBB282828260000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000012D2D2D2D2C2C2CC52C2C2CFC2B2B2BBA2828 |
| | | 2826000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000002C2C2C2E2C2C2CC52B2B2BFC2B2B |
| | | 2BBA282828260000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000012D2D2D2D2C2C2CC52C2C |
| | | 2CFC2B2B2BBB2828282600000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000012C2C2C2E2C2C |
| | | 2CC52C2C2CFC2B2B2BBB28282826000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000012D2D |
| | | 2D2D2C2C2CC52C2C2CFC2B2B2BBA2B2B2B230000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00002C2C2C2E2C2C2CC52B2B2BFC2C2C2C7E0000000100000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000012A2A2A2A2B2B2B862E2E2E370000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000001000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000} |
| | | SkinData.SkinSection = 'BUTTON' |
| | | end |
| | | object sBitBtn52: TsBitBtn |
| | | Left = 455 |
| | | Top = 5 |
| | | Width = 51 |
| | | Height = 46 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -16 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 4 |
| | | OnClick = sBitBtn52Click |
| | | Glyph.Data = { |
| | | 36090000424D3609000000000000360000002800000018000000180000000100 |
| | | 20000000000000090000C40E0000C40E00000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000013F3F3F085C5C5C0B5C5C |
| | | 5C0B5C5C5C0B5C5C5C0B5C5C5C0B5C5C5C0B5C5C5C0B5C5C5C0B5C5C5C0B5C5C |
| | | 5C0B5C5C5C0B5C5C5C0B5C5C5C0B5C5C5C0B4C4C4C0A7F7F7F02000000000000 |
| | | 0000000000000000000000000000000000015050503F515151AF505050BF5050 |
| | | 50BF505050BF505050BF505050BF505050BF505050BF505050BF505050BF5050 |
| | | 50BF505050BF505050BF505050BF505050BF515151B950505068000000000000 |
| | | 000000000000000000000000000050505023505050CA515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF505050D4000000000000 |
| | | 000000000000000000004E4E4E0D5050509E505050FD515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151DC000000000000 |
| | | 000000000000555555035151516A515151F4515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151DC000000000000 |
| | | 0000000000005050503C505050E1515151FF515151FF515151FF515151FF5050 |
| | | 50FD505050FD515151FF515151FF515151FF515151FF515151FF515151FF5050 |
| | | 50FD505050FD515151FF515151FF515151FF515151FF515151DC000000000000 |
| | | 00004E4E4E1A505050BE515151FE515151FF515151FF515151FF505050FA5050 |
| | | 508F50505092515151F5515151FF515151FF515151FF515151FF515151F25050 |
| | | 508950505098505050FC515151FF515151FF515151FF515151DC000000005454 |
| | | 54095050508E515151FB515151FF515151FF515151FF515151FF515151F85050 |
| | | 50655555550F50505085515151F5515151FF515151FF515151F2505050784E4E |
| | | 4E0D52525273515151FB515151FF515151FF515151FF515151DC7F7F7F025151 |
| | | 515B505050F0515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51E25151514E5555550F51515186505050F6505050F35151517A4E4E4E0D5252 |
| | | 525A515151E7515151FF515151FF515151FF515151FF515151DC5151512F5151 |
| | | 51D8515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151DF5050504C4F4F4F10505050855151517A5B5B5B0E515151585050 |
| | | 50E6515151FF515151FF515151FF515151FF515151FF515151DC505050AB5151 |
| | | 51FE515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151DF50505049545454095454540951515154515151E55151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151DC505050AB5151 |
| | | 51FE515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151F550505072555555033F3F3F0451515181515151F85151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151DC4F4F4F305151 |
| | | 51D9515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF505050F7505050885555550F4E4E4E445050503C54545412505050945050 |
| | | 50F9515151FF515151FF515151FF515151FF515151FF515151DC7F7F7F025050 |
| | | 505C505050F0515151FF515151FF515151FF515151FF515151FF515151FF5050 |
| | | 50F75050508C4F4F4F104F4F4F4D505050E0515151D9515151424C4C4C144F4F |
| | | 4F99505050F9515151FF515151FF515151FF515151FF515151DC000000005454 |
| | | 54095050508F515151FB515151FF515151FF515151FF515151FF505050FC5151 |
| | | 51934B4B4B1151515148515151DE515151FF515151FF505050D75252523E4848 |
| | | 4815505050A1515151FD515151FF515151FF515151FF515151DC000000000000 |
| | | 00004B4B4B1B515151BF515151FE515151FF515151FF515151FF505050F65252 |
| | | 525D4F4F4F4D515151DB515151FF515151FF515151FF515151FF505050D44E4E |
| | | 4E445151516A505050FA515151FF515151FF515151FF515151DC000000000000 |
| | | 0000000000005050503C515151E2515151FF515151FF515151FF515151FE5050 |
| | | 50E9515151EC515151FF515151FF515151FF515151FF515151FF515151FE5050 |
| | | 50EA515151EB515151FF515151FF515151FF515151FF515151DC000000000000 |
| | | 000000000000555555035151516B515151F5515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151DC000000000000 |
| | | 000000000000000000004E4E4E0D5050509F505050FD515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151DC000000000000 |
| | | 000000000000000000000000000050505023515151CB515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF515151FF515151FF5151 |
| | | 51FF515151FF515151FF515151FF515151FF515151FF505050D4000000000000 |
| | | 0000000000000000000000000000000000014F4F4F40505050B1515151C05151 |
| | | 51C0515151C0515151C0515151C0515151C0515151C0515151C0515151C05151 |
| | | 51C0515151C0515151C0515151C0515151C0505050BB50505069000000000000 |
| | | 000000000000000000000000000000000000000000015F5F5F085555550C5555 |
| | | 550C5555550C5555550C5555550C5555550C5555550C5555550C5555550C5555 |
| | | 550C5555550C5555550C5555550C5555550C4C4C4C0A7F7F7F02000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000} |
| | | SkinData.SkinSection = 'BUTTON' |
| | | end |
| | | object sBitBtn53: TsBitBtn |
| | | Left = 510 |
| | | Top = 5 |
| | | Width = 51 |
| | | Height = 46 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -16 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 5 |
| | | OnClick = sBitBtn53Click |
| | | Glyph.Data = { |
| | | 36100000424D3610000000000000360000002800000020000000200000000100 |
| | | 20000000000000100000C40E0000C40E00000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000040000001B0000 |
| | | 001F000000140000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000140000001F0000001B000000040000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000001C000000C40000 |
| | | 00DF0000008F0000000300000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000300000090000000DF000000C30000001B0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000020000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF0000001F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000020000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF0000001F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000020000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF0000001F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000000400000004000000040000000400000023000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF000000220000 |
| | | 0004000000040000000400000004000000010000000000000000000000000000 |
| | | 00000000003B000000A1000000A4000000A4000000A4000000AF000000F40000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000F3000000AF0000 |
| | | 00A4000000A4000000A4000000A10000003A0000000000000000000000000000 |
| | | 00000000005B000000FB000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FB0000005A0000000000000000000000000000 |
| | | 000000000050000000DD000000E0000000E0000000E0000000E0000000E00000 |
| | | 00E0000000900000000400000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000091000000E0000000E0000000E00000 |
| | | 00E0000000E0000000E0000000DD0000004F0000000000000000000000000000 |
| | | 00000000000B0000001F00000020000000200000002000000020000000200000 |
| | | 0020000000140000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000150000002000000020000000200000 |
| | | 002000000020000000200000001F0000000B0000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000B0000001E0000001F0000001F0000001F0000001F0000001F0000 |
| | | 001F000000140000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000140000001F0000001F0000001F0000 |
| | | 001F0000001F0000001F0000001E0000000B0000000000000000000000000000 |
| | | 000000000050000000DC000000DF000000DF000000DF000000DF000000DF0000 |
| | | 00DF0000008F0000000300000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000300000090000000DF000000DF000000DF0000 |
| | | 00DF000000DF000000DF000000DC0000004F0000000000000000000000000000 |
| | | 00000000005B000000FB000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FB0000005A0000000000000000000000000000 |
| | | 00000000003B000000A3000000A5000000A5000000A5000000B0000000F40000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000F4000000B00000 |
| | | 00A5000000A5000000A5000000A30000003A0000000000000000000000000000 |
| | | 0000000000020000000400000004000000040000000400000024000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF000000230000 |
| | | 0004000000040000000400000004000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000020000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF0000001F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000020000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF0000001F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000020000000E00000 |
| | | 00FF000000A40000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000004000000A5000000FF000000DF0000001F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000001C000000C50000 |
| | | 00E0000000900000000400000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000091000000E0000000C40000001B0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000040000001C0000 |
| | | 0020000000140000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000015000000200000001C000000040000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000} |
| | | SkinData.SkinSection = 'BUTTON' |
| | | end |
| | | object Button27: TButton |
| | | Tag = 27 |
| | | Left = 15 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '1' |
| | | TabOrder = 6 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button28: TButton |
| | | Tag = 28 |
| | | Left = 70 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '2' |
| | | TabOrder = 7 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button29: TButton |
| | | Tag = 29 |
| | | Left = 125 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '3' |
| | | TabOrder = 8 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button30: TButton |
| | | Tag = 30 |
| | | Left = 180 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '4' |
| | | TabOrder = 9 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button31: TButton |
| | | Tag = 31 |
| | | Left = 235 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '5' |
| | | TabOrder = 10 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button32: TButton |
| | | Tag = 32 |
| | | Left = 290 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '6' |
| | | TabOrder = 11 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button33: TButton |
| | | Tag = 33 |
| | | Left = 345 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '7' |
| | | TabOrder = 12 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button34: TButton |
| | | Tag = 34 |
| | | Left = 400 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '8' |
| | | TabOrder = 13 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button35: TButton |
| | | Tag = 35 |
| | | Left = 455 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '9' |
| | | TabOrder = 14 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button36: TButton |
| | | Tag = 36 |
| | | Left = 510 |
| | | Top = 55 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '0' |
| | | TabOrder = 15 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button1: TButton |
| | | Tag = 1 |
| | | Left = 15 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'A' |
| | | TabOrder = 16 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button2: TButton |
| | | Tag = 2 |
| | | Left = 235 |
| | | Top = 205 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'B' |
| | | TabOrder = 17 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button3: TButton |
| | | Tag = 3 |
| | | Left = 125 |
| | | Top = 205 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'C' |
| | | TabOrder = 18 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button4: TButton |
| | | Tag = 4 |
| | | Left = 125 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'D' |
| | | TabOrder = 19 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button5: TButton |
| | | Tag = 5 |
| | | Left = 125 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'E' |
| | | TabOrder = 20 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button6: TButton |
| | | Tag = 6 |
| | | Left = 180 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'F' |
| | | TabOrder = 21 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button7: TButton |
| | | Tag = 7 |
| | | Left = 235 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'G' |
| | | TabOrder = 22 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button8: TButton |
| | | Tag = 8 |
| | | Left = 290 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'H' |
| | | TabOrder = 23 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button9: TButton |
| | | Tag = 9 |
| | | Left = 400 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'I' |
| | | TabOrder = 24 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button10: TButton |
| | | Tag = 10 |
| | | Left = 345 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'J' |
| | | TabOrder = 25 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button11: TButton |
| | | Tag = 11 |
| | | Left = 400 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'K' |
| | | TabOrder = 26 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button12: TButton |
| | | Tag = 12 |
| | | Left = 455 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'L' |
| | | TabOrder = 27 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button13: TButton |
| | | Tag = 13 |
| | | Left = 345 |
| | | Top = 205 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'M' |
| | | TabOrder = 28 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button14: TButton |
| | | Tag = 14 |
| | | Left = 290 |
| | | Top = 205 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'N' |
| | | TabOrder = 29 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button15: TButton |
| | | Tag = 15 |
| | | Left = 455 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'O' |
| | | TabOrder = 30 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button16: TButton |
| | | Tag = 16 |
| | | Left = 510 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'P' |
| | | TabOrder = 31 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button17: TButton |
| | | Tag = 17 |
| | | Left = 15 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'Q' |
| | | TabOrder = 32 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button18: TButton |
| | | Tag = 18 |
| | | Left = 180 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'R' |
| | | TabOrder = 33 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button19: TButton |
| | | Tag = 19 |
| | | Left = 70 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'S' |
| | | TabOrder = 34 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button20: TButton |
| | | Tag = 20 |
| | | Left = 235 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'T' |
| | | TabOrder = 35 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button21: TButton |
| | | Tag = 21 |
| | | Left = 345 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'U' |
| | | TabOrder = 36 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button22: TButton |
| | | Tag = 22 |
| | | Left = 180 |
| | | Top = 205 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'V' |
| | | TabOrder = 37 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button23: TButton |
| | | Tag = 23 |
| | | Left = 70 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'W' |
| | | TabOrder = 38 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button24: TButton |
| | | Tag = 24 |
| | | Left = 70 |
| | | Top = 205 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'X' |
| | | TabOrder = 39 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button25: TButton |
| | | Tag = 25 |
| | | Left = 290 |
| | | Top = 105 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'Y' |
| | | TabOrder = 40 |
| | | OnClick = Button1Click |
| | | end |
| | | object Button26: TButton |
| | | Tag = 26 |
| | | Left = 15 |
| | | Top = 205 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = 'Z' |
| | | TabOrder = 41 |
| | | OnClick = Button1Click |
| | | end |
| | | object btnZh: TButton |
| | | Left = 400 |
| | | Top = 205 |
| | | Width = 161 |
| | | Height = 46 |
| | | Caption = #20999#25442#36755#20837#27861 |
| | | TabOrder = 42 |
| | | OnClick = btnZhClick |
| | | end |
| | | object Button37: TButton |
| | | Tag = 37 |
| | | Left = 510 |
| | | Top = 155 |
| | | Width = 51 |
| | | Height = 46 |
| | | Caption = '.' |
| | | TabOrder = 43 |
| | | OnClick = Button1Click |
| | | end |
| | | end |
¶Ô±ÈÐÂÎļþ |
| | |
| | | unit uMain; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
| | | Dialogs, StdCtrls, XpMan, Buttons, sBitBtn; |
| | | |
| | | type |
| | | TfrmMain = class(TForm) |
| | | edtSelect: TEdit; |
| | | edtText: TEdit; |
| | | sBitBtn50: TsBitBtn; |
| | | sBitBtn51: TsBitBtn; |
| | | sBitBtn52: TsBitBtn; |
| | | sBitBtn53: TsBitBtn; |
| | | Button27: TButton; |
| | | Button28: TButton; |
| | | Button29: TButton; |
| | | Button30: TButton; |
| | | Button31: TButton; |
| | | Button32: TButton; |
| | | Button33: TButton; |
| | | Button34: TButton; |
| | | Button35: TButton; |
| | | Button36: TButton; |
| | | Button1: TButton; |
| | | Button2: TButton; |
| | | Button3: TButton; |
| | | Button4: TButton; |
| | | Button5: TButton; |
| | | Button6: TButton; |
| | | Button7: TButton; |
| | | Button8: TButton; |
| | | Button9: TButton; |
| | | Button10: TButton; |
| | | Button11: TButton; |
| | | Button12: TButton; |
| | | Button13: TButton; |
| | | Button14: TButton; |
| | | Button15: TButton; |
| | | Button16: TButton; |
| | | Button17: TButton; |
| | | Button18: TButton; |
| | | Button19: TButton; |
| | | Button20: TButton; |
| | | Button21: TButton; |
| | | Button22: TButton; |
| | | Button23: TButton; |
| | | Button24: TButton; |
| | | Button25: TButton; |
| | | Button26: TButton; |
| | | btnZh: TButton; |
| | | Button37: TButton; |
| | | procedure sBitBtn50Click(Sender: TObject); |
| | | procedure sBitBtn51Click(Sender: TObject); |
| | | procedure sBitBtn52Click(Sender: TObject); |
| | | procedure sBitBtn53Click(Sender: TObject); |
| | | procedure btnZhClick(Sender: TObject); |
| | | procedure Button1Click(Sender: TObject); |
| | | private |
| | | { Private declarations } |
| | | public |
| | | { Public declarations } |
| | | glInkOutput : String; |
| | | procedure InsertStringAtCursor(EditControl: TEdit; Str: string); |
| | | procedure DeleteCharsBeforeCursor(EditControl: TEdit; Count: Integer=1); |
| | | end; |
| | | |
| | | var |
| | | frmMain: TfrmMain; |
| | | |
| | | implementation |
| | | |
| | | {$R *.dfm} |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // 模ææä¸åéæ¾æé® |
| | | procedure SimulateKeyPress(KeyCode: Word); |
| | | begin |
| | | keybd_event(KeyCode, MapVirtualKey(KeyCode, 0), 0, 0); |
| | | keybd_event(KeyCode, MapVirtualKey(KeyCode, 0), KEYEVENTF_KEYUP, 0); |
| | | end; |
| | | |
| | | // 模ææä¸åéæ¾ç»åé® |
| | | procedure SimulateCombinationKeyPress(KeyCode1, KeyCode2: Word); |
| | | begin |
| | | keybd_event(KeyCode1, MapVirtualKey(KeyCode1, 0), 0, 0); |
| | | keybd_event(KeyCode2, MapVirtualKey(KeyCode2, 0), 0, 0); |
| | | keybd_event(KeyCode2, MapVirtualKey(KeyCode2, 0), KEYEVENTF_KEYUP, 0); |
| | | keybd_event(KeyCode1, MapVirtualKey(KeyCode1, 0), KEYEVENTF_KEYUP, 0); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //ä»å
æ 夿å
¥å符 |
| | | procedure TfrmMain.InsertStringAtCursor(EditControl: TEdit; Str: string); |
| | | begin |
| | | // ä¿åå½åå
æ ä½ç½® |
| | | EditControl.SelStart := EditControl.SelStart; |
| | | EditControl.SelLength := 0; // ä¸éæ©ä»»ä½ææ¬ï¼ç¡®ä¿åªæå
¥è䏿¿æ¢ |
| | | EditControl.SelText := Str; // æå
¥å符串 |
| | | end; |
| | | |
| | | //èªå®ä¹å½æ°ï¼ä»å
æ å¤å é¤å符 |
| | | procedure TfrmMain.DeleteCharsBeforeCursor(EditControl: TEdit; Count: Integer=1); |
| | | var |
| | | CursorPos, NewStart: Integer; |
| | | begin |
| | | CursorPos := EditControl.SelStart; |
| | | if CursorPos >= Count then |
| | | begin |
| | | NewStart := CursorPos - Count; // è®¡ç®æ°çéæ©èµ·ç¹ |
| | | EditControl.SelStart := NewStart; |
| | | EditControl.SelLength := Count; // éæ©Count个å符 |
| | | EditControl.SelText := ''; // å é¤éå®çææ¬ |
| | | end |
| | | else |
| | | begin |
| | | // 妿Count大äºå
æ ä½ç½®ï¼åå 餿æå¨å
æ ä¹åçå符 |
| | | EditControl.SelStart := 0; |
| | | EditControl.SelLength := CursorPos; |
| | | EditControl.SelText := ''; |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //æ¸
餿æè¾å
¥ |
| | | procedure TfrmMain.sBitBtn50Click(Sender: TObject); |
| | | begin |
| | | edtSelect.Clear; |
| | | end; |
| | | |
| | | //确认å符 |
| | | procedure TfrmMain.sBitBtn51Click(Sender: TObject); |
| | | begin |
| | | //æå¾
éåæåæ·è´å°edtTextä¸ |
| | | InsertStringAtCursor(edtText, Trim(edtSelect.Text)); |
| | | end; |
| | | |
| | | //å é¤å符 |
| | | procedure TfrmMain.sBitBtn52Click(Sender: TObject); |
| | | begin |
| | | DeleteCharsBeforeCursor(edtText); |
| | | end; |
| | | |
| | | //æ·è´è¾å
¥å
容ï¼éåº |
| | | procedure TfrmMain.sBitBtn53Click(Sender: TObject); |
| | | begin |
| | | //å°ç»ææ´æ°å°å
¨å±åé |
| | | glInkOutput := edtText.Text; |
| | | Close(); |
| | | end; |
| | | |
| | | // 忢å°ä¸æè¾å
¥æ³ |
| | | procedure TfrmMain.btnZhClick(Sender: TObject); |
| | | begin |
| | | // åè®¾ä½¿ç¨ Ctrl + ç©ºæ ¼åæ¢è¾å
¥æ³ |
| | | SimulateCombinationKeyPress(VK_CONTROL, VK_SPACE); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å符æé®å¤çç¨åº |
| | | procedure TfrmMain.Button1Click(Sender: TObject); |
| | | var |
| | | KeyChar: Char; |
| | | KeyCode: Word; |
| | | begin |
| | | //å±å¹é®çè¾å
¥åæ¯ |
| | | if TButton(Sender).Tag<=37 then begin |
| | | KeyChar := TButton(Sender).Caption[1]; // æåæé® Caption å符 |
| | | KeyCode := VkKeyScan(KeyChar); |
| | | SimulateKeyPress(KeyCode); |
| | | end; |
| | | edtSelect.SetFocus; |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -$A8 |
| | | -$B- |
| | | -$C+ |
| | | -$D+ |
| | | -$E- |
| | | -$F- |
| | | -$G+ |
| | | -$H+ |
| | | -$I+ |
| | | -$J- |
| | | -$K- |
| | | -$L+ |
| | | -$M- |
| | | -$N+ |
| | | -$O+ |
| | | -$P+ |
| | | -$Q- |
| | | -$R- |
| | | -$S- |
| | | -$T- |
| | | -$U- |
| | | -$V+ |
| | | -$W- |
| | | -$X+ |
| | | -$YD |
| | | -$Z1 |
| | | -cg |
| | | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | -H+ |
| | | -W+ |
| | | -M |
| | | -$M16384,1048576 |
| | | -K$00400000 |
| | | -LE"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -LN"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -w-UNSAFE_TYPE |
| | | -w-UNSAFE_CODE |
| | | -w-UNSAFE_CAST |
¶Ô±ÈÐÂÎļþ |
| | |
| | | [FileVersion] |
| | | Version=7.0 |
| | | [Compiler] |
| | | A=8 |
| | | B=0 |
| | | C=1 |
| | | D=1 |
| | | E=0 |
| | | F=0 |
| | | G=1 |
| | | H=1 |
| | | I=1 |
| | | J=0 |
| | | K=0 |
| | | L=1 |
| | | M=0 |
| | | N=1 |
| | | O=1 |
| | | P=1 |
| | | Q=0 |
| | | R=0 |
| | | S=0 |
| | | T=0 |
| | | U=0 |
| | | V=1 |
| | | W=0 |
| | | X=1 |
| | | Y=1 |
| | | Z=1 |
| | | ShowHints=1 |
| | | ShowWarnings=1 |
| | | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | NamespacePrefix= |
| | | SymbolDeprecated=1 |
| | | SymbolLibrary=1 |
| | | SymbolPlatform=1 |
| | | UnitLibrary=1 |
| | | UnitPlatform=1 |
| | | UnitDeprecated=1 |
| | | HResultCompat=1 |
| | | HidingMember=1 |
| | | HiddenVirtual=1 |
| | | Garbage=1 |
| | | BoundsError=1 |
| | | ZeroNilCompat=1 |
| | | StringConstTruncated=1 |
| | | ForLoopVarVarPar=1 |
| | | TypedConstVarPar=1 |
| | | AsgToTypedConst=1 |
| | | CaseLabelRange=1 |
| | | ForVariable=1 |
| | | ConstructingAbstract=1 |
| | | ComparisonFalse=1 |
| | | ComparisonTrue=1 |
| | | ComparingSignedUnsigned=1 |
| | | CombiningSignedUnsigned=1 |
| | | UnsupportedConstruct=1 |
| | | FileOpen=1 |
| | | FileOpenUnitSrc=1 |
| | | BadGlobalSymbol=1 |
| | | DuplicateConstructorDestructor=1 |
| | | InvalidDirective=1 |
| | | PackageNoLink=1 |
| | | PackageThreadVar=1 |
| | | ImplicitImport=1 |
| | | HPPEMITIgnored=1 |
| | | NoRetVal=1 |
| | | UseBeforeDef=1 |
| | | ForLoopVarUndef=1 |
| | | UnitNameMismatch=1 |
| | | NoCFGFileFound=1 |
| | | MessageDirective=1 |
| | | ImplicitVariants=1 |
| | | UnicodeToLocale=1 |
| | | LocaleToUnicode=1 |
| | | ImagebaseMultiple=1 |
| | | SuspiciousTypecast=1 |
| | | PrivatePropAccessor=1 |
| | | UnsafeType=0 |
| | | UnsafeCode=0 |
| | | UnsafeCast=0 |
| | | [Linker] |
| | | MapFile=0 |
| | | OutputObjs=0 |
| | | ConsoleApp=1 |
| | | DebugInfo=0 |
| | | RemoteSymbols=0 |
| | | MinStackSize=16384 |
| | | MaxStackSize=1048576 |
| | | ImageBase=4194304 |
| | | ExeDescription= |
| | | [Directories] |
| | | OutputDir= |
| | | UnitOutputDir= |
| | | PackageDLLOutputDir= |
| | | PackageDCPOutputDir= |
| | | SearchPath= |
| | | Packages=vcl;rtl;vclx;dbrtl;vcldb;VclSmp;dbexpress;bdertl;vclie;adortl;vclactnband;vclshlctrls;dclOfficeXP;vcldbx;visualclx;visualdbclx;inet;xmlrtl;inetdbbde;inetdbxpress;IndyCore70;IndySystem70;IndyProtocols70;RaizeComponentsVcl;RaizeComponentsVclDb; |
| | | Conditionals= |
| | | DebugSourceDirs= |
| | | UsePackages=0 |
| | | [Parameters] |
| | | RunParams= |
| | | HostApplication= |
| | | Launcher= |
| | | UseLauncher=0 |
| | | DebugCWD= |
| | | [Version Info] |
| | | IncludeVerInfo=0 |
| | | AutoIncBuild=0 |
| | | MajorVer=1 |
| | | MinorVer=0 |
| | | Release=0 |
| | | Build=0 |
| | | Debug=0 |
| | | PreRelease=0 |
| | | Special=0 |
| | | Private=0 |
| | | DLL=0 |
| | | Locale=2052 |
| | | CodePage=936 |
| | | [Version Info Keys] |
| | | CompanyName= |
| | | FileDescription= |
| | | FileVersion=1.0.0.0 |
| | | InternalName= |
| | | LegalCopyright= |
| | | LegalTrademarks= |
| | | OriginalFilename= |
| | | ProductName= |
| | | ProductVersion=1.0.0.0 |
| | | Comments= |
| | | [Excluded Packages] |
| | | d:\program files\borland\delphi7\Bin\dclwbm70.bpl=Borland InternetExpress Components |
| | | d:\program files\borland\delphi7\Bin\dclindy70.bpl=Internet Direct (Indy) for D7 Property and Component Editors |
| | | D:\Program Files\Borland\Delphi7\Bin\dcltee70.bpl=TeeChart Components |
| | | d:\program files\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components |
| | | d:\program files\borland\delphi7\Bin\DCLIB70.bpl=InterBase Data Access Components |
| | | d:\program files\borland\delphi7\Bin\dclmcn70.bpl=Borland DataSnap Connection Components |
| | | D:\Program Files\Borland\Delphi7\Bin\dclmid70.bpl=Borland MyBase DataAccess Components |
| | | d:\program files\borland\delphi7\Bin\dcldbxcds70.bpl=Borland SimpleDataset Component (DBX) |
| | | d:\program files\borland\delphi7\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package |
| | | d:\program files\borland\delphi7\Bin\dclsoap70.bpl=Borland SOAP Components |
| | | d:\program files\borland\delphi7\Bin\dclwebsnap70.bpl=Borland WebSnap Components |
| | | d:\program files\borland\delphi7\Bin\dclite70.bpl=Borland Integrated Translation Environment |
| | | C:\WINDOWS\SysWOW64\ibevnt70.bpl=Borland Interbase Event Alerter Component |
¶Ô±ÈÐÂÎļþ |
| | |
| | | program Project1; |
| | | |
| | | uses |
| | | Forms, |
| | | Unit1 in 'Unit1.pas' {Form1}; |
| | | |
| | | {$R *.res} |
| | | |
| | | begin |
| | | Application.Initialize; |
| | | Application.CreateForm(TForm1, Form1); |
| | | Application.Run; |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | object Form1: TForm1 |
| | | Left = 192 |
| | | Top = 131 |
| | | Width = 536 |
| | | Height = 348 |
| | | Caption = 'Form1' |
| | | Color = clBtnFace |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -21 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | OldCreateOrder = False |
| | | PixelsPerInch = 96 |
| | | TextHeight = 28 |
| | | object Button1: TButton |
| | | Left = 100 |
| | | Top = 130 |
| | | Width = 136 |
| | | Height = 56 |
| | | Caption = #21551#21160#25163#20889#26495 |
| | | TabOrder = 0 |
| | | OnClick = Button1Click |
| | | end |
| | | object Edit1: TEdit |
| | | Left = 85 |
| | | Top = 60 |
| | | Width = 241 |
| | | Height = 36 |
| | | TabOrder = 1 |
| | | end |
| | | end |
¶Ô±ÈÐÂÎļþ |
| | |
| | | unit Unit1; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
| | | Dialogs, StdCtrls, TlHelp32, // ç¨äºè¿ç¨æä½ |
| | | ShellAPI, ComObj, ActiveX; |
| | | |
| | | type |
| | | TForm1 = class(TForm) |
| | | Button1: TButton; |
| | | Edit1: TEdit; |
| | | procedure Button1Click(Sender: TObject); |
| | | private |
| | | { Private declarations } |
| | | public |
| | | { Public declarations } |
| | | end; |
| | | |
| | | var |
| | | Form1: TForm1; |
| | | |
| | | implementation |
| | | |
| | | {$R *.dfm} |
| | | |
| | | procedure KillTabTipProcess; |
| | | var |
| | | ContinueLoop: BOOL; |
| | | FSnapshotHandle: THandle; |
| | | FProcessEntry32: TProcessEntry32; |
| | | hProcess: THandle; |
| | | begin |
| | | FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); |
| | | if FSnapshotHandle <> INVALID_HANDLE_VALUE then |
| | | begin |
| | | FProcessEntry32.dwSize := SizeOf(FProcessEntry32); |
| | | ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); |
| | | |
| | | while ContinueLoop do |
| | | begin |
| | | if ('TabTip.exe' = string(FProcessEntry32.szExeFile)) then |
| | | begin |
| | | hProcess := OpenProcess(PROCESS_TERMINATE, False, FProcessEntry32.th32ProcessID); |
| | | if hProcess <> 0 then |
| | | begin |
| | | TerminateProcess(hProcess, 0); |
| | | CloseHandle(hProcess); |
| | | end; |
| | | end; |
| | | ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); |
| | | end; |
| | | CloseHandle(FSnapshotHandle); |
| | | end; |
| | | end; |
| | | |
| | | procedure OpenTabTip; |
| | | var |
| | | TabTipPath: string; |
| | | Tip: OleVariant; |
| | | begin |
| | | TabTipPath := 'C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe'; |
| | | |
| | | Writeln('IsNewVisable show TabTip'); |
| | | CoInitialize(nil); |
| | | try |
| | | Tip := CreateComObject(CLSID_UIHostNoLaunch) as IDispatch; |
| | | if VarIsClear(Tip) then |
| | | begin |
| | | Writeln('tip is nullptr'); |
| | | Exit; |
| | | end; |
| | | (Tip as ITipInvocation).Toggle(GetDesktopWindow); // æ¾ç¤ºè§¦æ¸é®ç |
| | | finally |
| | | CoUninitialize; |
| | | end; |
| | | |
| | | end; |
| | | |
| | | procedure TForm1.Button1Click(Sender: TObject); |
| | | begin |
| | | KillTabTipProcess; // ç¡®ä¿æ²¡ææ®ççTabTipè¿ç¨ |
| | | //ShellExecute(0, nil, 'C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe', nil, nil, SW_SHOWNORMAL); |
| | | OpenTabTip; |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -$A8 |
| | | -$B- |
| | | -$C+ |
| | | -$D+ |
| | | -$E- |
| | | -$F- |
| | | -$G+ |
| | | -$H+ |
| | | -$I+ |
| | | -$J- |
| | | -$K- |
| | | -$L+ |
| | | -$M- |
| | | -$N+ |
| | | -$O+ |
| | | -$P+ |
| | | -$Q- |
| | | -$R- |
| | | -$S- |
| | | -$T- |
| | | -$U- |
| | | -$V+ |
| | | -$W- |
| | | -$X+ |
| | | -$YD |
| | | -$Z1 |
| | | -cg |
| | | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | -H+ |
| | | -W+ |
| | | -M |
| | | -$M16384,1048576 |
| | | -K$00400000 |
| | | -LE"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -LN"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -w-UNSAFE_TYPE |
| | | -w-UNSAFE_CODE |
| | | -w-UNSAFE_CAST |
¶Ô±ÈÐÂÎļþ |
| | |
| | | [FileVersion] |
| | | Version=7.0 |
| | | [Compiler] |
| | | A=8 |
| | | B=0 |
| | | C=1 |
| | | D=1 |
| | | E=0 |
| | | F=0 |
| | | G=1 |
| | | H=1 |
| | | I=1 |
| | | J=0 |
| | | K=0 |
| | | L=1 |
| | | M=0 |
| | | N=1 |
| | | O=1 |
| | | P=1 |
| | | Q=0 |
| | | R=0 |
| | | S=0 |
| | | T=0 |
| | | U=0 |
| | | V=1 |
| | | W=0 |
| | | X=1 |
| | | Y=1 |
| | | Z=1 |
| | | ShowHints=1 |
| | | ShowWarnings=1 |
| | | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | NamespacePrefix= |
| | | SymbolDeprecated=1 |
| | | SymbolLibrary=1 |
| | | SymbolPlatform=1 |
| | | UnitLibrary=1 |
| | | UnitPlatform=1 |
| | | UnitDeprecated=1 |
| | | HResultCompat=1 |
| | | HidingMember=1 |
| | | HiddenVirtual=1 |
| | | Garbage=1 |
| | | BoundsError=1 |
| | | ZeroNilCompat=1 |
| | | StringConstTruncated=1 |
| | | ForLoopVarVarPar=1 |
| | | TypedConstVarPar=1 |
| | | AsgToTypedConst=1 |
| | | CaseLabelRange=1 |
| | | ForVariable=1 |
| | | ConstructingAbstract=1 |
| | | ComparisonFalse=1 |
| | | ComparisonTrue=1 |
| | | ComparingSignedUnsigned=1 |
| | | CombiningSignedUnsigned=1 |
| | | UnsupportedConstruct=1 |
| | | FileOpen=1 |
| | | FileOpenUnitSrc=1 |
| | | BadGlobalSymbol=1 |
| | | DuplicateConstructorDestructor=1 |
| | | InvalidDirective=1 |
| | | PackageNoLink=1 |
| | | PackageThreadVar=1 |
| | | ImplicitImport=1 |
| | | HPPEMITIgnored=1 |
| | | NoRetVal=1 |
| | | UseBeforeDef=1 |
| | | ForLoopVarUndef=1 |
| | | UnitNameMismatch=1 |
| | | NoCFGFileFound=1 |
| | | MessageDirective=1 |
| | | ImplicitVariants=1 |
| | | UnicodeToLocale=1 |
| | | LocaleToUnicode=1 |
| | | ImagebaseMultiple=1 |
| | | SuspiciousTypecast=1 |
| | | PrivatePropAccessor=1 |
| | | UnsafeType=0 |
| | | UnsafeCode=0 |
| | | UnsafeCast=0 |
| | | [Linker] |
| | | MapFile=0 |
| | | OutputObjs=0 |
| | | ConsoleApp=1 |
| | | DebugInfo=0 |
| | | RemoteSymbols=0 |
| | | MinStackSize=16384 |
| | | MaxStackSize=1048576 |
| | | ImageBase=4194304 |
| | | ExeDescription= |
| | | [Directories] |
| | | OutputDir= |
| | | UnitOutputDir= |
| | | PackageDLLOutputDir= |
| | | PackageDCPOutputDir= |
| | | SearchPath= |
| | | Packages=vcl;rtl;vclx;dbrtl;vcldb;VclSmp;dbexpress;bdertl;vclie;adortl;vclactnband;vclshlctrls;dclOfficeXP;vcldbx;visualclx;visualdbclx;inet;xmlrtl;inetdbbde;inetdbxpress;IndyCore70;IndySystem70;IndyProtocols70;RaizeComponentsVcl;RaizeComponentsVclDb; |
| | | Conditionals= |
| | | DebugSourceDirs= |
| | | UsePackages=0 |
| | | [Parameters] |
| | | RunParams= |
| | | HostApplication= |
| | | Launcher= |
| | | UseLauncher=0 |
| | | DebugCWD= |
| | | [Version Info] |
| | | IncludeVerInfo=0 |
| | | AutoIncBuild=0 |
| | | MajorVer=1 |
| | | MinorVer=0 |
| | | Release=0 |
| | | Build=0 |
| | | Debug=0 |
| | | PreRelease=0 |
| | | Special=0 |
| | | Private=0 |
| | | DLL=0 |
| | | Locale=2052 |
| | | CodePage=936 |
| | | [Version Info Keys] |
| | | CompanyName= |
| | | FileDescription= |
| | | FileVersion=1.0.0.0 |
| | | InternalName= |
| | | LegalCopyright= |
| | | LegalTrademarks= |
| | | OriginalFilename= |
| | | ProductName= |
| | | ProductVersion=1.0.0.0 |
| | | Comments= |
| | | [Excluded Packages] |
| | | d:\program files\borland\delphi7\Bin\dclwbm70.bpl=Borland InternetExpress Components |
| | | d:\program files\borland\delphi7\Bin\dclindy70.bpl=Internet Direct (Indy) for D7 Property and Component Editors |
| | | D:\Program Files\Borland\Delphi7\Bin\dcltee70.bpl=TeeChart Components |
| | | d:\program files\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components |
| | | d:\program files\borland\delphi7\Bin\DCLIB70.bpl=InterBase Data Access Components |
| | | d:\program files\borland\delphi7\Bin\dclmcn70.bpl=Borland DataSnap Connection Components |
| | | D:\Program Files\Borland\Delphi7\Bin\dclmid70.bpl=Borland MyBase DataAccess Components |
| | | d:\program files\borland\delphi7\Bin\dcldbxcds70.bpl=Borland SimpleDataset Component (DBX) |
| | | d:\program files\borland\delphi7\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package |
| | | d:\program files\borland\delphi7\Bin\dclsoap70.bpl=Borland SOAP Components |
| | | d:\program files\borland\delphi7\Bin\dclwebsnap70.bpl=Borland WebSnap Components |
| | | d:\program files\borland\delphi7\Bin\dclite70.bpl=Borland Integrated Translation Environment |
| | | C:\WINDOWS\SysWOW64\ibevnt70.bpl=Borland Interbase Event Alerter Component |
¶Ô±ÈÐÂÎļþ |
| | |
| | | program Project1; |
| | | |
| | | uses |
| | | Forms, |
| | | Unit1 in 'Unit1.pas' {Form1}; |
| | | |
| | | {$R *.res} |
| | | |
| | | begin |
| | | Application.Initialize; |
| | | Application.CreateForm(TForm1, Form1); |
| | | Application.Run; |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | object Form1: TForm1 |
| | | Left = 192 |
| | | Top = 131 |
| | | Width = 536 |
| | | Height = 348 |
| | | Caption = 'Form1' |
| | | Color = clBtnFace |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -21 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | OldCreateOrder = False |
| | | PixelsPerInch = 96 |
| | | TextHeight = 28 |
| | | object Button1: TButton |
| | | Left = 100 |
| | | Top = 130 |
| | | Width = 136 |
| | | Height = 56 |
| | | Caption = #21551#21160#25163#20889#26495 |
| | | TabOrder = 0 |
| | | OnClick = Button1Click |
| | | end |
| | | object Edit1: TEdit |
| | | Left = 85 |
| | | Top = 60 |
| | | Width = 241 |
| | | Height = 36 |
| | | TabOrder = 1 |
| | | end |
| | | end |
¶Ô±ÈÐÂÎļþ |
| | |
| | | unit Unit1; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
| | | Dialogs, StdCtrls, TlHelp32, // ç¨äºè¿ç¨æä½ |
| | | ShellAPI, ComObj, ActiveX; |
| | | |
| | | type |
| | | TForm1 = class(TForm) |
| | | Button1: TButton; |
| | | Edit1: TEdit; |
| | | procedure Button1Click(Sender: TObject); |
| | | private |
| | | { Private declarations } |
| | | public |
| | | { Public declarations } |
| | | end; |
| | | |
| | | var |
| | | Form1: TForm1; |
| | | |
| | | implementation |
| | | |
| | | {$R *.dfm} |
| | | |
| | | procedure KillTabTipProcess; |
| | | var |
| | | ContinueLoop: BOOL; |
| | | FSnapshotHandle: THandle; |
| | | FProcessEntry32: TProcessEntry32; |
| | | hProcess: THandle; |
| | | begin |
| | | FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); |
| | | if FSnapshotHandle <> INVALID_HANDLE_VALUE then |
| | | begin |
| | | FProcessEntry32.dwSize := SizeOf(FProcessEntry32); |
| | | ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); |
| | | |
| | | while ContinueLoop do |
| | | begin |
| | | if ('TabTip.exe' = string(FProcessEntry32.szExeFile)) then |
| | | begin |
| | | hProcess := OpenProcess(PROCESS_TERMINATE, False, FProcessEntry32.th32ProcessID); |
| | | if hProcess <> 0 then |
| | | begin |
| | | TerminateProcess(hProcess, 0); |
| | | CloseHandle(hProcess); |
| | | end; |
| | | end; |
| | | ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); |
| | | end; |
| | | CloseHandle(FSnapshotHandle); |
| | | end; |
| | | end; |
| | | |
| | | procedure TForm1.Button1Click(Sender: TObject); |
| | | begin |
| | | //KillTabTipProcess; // ç¡®ä¿æ²¡ææ®ççTabTipè¿ç¨ |
| | | ShellExecute(0, nil, 'OpenTabTip', nil, nil, SW_SHOWNORMAL); |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -$A8 |
| | | -$B- |
| | | -$C+ |
| | | -$D+ |
| | | -$E- |
| | | -$F- |
| | | -$G+ |
| | | -$H+ |
| | | -$I+ |
| | | -$J- |
| | | -$K- |
| | | -$L+ |
| | | -$M- |
| | | -$N+ |
| | | -$O+ |
| | | -$P+ |
| | | -$Q- |
| | | -$R- |
| | | -$S- |
| | | -$T- |
| | | -$U- |
| | | -$V+ |
| | | -$W- |
| | | -$X+ |
| | | -$YD |
| | | -$Z1 |
| | | -cg |
| | | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | -H+ |
| | | -W+ |
| | | -M |
| | | -$M16384,1048576 |
| | | -K$00400000 |
| | | -LE"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -LN"d:\program files\borland\delphi7\Projects\Bpl" |
| | | -w-UNSAFE_TYPE |
| | | -w-UNSAFE_CODE |
| | | -w-UNSAFE_CAST |
¶Ô±ÈÐÂÎļþ |
| | |
| | | [FileVersion] |
| | | Version=7.0 |
| | | [Compiler] |
| | | A=8 |
| | | B=0 |
| | | C=1 |
| | | D=1 |
| | | E=0 |
| | | F=0 |
| | | G=1 |
| | | H=1 |
| | | I=1 |
| | | J=0 |
| | | K=0 |
| | | L=1 |
| | | M=0 |
| | | N=1 |
| | | O=1 |
| | | P=1 |
| | | Q=0 |
| | | R=0 |
| | | S=0 |
| | | T=0 |
| | | U=0 |
| | | V=1 |
| | | W=0 |
| | | X=1 |
| | | Y=1 |
| | | Z=1 |
| | | ShowHints=1 |
| | | ShowWarnings=1 |
| | | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | NamespacePrefix= |
| | | SymbolDeprecated=1 |
| | | SymbolLibrary=1 |
| | | SymbolPlatform=1 |
| | | UnitLibrary=1 |
| | | UnitPlatform=1 |
| | | UnitDeprecated=1 |
| | | HResultCompat=1 |
| | | HidingMember=1 |
| | | HiddenVirtual=1 |
| | | Garbage=1 |
| | | BoundsError=1 |
| | | ZeroNilCompat=1 |
| | | StringConstTruncated=1 |
| | | ForLoopVarVarPar=1 |
| | | TypedConstVarPar=1 |
| | | AsgToTypedConst=1 |
| | | CaseLabelRange=1 |
| | | ForVariable=1 |
| | | ConstructingAbstract=1 |
| | | ComparisonFalse=1 |
| | | ComparisonTrue=1 |
| | | ComparingSignedUnsigned=1 |
| | | CombiningSignedUnsigned=1 |
| | | UnsupportedConstruct=1 |
| | | FileOpen=1 |
| | | FileOpenUnitSrc=1 |
| | | BadGlobalSymbol=1 |
| | | DuplicateConstructorDestructor=1 |
| | | InvalidDirective=1 |
| | | PackageNoLink=1 |
| | | PackageThreadVar=1 |
| | | ImplicitImport=1 |
| | | HPPEMITIgnored=1 |
| | | NoRetVal=1 |
| | | UseBeforeDef=1 |
| | | ForLoopVarUndef=1 |
| | | UnitNameMismatch=1 |
| | | NoCFGFileFound=1 |
| | | MessageDirective=1 |
| | | ImplicitVariants=1 |
| | | UnicodeToLocale=1 |
| | | LocaleToUnicode=1 |
| | | ImagebaseMultiple=1 |
| | | SuspiciousTypecast=1 |
| | | PrivatePropAccessor=1 |
| | | UnsafeType=0 |
| | | UnsafeCode=0 |
| | | UnsafeCast=0 |
| | | [Linker] |
| | | MapFile=0 |
| | | OutputObjs=0 |
| | | ConsoleApp=1 |
| | | DebugInfo=0 |
| | | RemoteSymbols=0 |
| | | MinStackSize=16384 |
| | | MaxStackSize=1048576 |
| | | ImageBase=4194304 |
| | | ExeDescription= |
| | | [Directories] |
| | | OutputDir= |
| | | UnitOutputDir= |
| | | PackageDLLOutputDir= |
| | | PackageDCPOutputDir= |
| | | SearchPath= |
| | | Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;vgscene_d7;NexusDB207si70;NexusDB207se70;NexusDB207sr70;NexusDB207pv70;NexusDB207sq70;NexusDB207re70;NexusDB207tm70;NexusDB207ts70;NexusDB207tc70;NexusDB207tn70;NexusDB207tw70;NexusDB207db70;NexusDB207lg70;NexusDB207ch70;NexusDB207ll70;TRealMagic;TMSNPopUp;TPicShow;tmswizd7;TMSD7;tmsexd7;tmsxlsd7;TntUnicodeVcl_R70;TScrollText;GR32_D7;TGIFimage |
| | | Conditionals= |
| | | DebugSourceDirs= |
| | | UsePackages=0 |
| | | [Parameters] |
| | | RunParams= |
| | | HostApplication= |
| | | Launcher= |
| | | UseLauncher=0 |
| | | DebugCWD= |
| | | [Language] |
| | | ActiveLang= |
| | | ProjectLang= |
| | | RootDir=C:\Program Files\Borland\Delphi7\Bin\ |
| | | [Version Info] |
| | | IncludeVerInfo=0 |
| | | AutoIncBuild=0 |
| | | MajorVer=1 |
| | | MinorVer=0 |
| | | Release=0 |
| | | Build=0 |
| | | Debug=0 |
| | | PreRelease=0 |
| | | Special=0 |
| | | Private=0 |
| | | DLL=0 |
| | | Locale=2052 |
| | | CodePage=936 |
| | | [Version Info Keys] |
| | | CompanyName= |
| | | FileDescription= |
| | | FileVersion=1.0.0.0 |
| | | InternalName= |
| | | LegalCopyright= |
| | | LegalTrademarks= |
| | | OriginalFilename= |
| | | ProductName= |
| | | ProductVersion=1.0.0.0 |
| | | Comments= |
¶Ô±ÈÐÂÎļþ |
| | |
| | | program TabletPC; |
| | | |
| | | uses |
| | | Forms, |
| | | Unit1 in 'Unit1.pas' {Form1}; |
| | | |
| | | {$R *.res} |
| | | |
| | | begin |
| | | Application.Initialize; |
| | | Application.CreateForm(TForm1, Form1); |
| | | Application.Run; |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | object Form1: TForm1 |
| | | Left = 469 |
| | | Top = 147 |
| | | Width = 1296 |
| | | Height = 772 |
| | | Caption = #24494#36719#25163#20889#28436#31034#31243#24207 |
| | | Color = clBtnFace |
| | | Font.Charset = DEFAULT_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -11 |
| | | Font.Name = 'MS Sans Serif' |
| | | Font.Style = [] |
| | | Icon.Data = { |
| | | 000001000700404000000100200028420000760000003030000001002000A825 |
| | | 00009E4200002828000001002000681A0000466800002020000001002000A810 |
| | | 0000AE820000181800000100200088090000569300001414000001002000B806 |
| | | 0000DE9C000010100000010020006804000096A3000028000000400000008000 |
| | | 0000010020000000000000420000000000000000000000000000000000000000 |
| | | 000000000000000000010000000A0000001C00000032000000490000005E0000 |
| | | 006B000000770000007C000000830000007E0000007000000061000000500000 |
| | | 003D000000270000001600000007000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000B00000054000000B3000000BC0000006100000007000000000000 |
| | | 00000000000700000053000000AF000000D4000000E9000000F3000000FB0000 |
| | | 00FD000000FD000000FD000000FE000000FE000000FD000000FC000000F60000 |
| | | 00EE000000E2000000CB000000A80000007A000000470000001F000000090000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000020000 |
| | | 002500000094000000EE000000FF000000FF000000E70000003C000000000000 |
| | | 000000000042000000E6000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000F2000000D7000000AA0000 |
| | | 0066000000310000000F00000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000100000013000000620000 |
| | | 00CE000000FB000000FF000000FF000000FF000000FC00000064000000000000 |
| | | 000100000074000000FD000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FA000000E7000000BC00000079000000380000001100000002000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000020000001400000055000000B7000000F30000 |
| | | 00FF000000FF000000FF000000FF000000FF000000E20000003A000000000000 |
| | | 00000000004C000000EE000000FF000000FF000000FF000000FE000000FC0000 |
| | | 00F7000000F4000000F2000000F1000000F3000000F6000000F9000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FC000000EA000000C00000007F000000420000 |
| | | 001A000000050000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000000A000000290000006E000000C0000000F2000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FD000000D90000005E00000006000000000000 |
| | | 00000000000B00000070000000C7000000C4000000A300000082000000680000 |
| | | 00580000004B000000430000004200000047000000510000005F000000770000 |
| | | 0091000000B5000000D1000000E9000000FA000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FC000000F00000 |
| | | 00CF0000009B0000006A0000003B0000001D0000000E00000006000000010000 |
| | | 0001000000010000000100000001000000020000000900000018000000320000 |
| | | 0066000000A9000000DE000000F9000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F4000000A8000000340000000300000000000000000000 |
| | | 0000000000000000000300000014000000120000000600000002000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 00040000000B0000001A00000033000000650000009D000000D2000000F00000 |
| | | 00FD000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FA000000ED000000D7000000BC000000A30000008D0000 |
| | | 007E000000790000007A0000007F00000092000000AD000000CF000000E70000 |
| | | 00F9000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FB000000D00000006400000012000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000001000000070000001B000000440000 |
| | | 0087000000C6000000EE000000FD000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FE0000 |
| | | 00FD000000FC000000FC000000FD000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FB000000D70000 |
| | | 007E000000240000000200000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000030000002C0000004E0000002D000000060000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0003000000150000004000000080000000BB000000E6000000FA000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FE000000F3000000C700000079000000260000 |
| | | 0004000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000003F000000D5000000F6000000DF0000008C0000 |
| | | 002E000000050000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000020000000F000000310000006D000000A80000 |
| | | 00D6000000EF000000FB000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FD000000F1000000D50000009B000000510000001700000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000300000088000000FE000000FF000000FF000000FC0000 |
| | | 00DD000000890000002E00000005000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000001000000080000 |
| | | 001E00000041000000710000009C000000C0000000D6000000E4000000EF0000 |
| | | 00F4000000F5000000F5000000F3000000EC000000DF000000CC000000A90000 |
| | | 007E000000470000001F00000006000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000200000081000000FD000000FF000000FF000000FF0000 |
| | | 00FF000000FC000000DC00000083000000280000000300000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000050000000F0000001C0000002D000000390000 |
| | | 0045000000480000004800000042000000350000002700000015000000080000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000035000000E4000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FB000000D6000000730000001D000000020000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000800000097000000FD000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F9000000C8000000680000 |
| | | 0018000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000037000000E3000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000F60000 |
| | | 00C0000000540000000E00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000600000093000000FD000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F0000000AD00000045000000090000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000034000000E2000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000EA000000950000002F00000004000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000060000008D000000FC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000DB000000720000001A0000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000002D000000DB0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F8000000BC0000 |
| | | 0043000000050000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000005000000850000 |
| | | 00FB000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FE0000 |
| | | 00E30000006C0000000B00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000290000 |
| | | 00D8000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EF000000780000000B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000040000 |
| | | 007F000000FB000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000EF000000780000000B0000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0023000000D0000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000EF000000780000000B00000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00020000006A000000F6000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000EF000000780000000B000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000017000000BE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000EF000000790000000C0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000100000054000000F0000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F0000000790000 |
| | | 000B000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000D000000A4000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000EF0000 |
| | | 00770000000B0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000037000000DF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EF000000780000000B00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000050000007B000000F8000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EF000000780000000B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000019000000BA000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000EF000000780000000B0000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000039000000D7000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000EF000000780000000B00000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000030000004E000000DD0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000EF000000780000000B000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000030000004E0000 |
| | | 00DD000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000EF0000006F000000070000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000030000 |
| | | 004F000000DD000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000ED0000006B0000 |
| | | 0007000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000300000052000000E1000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000EC0000 |
| | | 006A000000070000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000400000054000000E1000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EC0000006A0000000700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000400000054000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EC0000006A00000007000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000E1000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000EC0000006A000000070000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000054000000E1000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000EC0000006A0000000700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000054000000E10000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000EC0000006A00000007000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000004000000530000 |
| | | 00E1000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000ED0000006B000000070000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000040000 |
| | | 0054000000E1000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000ED0000006B0000 |
| | | 0007000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000400000054000000E1000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000EC0000 |
| | | 006A000000070000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000400000054000000E1000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EC0000006A0000000700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000400000054000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EC0000006800000005000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000E1000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F9000000930000000B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000054000000E1000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00F90000009F0000001900000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000054000000E10000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000F90000 |
| | | 009F0000001A0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000004000000530000 |
| | | 00E1000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F90000009F0000 |
| | | 001900000000000000000000000000000000000000130000003A000000070000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000040000 |
| | | 0054000000E1000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F90000009F0000001A0000 |
| | | 00000000000000000000000000000000001300000093000000E1000000650000 |
| | | 0006000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000400000054000000E1000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F90000009F00000019000000000000 |
| | | 000000000000000000000000001300000093000000F7000000FF000000E90000 |
| | | 005E000000040000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000400000054000000E1000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F90000009F0000001A00000000000000000000 |
| | | 0000000000000000001300000093000000F7000000FF000000FF000000FF0000 |
| | | 00DC000000360000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000400000054000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F90000009F0000001A0000000000000000000000000000 |
| | | 00000000001300000093000000F7000000FF000000FF000000FF000000FF0000 |
| | | 00FD000000A10000000A00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000E1000000FF000000FF0000 |
| | | 00FF000000F90000009F0000001A000000000000000000000000000000000000 |
| | | 001300000093000000F7000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000E40000002E00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000054000000E1000000FF0000 |
| | | 00F90000009F0000001900000000000000000000000000000000000000120000 |
| | | 0091000000F7000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F80000005700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000054000000DB0000 |
| | | 009F0000001A00000000000000000000000000000000000000110000008B0000 |
| | | 00F5000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FB0000006700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000004000000330000 |
| | | 001700000000000000000000000000000000000000120000008C000000F50000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F80000005C00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000120000008C000000F5000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000E50000003100000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000120000008C000000F5000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FC0000009B0000000900000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000050000007C000000F5000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FC0000 |
| | | 00BD000000260000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000200000052000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FD000000C10000 |
| | | 0030000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000DE000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000C1000000310000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000300000044000000BE000000F70000 |
| | | 00FF000000FF000000FF000000FF000000F8000000B700000031000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000001000000180000005C0000 |
| | | 00A2000000C5000000C9000000B00000006D0000001A00000001000000000000 |
| | | 000000000000000000000000000000000000000000000000000000000000C000 |
| | | 07FFFFFFFF818000007FFFFFFE018000000FFFFFF80100000001FFFFE0018000 |
| | | 00003FFF00018000000000000003C1FE00000000000FFFFFF0000000001FE0FF |
| | | FF000000007FE03FFFE0000001FFC00FFFFC00000FFFC003FFFFE0007FFFE000 |
| | | FFFFFFFFFFFFE0003FFFFFFFFFFFF0001FFFFFFFFFFFF00007FFFFFFFFFFF800 |
| | | 01FFFFFFFFFFF800007FFFFFFFFFFC00003FFFFFFFFFFC00001FFFFFFFFFFE00 |
| | | 000FFFFFFFFFFE000007FFFFFFFFFF000003FFFFFFFFFF000001FFFFFFFFFF80 |
| | | 0000FFFFFFFFFF8000007FFFFFFFFFC000003FFFFFFFFFE000001FFFFFFFFFE0 |
| | | 00000FFFFFFFFFF0000007FFFFFFFFF8000003FFFFFFFFF8000001FFFFFFFFFC |
| | | 000000FFFFFFFFFE0000007FFFFFFFFF0000003FFFFFFFFF8000001FFFFFFFFF |
| | | C000000FFFFFFFFFE0000007FFFFFFFFF0000003FFFFFFFFF8000001FFFFFFFF |
| | | FC000000FFFFFFFFFE0000007FFFFFFFFF0000003FFFFFFFFF8000001FFFFFFF |
| | | FFC000000FFFFFFFFFE000000FFFFFFFFFF000001FFFFFFFFFF800003FFFFFFF |
| | | FFFC000078FFFFFFFFFE0000F07FFFFFFFFF0001E03FFFFFFFFF8003C03FFFFF |
| | | FFFFC007801FFFFFFFFFE00F001FFFFFFFFFF01E001FFFFFFFFFF83C001FFFFF |
| | | FFFFFC78001FFFFFFFFFFFF0001FFFFFFFFFFFE0001FFFFFFFFFFFC0003FFFFF |
| | | FFFFFFC0003FFFFFFFFFFFE0007FFFFFFFFFFFF000FFFFFFFFFFFFF801FF2800 |
| | | 0000300000006000000001002000000000008025000000000000000000000000 |
| | | 00000000000000000000000000040000002300000044000000640000007F0000 |
| | | 008E000000970000009D000000980000008B000000790000005F000000430000 |
| | | 0027000000100000000200000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000700000049000000B3000000BB0000 |
| | | 0042000000010000000200000061000000D9000000F3000000FB000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FE000000FB000000F30000 |
| | | 00E2000000C20000008E00000055000000230000000900000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000020000002200000088000000E9000000FF000000FF0000 |
| | | 00AE000000080000000E000000C0000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000F7000000DC000000AD000000680000002C0000 |
| | | 000B000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00030000001D0000006C000000CE000000FB000000FF000000FF000000FC0000 |
| | | 0099000000060000000600000091000000F8000000FA000000F1000000E50000 |
| | | 00DB000000D3000000D0000000D4000000DB000000E8000000F2000000FB0000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FB000000E30000 |
| | | 00B2000000710000003900000015000000050000000100000000000000000000 |
| | | 0000000000000000000000000000000000000000000200000011000000390000 |
| | | 0082000000D0000000F9000000FF000000FF000000FF000000F4000000A50000 |
| | | 00240000000000000000000000160000005D0000005E0000003E0000002A0000 |
| | | 001F000000180000001600000019000000200000002D00000042000000630000 |
| | | 008D000000C0000000E6000000FA000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FC000000EC000000CD000000A200000074000000520000003C0000 |
| | | 0031000000300000003200000040000000600000008C000000C1000000EB0000 |
| | | 00FD000000FF000000FF000000FF000000FC000000D5000000670000000F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0002000000100000002F00000063000000A9000000DE000000F8000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000F8000000F10000 |
| | | 00EA000000E9000000EB000000F2000000FA000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FD000000DF0000008B0000002800000002000000000000 |
| | | 00000000000000000000000000000000000B0000005600000067000000240000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000008000000260000005D0000009D0000 |
| | | 00D4000000F3000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FE0000 |
| | | 00F4000000CD000000810000002E000000050000000000000000000000000000 |
| | | 000000000000000000000000000000000053000000F0000000FA000000D60000 |
| | | 0079000000230000000300000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000050000 |
| | | 001C000000480000007F000000B2000000D7000000EC000000F6000000FB0000 |
| | | 00FE000000FE000000FE000000FA000000F3000000E2000000C5000000900000 |
| | | 004E000000190000000300000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000066000000FB000000FF000000FF0000 |
| | | 00FB000000D4000000760000001F000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000020000000A0000001C000000340000004C000000600000 |
| | | 006E000000700000006C0000005C000000440000002800000011000000030000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000029000000DB000000FF000000FF0000 |
| | | 00FF000000FF000000FA000000CD000000660000001600000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000084000000FC000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F7000000C20000005A0000000F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000028000000DA000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F3000000B10000 |
| | | 0047000000090000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000081000000FC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EC0000009A0000003000000003000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000025000000D50000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FD000000DC00000075000000150000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000003000000780000 |
| | | 00FA000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F8000000B10000002D00000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000200000 |
| | | 00D1000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000C500000031000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000020000 |
| | | 006F000000F8000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FE000000C5000000310000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0019000000C4000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FE000000C50000 |
| | | 0031000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000100000059000000F3000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FD0000 |
| | | 00C5000000310000000100000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000F000000AD000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FE000000C50000003000000001000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000003E000000E6000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FE000000C500000031000000010000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000600000085000000FB000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000C5000000310000000100000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001C000000BC000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FE000000C50000003100000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000100000033000000CC000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FE000000C500000030000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000100000037000000CD000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000C2000000290000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000100000037000000CF0000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FD000000BE0000 |
| | | 0029000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000003A0000 |
| | | 00D0000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FD0000 |
| | | 00BE000000290000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 003A000000D0000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FD000000BE0000002900000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000003A000000D1000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FD000000BE00000029000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000003A000000D0000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FD000000BE000000290000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000003B000000D0000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FD000000BE0000002900000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000003A000000D0000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000BE00000029000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000003A000000D0000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000BE000000290000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000003A000000D00000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FD000000B90000 |
| | | 0019000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000003A0000 |
| | | 00D1000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F8000000970000 |
| | | 0011000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 003A000000D0000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F800000098000000150000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000003B000000D0000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F80000009800000014000000000000 |
| | | 0000000000060000004A00000024000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000003A000000D0000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F8000000980000001400000000000000000000 |
| | | 000600000065000000E8000000BA000000240000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000003A000000D0000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000F800000098000000140000000000000000000000060000 |
| | | 0065000000EA000000FF000000FD000000A80000001000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000003A000000D0000000FE000000FF0000 |
| | | 00FF000000F80000009800000015000000000000000000000006000000650000 |
| | | 00EA000000FF000000FF000000FF000000F40000005700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000003A000000D1000000FE0000 |
| | | 00F8000000980000001500000000000000000000000600000065000000EA0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000A200000005000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000003A000000CA0000 |
| | | 00970000001500000000000000000000000600000061000000E9000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000BC0000000C000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000001000000220000 |
| | | 001100000000000000000000000600000061000000E8000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000B000000009000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000600000061000000E8000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F90000006D00000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000100000050000000E7000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FC000000AE0000001700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000036000000D0000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FC000000B3000000230000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000100000038000000C3000000FA000000FF000000FF0000 |
| | | 00FF000000FA000000B100000023000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000001E00000073000000B8000000CF0000 |
| | | 00C10000007C0000001B00000000000000000000000000000000000000000000 |
| | | 00000000000080007FFFFFC0000000000FFFFF000000000000FFFC0000000000 |
| | | 000FE00100008000000000030000FFFC000000070000C1FFC000001F0000C07F |
| | | F800007F0000C01FFF0003FF0000C007FFFFFFFF0000C003FFFFFFFF0000E000 |
| | | FFFFFFFF0000E0003FFFFFFF0000F0001FFFFFFF0000F00007FFFFFF0000F800 |
| | | 03FFFFFF0000F80001FFFFFF0000FC0000FFFFFF0000FC00007FFFFF0000FE00 |
| | | 003FFFFF0000FF00001FFFFF0000FF00000FFFFF0000FF800007FFFF0000FF80 |
| | | 0003FFFF0000FFC00003FFFF0000FFE00001FFFF0000FFF00000FFFF0000FFF8 |
| | | 00007FFF0000FFFC00003FFF0000FFFE00001FFF0000FFFF00000FFF0000FFFF |
| | | 800007FF0000FFFFC00003FF0000FFFFE00001FF0000FFFFF00001FF0000FFFF |
| | | F80003FF0000FFFFFC00063F0000FFFFFE000C1F0000FFFFFF00180F0000FFFF |
| | | FF80300F0000FFFFFFC060070000FFFFFFE0C0070000FFFFFFF180070000FFFF |
| | | FFFF00070000FFFFFFFE000F0000FFFFFFFF001F0000FFFFFFFF003F0000FFFF |
| | | FFFF807F00002800000028000000500000000100200000000000401A00000000 |
| | | 000000000000000000000000000000000000000000190000004D000000730000 |
| | | 0090000000A0000000A7000000A90000009F0000008F00000075000000540000 |
| | | 0032000000140000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000001000000190000 |
| | | 007E000000C7000000790000000700000012000000AF000000F6000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FE000000F90000 |
| | | 00E9000000CA0000009700000056000000250000000700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000C0000004C000000BE0000 |
| | | 00FA000000FF000000D60000001B0000001E000000D7000000FF000000FF0000 |
| | | 00FD000000F9000000F7000000F7000000F9000000FD000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000F8000000DE000000A8000000620000002A0000 |
| | | 000C000000010000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000003000000160000004F000000AB000000EF000000FF0000 |
| | | 00FF000000F40000008D00000009000000040000005A000000A2000000870000 |
| | | 0067000000550000004B0000004B000000540000006700000085000000AA0000 |
| | | 00CF000000EE000000FD000000FF000000FF000000FF000000FA000000E30000 |
| | | 00B80000008200000051000000310000002000000019000000180000001C0000 |
| | | 002E0000004F0000008A000000CA000000F3000000FF000000FF000000FD0000 |
| | | 00D7000000660000000E00000000000000000000000100000004000000020000 |
| | | 0000000000000000000000000000000000000000000000000001000000060000 |
| | | 00170000003C00000075000000B8000000E7000000FC000000FF000000FF0000 |
| | | 00FF000000FE000000F8000000EA000000DD000000D4000000D3000000D90000 |
| | | 00E7000000F7000000FE000000FF000000FF000000FD000000E3000000910000 |
| | | 002A00000002000000000000000000000000000000010000003E000000800000 |
| | | 00420000000A0000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000000D000000310000006B000000AC000000DE0000 |
| | | 00F6000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000F3000000CE0000008400000032000000060000 |
| | | 0000000000000000000000000000000000000000000E000000BC000000FE0000 |
| | | 00EC000000A50000004100000009000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000008000000240000 |
| | | 004E00000080000000AC000000C9000000D9000000E1000000E2000000DC0000 |
| | | 00CD000000B00000008200000048000000190000000300000000000000000000 |
| | | 00000000000000000000000000000000000000000009000000A8000000FF0000 |
| | | 00FF000000FE000000EB0000009F000000370000000600000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000100000007000000110000001C00000024000000250000001F0000 |
| | | 0014000000080000000100000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000004A000000EF0000 |
| | | 00FF000000FF000000FF000000FE000000E4000000900000002E000000030000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000000C000000AC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000DD0000007E0000 |
| | | 0020000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000470000 |
| | | 00EE000000FF000000FF000000FF000000FF000000FF000000FF000000FB0000 |
| | | 00CE000000630000001100000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000000000000B0000 |
| | | 00A5000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F5000000B000000037000000030000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0040000000EA000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000DB000000510000000300000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00090000009E000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000E10000005200000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000036000000E3000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000E100000052000000030000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000500000089000000FC000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000E1000000520000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000024000000D3000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000E10000 |
| | | 0052000000030000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000200000065000000F5000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00E1000000520000000300000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000010000000A8000000FD000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000E10000005200000003000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000027000000C1000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000E100000052000000030000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000002D000000C2000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000DF0000004B0000000200000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000002D000000C50000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000DD0000004A00000002000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000002F0000 |
| | | 00C6000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000DD0000004A000000020000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 002F000000C6000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000DD0000004A0000 |
| | | 0002000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000002F000000C6000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000DD0000 |
| | | 004A000000020000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000002F000000C6000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00DD0000004A0000000200000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000002F000000C6000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000DD0000004A00000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000002F000000C6000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000DD00000049000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000002F000000C6000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F800000080000000040000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000002F000000C60000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F80000009400000013000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000002F0000 |
| | | 00C6000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00F800000094000000130000000000000003000000450000003F000000020000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 002F000000C6000000FE000000FF000000FF000000FF000000FF000000F80000 |
| | | 00940000001300000000000000030000004F000000DF000000DA000000410000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000002F000000C6000000FE000000FF000000FF000000F8000000940000 |
| | | 001300000000000000030000004F000000E0000000FF000000FF000000C20000 |
| | | 0018000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000002F000000C6000000FE000000F800000094000000130000 |
| | | 0000000000030000004F000000E0000000FF000000FF000000FF000000F70000 |
| | | 0055000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000002F000000BF0000009300000013000000000000 |
| | | 00030000004C000000DE000000FF000000FF000000FF000000FF000000FE0000 |
| | | 007A000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000001B0000000F00000000000000030000 |
| | | 004C000000DD000000FF000000FF000000FF000000FF000000FF000000FC0000 |
| | | 006C000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000030000004C0000 |
| | | 00DD000000FF000000FF000000FF000000FF000000FF000000FF000000DB0000 |
| | | 002D000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000000D000000AA0000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000E5000000590000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000002F0000 |
| | | 00C0000000FC000000FF000000FF000000FF000000E40000005B000000050000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 001F0000007E000000C2000000D1000000B00000004900000005000000000000 |
| | | 00000000000000000000000000008001FFFFC000000000003FFF800000000000 |
| | | 03FC0000000000000000010000008FC000000300000083FC00000F00000080FF |
| | | C0003F000000803FF801FF000000C00FFFFFFF000000C003FFFFFF000000E001 |
| | | FFFFFF000000E0007FFFFF000000F0003FFFFF000000F0001FFFFF000000F800 |
| | | 0FFFFF000000F80007FFFF000000FC0003FFFF000000FC0001FFFF000000FE00 |
| | | 00FFFF000000FF00007FFF000000FF00003FFF000000FF80001FFF000000FFC0 |
| | | 000FFF000000FFE00007FF000000FFF00003FF000000FFF80001FF000000FFFC |
| | | 0000FF000000FFFE00007F000000FFFF00007F000000FFFF8000FF000000FFFF |
| | | C0010F000000FFFFE00207000000FFFFF00407000000FFFFF80807000000FFFF |
| | | FC1003000000FFFFFE2007000000FFFFFFC007000000FFFFFFC007000000FFFF |
| | | FFC00F000000FFFFFFE01F000000280000002000000040000000010020000000 |
| | | 0000801000000000000000000000000000000000000000000007000000480000 |
| | | 0081000000A1000000B0000000B6000000B3000000A50000008B000000660000 |
| | | 003B000000180000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000050000003E000000B0000000AD0000001B00000035000000E70000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FC0000 |
| | | 00EF000000D10000009A00000057000000210000000600000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000050000 |
| | | 002900000086000000E5000000FE000000E50000003000000020000000B60000 |
| | | 00CC000000B3000000A1000000990000009E000000AE000000C6000000DF0000 |
| | | 00F5000000FE000000FF000000F8000000DB000000A500000066000000360000 |
| | | 001A0000000C00000008000000080000000E000000220000004E000000980000 |
| | | 00DE000000FC000000FD000000D8000000600000000700000001000000100000 |
| | | 0015000000080000000400000002000000030000000600000010000000230000 |
| | | 004B00000088000000C7000000EF000000FD000000FF000000FB000000ED0000 |
| | | 00D5000000C1000000B4000000B5000000C4000000DE000000F5000000FE0000 |
| | | 00FE000000E7000000970000002C0000000200000000000000000000001A0000 |
| | | 0087000000690000001A00000001000000000000000000000000000000000000 |
| | | 000000000002000000120000003C0000007A000000BA000000E2000000F70000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FC000000F0000000CD0000 |
| | | 0087000000350000000700000000000000000000000000000000000000470000 |
| | | 00F4000000F9000000CA00000068000000170000000100000000000000000000 |
| | | 0000000000000000000000000000000000010000000C000000270000004C0000 |
| | | 00720000008D0000009B0000009A00000089000000670000003D000000170000 |
| | | 00030000000000000000000000000000000000000000000000000000001D0000 |
| | | 00D0000000FF000000FF000000F8000000C30000005A00000011000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000000200000002000000010000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000020000 |
| | | 0070000000FA000000FF000000FF000000FF000000F5000000B6000000490000 |
| | | 000A000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001C000000CD000000FF000000FF000000FF000000FF000000FF000000EF0000 |
| | | 009F000000310000000300000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000100000069000000F8000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FE000000DE000000690000000A000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000018000000C7000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F20000007B0000000A0000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000005F000000F5000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F20000007B0000000A00000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000011000000B6000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F30000007B0000000A000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000046000000EB000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F20000007B0000000A0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000070000008E000000FB000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F20000007B0000 |
| | | 000A000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000001C000000B5000000FD000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000F20000 |
| | | 007B0000000A0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000023000000B7000000FD0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00F2000000760000000800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000024000000BA0000 |
| | | 00FD000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F10000007400000008000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000250000 |
| | | 00BA000000FD000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F100000074000000080000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0025000000BA000000FD000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F1000000740000000800000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000025000000BA000000FD000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F10000007500000008000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000025000000BA000000FD000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F100000074000000080000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000025000000BA000000FD000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000E9000000420000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000025000000BA000000FD000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F700000090000000100000 |
| | | 0000000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000025000000BA000000FD0000 |
| | | 00FF000000FF000000FF000000FF000000F70000009000000010000000010000 |
| | | 00390000005D0000000800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000025000000BA0000 |
| | | 00FD000000FF000000FF000000F70000009000000010000000010000003B0000 |
| | | 00D2000000EF0000006100000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000250000 |
| | | 00BA000000FD000000F70000009000000010000000010000003B000000D20000 |
| | | 00FE000000FF000000D00000001B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0025000000B40000008F000000100000000100000039000000D1000000FE0000 |
| | | 00FF000000FF000000F000000039000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000150000000D0000000100000039000000D0000000FE000000FF0000 |
| | | 00FF000000FF000000E80000002F000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000002A000000CE000000FE000000FF000000FF0000 |
| | | 00FF000000FA000000970000000A000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001F000000B8000000FC000000FF000000FF0000 |
| | | 00FA000000A40000001800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000001E00000088000000CB000000CE0000 |
| | | 008900000018000000000000000000000000000000000007FFE00000FF800000 |
| | | 00000000000183E0000780FC001F807FE1FF801FFFFFC007FFFFC003FFFFE001 |
| | | FFFFE000FFFFF0007FFFF8003FFFF8001FFFFC000FFFFE0007FFFF0003FFFF80 |
| | | 01FFFFC000FFFFE0007FFFF0003FFFF8003FFFFC002FFFFE0007FFFF0003FFFF |
| | | 8003FFFFC003FFFFE003FFFFF803FFFFF807FFFFFC0F28000000180000003000 |
| | | 0000010020000000000060090000000000000000000000000000000000000000 |
| | | 002200000088000000B0000000BE000000C1000000B70000009F000000760000 |
| | | 0043000000190000000400000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000001500000073000000C4000000400000 |
| | | 0056000000EC000000E7000000DC000000DA000000E1000000EF000000F90000 |
| | | 00F2000000D30000009800000052000000230000000B00000002000000010000 |
| | | 0001000000080000002200000062000000C1000000F7000000D5000000370000 |
| | | 000D000000390000002D0000001E0000001C00000023000000370000005D0000 |
| | | 009A000000D3000000F4000000F7000000DE000000BB0000009B0000008C0000 |
| | | 0093000000B2000000DC000000F8000000E90000009B0000002C000000020000 |
| | | 0002000000660000008F00000035000000060000000000000000000000000000 |
| | | 00040000001A000000490000008A000000C1000000E0000000EF000000F40000 |
| | | 00F2000000E6000000C700000089000000390000000800000000000000000000 |
| | | 000300000093000000FD000000E6000000920000002D00000004000000000000 |
| | | 00000000000000000000000000020000000E0000002300000037000000410000 |
| | | 003D0000002A0000001100000002000000000000000000000000000000000000 |
| | | 000000000039000000E8000000FF000000FD000000DF00000082000000220000 |
| | | 0002000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000700000099000000FE000000FF000000FF000000FC000000D20000 |
| | | 00650000000F0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000035000000E5000000FF000000FF000000FF000000FF0000 |
| | | 00F60000009F0000001800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000050000008E000000FD000000FF000000FF000000FF0000 |
| | | 00FF000000FB000000A500000018000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000029000000DA000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FB000000A5000000190000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000020000006F000000F8000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FB000000A50000001800000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000012000000A5000000FC000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FB000000A500000018000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000001B000000AB000000FC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FB000000A1000000160000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000001C000000AD0000 |
| | | 00FC000000FF000000FF000000FF000000FF000000FF000000FA000000A00000 |
| | | 0016000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000000000001C0000 |
| | | 00AD000000FC000000FF000000FF000000FF000000FF000000FF000000FA0000 |
| | | 00A0000000160000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001C000000AD000000FC000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FA000000A00000001600000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000001C000000AD000000FC000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FA0000009B0000000C000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000001C000000AD000000FC000000FF000000FF000000FF0000 |
| | | 00FF000000F7000000890000000A000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001C000000AD000000FC000000FF000000FF0000 |
| | | 00F70000008C0000000F0000002A000000770000001400000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000001C000000AD000000FC000000F70000 |
| | | 008C0000000F0000002A000000C1000000F80000007E00000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000001C000000A60000008A0000 |
| | | 000F00000029000000C1000000FE000000FF000000C700000010000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000100000000B0000 |
| | | 0029000000BF000000FD000000FF000000FF000000B70000000B000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000030000 |
| | | 0081000000FA000000FF000000FF000000DD0000004500000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001B0000008F000000D1000000BE00000046000000020000000000000000001F |
| | | E00000000000000000000700030001E00F00807FFF00803FFF00C01FFF00C00F |
| | | FF00E007FF00E003FF00F001FF00F800FF00FC007F00FE003F00FF001F00FF80 |
| | | 0F00FFC00700FFE00300FFF00100FFF80100FFFC0100FFFE0100FFFF03002800 |
| | | 0000140000002800000001002000000000009006000000000000000000000000 |
| | | 0000000000000000003B000000A5000000C0000000C7000000C0000000A90000 |
| | | 007E000000450000001900000003000000000000000000000000000000000000 |
| | | 0000000000000000000C00000053000000BD0000005700000053000000BD0000 |
| | | 00A90000009F000000A8000000C1000000E0000000EC000000D2000000970000 |
| | | 00570000002F0000001E0000001C0000002E00000060000000B2000000EC0000 |
| | | 00BF00000031000000070000003F0000002500000005000000040000000D0000 |
| | | 0024000000560000009C000000D4000000EC000000E8000000DD000000DB0000 |
| | | 00E7000000EB000000C70000006E000000180000000000000010000000C00000 |
| | | 00D5000000760000001D000000010000000000000000000000040000001A0000 |
| | | 003F000000660000007D0000007F000000680000003D00000013000000010000 |
| | | 000000000000000000030000007D000000FC000000FB000000CE000000670000 |
| | | 0014000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000230000 |
| | | 00D6000000FF000000FF000000F8000000BD0000004800000005000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000200000076000000FB000000FF000000FF0000 |
| | | 00FF000000E90000006700000006000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001D000000CC000000FF000000FF000000FF000000FF000000EC000000670000 |
| | | 0006000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000005F000000F5000000FF0000 |
| | | 00FF000000FF000000FF000000EC000000670000000600000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000D0000009C000000FB000000FF000000FF000000FF000000FF0000 |
| | | 00EC000000670000000600000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000018000000A50000 |
| | | 00FB000000FF000000FF000000FF000000FF000000EC00000064000000050000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000018000000A6000000FB000000FF000000FF0000 |
| | | 00FF000000FF000000EB00000063000000050000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0019000000A6000000FB000000FF000000FF000000FF000000FF000000EB0000 |
| | | 0063000000050000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000019000000A6000000FB0000 |
| | | 00FF000000FF000000FF000000FF000000EB0000006000000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000019000000A6000000FB000000FF000000FF000000FF0000 |
| | | 00F70000007F0000000700000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000190000 |
| | | 00A6000000FB000000FF000000F70000008A000000130000005E000000580000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000019000000A6000000F30000008A0000 |
| | | 001300000066000000EC000000DD000000270000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000018000000590000001300000064000000EC000000FF000000F30000 |
| | | 0040000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000410000 |
| | | 00E8000000FF000000FD000000B8000000170000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001700000090000000D3000000AA000000260000 |
| | | 000000000000003F000000000000000010000300300001FFF000807FF000803F |
| | | F000C01FF000C00FF000E007F000F003F000F801F000FC00F000FE007000FF00 |
| | | 3000FF801000FFC01000FFE01000FFF81000FFF8300028000000100000002000 |
| | | 0000010020000000000040040000000000000000000000000000000000000000 |
| | | 0058000000BB000000C6000000C4000000B20000008300000046000000180000 |
| | | 0004000000000000000000000000000000090000003B000000A7000000690000 |
| | | 003D0000006F000000560000005A00000078000000AC000000D2000000CB0000 |
| | | 009D000000710000006200000076000000AF000000D70000009E000000250000 |
| | | 0021000000A00000005A00000011000000010000000700000023000000570000 |
| | | 0091000000B6000000BF000000B2000000830000003B00000009000000000000 |
| | | 0014000000C2000000F5000000B90000004D0000000B00000000000000000000 |
| | | 0002000000080000000C00000007000000010000000000000000000000000000 |
| | | 00010000005C000000F6000000FF000000F0000000A20000002A000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000012000000BC000000FF000000FF000000FE000000C9000000310000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000004E000000F0000000FF000000FF000000FE000000CA0000 |
| | | 0031000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000900000091000000FA000000FF000000FF000000FE0000 |
| | | 00C9000000310000000100000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000140000009E000000FA000000FF000000FF0000 |
| | | 00FE000000C80000002F00000001000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000150000009F000000FA000000FF0000 |
| | | 00FF000000FE000000C70000002F000000010000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000150000009F000000FA0000 |
| | | 00FF000000FF000000FE000000C70000002E0000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000150000009F0000 |
| | | 00FA000000FF000000FF000000F50000006A0000000500000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000150000 |
| | | 009F000000FA000000F600000088000000290000008500000026000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0015000000990000008500000029000000AD000000FB00000080000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000B0000001B000000A8000000FC000000F80000006C000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000F0000008E000000D30000008A00000010000000000070 |
| | | 000000000000000100000307000000FF0000807F0000C03F0000C01F0000E00F |
| | | 0000F0070000F8070000FC030000FE010000FF010000FF810000FFC10000} |
| | | OldCreateOrder = False |
| | | OnCreate = FormCreate |
| | | DesignSize = ( |
| | | 1280 |
| | | 733) |
| | | PixelsPerInch = 96 |
| | | TextHeight = 13 |
| | | object Panel1: TPanel |
| | | Left = 0 |
| | | Top = 0 |
| | | Width = 936 |
| | | Height = 726 |
| | | Anchors = [akLeft, akTop, akRight, akBottom] |
| | | BevelOuter = bvNone |
| | | Caption = #25163#20889#21306 |
| | | TabOrder = 0 |
| | | DesignSize = ( |
| | | 936 |
| | | 726) |
| | | object Edit1: TEdit |
| | | Left = 625 |
| | | Top = 13 |
| | | Width = 311 |
| | | Height = 34 |
| | | Anchors = [akTop, akRight] |
| | | BorderStyle = bsNone |
| | | Color = clBtnFace |
| | | Ctl3D = False |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -21 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentCtl3D = False |
| | | ParentFont = False |
| | | TabOrder = 0 |
| | | end |
| | | end |
| | | object Button1: TButton |
| | | Left = 955 |
| | | Top = 70 |
| | | Width = 116 |
| | | Height = 43 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #28165#31354#25163#20889#21306 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -19 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 1 |
| | | OnClick = Button1Click |
| | | end |
| | | object edtName: TEdit |
| | | Left = 950 |
| | | Top = 13 |
| | | Width = 311 |
| | | Height = 36 |
| | | Anchors = [akTop, akRight] |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -21 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 2 |
| | | end |
| | | object Button2: TButton |
| | | Left = 955 |
| | | Top = 150 |
| | | Width = 149 |
| | | Height = 96 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #21024#38500#31508#30011 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -29 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 3 |
| | | OnClick = Button2Click |
| | | end |
| | | object Button3: TButton |
| | | Left = 1085 |
| | | Top = 70 |
| | | Width = 86 |
| | | Height = 43 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #30830' '#35748 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -19 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 4 |
| | | OnClick = Button3Click |
| | | end |
| | | object Button4: TButton |
| | | Left = 1180 |
| | | Top = 70 |
| | | Width = 86 |
| | | Height = 43 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #21024' '#38500 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -19 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 5 |
| | | OnClick = Button4Click |
| | | end |
| | | object InkCLT: TInkCollector |
| | | AutoConnect = True |
| | | ConnectKind = ckRunningOrNew |
| | | OnStroke = InkCLTStroke |
| | | Left = 69 |
| | | Top = 25 |
| | | end |
| | | object InkRC: TInkRecognizerContext |
| | | AutoConnect = False |
| | | ConnectKind = ckRunningOrNew |
| | | Left = 116 |
| | | Top = 25 |
| | | end |
| | | end |
¶Ô±ÈÐÂÎļþ |
| | |
| | | unit Unit1; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
| | | Dialogs, OleServer, MSINKAUTLib_TLB, ExtCtrls, StdCtrls; |
| | | |
| | | type |
| | | TForm1 = class(TForm) |
| | | InkCLT: TInkCollector; |
| | | InkRC: TInkRecognizerContext; |
| | | Panel1: TPanel; |
| | | Button1: TButton; |
| | | edtName: TEdit; |
| | | Button2: TButton; |
| | | Button3: TButton; |
| | | Button4: TButton; |
| | | Edit1: TEdit; |
| | | procedure FormCreate(Sender: TObject); |
| | | procedure InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; |
| | | const Stroke: IInkStrokeDisp; var Cancel: WordBool); |
| | | procedure Button1Click(Sender: TObject); |
| | | procedure Button2Click(Sender: TObject); |
| | | procedure Button3Click(Sender: TObject); |
| | | procedure Button4Click(Sender: TObject); |
| | | private |
| | | { Private declarations } |
| | | procedure InitializeInkCollector; |
| | | function DeleteStr(str :WideString):WideString; |
| | | public |
| | | { Public declarations } |
| | | end; |
| | | |
| | | var |
| | | Form1: TForm1; |
| | | |
| | | implementation |
| | | |
| | | {$R *.dfm} |
| | | |
| | | //------- èªå®ä¹å½æ° ------------------------------ |
| | | //åå§åInkCLT |
| | | procedure TForm1.InitializeInkCollector; |
| | | begin |
| | | InkCLT.hWnd := panel1.Handle; |
| | | InkCLT.Enabled := true; |
| | | InkCLT.DefaultDrawingAttributes.Color := clRed; // 墨水é¢è² |
| | | InkCLT.DefaultDrawingAttributes.Width := 200; // ç¬ç宽度 |
| | | end; |
| | | |
| | | function TForm1.DeleteStr(str :WideString):WideString; |
| | | var |
| | | LengthOfText: Integer; |
| | | begin |
| | | LengthOfText := Length(str); |
| | | if LengthOfText > 0 then |
| | | begin |
| | | // å 餿åä¸ä¸ªå符 |
| | | Delete(str, LengthOfText, 1); |
| | | end; |
| | | Result := str; |
| | | end; |
| | | //------------------------------------------------- |
| | | |
| | | procedure TForm1.FormCreate(Sender: TObject); |
| | | begin |
| | | InitializeInkCollector; |
| | | end; |
| | | |
| | | procedure TForm1.InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; |
| | | const Stroke: IInkStrokeDisp; var Cancel: WordBool); |
| | | //var |
| | | // ActiveCtrl: TWinControl; |
| | | begin |
| | | //è¿åå½åæ¥æç¦ç¹çæ§ä»¶ |
| | | //ActiveCtrl := Screen.ActiveControl; |
| | | //if ActiveCtrl is TEdit then |
| | | // TEdit(ActiveCtrl).Text := TEdit(ActiveCtrl).Text + Stroke.Ink.Strokes.ToString |
| | | //else if ActiveCtrl is TMemo then |
| | | // TMemo(ActiveCtrl).Lines.Add(Stroke.Ink.Strokes.ToString); |
| | | Edit1.Text := Stroke.Ink.Strokes.ToString; |
| | | //else |
| | | // ShowMessage('æç¤ºï¼å½åç¦ç¹ä¸å¨ç¼è¾æ¡æå¤è¡ç¼è¾æ¡ä¸.'); |
| | | end; |
| | | |
| | | //æ¸
空æååº |
| | | procedure TForm1.Button1Click(Sender: TObject); |
| | | begin |
| | | InkCLT.Ink.DeleteStrokes(InkCLT.Ink.Strokes); |
| | | Edit1.Clear; |
| | | Panel1.Refresh; |
| | | end; |
| | | |
| | | //å é¤ä¸ä¸ªåï¼è¦ç»è®¡æ¯ä¸ªåæå¤å°å£ç»ï¼Inkåªè½è¿½è¸ªç¬ç»ï¼æç¬ç»æ¥å é¤ï¼ï¼ï¼ |
| | | procedure TForm1.Button2Click(Sender: TObject); |
| | | var |
| | | Strokes: IInkStrokes; |
| | | LastStroke: IInkStrokeDisp; |
| | | begin |
| | | //Edit1.Text := DeleteStr(Edit1.Text); |
| | | |
| | | if InkCLT.Ink.Strokes.Count > 0 then |
| | | begin |
| | | Strokes := InkCLT.Ink.Strokes; |
| | | LastStroke := Strokes.Item(Strokes.Count - 1) as IInkStrokeDisp; |
| | | InkCLT.Ink.DeleteStroke(LastStroke); |
| | | end; |
| | | end; |
| | | |
| | | //确认å¤éå |
| | | procedure TForm1.Button3Click(Sender: TObject); |
| | | begin |
| | | edtName.Text := edtName.Text + Trim(Edit1.Text); |
| | | Button1Click(Sender); |
| | | end; |
| | | |
| | | //å é¤Edit1çä¸ä¸ªå |
| | | procedure TForm1.Button4Click(Sender: TObject); |
| | | begin |
| | | edtName.Text := DeleteStr(edtName.Text); |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | object Form1: TForm1 |
| | | Left = 195 |
| | | Top = 140 |
| | | Width = 1296 |
| | | Height = 772 |
| | | Caption = #24494#36719#25163#20889#28436#31034#31243#24207 |
| | | Color = clBtnFace |
| | | Font.Charset = DEFAULT_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -11 |
| | | Font.Name = 'MS Sans Serif' |
| | | Font.Style = [] |
| | | Icon.Data = { |
| | | 000001000700404000000100200028420000760000003030000001002000A825 |
| | | 00009E4200002828000001002000681A0000466800002020000001002000A810 |
| | | 0000AE820000181800000100200088090000569300001414000001002000B806 |
| | | 0000DE9C000010100000010020006804000096A3000028000000400000008000 |
| | | 0000010020000000000000420000000000000000000000000000000000000000 |
| | | 000000000000000000010000000A0000001C00000032000000490000005E0000 |
| | | 006B000000770000007C000000830000007E0000007000000061000000500000 |
| | | 003D000000270000001600000007000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000B00000054000000B3000000BC0000006100000007000000000000 |
| | | 00000000000700000053000000AF000000D4000000E9000000F3000000FB0000 |
| | | 00FD000000FD000000FD000000FE000000FE000000FD000000FC000000F60000 |
| | | 00EE000000E2000000CB000000A80000007A000000470000001F000000090000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000020000 |
| | | 002500000094000000EE000000FF000000FF000000E70000003C000000000000 |
| | | 000000000042000000E6000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000F2000000D7000000AA0000 |
| | | 0066000000310000000F00000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000100000013000000620000 |
| | | 00CE000000FB000000FF000000FF000000FF000000FC00000064000000000000 |
| | | 000100000074000000FD000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FA000000E7000000BC00000079000000380000001100000002000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000020000001400000055000000B7000000F30000 |
| | | 00FF000000FF000000FF000000FF000000FF000000E20000003A000000000000 |
| | | 00000000004C000000EE000000FF000000FF000000FF000000FE000000FC0000 |
| | | 00F7000000F4000000F2000000F1000000F3000000F6000000F9000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FC000000EA000000C00000007F000000420000 |
| | | 001A000000050000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000000A000000290000006E000000C0000000F2000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FD000000D90000005E00000006000000000000 |
| | | 00000000000B00000070000000C7000000C4000000A300000082000000680000 |
| | | 00580000004B000000430000004200000047000000510000005F000000770000 |
| | | 0091000000B5000000D1000000E9000000FA000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FC000000F00000 |
| | | 00CF0000009B0000006A0000003B0000001D0000000E00000006000000010000 |
| | | 0001000000010000000100000001000000020000000900000018000000320000 |
| | | 0066000000A9000000DE000000F9000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F4000000A8000000340000000300000000000000000000 |
| | | 0000000000000000000300000014000000120000000600000002000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 00040000000B0000001A00000033000000650000009D000000D2000000F00000 |
| | | 00FD000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FA000000ED000000D7000000BC000000A30000008D0000 |
| | | 007E000000790000007A0000007F00000092000000AD000000CF000000E70000 |
| | | 00F9000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FB000000D00000006400000012000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000001000000070000001B000000440000 |
| | | 0087000000C6000000EE000000FD000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FE0000 |
| | | 00FD000000FC000000FC000000FD000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FB000000D70000 |
| | | 007E000000240000000200000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000030000002C0000004E0000002D000000060000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0003000000150000004000000080000000BB000000E6000000FA000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FE000000F3000000C700000079000000260000 |
| | | 0004000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000003F000000D5000000F6000000DF0000008C0000 |
| | | 002E000000050000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000020000000F000000310000006D000000A80000 |
| | | 00D6000000EF000000FB000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FD000000F1000000D50000009B000000510000001700000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000300000088000000FE000000FF000000FF000000FC0000 |
| | | 00DD000000890000002E00000005000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000001000000080000 |
| | | 001E00000041000000710000009C000000C0000000D6000000E4000000EF0000 |
| | | 00F4000000F5000000F5000000F3000000EC000000DF000000CC000000A90000 |
| | | 007E000000470000001F00000006000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000200000081000000FD000000FF000000FF000000FF0000 |
| | | 00FF000000FC000000DC00000083000000280000000300000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000050000000F0000001C0000002D000000390000 |
| | | 0045000000480000004800000042000000350000002700000015000000080000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000035000000E4000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FB000000D6000000730000001D000000020000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000800000097000000FD000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F9000000C8000000680000 |
| | | 0018000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000037000000E3000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000F60000 |
| | | 00C0000000540000000E00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000600000093000000FD000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F0000000AD00000045000000090000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000034000000E2000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000EA000000950000002F00000004000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000060000008D000000FC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000DB000000720000001A0000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000002D000000DB0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F8000000BC0000 |
| | | 0043000000050000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000005000000850000 |
| | | 00FB000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FE0000 |
| | | 00E30000006C0000000B00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000290000 |
| | | 00D8000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EF000000780000000B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000040000 |
| | | 007F000000FB000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000EF000000780000000B0000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0023000000D0000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000EF000000780000000B00000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00020000006A000000F6000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000EF000000780000000B000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000017000000BE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000EF000000790000000C0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000100000054000000F0000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F0000000790000 |
| | | 000B000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000D000000A4000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000EF0000 |
| | | 00770000000B0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000037000000DF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EF000000780000000B00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000050000007B000000F8000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EF000000780000000B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000019000000BA000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000EF000000780000000B0000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000039000000D7000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000EF000000780000000B00000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000030000004E000000DD0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000EF000000780000000B000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000030000004E0000 |
| | | 00DD000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000EF0000006F000000070000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000030000 |
| | | 004F000000DD000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000ED0000006B0000 |
| | | 0007000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000300000052000000E1000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000EC0000 |
| | | 006A000000070000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000400000054000000E1000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EC0000006A0000000700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000400000054000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EC0000006A00000007000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000E1000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000EC0000006A000000070000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000054000000E1000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000EC0000006A0000000700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000054000000E10000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000EC0000006A00000007000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000004000000530000 |
| | | 00E1000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000ED0000006B000000070000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000040000 |
| | | 0054000000E1000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000ED0000006B0000 |
| | | 0007000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000400000054000000E1000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000EC0000 |
| | | 006A000000070000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000400000054000000E1000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EC0000006A0000000700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000400000054000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000EC0000006800000005000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000E1000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F9000000930000000B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000054000000E1000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00F90000009F0000001900000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000054000000E10000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000F90000 |
| | | 009F0000001A0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000004000000530000 |
| | | 00E1000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F90000009F0000 |
| | | 001900000000000000000000000000000000000000130000003A000000070000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000040000 |
| | | 0054000000E1000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F90000009F0000001A0000 |
| | | 00000000000000000000000000000000001300000093000000E1000000650000 |
| | | 0006000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000400000054000000E1000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F90000009F00000019000000000000 |
| | | 000000000000000000000000001300000093000000F7000000FF000000E90000 |
| | | 005E000000040000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000400000054000000E1000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F90000009F0000001A00000000000000000000 |
| | | 0000000000000000001300000093000000F7000000FF000000FF000000FF0000 |
| | | 00DC000000360000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000400000054000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F90000009F0000001A0000000000000000000000000000 |
| | | 00000000001300000093000000F7000000FF000000FF000000FF000000FF0000 |
| | | 00FD000000A10000000A00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000E1000000FF000000FF0000 |
| | | 00FF000000F90000009F0000001A000000000000000000000000000000000000 |
| | | 001300000093000000F7000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000E40000002E00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000054000000E1000000FF0000 |
| | | 00F90000009F0000001900000000000000000000000000000000000000120000 |
| | | 0091000000F7000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F80000005700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000054000000DB0000 |
| | | 009F0000001A00000000000000000000000000000000000000110000008B0000 |
| | | 00F5000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FB0000006700000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000004000000330000 |
| | | 001700000000000000000000000000000000000000120000008C000000F50000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F80000005C00000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000120000008C000000F5000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000E50000003100000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000120000008C000000F5000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FC0000009B0000000900000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000050000007C000000F5000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FC0000 |
| | | 00BD000000260000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000200000052000000E1000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FD000000C10000 |
| | | 0030000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000400000054000000DE000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000C1000000310000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000300000044000000BE000000F70000 |
| | | 00FF000000FF000000FF000000FF000000F8000000B700000031000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000001000000180000005C0000 |
| | | 00A2000000C5000000C9000000B00000006D0000001A00000001000000000000 |
| | | 000000000000000000000000000000000000000000000000000000000000C000 |
| | | 07FFFFFFFF818000007FFFFFFE018000000FFFFFF80100000001FFFFE0018000 |
| | | 00003FFF00018000000000000003C1FE00000000000FFFFFF0000000001FE0FF |
| | | FF000000007FE03FFFE0000001FFC00FFFFC00000FFFC003FFFFE0007FFFE000 |
| | | FFFFFFFFFFFFE0003FFFFFFFFFFFF0001FFFFFFFFFFFF00007FFFFFFFFFFF800 |
| | | 01FFFFFFFFFFF800007FFFFFFFFFFC00003FFFFFFFFFFC00001FFFFFFFFFFE00 |
| | | 000FFFFFFFFFFE000007FFFFFFFFFF000003FFFFFFFFFF000001FFFFFFFFFF80 |
| | | 0000FFFFFFFFFF8000007FFFFFFFFFC000003FFFFFFFFFE000001FFFFFFFFFE0 |
| | | 00000FFFFFFFFFF0000007FFFFFFFFF8000003FFFFFFFFF8000001FFFFFFFFFC |
| | | 000000FFFFFFFFFE0000007FFFFFFFFF0000003FFFFFFFFF8000001FFFFFFFFF |
| | | C000000FFFFFFFFFE0000007FFFFFFFFF0000003FFFFFFFFF8000001FFFFFFFF |
| | | FC000000FFFFFFFFFE0000007FFFFFFFFF0000003FFFFFFFFF8000001FFFFFFF |
| | | FFC000000FFFFFFFFFE000000FFFFFFFFFF000001FFFFFFFFFF800003FFFFFFF |
| | | FFFC000078FFFFFFFFFE0000F07FFFFFFFFF0001E03FFFFFFFFF8003C03FFFFF |
| | | FFFFC007801FFFFFFFFFE00F001FFFFFFFFFF01E001FFFFFFFFFF83C001FFFFF |
| | | FFFFFC78001FFFFFFFFFFFF0001FFFFFFFFFFFE0001FFFFFFFFFFFC0003FFFFF |
| | | FFFFFFC0003FFFFFFFFFFFE0007FFFFFFFFFFFF000FFFFFFFFFFFFF801FF2800 |
| | | 0000300000006000000001002000000000008025000000000000000000000000 |
| | | 00000000000000000000000000040000002300000044000000640000007F0000 |
| | | 008E000000970000009D000000980000008B000000790000005F000000430000 |
| | | 0027000000100000000200000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000700000049000000B3000000BB0000 |
| | | 0042000000010000000200000061000000D9000000F3000000FB000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FE000000FB000000F30000 |
| | | 00E2000000C20000008E00000055000000230000000900000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000020000002200000088000000E9000000FF000000FF0000 |
| | | 00AE000000080000000E000000C0000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000F7000000DC000000AD000000680000002C0000 |
| | | 000B000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00030000001D0000006C000000CE000000FB000000FF000000FF000000FC0000 |
| | | 0099000000060000000600000091000000F8000000FA000000F1000000E50000 |
| | | 00DB000000D3000000D0000000D4000000DB000000E8000000F2000000FB0000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FB000000E30000 |
| | | 00B2000000710000003900000015000000050000000100000000000000000000 |
| | | 0000000000000000000000000000000000000000000200000011000000390000 |
| | | 0082000000D0000000F9000000FF000000FF000000FF000000F4000000A50000 |
| | | 00240000000000000000000000160000005D0000005E0000003E0000002A0000 |
| | | 001F000000180000001600000019000000200000002D00000042000000630000 |
| | | 008D000000C0000000E6000000FA000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FC000000EC000000CD000000A200000074000000520000003C0000 |
| | | 0031000000300000003200000040000000600000008C000000C1000000EB0000 |
| | | 00FD000000FF000000FF000000FF000000FC000000D5000000670000000F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0002000000100000002F00000063000000A9000000DE000000F8000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000F8000000F10000 |
| | | 00EA000000E9000000EB000000F2000000FA000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FD000000DF0000008B0000002800000002000000000000 |
| | | 00000000000000000000000000000000000B0000005600000067000000240000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000008000000260000005D0000009D0000 |
| | | 00D4000000F3000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FE0000 |
| | | 00F4000000CD000000810000002E000000050000000000000000000000000000 |
| | | 000000000000000000000000000000000053000000F0000000FA000000D60000 |
| | | 0079000000230000000300000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000050000 |
| | | 001C000000480000007F000000B2000000D7000000EC000000F6000000FB0000 |
| | | 00FE000000FE000000FE000000FA000000F3000000E2000000C5000000900000 |
| | | 004E000000190000000300000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000066000000FB000000FF000000FF0000 |
| | | 00FB000000D4000000760000001F000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000020000000A0000001C000000340000004C000000600000 |
| | | 006E000000700000006C0000005C000000440000002800000011000000030000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000029000000DB000000FF000000FF0000 |
| | | 00FF000000FF000000FA000000CD000000660000001600000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000400000084000000FC000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F7000000C20000005A0000000F0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000028000000DA000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F3000000B10000 |
| | | 0047000000090000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000400000081000000FC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00EC0000009A0000003000000003000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000025000000D50000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FD000000DC00000075000000150000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000003000000780000 |
| | | 00FA000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F8000000B10000002D00000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000200000 |
| | | 00D1000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000C500000031000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000020000 |
| | | 006F000000F8000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FE000000C5000000310000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0019000000C4000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FE000000C50000 |
| | | 0031000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000100000059000000F3000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FD0000 |
| | | 00C5000000310000000100000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000F000000AD000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FE000000C50000003000000001000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000003E000000E6000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FE000000C500000031000000010000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000600000085000000FB000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000C5000000310000000100000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001C000000BC000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FE000000C50000003100000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000100000033000000CC000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FE000000C500000030000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000100000037000000CD000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000C2000000290000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000100000037000000CF0000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FD000000BE0000 |
| | | 0029000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000003A0000 |
| | | 00D0000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FD0000 |
| | | 00BE000000290000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 003A000000D0000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FD000000BE0000002900000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000003A000000D1000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FD000000BE00000029000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000003A000000D0000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FD000000BE000000290000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000003B000000D0000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FD000000BE0000002900000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000003A000000D0000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FD000000BE00000029000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000003A000000D0000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000BE000000290000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000003A000000D00000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FD000000B90000 |
| | | 0019000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000003A0000 |
| | | 00D1000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F8000000970000 |
| | | 0011000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 003A000000D0000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F800000098000000150000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000003B000000D0000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F80000009800000014000000000000 |
| | | 0000000000060000004A00000024000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000003A000000D0000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F8000000980000001400000000000000000000 |
| | | 000600000065000000E8000000BA000000240000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000003A000000D0000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000F800000098000000140000000000000000000000060000 |
| | | 0065000000EA000000FF000000FD000000A80000001000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000003A000000D0000000FE000000FF0000 |
| | | 00FF000000F80000009800000015000000000000000000000006000000650000 |
| | | 00EA000000FF000000FF000000FF000000F40000005700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000003A000000D1000000FE0000 |
| | | 00F8000000980000001500000000000000000000000600000065000000EA0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000A200000005000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000003A000000CA0000 |
| | | 00970000001500000000000000000000000600000061000000E9000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000BC0000000C000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000001000000220000 |
| | | 001100000000000000000000000600000061000000E8000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000B000000009000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000600000061000000E8000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F90000006D00000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000100000050000000E7000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FC000000AE0000001700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000036000000D0000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FC000000B3000000230000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000100000038000000C3000000FA000000FF000000FF0000 |
| | | 00FF000000FA000000B100000023000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000001E00000073000000B8000000CF0000 |
| | | 00C10000007C0000001B00000000000000000000000000000000000000000000 |
| | | 00000000000080007FFFFFC0000000000FFFFF000000000000FFFC0000000000 |
| | | 000FE00100008000000000030000FFFC000000070000C1FFC000001F0000C07F |
| | | F800007F0000C01FFF0003FF0000C007FFFFFFFF0000C003FFFFFFFF0000E000 |
| | | FFFFFFFF0000E0003FFFFFFF0000F0001FFFFFFF0000F00007FFFFFF0000F800 |
| | | 03FFFFFF0000F80001FFFFFF0000FC0000FFFFFF0000FC00007FFFFF0000FE00 |
| | | 003FFFFF0000FF00001FFFFF0000FF00000FFFFF0000FF800007FFFF0000FF80 |
| | | 0003FFFF0000FFC00003FFFF0000FFE00001FFFF0000FFF00000FFFF0000FFF8 |
| | | 00007FFF0000FFFC00003FFF0000FFFE00001FFF0000FFFF00000FFF0000FFFF |
| | | 800007FF0000FFFFC00003FF0000FFFFE00001FF0000FFFFF00001FF0000FFFF |
| | | F80003FF0000FFFFFC00063F0000FFFFFE000C1F0000FFFFFF00180F0000FFFF |
| | | FF80300F0000FFFFFFC060070000FFFFFFE0C0070000FFFFFFF180070000FFFF |
| | | FFFF00070000FFFFFFFE000F0000FFFFFFFF001F0000FFFFFFFF003F0000FFFF |
| | | FFFF807F00002800000028000000500000000100200000000000401A00000000 |
| | | 000000000000000000000000000000000000000000190000004D000000730000 |
| | | 0090000000A0000000A7000000A90000009F0000008F00000075000000540000 |
| | | 0032000000140000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000001000000190000 |
| | | 007E000000C7000000790000000700000012000000AF000000F6000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FE000000F90000 |
| | | 00E9000000CA0000009700000056000000250000000700000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000C0000004C000000BE0000 |
| | | 00FA000000FF000000D60000001B0000001E000000D7000000FF000000FF0000 |
| | | 00FD000000F9000000F7000000F7000000F9000000FD000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000F8000000DE000000A8000000620000002A0000 |
| | | 000C000000010000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000003000000160000004F000000AB000000EF000000FF0000 |
| | | 00FF000000F40000008D00000009000000040000005A000000A2000000870000 |
| | | 0067000000550000004B0000004B000000540000006700000085000000AA0000 |
| | | 00CF000000EE000000FD000000FF000000FF000000FF000000FA000000E30000 |
| | | 00B80000008200000051000000310000002000000019000000180000001C0000 |
| | | 002E0000004F0000008A000000CA000000F3000000FF000000FF000000FD0000 |
| | | 00D7000000660000000E00000000000000000000000100000004000000020000 |
| | | 0000000000000000000000000000000000000000000000000001000000060000 |
| | | 00170000003C00000075000000B8000000E7000000FC000000FF000000FF0000 |
| | | 00FF000000FE000000F8000000EA000000DD000000D4000000D3000000D90000 |
| | | 00E7000000F7000000FE000000FF000000FF000000FD000000E3000000910000 |
| | | 002A00000002000000000000000000000000000000010000003E000000800000 |
| | | 00420000000A0000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000000D000000310000006B000000AC000000DE0000 |
| | | 00F6000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000F3000000CE0000008400000032000000060000 |
| | | 0000000000000000000000000000000000000000000E000000BC000000FE0000 |
| | | 00EC000000A50000004100000009000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000008000000240000 |
| | | 004E00000080000000AC000000C9000000D9000000E1000000E2000000DC0000 |
| | | 00CD000000B00000008200000048000000190000000300000000000000000000 |
| | | 00000000000000000000000000000000000000000009000000A8000000FF0000 |
| | | 00FF000000FE000000EB0000009F000000370000000600000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000100000007000000110000001C00000024000000250000001F0000 |
| | | 0014000000080000000100000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000004A000000EF0000 |
| | | 00FF000000FF000000FF000000FE000000E4000000900000002E000000030000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000000C000000AC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FD000000DD0000007E0000 |
| | | 0020000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000470000 |
| | | 00EE000000FF000000FF000000FF000000FF000000FF000000FF000000FB0000 |
| | | 00CE000000630000001100000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000000000000B0000 |
| | | 00A5000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F5000000B000000037000000030000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0040000000EA000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FE000000DB000000510000000300000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00090000009E000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000E10000005200000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000036000000E3000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000E100000052000000030000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000500000089000000FC000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000E1000000520000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000024000000D3000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000E10000 |
| | | 0052000000030000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000200000065000000F5000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00E1000000520000000300000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000010000000A8000000FD000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000E10000005200000003000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000027000000C1000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000E100000052000000030000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000002D000000C2000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000DF0000004B0000000200000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000002D000000C50000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000DD0000004A00000002000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000002F0000 |
| | | 00C6000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000DD0000004A000000020000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 002F000000C6000000FE000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000DD0000004A0000 |
| | | 0002000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000002F000000C6000000FE000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000DD0000 |
| | | 004A000000020000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000002F000000C6000000FE000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00DD0000004A0000000200000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000002F000000C6000000FE000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000DD0000004A00000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000002F000000C6000000FE000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000DD00000049000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000002F000000C6000000FE0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F800000080000000040000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000010000002F000000C60000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F80000009400000013000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000002F0000 |
| | | 00C6000000FE000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00F800000094000000130000000000000003000000450000003F000000020000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 002F000000C6000000FE000000FF000000FF000000FF000000FF000000F80000 |
| | | 00940000001300000000000000030000004F000000DF000000DA000000410000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00010000002F000000C6000000FE000000FF000000FF000000F8000000940000 |
| | | 001300000000000000030000004F000000E0000000FF000000FF000000C20000 |
| | | 0018000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000002F000000C6000000FE000000F800000094000000130000 |
| | | 0000000000030000004F000000E0000000FF000000FF000000FF000000F70000 |
| | | 0055000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000010000002F000000BF0000009300000013000000000000 |
| | | 00030000004C000000DE000000FF000000FF000000FF000000FF000000FE0000 |
| | | 007A000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000001B0000000F00000000000000030000 |
| | | 004C000000DD000000FF000000FF000000FF000000FF000000FF000000FC0000 |
| | | 006C000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000030000004C0000 |
| | | 00DD000000FF000000FF000000FF000000FF000000FF000000FF000000DB0000 |
| | | 002D000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000000D000000AA0000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000E5000000590000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000010000002F0000 |
| | | 00C0000000FC000000FF000000FF000000FF000000E40000005B000000050000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000010000 |
| | | 001F0000007E000000C2000000D1000000B00000004900000005000000000000 |
| | | 00000000000000000000000000008001FFFFC000000000003FFF800000000000 |
| | | 03FC0000000000000000010000008FC000000300000083FC00000F00000080FF |
| | | C0003F000000803FF801FF000000C00FFFFFFF000000C003FFFFFF000000E001 |
| | | FFFFFF000000E0007FFFFF000000F0003FFFFF000000F0001FFFFF000000F800 |
| | | 0FFFFF000000F80007FFFF000000FC0003FFFF000000FC0001FFFF000000FE00 |
| | | 00FFFF000000FF00007FFF000000FF00003FFF000000FF80001FFF000000FFC0 |
| | | 000FFF000000FFE00007FF000000FFF00003FF000000FFF80001FF000000FFFC |
| | | 0000FF000000FFFE00007F000000FFFF00007F000000FFFF8000FF000000FFFF |
| | | C0010F000000FFFFE00207000000FFFFF00407000000FFFFF80807000000FFFF |
| | | FC1003000000FFFFFE2007000000FFFFFFC007000000FFFFFFC007000000FFFF |
| | | FFC00F000000FFFFFFE01F000000280000002000000040000000010020000000 |
| | | 0000801000000000000000000000000000000000000000000007000000480000 |
| | | 0081000000A1000000B0000000B6000000B3000000A50000008B000000660000 |
| | | 003B000000180000000400000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000050000003E000000B0000000AD0000001B00000035000000E70000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FF000000FF000000FC0000 |
| | | 00EF000000D10000009A00000057000000210000000600000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000050000 |
| | | 002900000086000000E5000000FE000000E50000003000000020000000B60000 |
| | | 00CC000000B3000000A1000000990000009E000000AE000000C6000000DF0000 |
| | | 00F5000000FE000000FF000000F8000000DB000000A500000066000000360000 |
| | | 001A0000000C00000008000000080000000E000000220000004E000000980000 |
| | | 00DE000000FC000000FD000000D8000000600000000700000001000000100000 |
| | | 0015000000080000000400000002000000030000000600000010000000230000 |
| | | 004B00000088000000C7000000EF000000FD000000FF000000FB000000ED0000 |
| | | 00D5000000C1000000B4000000B5000000C4000000DE000000F5000000FE0000 |
| | | 00FE000000E7000000970000002C0000000200000000000000000000001A0000 |
| | | 0087000000690000001A00000001000000000000000000000000000000000000 |
| | | 000000000002000000120000003C0000007A000000BA000000E2000000F70000 |
| | | 00FE000000FF000000FF000000FF000000FF000000FC000000F0000000CD0000 |
| | | 0087000000350000000700000000000000000000000000000000000000470000 |
| | | 00F4000000F9000000CA00000068000000170000000100000000000000000000 |
| | | 0000000000000000000000000000000000010000000C000000270000004C0000 |
| | | 00720000008D0000009B0000009A00000089000000670000003D000000170000 |
| | | 00030000000000000000000000000000000000000000000000000000001D0000 |
| | | 00D0000000FF000000FF000000F8000000C30000005A00000011000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000000200000002000000010000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000020000 |
| | | 0070000000FA000000FF000000FF000000FF000000F5000000B6000000490000 |
| | | 000A000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001C000000CD000000FF000000FF000000FF000000FF000000FF000000EF0000 |
| | | 009F000000310000000300000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000100000069000000F8000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FE000000DE000000690000000A000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000018000000C7000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F20000007B0000000A0000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000010000005F000000F5000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F20000007B0000000A00000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000011000000B6000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F30000007B0000000A000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000046000000EB000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F20000007B0000000A0000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000070000008E000000FB000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000F20000007B0000 |
| | | 000A000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000001C000000B5000000FD000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000F20000 |
| | | 007B0000000A0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000023000000B7000000FD0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00F2000000760000000800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000024000000BA0000 |
| | | 00FD000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000F10000007400000008000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000250000 |
| | | 00BA000000FD000000FF000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000F100000074000000080000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0025000000BA000000FD000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000F1000000740000000800000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000025000000BA000000FD000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000F10000007500000008000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000025000000BA000000FD000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F100000074000000080000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000025000000BA000000FD000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FF000000E9000000420000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000025000000BA000000FD000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000F700000090000000100000 |
| | | 0000000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000025000000BA000000FD0000 |
| | | 00FF000000FF000000FF000000FF000000F70000009000000010000000010000 |
| | | 00390000005D0000000800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000025000000BA0000 |
| | | 00FD000000FF000000FF000000F70000009000000010000000010000003B0000 |
| | | 00D2000000EF0000006100000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000250000 |
| | | 00BA000000FD000000F70000009000000010000000010000003B000000D20000 |
| | | 00FE000000FF000000D00000001B000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0025000000B40000008F000000100000000100000039000000D1000000FE0000 |
| | | 00FF000000FF000000F000000039000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000150000000D0000000100000039000000D0000000FE000000FF0000 |
| | | 00FF000000FF000000E80000002F000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000002A000000CE000000FE000000FF000000FF0000 |
| | | 00FF000000FA000000970000000A000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001F000000B8000000FC000000FF000000FF0000 |
| | | 00FA000000A40000001800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000001E00000088000000CB000000CE0000 |
| | | 008900000018000000000000000000000000000000000007FFE00000FF800000 |
| | | 00000000000183E0000780FC001F807FE1FF801FFFFFC007FFFFC003FFFFE001 |
| | | FFFFE000FFFFF0007FFFF8003FFFF8001FFFFC000FFFFE0007FFFF0003FFFF80 |
| | | 01FFFFC000FFFFE0007FFFF0003FFFF8003FFFFC002FFFFE0007FFFF0003FFFF |
| | | 8003FFFFC003FFFFE003FFFFF803FFFFF807FFFFFC0F28000000180000003000 |
| | | 0000010020000000000060090000000000000000000000000000000000000000 |
| | | 002200000088000000B0000000BE000000C1000000B70000009F000000760000 |
| | | 0043000000190000000400000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000010000001500000073000000C4000000400000 |
| | | 0056000000EC000000E7000000DC000000DA000000E1000000EF000000F90000 |
| | | 00F2000000D30000009800000052000000230000000B00000002000000010000 |
| | | 0001000000080000002200000062000000C1000000F7000000D5000000370000 |
| | | 000D000000390000002D0000001E0000001C00000023000000370000005D0000 |
| | | 009A000000D3000000F4000000F7000000DE000000BB0000009B0000008C0000 |
| | | 0093000000B2000000DC000000F8000000E90000009B0000002C000000020000 |
| | | 0002000000660000008F00000035000000060000000000000000000000000000 |
| | | 00040000001A000000490000008A000000C1000000E0000000EF000000F40000 |
| | | 00F2000000E6000000C700000089000000390000000800000000000000000000 |
| | | 000300000093000000FD000000E6000000920000002D00000004000000000000 |
| | | 00000000000000000000000000020000000E0000002300000037000000410000 |
| | | 003D0000002A0000001100000002000000000000000000000000000000000000 |
| | | 000000000039000000E8000000FF000000FD000000DF00000082000000220000 |
| | | 0002000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000700000099000000FE000000FF000000FF000000FC000000D20000 |
| | | 00650000000F0000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000035000000E5000000FF000000FF000000FF000000FF0000 |
| | | 00F60000009F0000001800000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000050000008E000000FD000000FF000000FF000000FF0000 |
| | | 00FF000000FB000000A500000018000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000029000000DA000000FF000000FF000000FF0000 |
| | | 00FF000000FF000000FB000000A5000000190000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000020000006F000000F8000000FF000000FF0000 |
| | | 00FF000000FF000000FF000000FB000000A50000001800000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000012000000A5000000FC000000FF0000 |
| | | 00FF000000FF000000FF000000FF000000FB000000A500000018000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000001B000000AB000000FC0000 |
| | | 00FF000000FF000000FF000000FF000000FF000000FB000000A1000000160000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000000000001C000000AD0000 |
| | | 00FC000000FF000000FF000000FF000000FF000000FF000000FA000000A00000 |
| | | 0016000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000000000001C0000 |
| | | 00AD000000FC000000FF000000FF000000FF000000FF000000FF000000FA0000 |
| | | 00A0000000160000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001C000000AD000000FC000000FF000000FF000000FF000000FF000000FF0000 |
| | | 00FA000000A00000001600000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000001C000000AD000000FC000000FF000000FF000000FF000000FF0000 |
| | | 00FF000000FA0000009B0000000C000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000001C000000AD000000FC000000FF000000FF000000FF0000 |
| | | 00FF000000F7000000890000000A000000020000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001C000000AD000000FC000000FF000000FF0000 |
| | | 00F70000008C0000000F0000002A000000770000001400000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000001C000000AD000000FC000000F70000 |
| | | 008C0000000F0000002A000000C1000000F80000007E00000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000001C000000A60000008A0000 |
| | | 000F00000029000000C1000000FE000000FF000000C700000010000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000100000000B0000 |
| | | 0029000000BF000000FD000000FF000000FF000000B70000000B000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000030000 |
| | | 0081000000FA000000FF000000FF000000DD0000004500000001000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001B0000008F000000D1000000BE00000046000000020000000000000000001F |
| | | E00000000000000000000700030001E00F00807FFF00803FFF00C01FFF00C00F |
| | | FF00E007FF00E003FF00F001FF00F800FF00FC007F00FE003F00FF001F00FF80 |
| | | 0F00FFC00700FFE00300FFF00100FFF80100FFFC0100FFFE0100FFFF03002800 |
| | | 0000140000002800000001002000000000009006000000000000000000000000 |
| | | 0000000000000000003B000000A5000000C0000000C7000000C0000000A90000 |
| | | 007E000000450000001900000003000000000000000000000000000000000000 |
| | | 0000000000000000000C00000053000000BD0000005700000053000000BD0000 |
| | | 00A90000009F000000A8000000C1000000E0000000EC000000D2000000970000 |
| | | 00570000002F0000001E0000001C0000002E00000060000000B2000000EC0000 |
| | | 00BF00000031000000070000003F0000002500000005000000040000000D0000 |
| | | 0024000000560000009C000000D4000000EC000000E8000000DD000000DB0000 |
| | | 00E7000000EB000000C70000006E000000180000000000000010000000C00000 |
| | | 00D5000000760000001D000000010000000000000000000000040000001A0000 |
| | | 003F000000660000007D0000007F000000680000003D00000013000000010000 |
| | | 000000000000000000030000007D000000FC000000FB000000CE000000670000 |
| | | 0014000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000230000 |
| | | 00D6000000FF000000FF000000F8000000BD0000004800000005000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000200000076000000FB000000FF000000FF0000 |
| | | 00FF000000E90000006700000006000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 001D000000CC000000FF000000FF000000FF000000FF000000EC000000670000 |
| | | 0006000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000010000005F000000F5000000FF0000 |
| | | 00FF000000FF000000FF000000EC000000670000000600000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000D0000009C000000FB000000FF000000FF000000FF000000FF0000 |
| | | 00EC000000670000000600000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000018000000A50000 |
| | | 00FB000000FF000000FF000000FF000000FF000000EC00000064000000050000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000018000000A6000000FB000000FF000000FF0000 |
| | | 00FF000000FF000000EB00000063000000050000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0019000000A6000000FB000000FF000000FF000000FF000000FF000000EB0000 |
| | | 0063000000050000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000019000000A6000000FB0000 |
| | | 00FF000000FF000000FF000000FF000000EB0000006000000003000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000000000019000000A6000000FB000000FF000000FF000000FF0000 |
| | | 00F70000007F0000000700000002000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000190000 |
| | | 00A6000000FB000000FF000000F70000008A000000130000005E000000580000 |
| | | 0003000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000000000000019000000A6000000F30000008A0000 |
| | | 001300000066000000EC000000DD000000270000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000018000000590000001300000064000000EC000000FF000000F30000 |
| | | 0040000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000410000 |
| | | 00E8000000FF000000FD000000B8000000170000000000000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000000000000000000001700000090000000D3000000AA000000260000 |
| | | 000000000000003F000000000000000010000300300001FFF000807FF000803F |
| | | F000C01FF000C00FF000E007F000F003F000F801F000FC00F000FE007000FF00 |
| | | 3000FF801000FFC01000FFE01000FFF81000FFF8300028000000100000002000 |
| | | 0000010020000000000040040000000000000000000000000000000000000000 |
| | | 0058000000BB000000C6000000C4000000B20000008300000046000000180000 |
| | | 0004000000000000000000000000000000090000003B000000A7000000690000 |
| | | 003D0000006F000000560000005A00000078000000AC000000D2000000CB0000 |
| | | 009D000000710000006200000076000000AF000000D70000009E000000250000 |
| | | 0021000000A00000005A00000011000000010000000700000023000000570000 |
| | | 0091000000B6000000BF000000B2000000830000003B00000009000000000000 |
| | | 0014000000C2000000F5000000B90000004D0000000B00000000000000000000 |
| | | 0002000000080000000C00000007000000010000000000000000000000000000 |
| | | 00010000005C000000F6000000FF000000F0000000A20000002A000000010000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 000000000012000000BC000000FF000000FF000000FE000000C9000000310000 |
| | | 0001000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000004E000000F0000000FF000000FF000000FE000000CA0000 |
| | | 0031000000010000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000900000091000000FA000000FF000000FF000000FE0000 |
| | | 00C9000000310000000100000000000000000000000000000000000000000000 |
| | | 00000000000000000000000000140000009E000000FA000000FF000000FF0000 |
| | | 00FE000000C80000002F00000001000000000000000000000000000000000000 |
| | | 0000000000000000000000000000000000150000009F000000FA000000FF0000 |
| | | 00FF000000FE000000C70000002F000000010000000000000000000000000000 |
| | | 000000000000000000000000000000000000000000150000009F000000FA0000 |
| | | 00FF000000FF000000FE000000C70000002E0000000000000000000000000000 |
| | | 00000000000000000000000000000000000000000000000000150000009F0000 |
| | | 00FA000000FF000000FF000000F50000006A0000000500000000000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000150000 |
| | | 009F000000FA000000F600000088000000290000008500000026000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0015000000990000008500000029000000AD000000FB00000080000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 00000000000B0000001B000000A8000000FC000000F80000006C000000000000 |
| | | 0000000000000000000000000000000000000000000000000000000000000000 |
| | | 0000000000000000000F0000008E000000D30000008A00000010000000000070 |
| | | 000000000000000100000307000000FF0000807F0000C03F0000C01F0000E00F |
| | | 0000F0070000F8070000FC030000FE010000FF010000FF810000FFC10000} |
| | | OldCreateOrder = False |
| | | OnCreate = FormCreate |
| | | DesignSize = ( |
| | | 1280 |
| | | 733) |
| | | PixelsPerInch = 96 |
| | | TextHeight = 13 |
| | | object Panel1: TPanel |
| | | Left = 0 |
| | | Top = 0 |
| | | Width = 936 |
| | | Height = 726 |
| | | Anchors = [akLeft, akTop, akRight, akBottom] |
| | | BevelOuter = bvNone |
| | | Caption = #25163#20889#21306 |
| | | TabOrder = 0 |
| | | DesignSize = ( |
| | | 936 |
| | | 726) |
| | | object Edit1: TEdit |
| | | Left = 625 |
| | | Top = 13 |
| | | Width = 311 |
| | | Height = 34 |
| | | Anchors = [akTop, akRight] |
| | | BorderStyle = bsNone |
| | | Color = clBtnFace |
| | | Ctl3D = False |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -21 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentCtl3D = False |
| | | ParentFont = False |
| | | TabOrder = 0 |
| | | end |
| | | end |
| | | object Button1: TButton |
| | | Left = 955 |
| | | Top = 70 |
| | | Width = 116 |
| | | Height = 43 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #28165#31354#25163#20889#21306 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -19 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 1 |
| | | OnClick = Button1Click |
| | | end |
| | | object edtName: TEdit |
| | | Left = 950 |
| | | Top = 13 |
| | | Width = 311 |
| | | Height = 36 |
| | | Anchors = [akTop, akRight] |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -21 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 2 |
| | | end |
| | | object Button2: TButton |
| | | Left = 955 |
| | | Top = 150 |
| | | Width = 149 |
| | | Height = 96 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #21024#38500#31508#30011 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -29 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 3 |
| | | OnClick = Button2Click |
| | | end |
| | | object Button3: TButton |
| | | Left = 1085 |
| | | Top = 70 |
| | | Width = 86 |
| | | Height = 43 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #30830' '#35748 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -19 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 4 |
| | | OnClick = Button3Click |
| | | end |
| | | object Button4: TButton |
| | | Left = 1180 |
| | | Top = 70 |
| | | Width = 86 |
| | | Height = 43 |
| | | Anchors = [akTop, akRight] |
| | | Caption = #21024' '#38500 |
| | | Font.Charset = ANSI_CHARSET |
| | | Font.Color = clWindowText |
| | | Font.Height = -19 |
| | | Font.Name = #24494#36719#38597#40657 |
| | | Font.Style = [] |
| | | ParentFont = False |
| | | TabOrder = 5 |
| | | OnClick = Button4Click |
| | | end |
| | | object InkCLT: TInkCollector |
| | | AutoConnect = True |
| | | ConnectKind = ckRunningOrNew |
| | | OnStroke = InkCLTStroke |
| | | Left = 69 |
| | | Top = 25 |
| | | end |
| | | object InkRC: TInkRecognizerContext |
| | | AutoConnect = False |
| | | ConnectKind = ckRunningOrNew |
| | | Left = 116 |
| | | Top = 25 |
| | | end |
| | | end |
¶Ô±ÈÐÂÎļþ |
| | |
| | | unit Unit1; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
| | | Dialogs, OleServer, MSINKAUTLib_TLB, ExtCtrls, StdCtrls; |
| | | |
| | | type |
| | | TForm1 = class(TForm) |
| | | InkCLT: TInkCollector; |
| | | InkRC: TInkRecognizerContext; |
| | | Panel1: TPanel; |
| | | Button1: TButton; |
| | | edtName: TEdit; |
| | | Button2: TButton; |
| | | Button3: TButton; |
| | | Button4: TButton; |
| | | Edit1: TEdit; |
| | | procedure FormCreate(Sender: TObject); |
| | | procedure InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; |
| | | const Stroke: IInkStrokeDisp; var Cancel: WordBool); |
| | | procedure Button1Click(Sender: TObject); |
| | | procedure Button2Click(Sender: TObject); |
| | | procedure Button3Click(Sender: TObject); |
| | | procedure Button4Click(Sender: TObject); |
| | | private |
| | | { Private declarations } |
| | | procedure InitializeInkCollector; |
| | | function DeleteStr(str :WideString):WideString; |
| | | public |
| | | { Public declarations } |
| | | end; |
| | | |
| | | var |
| | | Form1: TForm1; |
| | | |
| | | implementation |
| | | |
| | | {$R *.dfm} |
| | | |
| | | //------- èªå®ä¹å½æ° ------------------------------ |
| | | //åå§åInkCLT |
| | | procedure TForm1.InitializeInkCollector; |
| | | begin |
| | | InkCLT.hWnd := panel1.Handle; |
| | | InkCLT.Enabled := true; |
| | | InkCLT.DefaultDrawingAttributes.Color := clRed; // 墨水é¢è² |
| | | InkCLT.DefaultDrawingAttributes.Width := 200; // ç¬ç宽度 |
| | | end; |
| | | |
| | | function TForm1.DeleteStr(str :WideString):WideString; |
| | | var |
| | | LengthOfText: Integer; |
| | | begin |
| | | LengthOfText := Length(str); |
| | | if LengthOfText > 0 then |
| | | begin |
| | | // å 餿åä¸ä¸ªå符 |
| | | Delete(str, LengthOfText, 1); |
| | | end; |
| | | Result := str; |
| | | end; |
| | | //------------------------------------------------- |
| | | |
| | | procedure TForm1.FormCreate(Sender: TObject); |
| | | begin |
| | | InitializeInkCollector; |
| | | end; |
| | | |
| | | procedure TForm1.InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; |
| | | const Stroke: IInkStrokeDisp; var Cancel: WordBool); |
| | | //var |
| | | // ActiveCtrl: TWinControl; |
| | | begin |
| | | //è¿åå½åæ¥æç¦ç¹çæ§ä»¶ |
| | | //ActiveCtrl := Screen.ActiveControl; |
| | | //if ActiveCtrl is TEdit then |
| | | // TEdit(ActiveCtrl).Text := TEdit(ActiveCtrl).Text + Stroke.Ink.Strokes.ToString |
| | | //else if ActiveCtrl is TMemo then |
| | | // TMemo(ActiveCtrl).Lines.Add(Stroke.Ink.Strokes.ToString); |
| | | Edit1.Text := Stroke.Ink.Strokes.ToString; |
| | | //else |
| | | // ShowMessage('æç¤ºï¼å½åç¦ç¹ä¸å¨ç¼è¾æ¡æå¤è¡ç¼è¾æ¡ä¸.'); |
| | | end; |
| | | |
| | | //æ¸
空æååº |
| | | procedure TForm1.Button1Click(Sender: TObject); |
| | | begin |
| | | InkCLT.Ink.DeleteStrokes(InkCLT.Ink.Strokes); |
| | | Edit1.Clear; |
| | | Panel1.Refresh; |
| | | end; |
| | | |
| | | //å é¤ä¸ä¸ªåï¼è¦ç»è®¡æ¯ä¸ªåæå¤å°å£ç»ï¼Inkåªè½è¿½è¸ªç¬ç»ï¼æç¬ç»æ¥å é¤ï¼ï¼ï¼ |
| | | procedure TForm1.Button2Click(Sender: TObject); |
| | | var |
| | | Strokes: IInkStrokes; |
| | | LastStroke: IInkStrokeDisp; |
| | | begin |
| | | //Edit1.Text := DeleteStr(Edit1.Text); |
| | | |
| | | if InkCLT.Ink.Strokes.Count > 0 then |
| | | begin |
| | | Strokes := InkCLT.Ink.Strokes; |
| | | LastStroke := Strokes.Item(Strokes.Count - 1) as IInkStrokeDisp; |
| | | InkCLT.Ink.DeleteStroke(LastStroke); |
| | | end; |
| | | end; |
| | | |
| | | //确认å¤éå |
| | | procedure TForm1.Button3Click(Sender: TObject); |
| | | begin |
| | | edtName.Text := edtName.Text + Trim(Edit1.Text); |
| | | Button1Click(Sender); |
| | | end; |
| | | |
| | | //å é¤Edit1çä¸ä¸ªå |
| | | procedure TForm1.Button4Click(Sender: TObject); |
| | | begin |
| | | edtName.Text := DeleteStr(edtName.Text); |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | æè°¢ Chee Wee Chua |
| | | åçå°åï¼http://cc.embarcadero.com/Item/22684 |
| | | |
| | | å®è£
好 ink ç®å½ä¸ç ink.dpk åï¼è¿è¡ æ¯æåº ç®å½ ä¸ç 注å.bat |
| | | æ¯ä¸ªç¬ç»åªè½è¯å«åºä¸åæ¥ã |
| | | |
| | | Winxp sp2 + delphi 7.0 ç¼è¯éè¿ |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ä¸å ifdef 忝åå»ºä½¿ä» DLL å¯¼åºæ´ç®åç |
| | | // å®çæ åæ¹æ³ãæ¤ DLL ä¸çæææä»¶é½æ¯ç¨å½ä»¤è¡ä¸å®ä¹ç ACTUATOR_EXPORTS |
| | | // 符å·ç¼è¯çãå¨ä½¿ç¨æ¤ DLL ç |
| | | // ä»»ä½é¡¹ç®ä¸ä¸åºå®ä¹æ¤ç¬¦å·ãè¿æ ·ï¼æºæä»¶ä¸å
嫿¤æä»¶çä»»ä½å
¶ä»é¡¹ç®é½ä¼å° |
| | | // ACTUATOR_API 彿°è§ä¸ºæ¯ä» DLL 导å
¥çï¼èæ¤ DLL åå°ç¨æ¤å®å®ä¹ç |
| | | // 符å·è§ä¸ºæ¯è¢«å¯¼åºçã |
| | | #ifdef ACTUATOR_EXPORTS |
| | | #define ACTUATOR_API __declspec(dllexport) |
| | | #else |
| | | #define ACTUATOR_API __declspec(dllimport) |
| | | #endif |
| | | |
| | | typedef enum |
| | | { |
| | | //ç²®ç§åå¤å½ä»¤ä»£ç ï¼ç²®ç§å·²ä¿®æ¹ï¼ |
| | | READY_GRAIN = 0x01, |
| | | |
| | | //è¿ååå¤å®æ |
| | | READY_FINISH = 0x02, |
| | | |
| | | //æ£æµå¯å¨å½ä»¤ |
| | | DETECT_START = 0x03, |
| | | |
| | | //è¿åæ£æµå®æ¯ |
| | | DETECT_FINISH = 0x04, |
| | | |
| | | //è®¾å¤æ°´å仪å¤ä½å½ä»¤ |
| | | DEVICE_WR_RESET = 0xFE, |
| | | |
| | | //è¿åæ°´å仪æ
é代ç |
| | | DEVICE_WR_FAULT = 0xFF |
| | | }PLCWORD; |
| | | |
| | | typedef enum |
| | | { |
| | | //æ°´å仪å夿令 |
| | | WR_READY = 0x01, |
| | | |
| | | //æ°´åä»ªæ£æµæä»¤ |
| | | WR_DETECT = 0x02, |
| | | |
| | | //æ°´åä»ªæ ¡éªæä»¤ |
| | | WR_VERIFY = 0x03 |
| | | }WRWORD; |
| | | |
| | | |
| | | //å建åå§å客æ·PLC设å¤å¥æctx |
| | | //strIp: IPå°å |
| | | //nPort: ç½ç»ç«¯å£ |
| | | ACTUATOR_API void* CreatePlcDevice(const char* strIp, int nPort); |
| | | |
| | | //å建水åä»ªå¥æctx |
| | | //szSerialPort: 串å£å |
| | | //baud: æ³¢ç¹ç |
| | | //parity: æ ¡éªç±»å |
| | | //data_bit: æ°æ®ä½ |
| | | //stop_bit: åæ¢ä½ |
| | | ACTUATOR_API void* CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit); |
| | | |
| | | |
| | | //è¿æ¥å®¢æ·è®¾å¤ææ°´å仪è£
ç½® |
| | | //ctxDev : 设å¤å¥æ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ConnectDevice(void* ctxDev); |
| | | |
| | | //è·åç¶ææç²®ç§æ´æ¹ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x03: å¼å§æµè¯ |
| | | // 0xFE: å¤ä½å½ä»¤ï¼ä¼å
级æé« |
| | | // å
¶ä»ï¼ 为åå
¥ç¶æ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType); |
| | | |
| | | //ååç¶æ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x02: åå¤å·²å®æ |
| | | // 0x04: æ£æµå®æ |
| | | // 0xFF: æ°´å仪æ
é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int WriteState(void* ctxDev, unsigned short nState); |
| | | ACTUATOR_API int __stdcall ResponseState(void* ctxDev, unsigned short nState); |
| | | |
| | | //åä¼ æ£æµæ°æ® |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // ç²®ç§ç¼ç |
| | | // 嫿°´çï¼ åæ´ = åå¼*100 |
| | | // å®¹éæ¯ï¼ åæ´ = åå¼*100 |
| | | //nSize : æ°æ®ä¸ªæ° |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3); |
| | | |
| | | |
| | | |
| | | |
| | | //ä¸åå½ä»¤ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nCmdType ï¼å½ä»¤åï¼å¦ä¸æè¿° |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x02: å¼å§æµè¯ |
| | | // 0x03: æ ¡åå½ä»¤ï¼å³ä¸ºæ å®é¡µé¢æ£æµæé®å½ä»¤ï¼ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | // å½nCmdType 为0x02ï¼0x03æ¶ï¼ä¸ç¨èèç²®ç§ç¼å· |
| | | // nResponseSeconds: ååºæ¶é´ï¼ä»¥ç§è®¡ç® |
| | | // nResponseUSeconds: ååºæ¶é´ï¼ä»¥å¾®å¦è®¡ç®ï¼è¥å°äºç§ï¼å
¨é¨ç¨å¾®å¦è¡¨ç¤ºã |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000); |
| | | |
| | | |
| | | //ä¸ååæ° |
| | | //ctxDev : 设å¤å¥æ |
| | | //nStartFreq ï¼èµ·å§é¢ç |
| | | //nStopFreq ï¼ ç»æ¢é¢ç |
| | | //nStepFreq ï¼ æ¥é¿ |
| | | //nDecayCode ï¼è¡°åç |
| | | //nAscValid ï¼ ASC å
é¨/å¤é¨ææï¼ åå¼ä¸º 0ï¼å
鍿æï¼ 1ï¼å¤é¨ææ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int WriteParams(void* ctxDev, unsigned short nStartFreq, unsigned short nStopFreq, |
| | | unsigned short nStepFreq, unsigned short nDecayCode, unsigned short nAscValid); |
| | | |
| | | |
| | | //è¯»åæ£æµä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // çµåå¼ |
| | | // éé |
| | | // 温度 |
| | | // 湿度 |
| | | // nSize : 读å4个å¯åå¨ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4); |
| | | |
| | | |
| | | //è¯»åæ«é¢å¼,å
¶å®ä¸ºçµå¹³å¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nVcc ï¼çµå¹³å¼æé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ReadVcc(void* ctxDev, unsigned short* nVcc); |
| | | |
| | | |
| | | //æå¼æ°´å仪æå®¢æ·è®¾å¤çè¿æ¥ï¼å¹¶éæ¯èµæº |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int DestroyDevice(void* ctxDev); |
| | | |
| | | //ç®æ³å½æ° |
| | | //x 为æµéå¼ |
| | | //y 为å®é
å¼ |
| | | //n 为æåæ¬¡æ° |
| | | //nSampleNumber æ ·æ¬æ°é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ActuatorDemo.cpp : æ¤æä»¶å
å« "main" 彿°ãç¨åºæ§è¡å°å¨æ¤å¤å¼å§å¹¶ç»æã |
| | | // |
| | | |
| | | #include <iostream> |
| | | #include "../Actuator//Actuator.h" |
| | | |
| | | //ç³»æ° |
| | | const double coef[5] = { 1,1,0.01,0,0 }; |
| | | |
| | | void ExeTest() |
| | | { |
| | | void* hPlcDev = CreatePlcDevice("127.0.0.1", 1502); |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hPlcDev) ret = ConnectDevice(hPlcDev); |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | char ch = 0; |
| | | |
| | | while ('c' != (ch = getchar())) //æ c éåºèªå¨æ£æµ |
| | | { |
| | | //读PLCç¶æå |
| | | ret = ReadState(hPlcDev, &nState, &nGrainType); |
| | | if (ret <= 0) |
| | | { |
| | | printf("读åPLCç¶æåå¼å¸¸ï¼\n"); |
| | | } |
| | | else if (nGrainType > 0 && nState > 0) |
| | | { |
| | | switch (nState) |
| | | { |
| | | case READY_GRAIN: //ç²®é£åç§ä¿®æ¹äº |
| | | { |
| | | //åæ°´å仪åç²®ç§æ´æ¹ï¼å¯å¨åå¤ |
| | | ret = SendCommands(hWrDev, WR_READY, nGrainType, 10, 0); |
| | | if (ret <= 0) |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹å¤±è´¥ï¼æ°´å仪æ
éï¼\n"); |
| | | ret = ResponseState(hPlcDev, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹æåï¼åå¤å°±ç»ª\n"); |
| | | ret = ResponseState(hPlcDev, READY_FINISH); |
| | | } |
| | | |
| | | } |
| | | break; |
| | | case DETECT_START: //å¼å§æµè¯ |
| | | { |
| | | ret = SendCommands(hWrDev, WR_DETECT, 0, 15, 0); |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | ret = ResponseState(hPlcDev, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | printf("æ§è¡æ£æµæåï¼\n"); |
| | | ret = ResponseState(hPlcDev, DETECT_FINISH); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | nDatas[0] = 0x01; // ç²®é£åç§ |
| | | nDatas[1] = v; // 21.30% //嫿°´ç |
| | | nDatas[2] = 5150; // 51.50; //容鿝 |
| | | ret = UploadData(hPlcDev, nDatas); |
| | | } |
| | | } |
| | | break; |
| | | case DEVICE_WR_RESET: //å¤ä½å½ä»¤ |
| | | { |
| | | |
| | | |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (hPlcDev) DestroyDevice(&hPlcDev); |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | //æå¨ååæ° |
| | | void ExeWriteParam() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = WriteParams(hWrDev, 10500, 12000, 50, 1, 1); |
| | | if (ret <= 0) |
| | | printf("ä¸ååæ°å¤±è´¥ï¼\n"); |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | |
| | | //æå¨æ£æµ |
| | | void ExeManTest() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, WR_READY, 0x01, 10, 0); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | printf("åå¤å¤±è´¥ï¼\n"); |
| | | else |
| | | { |
| | | ret = SendCommands(hWrDev, WR_DETECT, 0, 15, 0); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | printf(" After Detection,"); |
| | | printf(" %d %d %d %d", nDatas[0], nDatas[0], nDatas[0], nDatas[0]); |
| | | printf(" Water Rate:%lf", v); |
| | | printf(" \n"); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | // |
| | | void ExeVerifyTest() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, WR_READY, 0x01, 10,0); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("确认失败ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | ret = SendCommands(hWrDev, WR_VERIFY, 0, 15, 0); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ ¡åæ§è¡å¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nVcc = 0; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadVcc(hWrDev, &nVcc); |
| | | |
| | | printf(" Detected Val: %d", nVcc); |
| | | printf(" \n"); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | void TestLinearize() |
| | | { |
| | | int nSampeCount = 12; |
| | | |
| | | float x[]={0,1,2,3,4,5,6,7,8,9,10,11}; //realval |
| | | float y[]={2506,2200,1846,1440,1004,548,79,-387,-847,-1288,-1700,-2066}; //input |
| | | double coef[5] = { 0 }; |
| | | |
| | | int ret = Linearize(x, y, coef, 2, nSampeCount); |
| | | if (ret > 0) |
| | | { |
| | | printf("Coef: %f, %f, %f, %f, %f\n", coef[0], coef[1], coef[2], coef[3], coef[4]); |
| | | |
| | | float v = 3.0f; |
| | | printf("Input %lf, Cal Val:%lf\n", v, |
| | | (coef[0] + |
| | | coef[1] * v + |
| | | coef[2] * v * v + |
| | | coef[3] * v * v * v + |
| | | coef[4] * v * v * v * v) |
| | | ); |
| | | } |
| | | |
| | | } |
| | | |
| | | int main() |
| | | { |
| | | std::cout << "Hello World!\n"; |
| | | char ch = 0; |
| | | while ('x' != ( ch = getchar() )) //æ x éåºç¨åº |
| | | { |
| | | switch (ch) |
| | | { |
| | | case 'a': //èªå¨æµè¯ |
| | | ExeTest(); |
| | | break; |
| | | case 'p': //åæ°´ä»½ä»ªä¸ååæ° |
| | | ExeWriteParam(); |
| | | break; |
| | | case 'd': //æå¨æ£æµ |
| | | ExeManTest(); |
| | | break; |
| | | case 'v': //æ ¡å |
| | | ExeVerifyTest(); |
| | | break; |
| | | case 'l': //æåæµè¯ |
| | | TestLinearize(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | // è¿è¡ç¨åº: Ctrl + F5 æè°è¯ >âå¼å§æ§è¡(ä¸è°è¯)âèå |
| | | // è°è¯ç¨åº: F5 æè°è¯ >âå¼å§è°è¯âèå |
| | | |
| | | // å
¥é¨ä½¿ç¨æå·§: |
| | | // 1. 使ç¨è§£å³æ¹æ¡èµæºç®¡çå¨çªå£æ·»å /管çæä»¶ |
| | | // 2. 使ç¨å¢éèµæºç®¡çå¨çªå£è¿æ¥å°æºä»£ç 管ç |
| | | // 3. 使ç¨è¾åºçªå£æ¥ççæè¾åºåå
¶ä»æ¶æ¯ |
| | | // 4. 使ç¨é误å表çªå£æ¥çé误 |
| | | // 5. 转å°â项ç®â>âæ·»å æ°é¡¹â以å建æ°çä»£ç æä»¶ï¼æè½¬å°â项ç®â>âæ·»å ç°æé¡¹â以å°ç°æä»£ç æä»¶æ·»å å°é¡¹ç® |
| | | // 6. å°æ¥ï¼è¥è¦å次æå¼æ¤é¡¹ç®ï¼è¯·è½¬å°âæä»¶â>âæå¼â>â项ç®âå¹¶éæ© .sln æä»¶ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ä¸å ifdef 忝åå»ºä½¿ä» DLL å¯¼åºæ´ç®åç |
| | | // å®çæ åæ¹æ³ãæ¤ DLL ä¸çæææä»¶é½æ¯ç¨å½ä»¤è¡ä¸å®ä¹ç ACTUATOR_EXPORTS |
| | | // 符å·ç¼è¯çãå¨ä½¿ç¨æ¤ DLL ç |
| | | // ä»»ä½é¡¹ç®ä¸ä¸åºå®ä¹æ¤ç¬¦å·ãè¿æ ·ï¼æºæä»¶ä¸å
嫿¤æä»¶çä»»ä½å
¶ä»é¡¹ç®é½ä¼å° |
| | | // ACTUATOR_API 彿°è§ä¸ºæ¯ä» DLL 导å
¥çï¼èæ¤ DLL åå°ç¨æ¤å®å®ä¹ç |
| | | // 符å·è§ä¸ºæ¯è¢«å¯¼åºçã |
| | | #ifdef ACTUATOR_EXPORTS |
| | | #define ACTUATOR_API __declspec(dllexport) |
| | | #else |
| | | #define ACTUATOR_API __declspec(dllimport) |
| | | #endif |
| | | |
| | | typedef enum |
| | | { |
| | | //ç²®ç§åå¤å½ä»¤ä»£ç ï¼ç²®ç§å·²ä¿®æ¹ï¼ |
| | | READY_GRAIN = 0x01, |
| | | |
| | | //è¿ååå¤å®æ |
| | | READY_FINISH = 0x02, |
| | | |
| | | //æ£æµå¯å¨å½ä»¤ |
| | | DETECT_START = 0x03, |
| | | |
| | | //è¿åæ£æµå®æ¯ |
| | | DETECT_FINISH = 0x04, |
| | | |
| | | //è®¾å¤æ°´å仪å¤ä½å½ä»¤ |
| | | DEVICE_WR_RESET = 0xFE, |
| | | |
| | | //è¿åæ°´å仪æ
é代ç |
| | | DEVICE_WR_FAULT = 0xFF |
| | | }PLCWORD; |
| | | |
| | | typedef enum |
| | | { |
| | | //æ°´å仪å夿令 |
| | | WR_READY = 0x01, |
| | | |
| | | //æ°´åä»ªæ£æµæä»¤ |
| | | WR_DETECT = 0x02, |
| | | |
| | | //æ°´åä»ªæ ¡éªæä»¤ |
| | | WR_VERIFY = 0x03 |
| | | }WRWORD; |
| | | |
| | | |
| | | //å建åå§å客æ·PLC设å¤å¥æctx |
| | | //strIp: IPå°å |
| | | //nPort: ç½ç»ç«¯å£ |
| | | ACTUATOR_API void* CreatePlcDevice(const char* strIp, int nPort); |
| | | |
| | | //å建水åä»ªå¥æctx |
| | | //szSerialPort: 串å£å |
| | | //baud: æ³¢ç¹ç |
| | | //parity: æ ¡éªç±»å |
| | | //data_bit: æ°æ®ä½ |
| | | //stop_bit: åæ¢ä½ |
| | | ACTUATOR_API void* CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit); |
| | | |
| | | |
| | | //è¿æ¥å®¢æ·è®¾å¤ææ°´å仪è£
ç½® |
| | | //ctxDev : 设å¤å¥æ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ConnectDevice(void* ctxDev); |
| | | |
| | | //è·åç¶ææç²®ç§æ´æ¹ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x03: å¼å§æµè¯ |
| | | // 0xFE: å¤ä½å½ä»¤ï¼ä¼å
级æé« |
| | | // å
¶ä»ï¼ 为åå
¥ç¶æ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType); |
| | | |
| | | //ååç¶æ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x02: åå¤å·²å®æ |
| | | // 0x04: æ£æµå®æ |
| | | // 0xFF: æ°´å仪æ
é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int WriteState(void* ctxDev, unsigned short nState); |
| | | |
| | | //åä¼ æ£æµæ°æ® |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // ç²®ç§ç¼ç |
| | | // 嫿°´çï¼ åæ´ = åå¼*100 |
| | | // å®¹éæ¯ï¼ åæ´ = åå¼*100 |
| | | //nSize : æ°æ®ä¸ªæ° |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3); |
| | | |
| | | |
| | | |
| | | |
| | | //ä¸åå½ä»¤ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nCmdType ï¼å½ä»¤åï¼å¦ä¸æè¿° |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x02: å¼å§æµè¯ |
| | | // 0x03: æ ¡åå½ä»¤ï¼å³ä¸ºæ å®é¡µé¢æ£æµæé®å½ä»¤ï¼ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | // å½nCmdType 为0x02ï¼0x03æ¶ï¼ä¸ç¨èèç²®ç§ç¼å· |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0); |
| | | |
| | | |
| | | //ä¸ååæ° |
| | | //ctxDev : 设å¤å¥æ |
| | | //nStartFreq ï¼èµ·å§é¢ç |
| | | //nStopFreq ï¼ ç»æ¢é¢ç |
| | | //nStepFreq ï¼ æ¥é¿ |
| | | //nDecayCode ï¼è¡°åç |
| | | //nAscValid ï¼ ASC å
é¨/å¤é¨ææï¼ åå¼ä¸º 0ï¼å
鍿æï¼ 1ï¼å¤é¨ææ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int WriteParams(void* ctxDev, unsigned short nStartFreq, unsigned short nStopFreq, |
| | | unsigned short nStepFreq, unsigned short nDecayCode, unsigned short nAscValid); |
| | | |
| | | |
| | | //è¯»åæ£æµä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // çµåå¼ |
| | | // éé |
| | | // 温度 |
| | | // 湿度 |
| | | // nSize : 读å4个å¯åå¨ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4); |
| | | |
| | | |
| | | //è¯»åæ«é¢å¼,å
¶å®ä¸ºçµå¹³å¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nVcc ï¼çµå¹³å¼æé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int ReadVcc(void* ctxDev, unsigned short* nVcc); |
| | | |
| | | |
| | | //æå¼æ°´å仪æå®¢æ·è®¾å¤çè¿æ¥ï¼å¹¶éæ¯èµæº |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int DestroyDevice(void* ctxDev); |
| | | |
| | | //ç®æ³å½æ° |
| | | //x 为æµéå¼ |
| | | //y 为å®é
å¼ |
| | | //n 为æåæ¬¡æ° |
| | | //nSampleNumber æ ·æ¬æ°é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | ACTUATOR_API int Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ActuatorDemo.cpp : æ¤æä»¶å
å« "main" 彿°ãç¨åºæ§è¡å°å¨æ¤å¤å¼å§å¹¶ç»æã |
| | | // |
| | | |
| | | #include <iostream> |
| | | #include "../Actuator//Actuator.h" |
| | | |
| | | //ç³»æ° |
| | | const double coef[5] = { 1,1,0.01,0,0 }; |
| | | |
| | | void ExeTest() |
| | | { |
| | | void* hPlcDev = CreatePlcDevice("127.0.0.1", 1502); |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hPlcDev) ret = ConnectDevice(hPlcDev); |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | char ch = 0; |
| | | |
| | | while ('c' != (ch = getchar())) //æ c éåºèªå¨æ£æµ |
| | | { |
| | | //读PLCç¶æå |
| | | ret = ReadState(hPlcDev, &nState, &nGrainType); |
| | | if (ret <= 0) |
| | | { |
| | | printf("读åPLCç¶æåå¼å¸¸ï¼\n"); |
| | | } |
| | | else if (nGrainType > 0 && nState > 0) |
| | | { |
| | | switch (nState) |
| | | { |
| | | case READY_GRAIN: //ç²®é£åç§ä¿®æ¹äº |
| | | { |
| | | //åæ°´å仪åç²®ç§æ´æ¹ï¼å¯å¨åå¤ |
| | | ret = SendCommands(hWrDev, WR_READY, nGrainType); |
| | | if (ret <= 0) |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹å¤±è´¥ï¼æ°´å仪æ
éï¼\n"); |
| | | ret = WriteState(hPlcDev, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹æåï¼åå¤å°±ç»ª\n"); |
| | | ret = WriteState(hPlcDev, READY_FINISH); |
| | | } |
| | | |
| | | } |
| | | break; |
| | | case DETECT_START: //å¼å§æµè¯ |
| | | { |
| | | ret = SendCommands(hWrDev, 0x02); |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | ret = WriteState(hPlcDev, DEVICE_WR_FAULT); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | printf("æ§è¡æ£æµæåï¼\n"); |
| | | ret = WriteState(hPlcDev, DETECT_FINISH); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | nDatas[0] = 0x01; // ç²®é£åç§ |
| | | nDatas[1] = v; // 21.30% //嫿°´ç |
| | | nDatas[2] = 5150; // 51.50; //容鿝 |
| | | ret = UploadData(hPlcDev, nDatas); |
| | | } |
| | | } |
| | | break; |
| | | case DEVICE_WR_RESET: //å¤ä½å½ä»¤ |
| | | { |
| | | |
| | | |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (hPlcDev) DestroyDevice(&hPlcDev); |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | //æå¨ååæ° |
| | | void ExeWriteParam() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = WriteParams(hWrDev, 50, 100, 50, 12000, 1); |
| | | if (ret <= 0) |
| | | printf("ä¸ååæ°å¤±è´¥ï¼\n"); |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | |
| | | //æå¨æ£æµ |
| | | void ExeManTest() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, WR_READY, 1); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | printf("åå¤å¤±è´¥ï¼\n"); |
| | | else |
| | | { |
| | | ret = SendCommands(hWrDev, WR_DETECT); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | printf(" After Detection,"); |
| | | printf(" %d %d %d %d", nDatas[0], nDatas[0], nDatas[0], nDatas[0]); |
| | | printf(" Water Rate:%lf", v); |
| | | printf(" \n"); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | //æå¨æ ¡åä¸ç» |
| | | void ExeVerifyTest() |
| | | { |
| | | void* hWrDev = CreateWrDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, 0x01, 0x01); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("确认失败ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | ret = SendCommands(hWrDev, 0x03); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ ¡åæ§è¡å¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nVcc = 0; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadVcc(hWrDev, &nVcc); |
| | | |
| | | printf(" Detected Val: %d", nVcc); |
| | | printf(" \n"); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | //æåæµè¯--è®¡ç®æ ¡åç³»æ° |
| | | void TestLinearize() |
| | | { |
| | | int nSampeCount = 12; |
| | | |
| | | float x[]={0,1,2,3,4,5,6,7,8,9,10,11}; //realval |
| | | float y[]={2506,2200,1846,1440,1004,548,79,-387,-847,-1288,-1700,-2066}; //input |
| | | double coef[5] = { 0 }; |
| | | |
| | | int ret = Linearize(x, y, coef, 2, nSampeCount); |
| | | if (ret > 0) |
| | | { |
| | | printf("Coef: %f, %f, %f, %f, %f\n", coef[0], coef[1], coef[2], coef[3], coef[4]); |
| | | |
| | | float v = 3.0f; |
| | | printf("Input %lf, Cal Val:%lf\n", v, |
| | | (coef[0] + |
| | | coef[1] * v + |
| | | coef[2] * v * v + |
| | | coef[3] * v * v * v + |
| | | coef[4] * v * v * v * v) |
| | | ); |
| | | } |
| | | |
| | | } |
| | | |
| | | int main() |
| | | { |
| | | std::cout << "Hello World!\n"; |
| | | char ch = 0; |
| | | while ('x' != ( ch = getchar() )) //æ x éåºç¨åº |
| | | { |
| | | switch (ch) |
| | | { |
| | | case 'a': //èªå¨æµè¯ |
| | | ExeTest(); |
| | | break; |
| | | case 'p': //åæ°´ä»½ä»ªä¸ååæ° |
| | | ExeWriteParam(); |
| | | break; |
| | | case 'd': //æå¨æ£æµ |
| | | ExeManTest(); |
| | | break; |
| | | case 'v': //æå¨æ ¡å |
| | | ExeVerifyTest(); |
| | | break; |
| | | case 'l': //æåæµè¯ |
| | | TestLinearize(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | // è¿è¡ç¨åº: Ctrl + F5 æè°è¯ >âå¼å§æ§è¡(ä¸è°è¯)âèå |
| | | // è°è¯ç¨åº: F5 æè°è¯ >âå¼å§è°è¯âèå |
| | | |
| | | // å
¥é¨ä½¿ç¨æå·§: |
| | | // 1. 使ç¨è§£å³æ¹æ¡èµæºç®¡çå¨çªå£æ·»å /管çæä»¶ |
| | | // 2. 使ç¨å¢éèµæºç®¡çå¨çªå£è¿æ¥å°æºä»£ç 管ç |
| | | // 3. 使ç¨è¾åºçªå£æ¥ççæè¾åºåå
¶ä»æ¶æ¯ |
| | | // 4. 使ç¨é误å表çªå£æ¥çé误 |
| | | // 5. 转å°â项ç®â>âæ·»å æ°é¡¹â以å建æ°çä»£ç æä»¶ï¼æè½¬å°â项ç®â>âæ·»å ç°æé¡¹â以å°ç°æä»£ç æä»¶æ·»å å°é¡¹ç® |
| | | // 6. å°æ¥ï¼è¥è¦å次æå¼æ¤é¡¹ç®ï¼è¯·è½¬å°âæä»¶â>âæå¼â>â项ç®âå¹¶éæ© .sln æä»¶ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ActuatorDemo.cpp : æ¤æä»¶å
å« "main" 彿°ãç¨åºæ§è¡å°å¨æ¤å¤å¼å§å¹¶ç»æã |
| | | // |
| | | |
| | | #include <iostream> |
| | | #include "../Actuator//Actuator.h" |
| | | |
| | | //ç³»æ° |
| | | const double coef[5] = { 1,1,0.01,0,0 }; |
| | | |
| | | void ExeTest() |
| | | { |
| | | void* hPlcDev = CreateCustDevice("127.0.0.1", 1502); |
| | | void* hWrDev = CreateDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hPlcDev) ret = ConnectDevice(hPlcDev); |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | char ch = 0; |
| | | |
| | | while ('c' != (ch = getchar())) //æ c éåºèªå¨æ£æµ |
| | | { |
| | | //读PLCç¶æå |
| | | ret = ReadState(hPlcDev, &nState, &nGrainType); |
| | | if (ret <= 0) |
| | | { |
| | | printf("读åPLCç¶æåå¼å¸¸ï¼\n"); |
| | | } |
| | | else if (nGrainType > 0 && nState > 0) |
| | | { |
| | | switch (nState) |
| | | { |
| | | case 0x01: //ç²®é£åç§ä¿®æ¹äº |
| | | { |
| | | //åæ°´å仪åç²®ç§æ´æ¹ï¼å¯å¨åå¤ |
| | | ret = SendCommands(hWrDev, 0x01, nGrainType); |
| | | if (ret <= 0) |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹å¤±è´¥ï¼æ°´å仪æ
éï¼\n"); |
| | | ret = WriteState(hPlcDev, 0xFF); |
| | | } |
| | | else |
| | | { |
| | | printf("ç²®é£åç§ä¿®æ¹æåï¼åå¤å°±ç»ª\n"); |
| | | ret = WriteState(hPlcDev, 0x02); |
| | | } |
| | | |
| | | } |
| | | break; |
| | | case 0x03: //å¼å§æµè¯ |
| | | { |
| | | ret = SendCommands(hWrDev, 0x02); |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | ret = WriteState(hPlcDev, 0xFF); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | printf("æ§è¡æ£æµæåï¼\n"); |
| | | ret = WriteState(hPlcDev, 0x04); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | nDatas[0] = 0x01; // ç²®é£åç§ |
| | | nDatas[1] = v; // 21.30% //嫿°´ç |
| | | nDatas[2] = 5150; // 51.50; //容鿝 |
| | | ret = UploadData(hPlcDev, nDatas); |
| | | } |
| | | } |
| | | break; |
| | | case 0xFE: //å¤ä½å½ä»¤ |
| | | { |
| | | |
| | | |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (hPlcDev) DestroyDevice(&hPlcDev); |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | //æå¨åæ°´åä»ªåæ° |
| | | void ExeWriteParam() |
| | | { |
| | | void* hWrDev = CreateDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = WriteParams(hWrDev, 50, 100, 50, 12000, 1); |
| | | if (ret <= 0) |
| | | printf("ä¸ååæ°å¤±è´¥ï¼\n"); |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | |
| | | //æå¨æ£æµ |
| | | void ExeManTest() |
| | | { |
| | | void* hWrDev = CreateDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, 0x01, 0x01); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | printf("åå¤å¤±è´¥ï¼\n"); |
| | | else |
| | | { |
| | | ret = SendCommands(hWrDev, 0x02); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ§è¡æ£æµå¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nDatas[10] = { 0 }; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadDatas(hWrDev, nDatas); |
| | | |
| | | //è®¡ç®æ°´åç |
| | | double v = coef[0] + |
| | | coef[1] * nDatas[0] + |
| | | coef[2] * nDatas[0] * nDatas[0] + |
| | | coef[3] * nDatas[0] * nDatas[0] * nDatas[0] + |
| | | coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0]; |
| | | |
| | | printf(" After Detection,"); |
| | | printf(" %d %d %d %d", nDatas[0], nDatas[0], nDatas[0], nDatas[0]); |
| | | printf(" Water Rate:%lf", v); |
| | | printf(" \n"); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | // |
| | | void ExeVerifyTest() |
| | | { |
| | | void* hWrDev = CreateDevice("COM3", 115200, 'N', 8, 1); |
| | | |
| | | unsigned short nState = 0; |
| | | unsigned short nGrainType = 0; |
| | | int ret = 0; |
| | | |
| | | if (hWrDev) ret = ConnectDevice(hWrDev); |
| | | |
| | | ret = SendCommands(hWrDev, 0x01, 0x01); //ä¸å确认 |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("确认失败ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | ret = SendCommands(hWrDev, 0x03); //æ§è¡å¯å¨å½ä»¤ |
| | | |
| | | if (ret <= 0) |
| | | { |
| | | printf("æ ¡åæ§è¡å¤±è´¥ï¼\n"); |
| | | } |
| | | else |
| | | { |
| | | unsigned short nVcc=0; |
| | | |
| | | //仿°´å仪å¨è¯»åæ°æ® |
| | | ret = ReadScanFreq(hWrDev, &nVcc); |
| | | |
| | | printf(" After Detection,"); |
| | | printf(" %d", nVcc); |
| | | printf(" \n"); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (hWrDev) DestroyDevice(&hWrDev); |
| | | } |
| | | |
| | | void TestLinearize() |
| | | { |
| | | int nSampeCount = 12; |
| | | |
| | | float x[]={1,2,3,4,5}; //çµå¹³å¼mV |
| | | float y[]={2506,2200,1846,1440,1004}; //宿µæ°´åå¼ |
| | | double coef[5] = { 0 }; |
| | | |
| | | int ret = Linearize(x, y, coef, 2, nSampeCount); |
| | | if (ret > 0) |
| | | { |
| | | printf("Coef: %f, %f, %f, %f, %f\n", coef[0], coef[1], coef[2], coef[3], coef[4]); |
| | | |
| | | float v = 7.0f; |
| | | printf("Input %lf, Cal Val:%lf\n", v, |
| | | (coef[0] + |
| | | coef[1] * v + |
| | | coef[2] * v * v + |
| | | coef[3] * v * v * v + |
| | | coef[4] * v * v * v * v) |
| | | ); |
| | | } |
| | | |
| | | } |
| | | |
| | | int main() |
| | | { |
| | | std::cout << "Hello World!\n"; |
| | | char ch = 0; |
| | | while ('x' != ( ch = getchar() )) //æ x éåºç¨åº |
| | | { |
| | | switch (ch) |
| | | { |
| | | case 'a': //èªå¨æµè¯ |
| | | ExeTest(); |
| | | break; |
| | | case 'p': //åæ°´ä»½ä»ªä¸ååæ° |
| | | ExeWriteParam(); |
| | | break; |
| | | case 'd': //æå¨æ£æµ |
| | | ExeManTest(); |
| | | break; |
| | | case 'v': //æ ¡å |
| | | ExeVerifyTest(); |
| | | break; |
| | | case 'l': //æåæµè¯ |
| | | TestLinearize(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | // è¿è¡ç¨åº: Ctrl + F5 æè°è¯ >âå¼å§æ§è¡(ä¸è°è¯)âèå |
| | | // è°è¯ç¨åº: F5 æè°è¯ >âå¼å§è°è¯âèå |
| | | |
| | | // å
¥é¨ä½¿ç¨æå·§: |
| | | // 1. 使ç¨è§£å³æ¹æ¡èµæºç®¡çå¨çªå£æ·»å /管çæä»¶ |
| | | // 2. 使ç¨å¢éèµæºç®¡çå¨çªå£è¿æ¥å°æºä»£ç 管ç |
| | | // 3. 使ç¨è¾åºçªå£æ¥ççæè¾åºåå
¶ä»æ¶æ¯ |
| | | // 4. 使ç¨é误å表çªå£æ¥çé误 |
| | | // 5. 转å°â项ç®â>âæ·»å æ°é¡¹â以å建æ°çä»£ç æä»¶ï¼æè½¬å°â项ç®â>âæ·»å ç°æé¡¹â以å°ç°æä»£ç æä»¶æ·»å å°é¡¹ç® |
| | | // 6. å°æ¥ï¼è¥è¦å次æå¼æ¤é¡¹ç®ï¼è¯·è½¬å°âæä»¶â>âæå¼â>â项ç®âå¹¶éæ© .sln æä»¶ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | ç²®é£æ°´å仪ä¸ä½æºè½¯ä»¶--说æ |
| | | ===================================== |
| | | 1.è±æå
¨ç§°ï¼Grain Moisture Meter Softï¼è±æç¼©åï¼GMMSoftãgmmsoftï¼ |
| | | |
| | | 2.软件以ä¸ä¸çç»æè½¯ä»¶ä¸ºåºç¡å¼åï¼å
å«èªå¨æ¨¡å¼åæå¨æ¨¡å¼ï¼ |
| | | |
| | | 3.èªå¨æ¨¡å¼ä¸ï¼èªå¨è·åå¼å§æ£æµæä»¤ï¼èªå¨å®ææ£æµä»»å¡ï¼èªå¨ä¸æ¥æ£æµç»æï¼èªå¨å卿£æµæ°æ®ï¼ |
| | | |
| | | 4.æå¨æ¨¡å¼ä¸ï¼åä¸ºæ£æµãåæãæ ¡åã设置åé¨ååè½ï¼ |
| | | |
| | | 5.ä¸åç²®ç§æä»¤å¨æå¨æ¨¡å¼ä¸ä¸åæ§è¡æ½å¼æ¡æ¿å¨ä½ï¼èªå¨æ¨¡å¼ä»ç¶ä¿çï¼ |
| | | |
| | | 6.æ°å¢ééæ ¡ååè½æ¨¡åï¼ä½¿ç¨ä¸æ¬¡æ ¡åæ³å®æ Y = kX + b ç®æ³ï¼æ±è§£ç³»æ°kåbï¼ |
| | | |
| | | 7.å级 Actuator.dll é讯驱å¨å¨å¨æåºï¼ |
| | | |
| | | 8.æ°å¢ä»ªå¨ç»´æ¤çé¢ï¼å¢å å¤ä½ã读åºä»¶çæ¬ãéé¨å¼å
³æä»¤ï¼ |
| | | |
| | | 9.æ°å¢è°æ´æªè·çé¢ï¼å¯¹æ¯ä¸ªç²®ç§å次使ç¨åï¼å©ç¨æ æ ·è¿è¡æ ¡åï¼è®¾ç½®æªè·å¯¹å«æ°´çè¿è¡ä¿®æ£ã |
| | | |
| | | 10. æå§ç»çè¦æ±ï¼å»æè½¯ä»¶licenseææï¼åç¨è½¯ä»¶é²æ·è´åè½ã |
| | | |
| | | 11.å¢å OpenTabTip彿°ï¼è°ç¨å±å¹é®çï¼å¹¶å¨ç»ææ¶èªå¨å
³éã |
| | | |
| | | 12.æ´æ¹PLCä¸ä¸ä½æºé讯模å¼ï¼client->Serveræ¹å¼éè®¯ï¼æ´æ°ä¸ä½æºçæ¬å·3.0ã |
| | | |
| | | 13.廿æå¨æ¨¡å¼/èªå¨æ¨¡å¼ä¸éè¿ä»ªå¨çæé®ï¼é²æ¢æå¼æ°´åä»ªå¯¼è´æ
éã |
| | | |
| | | 14.æ°å¢ä¸ä¸ª1024X600å辨çççæ¬ï¼çæ¬å·æ¹ä¸ºV3.1.0.1500ã |
| | | |
| | | |
| | | ç²®é£æ°´å仪ä¸ä½æºè½¯ä»¶--模æè°è¯åæ° |
| | | ===================================== |
| | | 1.å®è£
èæä¸²å£æ å°å·¥å
·VSPDï¼å®è£
串å£åtcpè°è¯å·¥å
·ModbusSlaveï¼ |
| | | |
| | | 2.GMMSoftéè¦åæ¶è¿æ¥ä¸²å£æ°´å仪åç½å£PLCï¼ |
| | | |
| | | 3.æå¼ModbusSlaveï¼è®¾ç½®ä¸ºä¸²å£æ¨¡å¼ï¼æ³¢ç¹çï¼115200ï¼ |
| | | |
| | | 4.æå¼ModbusSlaveï¼è®¾ç½®ä¸ºTCP模å¼ï¼IPï¼127.0.0.1ï¼protï¼1502ï¼ |
| | | Modbusç¹ä½è®¾ç½®ï¼1-(RW)ç²®ç§ï¼2-(R)ååç²®ç§ï¼3-(RW)æä»¤ï¼1ä¸åç²®ç§->2è¿åï¼3æ£æµ->4è¿åï¼ï¼4-(R)容鿝ï¼5-(R)嫿°´çã |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -$A8 |
| | | -$B- |
| | | -$C+ |
| | | -$D+ |
| | | -$E- |
| | | -$F- |
| | | -$G+ |
| | | -$H+ |
| | | -$I+ |
| | | -$J- |
| | | -$K- |
| | | -$L+ |
| | | -$M- |
| | | -$N+ |
| | | -$O+ |
| | | -$P+ |
| | | -$Q- |
| | | -$R- |
| | | -$S- |
| | | -$T- |
| | | -$U- |
| | | -$V+ |
| | | -$W- |
| | | -$X+ |
| | | -$YD |
| | | -$Z1 |
| | | -cg |
| | | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | -H+ |
| | | -W+ |
| | | -M |
| | | -$M16384,1048576 |
| | | -K$00400000 |
| | | -E"..\bin" |
| | | -N"..\dcu" |
| | | -LE"..\dcu" |
| | | -LN"..\dcu" |
| | | -U"..\dcu" |
| | | -O"..\dcu" |
| | | -I"..\dcu" |
| | | -R"..\dcu" |
| | | -w-UNSAFE_TYPE |
| | | -w-UNSAFE_CODE |
| | | -w-UNSAFE_CAST |
¶Ô±ÈÐÂÎļþ |
| | |
| | | [FileVersion] |
| | | Version=7.0 |
| | | [Compiler] |
| | | A=8 |
| | | B=0 |
| | | C=1 |
| | | D=1 |
| | | E=0 |
| | | F=0 |
| | | G=1 |
| | | H=1 |
| | | I=1 |
| | | J=0 |
| | | K=0 |
| | | L=1 |
| | | M=0 |
| | | N=1 |
| | | O=1 |
| | | P=1 |
| | | Q=0 |
| | | R=0 |
| | | S=0 |
| | | T=0 |
| | | U=0 |
| | | V=1 |
| | | W=0 |
| | | X=1 |
| | | Y=1 |
| | | Z=1 |
| | | ShowHints=1 |
| | | ShowWarnings=1 |
| | | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | NamespacePrefix= |
| | | SymbolDeprecated=1 |
| | | SymbolLibrary=1 |
| | | SymbolPlatform=1 |
| | | UnitLibrary=1 |
| | | UnitPlatform=1 |
| | | UnitDeprecated=1 |
| | | HResultCompat=1 |
| | | HidingMember=1 |
| | | HiddenVirtual=1 |
| | | Garbage=1 |
| | | BoundsError=1 |
| | | ZeroNilCompat=1 |
| | | StringConstTruncated=1 |
| | | ForLoopVarVarPar=1 |
| | | TypedConstVarPar=1 |
| | | AsgToTypedConst=1 |
| | | CaseLabelRange=1 |
| | | ForVariable=1 |
| | | ConstructingAbstract=1 |
| | | ComparisonFalse=1 |
| | | ComparisonTrue=1 |
| | | ComparingSignedUnsigned=1 |
| | | CombiningSignedUnsigned=1 |
| | | UnsupportedConstruct=1 |
| | | FileOpen=1 |
| | | FileOpenUnitSrc=1 |
| | | BadGlobalSymbol=1 |
| | | DuplicateConstructorDestructor=1 |
| | | InvalidDirective=1 |
| | | PackageNoLink=1 |
| | | PackageThreadVar=1 |
| | | ImplicitImport=1 |
| | | HPPEMITIgnored=1 |
| | | NoRetVal=1 |
| | | UseBeforeDef=1 |
| | | ForLoopVarUndef=1 |
| | | UnitNameMismatch=1 |
| | | NoCFGFileFound=1 |
| | | MessageDirective=1 |
| | | ImplicitVariants=1 |
| | | UnicodeToLocale=1 |
| | | LocaleToUnicode=1 |
| | | ImagebaseMultiple=1 |
| | | SuspiciousTypecast=1 |
| | | PrivatePropAccessor=1 |
| | | UnsafeType=0 |
| | | UnsafeCode=0 |
| | | UnsafeCast=0 |
| | | [Linker] |
| | | MapFile=0 |
| | | OutputObjs=0 |
| | | ConsoleApp=1 |
| | | DebugInfo=0 |
| | | RemoteSymbols=0 |
| | | MinStackSize=16384 |
| | | MaxStackSize=1048576 |
| | | ImageBase=4194304 |
| | | ExeDescription= |
| | | [Directories] |
| | | OutputDir=..\bin |
| | | UnitOutputDir=..\dcu |
| | | PackageDLLOutputDir=..\dcu |
| | | PackageDCPOutputDir=..\dcu |
| | | SearchPath=..\dcu |
| | | Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;Rave50CLX;Rave50VCL;dclOfficeXP;JclDeveloperTools;JclVcl;JvCore;JvSystem;JvStdCtrls;JvDB;JvDlgs;JvControls;JvCmp;JvCrypt;JvCustom;JvDocking;JvDotNetCtrls;JvGlobus;JvHMI;JvJans;JvManagedThreads;JvMM;JvNet;JvPageComps;JvPascalInterpreter;JvPluginSystem;JvPrintPreview;JvRuntimeDesign;JvTimeFramework;JvWizards;JvXPCtrls;RaizeComponentsVcl;RaizeComponentsVclDb;acntD7_R;AlphaDB7;CPortLib7;CoolTrayIcon_D6plus;DXStringOnlyD7;EhLib70;EStringGrid50;iocomp70;nrcommd7;dacvcl70;dac70;odacvcl70;odac70;oraprov70;IndyCore70;IndySystem70;IndyProtocols70;EhLibDataDrivers70 |
| | | Conditionals= |
| | | DebugSourceDirs=..\dcu |
| | | UsePackages=0 |
| | | [Parameters] |
| | | RunParams= |
| | | HostApplication= |
| | | Launcher= |
| | | UseLauncher=0 |
| | | DebugCWD= |
| | | [Language] |
| | | ActiveLang= |
| | | ProjectLang= |
| | | RootDir=D:\Program Files\Borland\Delphi7\Bin\ |
| | | [Version Info] |
| | | IncludeVerInfo=1 |
| | | AutoIncBuild=1 |
| | | MajorVer=3 |
| | | MinorVer=1 |
| | | Release=0 |
| | | Build=1501 |
| | | Debug=0 |
| | | PreRelease=0 |
| | | Special=0 |
| | | Private=0 |
| | | DLL=0 |
| | | Locale=2052 |
| | | CodePage=936 |
| | | [Version Info Keys] |
| | | CompanyName=䏿µ·å
°å®ä¼ æç§æè¡ä»½æéå
¬å¸ |
| | | FileDescription=ç²®é£æ°´å仪软件 |
| | | FileVersion=3.1.0.1501 |
| | | InternalName=GMMSoft |
| | | LegalCopyright=Copyright(C)2023-2025 䏿µ·å
°å® çæææ |
| | | LegalTrademarks=䏿µ·å
°å® |
| | | OriginalFilename=GMMSoft.exe |
| | | ProductName=GMMSoft |
| | | ProductVersion=3.1 |
| | | Comments=æè¯åº 2025-07-08 æåç¼è¯ |
| | | [Excluded Packages] |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrxADO7.bpl=FastReport 4.0 ADO Components |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrxBDE7.bpl=FastReport 4.0 BDE Components |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrxcs7.bpl=FastReport 4.0 Client/Server Components |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrx7.bpl=FastReport 4.0 Components |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrxDB7.bpl=FastReport 4.0 DB Components |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrxe7.bpl=FastReport 4.0 Exports |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfrxTee7.bpl=FastReport 4.0 Tee Components |
| | | d:\program files\borland\delphi7\Projects\Bpl\dclfs7.bpl=FastScript 1.9 Components |
| | | [HistoryLists\hlDebugSourcePath] |
| | | Count=1 |
| | | Item0=..\dcu |
| | | [HistoryLists\hlUnitAliases] |
| | | Count=1 |
| | | Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
| | | [HistoryLists\hlSearchPath] |
| | | Count=1 |
| | | Item0=..\dcu |
| | | [HistoryLists\hlUnitOutputDirectory] |
| | | Count=1 |
| | | Item0=..\dcu |
| | | [HistoryLists\hlOutputDirectorry] |
| | | Count=1 |
| | | Item0=..\bin |
| | | [HistoryLists\hlBPLOutput] |
| | | Count=1 |
| | | Item0=..\dcu |
| | | [HistoryLists\hlDCPOutput] |
| | | Count=1 |
| | | Item0=..\dcu |
¶Ô±ÈÐÂÎļþ |
| | |
| | | program GMMSoft; |
| | | |
| | | uses |
| | | //MultInst in 'pub\MultInst.pas', |
| | | Forms, |
| | | uMain in 'uMain.pas' {frmMain}, |
| | | SQLite3 in 'sqlite3\SQLite3.pas', |
| | | sqlite3udf in 'sqlite3\sqlite3udf.pas', |
| | | SQLiteTable3 in 'sqlite3\SQLiteTable3.pas', |
| | | Global in 'pub\Global.pas', |
| | | MsgVar in 'pub\MsgVar.pas', |
| | | PubUtils in 'pub\PubUtils.pas', |
| | | log4me in 'log\log4me.pas', |
| | | uInit in 'init\uInit.pas', |
| | | uDM in 'uDM.pas' {dm: TDataModule}, |
| | | uCalc in 'uCalc.pas' {frmCalc}, |
| | | ActuatorLib in 'lib\ActuatorLib.pas', |
| | | uSaveData in 'uSaveData.pas', |
| | | mantestThread in 'thread\mantestThread.pas', |
| | | verifyThread in 'thread\verifyThread.pas', |
| | | UntDes in 'pub\UntDes.pas', |
| | | CpuidInfo in 'pub\CpuidInfo.pas', |
| | | grainThread in 'thread\grainThread.pas', |
| | | interceptThread in 'thread\interceptThread.pas', |
| | | resetThread in 'thread\resetThread.pas', |
| | | uTablet in 'uTablet.pas' {frmTablet}, |
| | | uInput in 'uInput.pas' {frmInput}, |
| | | testThread in 'thread\testThread.pas'; |
| | | |
| | | {$R *.res} |
| | | |
| | | begin |
| | | Application.Initialize; |
| | | Application.CreateForm(TfrmMain, frmMain); |
| | | Application.CreateForm(Tdm, dm); |
| | | Application.Run; |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | program GMMSoft; |
| | | |
| | | uses |
| | | MultInst in 'pub\MultInst.pas', |
| | | Forms, |
| | | uMain in 'uMain.pas' {frmMain}, |
| | | SQLite3 in 'sqlite3\SQLite3.pas', |
| | | sqlite3udf in 'sqlite3\sqlite3udf.pas', |
| | | SQLiteTable3 in 'sqlite3\SQLiteTable3.pas', |
| | | Global in 'pub\Global.pas', |
| | | MsgVar in 'pub\MsgVar.pas', |
| | | PubUtils in 'pub\PubUtils.pas', |
| | | log4me in 'log\log4me.pas', |
| | | uInit in 'init\uInit.pas', |
| | | uDM in 'uDM.pas' {dm: TDataModule}, |
| | | uCalc in 'uCalc.pas' {frmCalc}, |
| | | ActuatorLib in 'lib\ActuatorLib.pas', |
| | | testThread in 'thread\testThread.pas', |
| | | uSaveData in 'uSaveData.pas', |
| | | mantestThread in 'thread\mantestThread.pas', |
| | | verifyThread in 'thread\verifyThread.pas', |
| | | UntDes in 'pub\UntDes.pas', |
| | | CpuidInfo in 'pub\CpuidInfo.pas', |
| | | grainThread in 'thread\grainThread.pas', |
| | | interceptThread in 'thread\interceptThread.pas', |
| | | resetThread in 'thread\resetThread.pas', |
| | | uTablet in 'uTablet.pas' {frmTablet}; |
| | | |
| | | {$R *.res} |
| | | |
| | | begin |
| | | Application.Initialize; |
| | | Application.CreateForm(TfrmMain, frmMain); |
| | | Application.CreateForm(Tdm, dm); |
| | | Application.CreateForm(TfrmTablet, frmTablet); |
| | | Application.Run; |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {åå
åç§°ï¼uInit.pas } |
| | | {模ååç§°ï¼åå§å彿°åº } |
| | | {模å说æï¼å
æ¬ä¸»è¿ç¨å¯å¨æ¶ï¼å
¨å±åéåå§åãç³»ç»ç®å½åå§åãé
ç½®å è½½ } |
| | | {å»ºç«æ¥æï¼2009-12-20 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2023-02-21 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | unit uInit; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Classes, Messages, Forms, Dialogs, SysUtils, StrUtils, DateUtils, |
| | | StdCtrls, Variants, ComCtrls, Buttons, Math, IniFiles, Graphics, ShellAPI, |
| | | SQLite3, SQLiteTable3; |
| | | |
| | | {ç³æå
¨å±å
Œ
±è°ç¨å½æ°} |
| | | procedure OpenOnScreenKeyboard(); |
| | | procedure InitGlobal(); |
| | | procedure InitSystemDir(); |
| | | procedure InitDatas(); |
| | | procedure LoadSystemInfo(); |
| | | procedure LoadOptions(); |
| | | procedure SaveOptions(); |
| | | function GetCurrMsgPos(index:Integer):TPoint; |
| | | |
| | | //æææä»¶æ£æ¥æ¨¡å |
| | | function GetMachineCode():String; |
| | | function CheckLicense(sFilename, sCode:String):Boolean; |
| | | procedure RegCheckMode(); |
| | | procedure RegCheck1Mode(); |
| | | //ä¿åcsvæ°æ® |
| | | procedure WriteCsvFile(name: string; mois,temp,water: Double); |
| | | //å·æ°æ
éç |
| | | function RefashFaultCode(cod:Integer):String; |
| | | //èªå¨æ¨¡å¼ä¸å·æ°æ
éç |
| | | function AutoFaultCode(cod:Integer):string; |
| | | implementation |
| | | |
| | | uses |
| | | uMain, log4me, uDM, PubUtils, MsgVar, Global, uSaveData, CpuidInfo, UntDes; |
| | | |
| | | {彿°æ¹æ³} |
| | | |
| | | //------- è°ç¨ä¸æ¹é®ç ------------------------------------ |
| | | //è°ç¨oské®ç |
| | | procedure OpenOnScreenKeyboard(); |
| | | type TWow64DisableWow64FsRedirection = function(var Wow64FsEnableRedirection: LongBool): LongBool; StdCall; |
| | | type TWow64RevertWow64FsRedirection = function(var Wow64RevertWow64FsRedirection: LongBool): LongBool; StdCall; |
| | | var |
| | | hHandle: THandle; |
| | | Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection; |
| | | Wow64RevertWow64FsRedirection: TWow64RevertWow64FsRedirection; |
| | | OldValue: LongBool; |
| | | rs: Integer; |
| | | begin |
| | | //忢32ä½æä»¶ç³»ç» |
| | | try |
| | | hHandle := GetModuleHandle('kernel32.dll'); |
| | | @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64DisableWow64FsRedirection'); |
| | | if ((hHandle <> 0) and (@Wow64DisableWow64FsRedirection <> nil)) then |
| | | Wow64DisableWow64FsRedirection(OldValue); |
| | | except |
| | | end; |
| | | //è°ç¨oskå±å¹é®ç |
| | | rs := ShellExecute(Application.Handle, 'open', 'osk.exe', nil, nil, SW_SHOWNORMAL); |
| | | if rs <= 32 then begin |
| | | ShowMessage(Format('éè¯¯ï¼æ æ³æå¼å±å¹é®çï¼é误代ç -[%d].',[rs])); |
| | | log4Info(Format('éè¯¯ï¼æ æ³æå¼å±å¹é®çï¼é误代ç -[%d].',[rs])); |
| | | end |
| | | else |
| | | log4Info('ç³»ç»ï¼ä¸ä½æºè½¯ä»¶æå¼ osk ç³»ç»å±å¹é®ç.'); |
| | | //ç¨å64ä½æä»¶ç³»ç» |
| | | try |
| | | hHandle := GetModuleHandle('kernel32.dll'); |
| | | @Wow64RevertWow64FsRedirection := GetProcAddress(hHandle, 'Wow64RevertWow64FsRedirection'); |
| | | if ((hHandle <> 0) and (@Wow64RevertWow64FsRedirection <> nil)) then |
| | | Wow64RevertWow64FsRedirection(OldValue); |
| | | except |
| | | end; |
| | | end; |
| | | |
| | | //--------------------------------------------------------------------------- |
| | | //åå§åå
¨å±åé |
| | | procedure InitGlobal(); |
| | | begin |
| | | //ç¨åºè·¯å¾ |
| | | glAppPath := ExtractFilePath(Application.ExeName); |
| | | |
| | | //configDB file |
| | | glConfig_db := glAppPath + CONFIG_DIR + t_Config + '.db'; |
| | | glConn_db := glAppPath + CONFIG_DIR + t_Conn + '.db'; |
| | | glGrain_db := glAppPath + CONFIG_DIR + t_Grain + '.db'; |
| | | glWeight_db := glAppPath + CONFIG_DIR + t_Weight + '.db'; |
| | | glManager_db := glAppPath + CONFIG_DIR + t_Manager + '.db'; |
| | | glData_db := glAppPath + CONFIG_DIR + t_Data + '.db'; |
| | | //åå§åCalcå
¨å±åé |
| | | glCalcOutput := ''; |
| | | glCurrFocus := 0; |
| | | //åå§åæå¨æ¨¡å¼è¿åå£ä»¤å¼ |
| | | frmMain.sLoginPwd := ''; |
| | | //åå§åæ ·æ¬åå¨åé |
| | | smp.flag := false; |
| | | smp.info := ''; |
| | | smp.prefix := ''; |
| | | smp.dir := ''; |
| | | end; |
| | | |
| | | //åå§åç³»ç»ç®å½ |
| | | procedure InitSystemDir(); |
| | | var |
| | | path : String; |
| | | begin |
| | | //å建é
ç½®æä»¶å¤¹ |
| | | path := glAppPath + CONFIG_DIR; |
| | | if not DirectoryExists(path) then ForceDirectories(path); |
| | | |
| | | //åå»ºæ°æ®æä»¶å¤¹ |
| | | path := glAppPath + DATA_DIR; |
| | | if not DirectoryExists(path) then ForceDirectories(path); |
| | | |
| | | //å建æ¥å¿æä»¶å¤¹ |
| | | path := glAppPath + LOG_DIR; |
| | | if not DirectoryExists(path) then ForceDirectories(path); |
| | | end; |
| | | |
| | | //åå§åæ°æ®ééç»æ |
| | | procedure InitDatas(); |
| | | begin |
| | | //åå§åDatasæµéæ°æ® |
| | | Datas.Voltage := 0; //åå§çµå¹³ |
| | | Datas.Weight := 0; //éé |
| | | Datas.Temp := 0; //温度 |
| | | Datas.Humid:= 0; //湿度 |
| | | //åå§åèªå¨æ£æµæ ç¾ |
| | | frmMain.lblAutoRet.Caption := ''; |
| | | frmMain.lblAutoRet_error.Caption := ''; |
| | | end; |
| | | |
| | | //å 载系ç»ä¿¡æ¯çé¢ |
| | | procedure LoadSystemInfo(); |
| | | begin |
| | | with frmMain do begin |
| | | //åå§åæ°´å仪串å£ä¸æèå |
| | | cbSerialPort.Items.Clear; |
| | | EnumComPorts(cbSerialPort.Items); |
| | | //å 载水åä»ªåæ° |
| | | cbSerialPort.Text := WrConn.SerialPort; |
| | | edtBaud.Text := IntToStr(WrConn.baud); |
| | | edtParity.Text := WrConn.parity; |
| | | edtData_bit.Text := IntToStr(WrConn.data_bit); |
| | | edtStop_bit.Text := IntToStr(WrConn.stop_bit); |
| | | cbAutoRun.Checked := glAutoRun; |
| | | //å¢å 两个æ¶é´è®¾ç½®å¼ |
| | | edtTime1.Text := IntToStr(glTime1); |
| | | edtTime2.Text := IntToStr(glTime2); |
| | | |
| | | //å è½½æ¦æ¡ç³»ç»åæ° |
| | | edtIP.Text := PlcConn.ip; |
| | | edtPort.Text := IntToStr(PlcConn.port); |
| | | edtHeartIP.Text := PlcConn.heart_ip; |
| | | edtHeartPort.Text := IntToStr(PlcConn.heart_port); |
| | | |
| | | //å è½½æå¨æ£æµååæ°é
ç½®çé¢çæ°æ®åå¨åæ° |
| | | cbTestAutoSave.Checked := smp.flag; |
| | | edtSampleName.Text := smp.info; |
| | | cbAutoSave.Checked := smp.flag; |
| | | edtPrefix.Text := smp.prefix; |
| | | edtDir.Text := smp.dir; |
| | | |
| | | //å è½½ç»å½å£ä»¤ |
| | | edtPassword.Text := SysConfig.password; |
| | | edtDelay.Text := IntToStr(SysConfig.delay); |
| | | end; |
| | | end; |
| | | |
| | | //å è½½åæ°å°çé¢ |
| | | procedure LoadOptions(); |
| | | begin |
| | | with frmMain do begin |
| | | //æå¨æ£æµçé¢ |
| | | mtManClock.Value := 0; |
| | | edtMoisture.Text := ''; |
| | | edtWeightRatio.Text := ''; |
| | | edtWeight.Text := ''; |
| | | edtTemp.Text := ''; |
| | | edtWater.Text := ''; |
| | | lbType.ItemIndex := Grain.Code-1; //ç²®ç§ä»£ç ä¸çé¢ItemIndexç对åºå
³ç³» |
| | | sLabel15.Caption := Format('ç²®é£ç§ç±» - [%s]',[Grain.Name]); |
| | | sLabel3.Caption := Format('éæ© - [%s]',[Grain.Name]); |
| | | //ä»ªå¨æ ¡åçé¢ |
| | | lbType1.ItemIndex := Grain.Code-1; |
| | | edtAutoCoef1.Text := Grain.coef[0]; |
| | | edtAutoCoef2.Text := Grain.coef[1]; |
| | | edtAutoCoef3.Text := Grain.coef[2]; |
| | | edtAutoCoef4.Text := Grain.coef[3]; |
| | | edtAutoCoef5.Text := Grain.coef[4]; |
| | | //åæ°è®¾ç½®çé¢ |
| | | edtVolume.Text := FloatToStr(SysConfig.Volume); |
| | | edtTare.Text := FloatToStr(SysConfig.Tare); |
| | | edtFreq.Text := FloatToStr(SysConfig.Freq); |
| | | edtDecay.Text:= FloatToStr(SysConfig.Decay); |
| | | edtStartFreq.Text := FloatToStr(SysConfig.StartFreq); |
| | | edtStopFreq.Text := FloatToStr(SysConfig.StopFreq); |
| | | edtStep.Text := IntToStr(SysConfig.Step); |
| | | lbASK.ItemIndex := SysConfig.Ask; //ASK代ç ä¸çé¢ItemIndexç对åºå
³ç³» |
| | | //ç³»ç»ä¿¡æ¯çé¢ |
| | | lblVersion.Caption := Format('çæ¬ %s ', [glFileVersion]); |
| | | end; |
| | | end; |
| | | |
| | | //ä¿åçé¢åæ° |
| | | procedure SaveOptions(); |
| | | begin |
| | | // |
| | | end; |
| | | |
| | | //------ åè½å½æ° ------------------------------------------------------------- |
| | | //è·åå½åç¦ç¹è¾å
¥æ¡çç»å¯¹åæ |
| | | function GetCurrMsgPos(index:Integer):TPoint; |
| | | var |
| | | x1,y1 : Integer; //ä¿®æ£å¼ |
| | | x3,x45,y2 : Integer; |
| | | begin |
| | | with frmMain do begin |
| | | x1 := edtMois1.Width + 5; |
| | | y1 := -100; |
| | | x3 := edtMois1.Width - 8; |
| | | x45 := -473; |
| | | y2 := -250; |
| | | case index of |
| | | 1:begin |
| | | Result.X := Left+edtMois1.Left+x1; |
| | | Result.Y := Top+edtMois1.Top+y1; |
| | | end; |
| | | 2:begin |
| | | Result.X := Left+edtMois2.Left+x1; |
| | | Result.Y := Top+edtMois2.Top+y1; |
| | | end; |
| | | 3:begin |
| | | Result.X := Left+edtMois3.Left+x3; |
| | | Result.Y := Top+edtMois3.Top+y1; |
| | | end; |
| | | 4:begin |
| | | Result.X := Left+edtMois4.Left+x45; |
| | | Result.Y := Top+edtMois4.Top+y1; |
| | | end; |
| | | 5:begin |
| | | Result.X := Left+edtMois5.Left+x45; |
| | | Result.Y := Top+edtMois5.Top+y1; |
| | | end; |
| | | 6:begin |
| | | Result.X := Left+edtManCoef1.Left+x1; |
| | | Result.Y := Top+edtManCoef1.Top+y2; |
| | | end; |
| | | 7:begin |
| | | Result.X := Left+edtManCoef2.Left+x1; |
| | | Result.Y := Top+edtManCoef2.Top+y2; |
| | | end; |
| | | 8:begin |
| | | Result.X := Left+edtManCoef3.Left+x3; |
| | | Result.Y := Top+edtManCoef3.Top+y2; |
| | | end; |
| | | 9:begin |
| | | Result.X := Left+edtManCoef4.Left+x45; |
| | | Result.Y := Top+edtManCoef4.Top+y2; |
| | | end; |
| | | 10:begin |
| | | Result.X := Left+edtManCoef5.Left+x45; |
| | | Result.Y := Top+edtManCoef5.Top+y2; |
| | | end; |
| | | 11:begin |
| | | Result.X := Left+edtIp.Left+edtIp.Width+35; |
| | | Result.Y := Top+edtIp.Top+edtIp.Height+70; |
| | | end; |
| | | 12:begin |
| | | Result.X := Left+edtPort.Left+edtPort.Width+30; |
| | | Result.Y := Top+edtPort.Top+edtPort.Height+70; |
| | | end; |
| | | 13:begin |
| | | Result.X := Left+edtTime1.Left+edtTime1.Width+35; |
| | | Result.Y := Top+edtTime1.Top+edtTime1.Height+190; |
| | | end; |
| | | 14:begin |
| | | Result.X := Left+edtTime2.Left+edtTime2.Width+35; |
| | | Result.Y := Top+edtTime2.Top+edtTime2.Height+190; |
| | | end; |
| | | 15:begin |
| | | Result.X := Left+edtWeight1.Left+edtWeight1.Width+5; |
| | | Result.Y := Top+edtWeight1.Top+edtWeight1.Height-50; |
| | | end; |
| | | 16:begin |
| | | Result.X := Left+edtWeight2.Left+edtWeight2.Width+5; |
| | | Result.Y := Top+edtWeight2.Top+edtWeight2.Height-50; |
| | | end; |
| | | 17:begin |
| | | Result.X := Left+edtWeight3.Left-475; |
| | | Result.Y := Top+edtWeight3.Top+edtWeight3.Height-50; |
| | | end; |
| | | 18:begin |
| | | Result.X := Left+edtWeight3.Left-220; |
| | | Result.Y := Top+edtWeight3.Top+edtWeight3.Height-120; |
| | | end; |
| | | 19:begin |
| | | Result.X := Left+edtWeight3.Left-220; |
| | | Result.Y := Top+edtWeight3.Top+edtWeight3.Height-60; |
| | | end; |
| | | 20:begin |
| | | Result.X := Left+edtVolume.Left+edtVolume.Width+5; |
| | | Result.Y := Top+edtVolume.Top+edtVolume.Height-45; |
| | | end; |
| | | 21:begin |
| | | Result.X := Left+edtTare.Left+edtTare.Width+5; |
| | | Result.Y := Top+edtTare.Top+edtTare.Height-45; |
| | | end; |
| | | 22:begin |
| | | Result.X := Left+edtDelay.Left+edtDelay.Width+35; |
| | | Result.Y := Top+edtDelay.Top+edtDelay.Height+140; |
| | | end; |
| | | 23:begin |
| | | Result.X := Left+edtPassword.Left+35; |
| | | Result.Y := Top+edtPassword.Top+210; |
| | | end; |
| | | 24:begin |
| | | Result.X := Left+edtManVal.Left+x1; |
| | | Result.Y := Top+edtManVal.Top-120; |
| | | end; |
| | | 25:begin |
| | | Result.X := Left+edtIntercept.Left+x1; |
| | | Result.Y := Top+edtIntercept.Top-180; |
| | | end; |
| | | 26:begin |
| | | Result.X := Left+edtHeartIp.Left+40; |
| | | Result.Y := Top+edtHeartIp.Top+120; |
| | | end; |
| | | 27:begin |
| | | Result.X := Left+edtHeartPort.Left+40; |
| | | Result.Y := Top+edtHeartPort.Top+120; |
| | | end; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //------- ç³»ç»ææç¸å
³å½æ° ----------------------------------------------------- |
| | | //è®¡ç®æ¬æºæºå¨ç ï¼è¾åºæºå¨ç 坿 |
| | | function GetMachineCode():String; |
| | | var |
| | | ss : string; |
| | | begin |
| | | SetCPU(GetCurrentProcess,1); |
| | | ss := GetCnCPUID(); |
| | | //çæä¸ä¸ªæºå¨ç |
| | | Result := EncryStrHex(ss, sConfig); |
| | | end; |
| | | |
| | | //æææä»¶æ ¡éªï¼è¿åæ ¡éªç»æ |
| | | //å
¥åï¼sfilename-æ ¡éªæä»¶ |
| | | // sCode-è®¡ç®æ¬æºæºå¨ç |
| | | //è¿åï¼true-æ ¡éªæåï¼false-æ ¡éªå¤±è´¥ |
| | | function CheckLicense(sFilename, sCode:String):Boolean; |
| | | var |
| | | i : Integer; |
| | | sDecry : String; //è§£å¯åçææ |
| | | sl : TStringList; |
| | | begin |
| | | //容éå¤ç |
| | | if not FileExists(sFileName) then begin |
| | | Result := false; |
| | | Exit; |
| | | end; |
| | | |
| | | //è·å坿 |
| | | sl := TStringlist.Create(); |
| | | try |
| | | sl.LoadFromFile(sFilename); |
| | | sDecry := Trim(sl.Text); |
| | | finally |
| | | FreeAndNil(sl); |
| | | end; |
| | | |
| | | //å¯¹å¯æä¿¡æ¯è¿è¡è§£ç ï¼æé»è®¤level=8 |
| | | for i:=1 to 8 do |
| | | sDecry := DecryStrHex(sDecry, sConfig); //ç¼ç ,çæææ |
| | | |
| | | //è·åRegCode+RegDate+RegLevel+RegType+RegKey æºå¨ç |
| | | sDESMachineCode := SplitStr(sDecry,' ',0); |
| | | sDESDate := SplitStr(sDecry,' ',1); |
| | | sDESLevel := SplitStr(sDecry,' ',2); |
| | | sDESType := SplitStr(sDecry,' ',3); |
| | | sDESKey := SplitStr(sDecry,' ',4); |
| | | |
| | | //è¿åæ¯è¾æºå¨ç |
| | | Result := AnsiSameStr(sCode, sDESMachineCode); |
| | | end; |
| | | //Licenseæææ£æ¥æ¨¡åï¼å¦æªæ³¨ååèªå¨éåº |
| | | procedure RegCheckMode(); |
| | | var |
| | | sl : TStringList; |
| | | sLicFile, sMchCod, sLicText : String; |
| | | begin |
| | | //======éªè¯æææä»¶=============================== |
| | | sLicFile := glAppPath + LICENSE_FILE; |
| | | sMchCod := GetMachineCode(); |
| | | if CheckLicense(sLicFile, sMchCod) then |
| | | glRegSuccess := true |
| | | else begin |
| | | //åæ³¨åç |
| | | sl := TStringList.Create(); |
| | | sl.Add('æºå¨ç ï¼' + sMchCod); |
| | | sl.Add('çææ¥æï¼' + FormatDateTime('yyyy-mm-dd hh:nn:ss',Now())); |
| | | sl.SaveToFile(glAppPath+'æºå¨ç .txt'); |
| | | FreeAndNil(sl); |
| | | //æç¤ºè¦è·åæææä»¶ |
| | | glRegSuccess := false; //注å失败ï¼è°æ´æ å¿ï¼åå¤éæ¾éåºå®æ¶å¨ |
| | | sLicText := 'è¦åï¼ç³»ç»å°æªæ³¨åï¼å·²å¨è½¯ä»¶ç®å½çæ [æºå¨ç ] æä»¶ï¼è¯·å°è¯¥æä»¶æä¾ç»ç³»ç»ä¾åºåï¼ä»¥è·åæ£å¼æææä»¶ï¼'; |
| | | MessageBox(frmMain.handle,PChar(sLicText),'注åæç¤ºå¯¹è¯æ¡',MB_OK+MB_ICONWARNING); |
| | | //å¼å¯éåºå®æ¶å¨, 0.5så
éåº |
| | | dm.tmRegFault.Enabled := true; |
| | | end; |
| | | end; |
| | | |
| | | //éé»æææ£æ¥æ¨¡å |
| | | procedure RegCheck1Mode(); |
| | | var |
| | | sLicFile, sMchCod : String; |
| | | begin |
| | | sLicFile := glAppPath + LICENSE_FILE; |
| | | sMchCod := GetMachineCode(); |
| | | if not CheckLicense(sLicFile, sMchCod) then |
| | | dm.tmRegFault.Enabled := true; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | function GetLastNum(const FileName: string): Integer; |
| | | var |
| | | FileStream: TextFile; |
| | | LastDataLine,Line,Fields: string; |
| | | begin |
| | | Result := 0; |
| | | // æ£æ¥æä»¶æ¯å¦åå¨ |
| | | if not FileExists(FileName) then Exit; |
| | | |
| | | // æå¼æä»¶ |
| | | AssignFile(FileStream, FileName); |
| | | try |
| | | Reset(FileStream); |
| | | // è·³è¿æ é¢è¡ |
| | | if not Eof(FileStream) then ReadLn(FileStream); |
| | | // 读åæä»¶çæ¯ä¸è¡ |
| | | LastDataLine := ''; |
| | | while not Eof(FileStream) do begin |
| | | ReadLn(FileStream, Line); |
| | | if Line <> '' then |
| | | LastDataLine := Trim(Line); |
| | | end; |
| | | // è§£ææåä¸è¡ |
| | | if LastDataLine <> '' then begin |
| | | Fields := SplitStr(LastDataLine,',',0); |
| | | Result := StrToIntDef(Fields,0); |
| | | end; |
| | | finally |
| | | CloseFile(FileStream); |
| | | end; |
| | | end; |
| | | |
| | | // å°æ£æµç»æä¿åå° csvæä»¶ |
| | | procedure WriteCsvFile(name: string; mois,temp,water: Double); |
| | | var |
| | | pMyFile: textFile; |
| | | sfile,sTitle,sMsg,time : string; |
| | | no : integer; |
| | | begin |
| | | //åå§åè·¯å¾åæ é¢ |
| | | sFile := smp.dir + smp.prefix + FormatDateTime('yyyymmdd', Now) + '.csv'; |
| | | sTitle:= 'åºå·,æ ·æ¬ä¿¡æ¯,嫿°´ç,温度,湿度,æ¥æ'; |
| | | |
| | | //读åæä»¶åå²noåºå· |
| | | no := GetLastNum(sFile)+1; |
| | | time := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); |
| | | sMsg := Format('%d,%s,%.2f,%.2f,%.2f,%s', [no,name,mois,temp,water,time]); |
| | | try |
| | | AssignFile(pMyFile,sFile); |
| | | if FileExists(sFile) then |
| | | Append(pMyFile) |
| | | else begin |
| | | ReWrite(pMyFile); |
| | | WriteLn(pMyFile,sTitle); //æ°å»ºcsvï¼å
åå
¥æ é¢ |
| | | end; |
| | | WriteLn(pMyFile,sMsg); //åå
¥å
容 |
| | | finally |
| | | CloseFile(pMyFile); |
| | | end; |
| | | end; |
| | | |
| | | //å·æ°è®¾å¤æ
éç |
| | | function RefashFaultCode(cod:Integer):string; |
| | | var |
| | | str : string; |
| | | begin |
| | | //ç¿»è¯cod |
| | | case cod of |
| | | -1:str := 'é讯æ
é'; |
| | | 0: str := 'æ£å¸¸'; |
| | | 1: str := 'ä¸éé¨å
³æ
é'; |
| | | 2: str := 'ä¸éé¨å
³æ
é'; |
| | | 3: str := 'åéé¨å
³æ
é'; |
| | | 4: str := 'ä¸éé¨å¼æ
é'; |
| | | 5: str := 'ä¸éé¨å¼å
³æ
é'; |
| | | 6: str := 'ä¸éé¨å¼ãä¸éé¨å
³æ
é'; |
| | | 7: str := 'ä¸éé¨å¼å
³ãä¸éé¨å
³æ
é'; |
| | | 8: str := 'ä¸éé¨å¼æ
é'; |
| | | 9: str := 'ä¸éé¨å¼ãä¸éé¨å
³æ
é'; |
| | | 10: str := 'ä¸éé¨å¼å
³æ
é'; |
| | | 11: str := 'ä¸éé¨å¼å
³ãä¸éé¨å
³æ
é'; |
| | | 12: str := 'åéé¨å¼æ
é'; |
| | | 13: str := 'ä¸éé¨å¼å
³ãä¸éé¨å¼æ
é'; |
| | | 14: str := 'ä¸éé¨å¼å
³ãä¸éé¨å¼æ
é'; |
| | | 15: str := 'åéé¨å¼å
³æ
é'; |
| | | 16: str := '没æç²®é£å¨æ¼æä¸'; |
| | | 32: str := 'æ½å±æ²¡ææ¾å¥½'; |
| | | 256:str := 'æ
ééå¯'; |
| | | else str := 'æ
éæªå®ä¹'; |
| | | end; |
| | | |
| | | //è¿åæ
éå符串 |
| | | result := str; |
| | | |
| | | //è¾åºå°çé¢ |
| | | with frmMain do begin |
| | | sLabel72.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°è°æ´æªè·çé¢ |
| | | sLabel73.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°æå¨æ£æµçé¢ |
| | | sLabel74.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°èªå¨æ¨¡å¼çé¢ |
| | | sLabel75.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°æå¨æ ¡åçé¢ |
| | | sLabel76.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°æå¨æ¨¡å¼çé¢ |
| | | sLabel77.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°ä»ªå¨ç»´æ¤çé¢ |
| | | |
| | | //ä¿®æ¹æ ·å¼ |
| | | if cod=0 then begin |
| | | sLabel72.Font.Color := clLime; |
| | | sLabel73.Font.Color := clLime; |
| | | sLabel74.Font.Color := clLime; |
| | | sLabel75.Font.Color := clLime; |
| | | sLabel76.Font.Color := clLime; |
| | | sLabel77.Font.Color := clLime; |
| | | end |
| | | else if (cod>=1)or(cod<=15) then begin |
| | | sLabel72.Font.Color := clRed; |
| | | sLabel73.Font.Color := clRed; |
| | | sLabel74.Font.Color := clRed; |
| | | sLabel75.Font.Color := clRed; |
| | | sLabel76.Font.Color := clRed; |
| | | sLabel77.Font.Color := clRed; |
| | | end |
| | | else begin |
| | | sLabel72.Font.Color := clSilver; |
| | | sLabel73.Font.Color := clSilver; |
| | | sLabel74.Font.Color := clSilver; |
| | | sLabel75.Font.Color := clSilver; |
| | | sLabel76.Font.Color := clSilver; |
| | | sLabel77.Font.Color := clSilver; |
| | | end; |
| | | |
| | | //强å¶å·æ°æ ç¾ |
| | | sLabel72.Repaint; |
| | | sLabel73.Repaint; |
| | | sLabel74.Repaint; |
| | | sLabel75.Repaint; |
| | | sLabel76.Repaint; |
| | | sLabel77.Repaint; |
| | | end; |
| | | end; |
| | | |
| | | //èªå¨æ¨¡å¼ä¸ï¼å·æ°è®¾å¤æ
éç |
| | | function AutoFaultCode(cod:Integer):string; |
| | | var |
| | | str : string; |
| | | begin |
| | | //ç¿»è¯cod |
| | | case cod of |
| | | -1:str := 'é讯æ
é'; |
| | | 0: str := 'æªç¥æ
é'; |
| | | 1: str := 'ä¸éé¨å
³æ
é'; |
| | | 2: str := 'ä¸éé¨å
³æ
é'; |
| | | 3: str := 'åéé¨å
³æ
é'; |
| | | 4: str := 'ä¸éé¨å¼æ
é'; |
| | | 5: str := 'ä¸éé¨å¼å
³æ
é'; |
| | | 6: str := 'ä¸éé¨å¼ãä¸éé¨å
³æ
é'; |
| | | 7: str := 'ä¸éé¨å¼å
³ãä¸éé¨å
³æ
é'; |
| | | 8: str := 'ä¸éé¨å¼æ
é'; |
| | | 9: str := 'ä¸éé¨å¼ãä¸éé¨å
³æ
é'; |
| | | 10: str := 'ä¸éé¨å¼å
³æ
é'; |
| | | 11: str := 'ä¸éé¨å¼å
³ãä¸éé¨å
³æ
é'; |
| | | 12: str := 'åéé¨å¼æ
é'; |
| | | 13: str := 'ä¸éé¨å¼å
³ãä¸éé¨å¼æ
é'; |
| | | 14: str := 'ä¸éé¨å¼å
³ãä¸éé¨å¼æ
é'; |
| | | 15: str := 'åéé¨å¼å
³æ
é'; |
| | | 16: str := '没æç²®é£å¨æ¼æä¸'; |
| | | 32: str := 'æ½å±æ²¡ææ¾å¥½'; |
| | | 256:str := 'æ
ééå¯'; |
| | | else str := 'æ
éæªå®ä¹'; |
| | | end; |
| | | //è¾åºå°çé¢ |
| | | with frmMain do begin |
| | | //æ´æ°èªå¨æ¨¡å¼çé¢ |
| | | sLabel74.Caption := Format('设å¤ç¶æ-[%s]',[str]); |
| | | //ä¿®æ¹æ ·å¼ |
| | | sLabel74.Font.Color := clRed; |
| | | sLabel74.Repaint; |
| | | end; |
| | | //è¿åæ
éå符串 |
| | | result := str; |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {åå
åç§°ï¼uInit.pas } |
| | | {模ååç§°ï¼åå§å彿°åº } |
| | | {模å说æï¼å
æ¬ä¸»è¿ç¨å¯å¨æ¶ï¼å
¨å±åéåå§åãç³»ç»ç®å½åå§åãé
ç½®å è½½ } |
| | | {å»ºç«æ¥æï¼2009-12-20 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2023-02-21 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | unit uInit; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Classes, Messages, Forms, Dialogs, SysUtils, StrUtils, DateUtils, |
| | | StdCtrls, Variants, ComCtrls, Buttons, Math, IniFiles, Graphics, ShellAPI, |
| | | SQLite3, SQLiteTable3; |
| | | |
| | | {ç³æå
¨å±å
Œ
±è°ç¨å½æ°} |
| | | procedure OpenOnScreenKeyboard(); |
| | | procedure InitGlobal(); |
| | | procedure InitSystemDir(); |
| | | procedure InitDatas(); |
| | | procedure LoadSystemInfo(); |
| | | procedure LoadOptions(); |
| | | procedure SaveOptions(); |
| | | function GetCurrMsgPos(index:Integer):TPoint; |
| | | |
| | | //æææä»¶æ£æ¥æ¨¡å |
| | | function GetMachineCode():String; |
| | | function CheckLicense(sFilename, sCode:String):Boolean; |
| | | procedure RegCheckMode(); |
| | | procedure RegCheck1Mode(); |
| | | //ä¿åcsvæ°æ® |
| | | procedure WriteCsvFile(name: string; mois,temp,water: Double); |
| | | //å·æ°æ
éç |
| | | procedure RefashFaultCode(cod:Integer); |
| | | implementation |
| | | |
| | | uses |
| | | uMain, log4me, uDM, PubUtils, MsgVar, Global, uSaveData, CpuidInfo, UntDes; |
| | | |
| | | {彿°æ¹æ³} |
| | | |
| | | //------- è°ç¨ä¸æ¹é®ç ------------------------------------ |
| | | //è°ç¨oské®ç |
| | | procedure OpenOnScreenKeyboard(); |
| | | type TWow64DisableWow64FsRedirection = function(var Wow64FsEnableRedirection: LongBool): LongBool; StdCall; |
| | | type TWow64RevertWow64FsRedirection = function(var Wow64RevertWow64FsRedirection: LongBool): LongBool; StdCall; |
| | | var |
| | | hHandle: THandle; |
| | | Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection; |
| | | Wow64RevertWow64FsRedirection: TWow64RevertWow64FsRedirection; |
| | | OldValue: LongBool; |
| | | rs: Integer; |
| | | begin |
| | | //忢32ä½æä»¶ç³»ç» |
| | | try |
| | | hHandle := GetModuleHandle('kernel32.dll'); |
| | | @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64DisableWow64FsRedirection'); |
| | | if ((hHandle <> 0) and (@Wow64DisableWow64FsRedirection <> nil)) then |
| | | Wow64DisableWow64FsRedirection(OldValue); |
| | | except |
| | | end; |
| | | //è°ç¨oskå±å¹é®ç |
| | | rs := ShellExecute(Application.Handle, 'open', 'osk.exe', nil, nil, SW_SHOWNORMAL); |
| | | if rs <= 32 then begin |
| | | ShowMessage(Format('éè¯¯ï¼æ æ³æå¼å±å¹é®çï¼é误代ç -[%d].',[rs])); |
| | | log4Info(Format('éè¯¯ï¼æ æ³æå¼å±å¹é®çï¼é误代ç -[%d].',[rs])); |
| | | end |
| | | else |
| | | log4Info('ç³»ç»ï¼ä¸ä½æºè½¯ä»¶æå¼ osk ç³»ç»å±å¹é®ç.'); |
| | | //ç¨å64ä½æä»¶ç³»ç» |
| | | try |
| | | hHandle := GetModuleHandle('kernel32.dll'); |
| | | @Wow64RevertWow64FsRedirection := GetProcAddress(hHandle, 'Wow64RevertWow64FsRedirection'); |
| | | if ((hHandle <> 0) and (@Wow64RevertWow64FsRedirection <> nil)) then |
| | | Wow64RevertWow64FsRedirection(OldValue); |
| | | except |
| | | end; |
| | | end; |
| | | |
| | | //--------------------------------------------------------------------------- |
| | | //åå§åå
¨å±åé |
| | | procedure InitGlobal(); |
| | | begin |
| | | //ç¨åºè·¯å¾ |
| | | glAppPath := ExtractFilePath(Application.ExeName); |
| | | |
| | | //configDB file |
| | | glConfig_db := glAppPath + CONFIG_DIR + t_Config + '.db'; |
| | | glConn_db := glAppPath + CONFIG_DIR + t_Conn + '.db'; |
| | | glGrain_db := glAppPath + CONFIG_DIR + t_Grain + '.db'; |
| | | glWeight_db := glAppPath + CONFIG_DIR + t_Weight + '.db'; |
| | | glManager_db := glAppPath + CONFIG_DIR + t_Manager + '.db'; |
| | | glData_db := glAppPath + CONFIG_DIR + t_Data + '.db'; |
| | | //åå§åCalcå
¨å±åé |
| | | glCalcOutput := ''; |
| | | glCurrFocus := 0; |
| | | //åå§åæå¨æ¨¡å¼è¿åå£ä»¤å¼ |
| | | frmMain.sLoginPwd := ''; |
| | | //åå§åæ ·æ¬åå¨åé |
| | | smp.flag := false; |
| | | smp.info := ''; |
| | | smp.prefix := ''; |
| | | smp.dir := ''; |
| | | end; |
| | | |
| | | //åå§åç³»ç»ç®å½ |
| | | procedure InitSystemDir(); |
| | | var |
| | | path : String; |
| | | begin |
| | | //å建é
ç½®æä»¶å¤¹ |
| | | path := glAppPath + CONFIG_DIR; |
| | | if not DirectoryExists(path) then ForceDirectories(path); |
| | | |
| | | //åå»ºæ°æ®æä»¶å¤¹ |
| | | path := glAppPath + DATA_DIR; |
| | | if not DirectoryExists(path) then ForceDirectories(path); |
| | | |
| | | //å建æ¥å¿æä»¶å¤¹ |
| | | path := glAppPath + LOG_DIR; |
| | | if not DirectoryExists(path) then ForceDirectories(path); |
| | | end; |
| | | |
| | | //åå§åæ°æ®ééç»æ |
| | | procedure InitDatas(); |
| | | begin |
| | | //åå§åDatasæµéæ°æ® |
| | | Datas.Voltage := 0; //åå§çµå¹³ |
| | | Datas.Weight := 0; //éé |
| | | Datas.Temp := 0; //温度 |
| | | Datas.Humid:= 0; //湿度 |
| | | //åå§åèªå¨æ£æµæ ç¾ |
| | | frmMain.lblAutoRet.Caption := ''; |
| | | frmMain.lblAutoRet_error.Caption := ''; |
| | | end; |
| | | |
| | | //å 载系ç»ä¿¡æ¯çé¢ |
| | | procedure LoadSystemInfo(); |
| | | begin |
| | | with frmMain do begin |
| | | //åå§åæ°´å仪串å£ä¸æèå |
| | | cbSerialPort.Items.Clear; |
| | | EnumComPorts(cbSerialPort.Items); |
| | | //å 载水åä»ªåæ° |
| | | cbSerialPort.Text := WrConn.SerialPort; |
| | | edtBaud.Text := IntToStr(WrConn.baud); |
| | | edtParity.Text := WrConn.parity; |
| | | edtData_bit.Text := IntToStr(WrConn.data_bit); |
| | | edtStop_bit.Text := IntToStr(WrConn.stop_bit); |
| | | cbAutoRun.Checked := glAutoRun; |
| | | //å¢å 两个æ¶é´è®¾ç½®å¼ |
| | | edtTime1.Text := IntToStr(glTime1); |
| | | edtTime2.Text := IntToStr(glTime2); |
| | | |
| | | //å è½½PLCåæ° |
| | | edtIP.Text := PlcConn.ip; |
| | | edtPort.Text := IntToStr(PlcConn.port); |
| | | |
| | | //å è½½æå¨æ£æµååæ°é
ç½®çé¢çæ°æ®åå¨åæ° |
| | | cbTestAutoSave.Checked := smp.flag; |
| | | edtSampleName.Text := smp.info; |
| | | cbAutoSave.Checked := smp.flag; |
| | | edtPrefix.Text := smp.prefix; |
| | | edtDir.Text := smp.dir; |
| | | |
| | | //å è½½ç»å½å£ä»¤ |
| | | edtPassword.Text := SysConfig.password; |
| | | edtDelay.Text := IntToStr(SysConfig.delay); |
| | | end; |
| | | end; |
| | | |
| | | //å è½½åæ°å°çé¢ |
| | | procedure LoadOptions(); |
| | | begin |
| | | with frmMain do begin |
| | | //æå¨æ£æµçé¢ |
| | | mtManClock.Value := 0; |
| | | edtMoisture.Text := ''; |
| | | edtWeightRatio.Text := ''; |
| | | edtWeight.Text := ''; |
| | | edtTemp.Text := ''; |
| | | edtWater.Text := ''; |
| | | lbType.ItemIndex := Grain.Code-1; //ç²®ç§ä»£ç ä¸çé¢ItemIndexç对åºå
³ç³» |
| | | sLabel15.Caption := Format('ç²®é£ç§ç±» - [%s]',[Grain.Name]); |
| | | sLabel3.Caption := Format('éæ© - [%s]',[Grain.Name]); |
| | | //ä»ªå¨æ ¡åçé¢ |
| | | lbType1.ItemIndex := Grain.Code-1; |
| | | edtAutoCoef1.Text := Grain.coef[0]; |
| | | edtAutoCoef2.Text := Grain.coef[1]; |
| | | edtAutoCoef3.Text := Grain.coef[2]; |
| | | edtAutoCoef4.Text := Grain.coef[3]; |
| | | edtAutoCoef5.Text := Grain.coef[4]; |
| | | //åæ°è®¾ç½®çé¢ |
| | | edtVolume.Text := FloatToStr(SysConfig.Volume); |
| | | edtTare.Text := FloatToStr(SysConfig.Tare); |
| | | edtFreq.Text := FloatToStr(SysConfig.Freq); |
| | | edtDecay.Text:= FloatToStr(SysConfig.Decay); |
| | | edtStartFreq.Text := FloatToStr(SysConfig.StartFreq); |
| | | edtStopFreq.Text := FloatToStr(SysConfig.StopFreq); |
| | | edtStep.Text := IntToStr(SysConfig.Step); |
| | | lbASK.ItemIndex := SysConfig.Ask; //ASK代ç ä¸çé¢ItemIndexç对åºå
³ç³» |
| | | //ç³»ç»ä¿¡æ¯çé¢ |
| | | lblVersion.Caption := Format('çæ¬ %s ', [glFileVersion]); |
| | | end; |
| | | end; |
| | | |
| | | //ä¿åçé¢åæ° |
| | | procedure SaveOptions(); |
| | | begin |
| | | // |
| | | end; |
| | | |
| | | //------ åè½å½æ° ------------------------------------------------------------- |
| | | //è·åå½åç¦ç¹è¾å
¥æ¡çç»å¯¹åæ |
| | | function GetCurrMsgPos(index:Integer):TPoint; |
| | | var |
| | | x1,y1 : Integer; //ä¿®æ£å¼ |
| | | x3,x45,y2 : Integer; |
| | | begin |
| | | with frmMain do begin |
| | | x1 := edtMois1.Width + 5; |
| | | y1 := edtMois1.Height - 40; |
| | | x3 := edtMois1.Width - 8; |
| | | x45 := -473; |
| | | y2 := -250; |
| | | case index of |
| | | 1:begin |
| | | Result.X := Left+edtMois1.Left+x1; |
| | | Result.Y := Top+edtMois1.Top+y1; |
| | | end; |
| | | 2:begin |
| | | Result.X := Left+edtMois2.Left+x1; |
| | | Result.Y := Top+edtMois2.Top+y1; |
| | | end; |
| | | 3:begin |
| | | Result.X := Left+edtMois3.Left+x3; |
| | | Result.Y := Top+edtMois3.Top+y1; |
| | | end; |
| | | 4:begin |
| | | Result.X := Left+edtMois4.Left+x45; |
| | | Result.Y := Top+edtMois4.Top+y1; |
| | | end; |
| | | 5:begin |
| | | Result.X := Left+edtMois5.Left+x45; |
| | | Result.Y := Top+edtMois5.Top+y1; |
| | | end; |
| | | 6:begin |
| | | Result.X := Left+edtManCoef1.Left+x1; |
| | | Result.Y := Top+edtManCoef1.Top+y2; |
| | | end; |
| | | 7:begin |
| | | Result.X := Left+edtManCoef2.Left+x1; |
| | | Result.Y := Top+edtManCoef2.Top+y2; |
| | | end; |
| | | 8:begin |
| | | Result.X := Left+edtManCoef3.Left+x3; |
| | | Result.Y := Top+edtManCoef3.Top+y2; |
| | | end; |
| | | 9:begin |
| | | Result.X := Left+edtManCoef4.Left+x45; |
| | | Result.Y := Top+edtManCoef4.Top+y2; |
| | | end; |
| | | 10:begin |
| | | Result.X := Left+edtManCoef5.Left+x45; |
| | | Result.Y := Top+edtManCoef5.Top+y2; |
| | | end; |
| | | 11:begin |
| | | Result.X := Left+edtIp.Left+edtIp.Width+35; |
| | | Result.Y := Top+edtIp.Top+edtIp.Height+70; |
| | | end; |
| | | 12:begin |
| | | Result.X := Left+edtPort.Left+edtPort.Width+30; |
| | | Result.Y := Top+edtPort.Top+edtPort.Height+70; |
| | | end; |
| | | 13:begin |
| | | Result.X := Left+edtTime1.Left+edtTime1.Width+35; |
| | | Result.Y := Top+edtTime1.Top+edtTime1.Height+190; |
| | | end; |
| | | 14:begin |
| | | Result.X := Left+edtTime2.Left+edtTime2.Width+35; |
| | | Result.Y := Top+edtTime2.Top+edtTime2.Height+190; |
| | | end; |
| | | 15:begin |
| | | Result.X := Left+edtWeight1.Left+edtWeight1.Width+5; |
| | | Result.Y := Top+edtWeight1.Top+edtWeight1.Height-50; |
| | | end; |
| | | 16:begin |
| | | Result.X := Left+edtWeight2.Left+edtWeight2.Width+5; |
| | | Result.Y := Top+edtWeight2.Top+edtWeight2.Height-50; |
| | | end; |
| | | 17:begin |
| | | Result.X := Left+edtWeight3.Left-475; |
| | | Result.Y := Top+edtWeight3.Top+edtWeight3.Height-50; |
| | | end; |
| | | 18:begin |
| | | Result.X := Left+edtWeight3.Left-220; |
| | | Result.Y := Top+edtWeight3.Top+edtWeight3.Height-120; |
| | | end; |
| | | 19:begin |
| | | Result.X := Left+edtWeight3.Left-220; |
| | | Result.Y := Top+edtWeight3.Top+edtWeight3.Height-20; |
| | | end; |
| | | 20:begin |
| | | Result.X := Left+edtVolume.Left+edtVolume.Width+5; |
| | | Result.Y := Top+edtVolume.Top+edtVolume.Height-45; |
| | | end; |
| | | 21:begin |
| | | Result.X := Left+edtTare.Left+edtTare.Width+5; |
| | | Result.Y := Top+edtTare.Top+edtTare.Height-45; |
| | | end; |
| | | 22:begin |
| | | Result.X := Left+edtDelay.Left+edtDelay.Width+35; |
| | | Result.Y := Top+edtDelay.Top+edtDelay.Height+240; |
| | | end; |
| | | 23:begin |
| | | Result.X := Left+edtPassword.Left+edtPassword.Width+35; |
| | | Result.Y := Top+edtPassword.Top+edtPassword.Height+225; |
| | | end; |
| | | 24:begin |
| | | Result.X := Left+edtManVal.Left+x1; |
| | | Result.Y := Top+edtManVal.Top-40; |
| | | end; |
| | | 25:begin |
| | | Result.X := Left+edtIntercept.Left+x1; |
| | | Result.Y := Top+edtIntercept.Top-80; |
| | | end; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //------- ç³»ç»ææç¸å
³å½æ° ----------------------------------------------------- |
| | | //è®¡ç®æ¬æºæºå¨ç ï¼è¾åºæºå¨ç 坿 |
| | | function GetMachineCode():String; |
| | | var |
| | | ss : string; |
| | | begin |
| | | SetCPU(GetCurrentProcess,1); |
| | | ss := GetCnCPUID(); |
| | | //çæä¸ä¸ªæºå¨ç |
| | | Result := EncryStrHex(ss, sConfig); |
| | | end; |
| | | |
| | | //æææä»¶æ ¡éªï¼è¿åæ ¡éªç»æ |
| | | //å
¥åï¼sfilename-æ ¡éªæä»¶ |
| | | // sCode-è®¡ç®æ¬æºæºå¨ç |
| | | //è¿åï¼true-æ ¡éªæåï¼false-æ ¡éªå¤±è´¥ |
| | | function CheckLicense(sFilename, sCode:String):Boolean; |
| | | var |
| | | i : Integer; |
| | | sDecry : String; //è§£å¯åçææ |
| | | sl : TStringList; |
| | | begin |
| | | //容éå¤ç |
| | | if not FileExists(sFileName) then begin |
| | | Result := false; |
| | | Exit; |
| | | end; |
| | | |
| | | //è·å坿 |
| | | sl := TStringlist.Create(); |
| | | try |
| | | sl.LoadFromFile(sFilename); |
| | | sDecry := Trim(sl.Text); |
| | | finally |
| | | FreeAndNil(sl); |
| | | end; |
| | | |
| | | //å¯¹å¯æä¿¡æ¯è¿è¡è§£ç ï¼æé»è®¤level=8 |
| | | for i:=1 to 8 do |
| | | sDecry := DecryStrHex(sDecry, sConfig); //ç¼ç ,çæææ |
| | | |
| | | //è·åRegCode+RegDate+RegLevel+RegType+RegKey æºå¨ç |
| | | sDESMachineCode := SplitStr(sDecry,' ',0); |
| | | sDESDate := SplitStr(sDecry,' ',1); |
| | | sDESLevel := SplitStr(sDecry,' ',2); |
| | | sDESType := SplitStr(sDecry,' ',3); |
| | | sDESKey := SplitStr(sDecry,' ',4); |
| | | |
| | | //è¿åæ¯è¾æºå¨ç |
| | | Result := AnsiSameStr(sCode, sDESMachineCode); |
| | | end; |
| | | //Licenseæææ£æ¥æ¨¡åï¼å¦æªæ³¨ååèªå¨éåº |
| | | procedure RegCheckMode(); |
| | | var |
| | | sl : TStringList; |
| | | sLicFile, sMchCod, sLicText : String; |
| | | begin |
| | | //======éªè¯æææä»¶=============================== |
| | | sLicFile := glAppPath + LICENSE_FILE; |
| | | sMchCod := GetMachineCode(); |
| | | if CheckLicense(sLicFile, sMchCod) then |
| | | glRegSuccess := true |
| | | else begin |
| | | //åæ³¨åç |
| | | sl := TStringList.Create(); |
| | | sl.Add('æºå¨ç ï¼' + sMchCod); |
| | | sl.Add('çææ¥æï¼' + FormatDateTime('yyyy-mm-dd hh:nn:ss',Now())); |
| | | sl.SaveToFile(glAppPath+'æºå¨ç .txt'); |
| | | FreeAndNil(sl); |
| | | //æç¤ºè¦è·åæææä»¶ |
| | | glRegSuccess := false; //注å失败ï¼è°æ´æ å¿ï¼åå¤éæ¾éåºå®æ¶å¨ |
| | | sLicText := 'è¦åï¼ç³»ç»å°æªæ³¨åï¼å·²å¨è½¯ä»¶ç®å½çæ [æºå¨ç ] æä»¶ï¼è¯·å°è¯¥æä»¶æä¾ç»ç³»ç»ä¾åºåï¼ä»¥è·åæ£å¼æææä»¶ï¼'; |
| | | MessageBox(frmMain.handle,PChar(sLicText),'注åæç¤ºå¯¹è¯æ¡',MB_OK+MB_ICONWARNING); |
| | | //å¼å¯éåºå®æ¶å¨, 0.5så
éåº |
| | | dm.tmRegFault.Enabled := true; |
| | | end; |
| | | end; |
| | | |
| | | //éé»æææ£æ¥æ¨¡å |
| | | procedure RegCheck1Mode(); |
| | | var |
| | | sLicFile, sMchCod : String; |
| | | begin |
| | | sLicFile := glAppPath + LICENSE_FILE; |
| | | sMchCod := GetMachineCode(); |
| | | if not CheckLicense(sLicFile, sMchCod) then |
| | | dm.tmRegFault.Enabled := true; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | function GetLastNum(const FileName: string): Integer; |
| | | var |
| | | FileStream: TextFile; |
| | | LastDataLine,Line,Fields: string; |
| | | begin |
| | | Result := 0; |
| | | // æ£æ¥æä»¶æ¯å¦åå¨ |
| | | if not FileExists(FileName) then Exit; |
| | | |
| | | // æå¼æä»¶ |
| | | AssignFile(FileStream, FileName); |
| | | try |
| | | Reset(FileStream); |
| | | // è·³è¿æ é¢è¡ |
| | | if not Eof(FileStream) then ReadLn(FileStream); |
| | | // 读åæä»¶çæ¯ä¸è¡ |
| | | LastDataLine := ''; |
| | | while not Eof(FileStream) do begin |
| | | ReadLn(FileStream, Line); |
| | | if Line <> '' then |
| | | LastDataLine := Trim(Line); |
| | | end; |
| | | // è§£ææåä¸è¡ |
| | | if LastDataLine <> '' then begin |
| | | Fields := SplitStr(LastDataLine,',',0); |
| | | Result := StrToIntDef(Fields,0); |
| | | end; |
| | | finally |
| | | CloseFile(FileStream); |
| | | end; |
| | | end; |
| | | |
| | | // å°æ£æµç»æä¿åå° csvæä»¶ |
| | | procedure WriteCsvFile(name: string; mois,temp,water: Double); |
| | | var |
| | | pMyFile: textFile; |
| | | sfile,sTitle,sMsg,time : string; |
| | | no : integer; |
| | | begin |
| | | //åå§åè·¯å¾åæ é¢ |
| | | sFile := smp.dir + smp.prefix + FormatDateTime('yyyymmdd', Now) + '.csv'; |
| | | sTitle:= 'åºå·,æ ·æ¬ä¿¡æ¯,嫿°´ç,温度,湿度,æ¥æ'; |
| | | |
| | | //读åæä»¶åå²noåºå· |
| | | no := GetLastNum(sFile)+1; |
| | | time := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); |
| | | sMsg := Format('%d,%s,%.2f,%.2f,%.2f,%s', [no,name,mois,temp,water,time]); |
| | | try |
| | | AssignFile(pMyFile,sFile); |
| | | if FileExists(sFile) then |
| | | Append(pMyFile) |
| | | else begin |
| | | ReWrite(pMyFile); |
| | | WriteLn(pMyFile,sTitle); //æ°å»ºcsvï¼å
åå
¥æ é¢ |
| | | end; |
| | | WriteLn(pMyFile,sMsg); //åå
¥å
容 |
| | | finally |
| | | CloseFile(pMyFile); |
| | | end; |
| | | end; |
| | | |
| | | //å·æ°è®¾å¤æ
éç |
| | | procedure RefashFaultCode(cod:Integer); |
| | | var |
| | | str : string; |
| | | begin |
| | | //ç¿»è¯cod |
| | | if cod=0 then str := 'æ£å¸¸' |
| | | else if cod=1 then str := 'ä¸éé¨å¡ä½' |
| | | else if cod=2 then str := 'ä¸éé¨å¡ä½' |
| | | else str := 'æªå®ä¹'; |
| | | //è¾åºå°çé¢ |
| | | with frmMain do begin |
| | | sLabel72.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°è°æ´æªè·çé¢ |
| | | sLabel73.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°æå¨æ£æµçé¢ |
| | | sLabel74.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°èªå¨æ¨¡å¼çé¢ |
| | | sLabel75.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°æå¨æ ¡åçé¢ |
| | | sLabel76.Caption := Format('设å¤ç¶æ-[%s]',[str]); //æ´æ°æå¨æ¨¡å¼çé¢ |
| | | end; |
| | | //ä¿®æ¹æ ·å¼ |
| | | with frmMain do begin |
| | | if cod=0 then begin |
| | | sLabel72.Font.Color := clLime; |
| | | sLabel73.Font.Color := clLime; |
| | | sLabel74.Font.Color := clLime; |
| | | sLabel75.Font.Color := clLime; |
| | | sLabel76.Font.Color := clLime; |
| | | end |
| | | else if (cod=1)or(cod=2) begin |
| | | sLabel72.Font.Color := clRed; |
| | | sLabel73.Font.Color := clRed; |
| | | sLabel74.Font.Color := clRed; |
| | | sLabel75.Font.Color := clRed; |
| | | sLabel76.Font.Color := clRed; |
| | | end |
| | | else begin |
| | | sLabel72.Font.Color := clSilver; |
| | | sLabel73.Font.Color := clSilver; |
| | | sLabel74.Font.Color := clSilver; |
| | | sLabel75.Font.Color := clSilver; |
| | | sLabel76.Font.Color := clSilver; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {项ç®åç§°ï¼actuatorlibå¨æåº } |
| | | {åå
åç§°ï¼actuatorlib.pas } |
| | | {çæ¬çæ¬¡ï¼3.2.1 } |
| | | {åè½æè¿°ï¼åºäºç²®é£æ°´å仪Actuator驱å¨å°è£
ç Dllæ¥å£éè®¯åº } |
| | | {å»ºç«æ¥æï¼2023-10-27 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2025-01-20 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | unit ActuatorLib; |
| | | |
| | | interface |
| | | |
| | | //éæå£°æ libåº |
| | | const |
| | | actuator_dll = 'core\Actuator.dll'; {èªå®ä¹åº} |
| | | |
| | | //æ¦æ¡ç³»ç»æä»¤ä»£ç |
| | | const |
| | | PLC_READY_GRAIN = $01; //ç²®ç§åå¤å½ä»¤ä»£ç ï¼ç²®ç§å·²ä¿®æ¹ï¼ |
| | | PLC_READY_FINISH = $02; //è¿ååå¤å®æ |
| | | PLC_DETECT_START = $03; //æ£æµå¯å¨å½ä»¤ |
| | | PLC_DETECT_FINISH = $04; //è¿åæ£æµå®æ¯ |
| | | PLC_DEVICE_WR_RESET = $FE; //è®¾å¤æ°´å仪å¤ä½å½ä»¤ |
| | | PLC_DEVICE_WR_FAULT = $FF; //è¿åæ°´å仪æ
é代ç |
| | | |
| | | //WRæ°´å仪æä»¤ä»£ç |
| | | const |
| | | WR_READY = $01; //æ°´å仪å夿令 |
| | | WR_DETECT = $02; //æ°´åä»ªæ£æµæä»¤ |
| | | WR_VERIFY = $03; //æ°´åä»ªæ ¡éªæä»¤ |
| | | WR_RESET = $04; //æ°´å仪å¤ä½æä»¤ |
| | | WR_GOODS = $05; //ç²®ç§åæ´æä»¤ |
| | | |
| | | WR_VALV01 = $07; //ä¸éé¨å¼ |
| | | WR_VALV02 = $08; //ä¸éé¨å
³ |
| | | WR_VALV03 = $09; //ä¸éé¨å¼ |
| | | WR_VALV04 = $0A; //ä¸éé¨å
³ |
| | | WR_VALV05 = $0B; //åéé¨å¼ |
| | | WR_VALV06 = $0C; //åéé¨å
³ |
| | | WR_VIBRATE_01 = $0D; //æ¯å¨å¼ |
| | | WR_VIBRATE_02 = $0E; //æ¯å¨å
³ |
| | | |
| | | //////////////////////////////////////////////////////////////////////////////// |
| | | type |
| | | {å®ä¹åè°å½æ°ç±»å} |
| | | |
| | | //æ°æ®åè°å½æ° |
| | | //typedef void(__stdcall* MESSAGE_HANDLER)(unsigned short *data, int nsize); |
| | | TMessageCallBack = procedure(Data: PWord; Size: Integer); stdcall; |
| | | |
| | | //æå¼æå¡ç«¯ |
| | | //int __stdcall StartTcpSlave(int nSlavePort, const char* szDevPort, int baud, |
| | | // char parity, int data_bit, int stop_bit, int detectTimeout = 60, |
| | | // int resetTimeout = 10, MESSAGE_HANDLER handler = NULL); |
| | | function StartTcpSlave(nSlavePort: Integer; |
| | | szSerialPort: PChar; baud: Integer; |
| | | parity: Char; data_bit: Integer; stop_bit: Integer; |
| | | detectTimeout: Integer; resetTimeout: Integer; |
| | | handler: TMessageCallBack): Integer; stdcall; external actuator_dll; |
| | | //ACTUATOR_API int __stdcall StartTcpSlave(void* waterDev, int nSlavePort, |
| | | // int detectTimeout = 60, int resetTimeout = 10, MESSAGE_HANDLER handler = NULL); |
| | | function StartTcpSlaveEx(waterDev:Pointer; nSlavePort: Integer; |
| | | detectTimeout: Integer=60; resetTimeout: Integer=10; |
| | | handler: TMessageCallBack=nil ): Integer; stdcall; external actuator_dll; |
| | | |
| | | //å
³éæå¡ç«¯ |
| | | //int __stdcall StopTcpSlave(); |
| | | function StopTcpSlave: Integer; stdcall; external actuator_dll; |
| | | //////////////////////////////////////////////////////////////////////////////// |
| | | |
| | | {å®ä¹ Dll彿°è°ç¨ç³æ} |
| | | //å建åå§å客æ·PLC设å¤å¥æctx |
| | | //strIp: IPå°å |
| | | //nPort: ç½ç»ç«¯å£ |
| | | //ACTUATOR_API void* CreatePlcDevice(const char* strIp, int nPort); |
| | | function CreatePlcDevice(strIp:PChar; nPort:Integer):Pointer; stdcall; external actuator_dll; |
| | | |
| | | //å建水åä»ªå¥æctx |
| | | //szSerialPort: 串å£å |
| | | //baud: æ³¢ç¹ç |
| | | //parity: æ ¡éªç±»å |
| | | //data_bit: æ°æ®ä½ |
| | | //stop_bit: ֹͣλ |
| | | //ACTUATOR_API void* CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit); |
| | | function CreateWrDevice(szSerialPort:PChar; baud:Integer; parity:Char; data_bit:Integer; stop_bit:Integer):Pointer; stdcall; external actuator_dll; |
| | | |
| | | //è¿æ¥å®¢æ·è®¾å¤ææ°´å仪è£
ç½® |
| | | //ctxDev : 设å¤å¥æ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int ConnectDevice(void* ctxDev); |
| | | function ConnectDevice(ctxDev:Pointer):Integer; stdcall; external actuator_dll; |
| | | |
| | | //è·åç¶ææç²®ç§æ´æ¹ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x03: å¼å§æµè¯ |
| | | // 0xFE: å¤ä½å½ä»¤ï¼ä¼å
级æé« |
| | | // å
¶ä»ï¼ 为åå
¥ç¶æ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | //è¿åå¼ï¼ä»å
¥åè¿å ç¶æåãç²®ç§ç¼å·ãæ§è¡ç»æ(å°äº0--é误) |
| | | //ACTUATOR_API int ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType); |
| | | function ReadState(ctxDev:Pointer; nState:PWord; nGrainType:PWord):Integer; stdcall; external actuator_dll; |
| | | |
| | | //ååç¶æ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x02: åå¤å·²å®æ |
| | | // 0x04: æ£æµå®æ |
| | | // 0xFF: æ°´å仪æ
é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int WriteState(void* ctxDev, unsigned short nState); |
| | | function ResponseState(ctxDev:Pointer; nState:Word):Integer; stdcall; external actuator_dll; |
| | | |
| | | //åä¼ æ£æµæ°æ® |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // ç²®ç§ç¼ç |
| | | // 嫿°´çï¼ åæ´ = åå¼*100 |
| | | // å®¹éæ¯ï¼ åæ´ = åå¼*100 |
| | | //nSize : æ°æ®ä¸ªæ° |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3); |
| | | function UploadData(ctxDev:Pointer; nDatas:PWord; nSize:Word=3):Integer; stdcall; external actuator_dll; |
| | | |
| | | //ä¸åå½ä»¤ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nCmdType ï¼å½ä»¤åï¼å¦ä¸æè¿° |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x02: å¼å§æµè¯ |
| | | // 0x03: æ ¡åå½ä»¤ï¼å³ä¸ºæ å®é¡µé¢æ£æµæé®å½ä»¤ï¼ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | // å½nCmdType 为0x02ï¼0x03æ¶ï¼ä¸ç¨èèç²®ç§ç¼å· |
| | | // nResponseSeconds: ååºæ¶é´ï¼ä»¥ç§è®¡ç® |
| | | // nResponseUSeconds: ååºæ¶é´ï¼ä»¥å¾®å¦è®¡ç®ï¼è¥å°äºç§ï¼å
¨é¨ç¨å¾®å¦è¡¨ç¤ºã |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000); |
| | | function SendCommands(ctxDev:Pointer; nCmdType:Word; nGrainType:Word=0; nResponseSeconds:Integer=20; nResponseUSeconds:Integer=0):Integer; stdcall; external actuator_dll; |
| | | |
| | | //å¤ä½å½ä»¤ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼æ ï¼ |
| | | //ACTUATOR_API int __stdcall ResetCommand(void* ctxDev); |
| | | function ResetCommand(ctxDev:Pointer):Integer;stdcall; external actuator_dll; |
| | | |
| | | //ä¸ååæ° |
| | | //ctxDev : 设å¤å¥æ |
| | | //nStartFreq ï¼èµ·å§é¢ç |
| | | //nStopFreq ï¼ ç»æ¢é¢ç |
| | | //nStepFreq ï¼ æ¥é¿ |
| | | //nDecayCode ï¼è¡°åç |
| | | //nAscValid ï¼ ASC å
é¨/å¤é¨ææï¼ åå¼ä¸º 0ï¼å
鍿æï¼ 1ï¼å¤é¨ææ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int WriteParams(void* ctxDev, unsigned short nStartFreq, unsigned short nStopFreq, |
| | | // unsigned short nStepFreq, unsigned short nDecayCode, unsigned short nAscValid); |
| | | function WriteParams(ctxDev:Pointer; nStartFreq,nStopFreq,nStepFreq,nDecayCode,nAscValid:Word):Integer; stdcall; external actuator_dll; |
| | | |
| | | //è¯»åæ£æµä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // çµåå¼ |
| | | // éé /100 |
| | | // 温度 /100 |
| | | // 湿度 /100 |
| | | // nSize : 读å4个å¯åå¨ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4); |
| | | function ReadDatas(ctxDev:Pointer; nDatas:PWord; nSize:Word=4):Integer; stdcall; external actuator_dll; |
| | | |
| | | //è¯»åæ«é¢å¼,å
¶å®ä¸ºçµå¹³å¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nVcc ï¼çµå¹³å¼æé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int ReadVcc(void* ctxDev, unsigned short* nVcc); |
| | | function ReadVcc(ctxDev:Pointer; nVcc:PWord):Integer; stdcall; external actuator_dll; |
| | | function ReadWeight(ctxDev:Pointer; nWg:PWord):Integer; stdcall; external actuator_dll; |
| | | function CalcValue(nDValue:Word; Coef0,Coef1,Coef2,Coef3,Coef4:double):double; stdcall; external actuator_dll; |
| | | |
| | | //éæ¯æ°´å仪æPLCè®¾å¤ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int DestroyDevice(void* ctxDev); |
| | | function DestroyDevice(ctxDev:Pointer):Integer; stdcall; external actuator_dll; |
| | | |
| | | //æå¼æ°´å仪æPLC设å¤è¿æ¥ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int __stdcall Disconnect(void* ctxDev) |
| | | function Disconnect(ctxDev:Pointer):Integer; stdcall; external actuator_dll; |
| | | |
| | | |
| | | //ç®æ³å½æ° |
| | | //x 为æµéå¼ |
| | | //y 为å®é
å¼ |
| | | //n 为æåæ¬¡æ° |
| | | //nSampleNumber æ ·æ¬æ°é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5); |
| | | function Linearize(x,y:PSingle; Coefficient:PDouble; n:integer=2; nSampleNumber:integer=5):Integer; stdcall; external actuator_dll; |
| | | //ACTUATOR_API int __stdcall PolyNomialFit(double x[], double y[], double Coefficient[], const int nDegree = 3, const int nSampleNumber = 5); |
| | | function PolyNomialFit(x,y:PDouble; Coefficient:PDouble; n:integer=2; nSampleNumber:integer=5):Integer; stdcall; external actuator_dll; |
| | | |
| | | //读åºä»¶çæ¬å· |
| | | function ReadVersion(ctxDev:Pointer; Version:PWord; nSize:Word=2):Integer; stdcall; external actuator_dll; |
| | | |
| | | //读åæ
éç ï¼ |
| | | //ctxDev :设å¤å¥æ |
| | | //nFaultCode :æ
éç |
| | | //0-æ£å¸¸ |
| | | //1-ä¸éé¨å¡ä½ |
| | | //2-ä¸éé¨å¡ä½ |
| | | //3-(æªå®ä¹)以æ¤ç±»æ¨ |
| | | //è¿åå¼:å°äº0 表示 é误 |
| | | //ACTUATOR API int stdcall ReadFaultCode(void* ctxDev, unsigned short* nFaultCode); |
| | | function ReadFaultCode(ctxDev:Pointer; nFaultCode:PWord):Integer; stdcall; external actuator_dll; |
| | | |
| | | implementation |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {项ç®åç§°ï¼actuatorlibå¨æåº } |
| | | {åå
åç§°ï¼actuatorlib.pas } |
| | | {çæ¬çæ¬¡ï¼3.2.1 } |
| | | {åè½æè¿°ï¼åºäºç²®é£æ°´å仪Actuator驱å¨å°è£
ç Dllæ¥å£éè®¯åº } |
| | | {å»ºç«æ¥æï¼2023-10-27 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2025-01-20 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | unit ActuatorLib; |
| | | |
| | | interface |
| | | |
| | | //éæå£°æ libåº |
| | | const |
| | | actuator_dll = 'core\Actuator.dll'; {èªå®ä¹åº} |
| | | |
| | | //PLCæä»¤ä»£ç |
| | | const |
| | | PLC_READY_GRAIN = $01; //ç²®ç§åå¤å½ä»¤ä»£ç ï¼ç²®ç§å·²ä¿®æ¹ï¼ |
| | | PLC_READY_FINISH = $02; //è¿ååå¤å®æ |
| | | PLC_DETECT_START = $03; //æ£æµå¯å¨å½ä»¤ |
| | | PLC_DETECT_FINISH = $04; //è¿åæ£æµå®æ¯ |
| | | PLC_DEVICE_WR_RESET = $FE; //è®¾å¤æ°´å仪å¤ä½å½ä»¤ |
| | | PLC_DEVICE_WR_FAULT = $FF; //è¿åæ°´å仪æ
é代ç |
| | | |
| | | //WRæ°´å仪æä»¤ä»£ç |
| | | const |
| | | WR_READY = $01; //æ°´å仪å夿令 |
| | | WR_DETECT = $02; //æ°´åä»ªæ£æµæä»¤ |
| | | WR_VERIFY = $03; //æ°´åä»ªæ ¡éªæä»¤ |
| | | WR_RESET = $04; //æ°´å仪å¤ä½æä»¤ |
| | | WR_GOODS = $05; //ç²®ç§åæ´æä»¤ |
| | | |
| | | WR_VALV01 = $07; //ä¸éé¨å¼ |
| | | WR_VALV02 = $08; //ä¸éé¨å
³ |
| | | WR_VALV03 = $09; //ä¸éé¨å¼ |
| | | WR_VALV04 = $0A; //ä¸éé¨å
³ |
| | | WR_VALV05 = $0B; //åéé¨å¼ |
| | | WR_VALV06 = $0C; //åéé¨å
³ |
| | | WR_VIBRATE_01 = $0D; //æ¯å¨å¼ |
| | | WR_VIBRATE_02 = $0E; //æ¯å¨å
³ |
| | | |
| | | |
| | | {å®ä¹ Dll彿°è°ç¨ç³æ} |
| | | //å建åå§å客æ·PLC设å¤å¥æctx |
| | | //strIp: IPå°å |
| | | //nPort: ç½ç»ç«¯å£ |
| | | //ACTUATOR_API void* CreatePlcDevice(const char* strIp, int nPort); |
| | | function CreatePlcDevice(strIp:PChar; nPort:Integer):Pointer; stdcall; external actuator_dll; |
| | | |
| | | //å建水åä»ªå¥æctx |
| | | //szSerialPort: 串å£å |
| | | //baud: æ³¢ç¹ç |
| | | //parity: æ ¡éªç±»å |
| | | //data_bit: æ°æ®ä½ |
| | | //stop_bit: ֹͣλ |
| | | //ACTUATOR_API void* CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit); |
| | | function CreateWrDevice(szSerialPort:PChar; baud:Integer; parity:Char; data_bit:Integer; stop_bit:Integer):Pointer; stdcall; external actuator_dll; |
| | | |
| | | //è¿æ¥å®¢æ·è®¾å¤ææ°´å仪è£
ç½® |
| | | //ctxDev : 设å¤å¥æ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int ConnectDevice(void* ctxDev); |
| | | function ConnectDevice(ctxDev:Pointer):Integer; stdcall; external actuator_dll; |
| | | |
| | | //è·åç¶ææç²®ç§æ´æ¹ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x03: å¼å§æµè¯ |
| | | // 0xFE: å¤ä½å½ä»¤ï¼ä¼å
级æé« |
| | | // å
¶ä»ï¼ 为åå
¥ç¶æ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | //è¿åå¼ï¼ä»å
¥åè¿å ç¶æåãç²®ç§ç¼å·ãæ§è¡ç»æ(å°äº0--é误) |
| | | //ACTUATOR_API int ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType); |
| | | function ReadState(ctxDev:Pointer; nState:PWord; nGrainType:PWord):Integer; stdcall; external actuator_dll; |
| | | |
| | | //ååç¶æ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nState ï¼ç¶æåï¼å¦ä¸ç¶æä¸ä¼éå¤ |
| | | // 0x02: åå¤å·²å®æ |
| | | // 0x04: æ£æµå®æ |
| | | // 0xFF: æ°´å仪æ
é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int WriteState(void* ctxDev, unsigned short nState); |
| | | function ResponseState(ctxDev:Pointer; nState:Word):Integer; stdcall; external actuator_dll; |
| | | |
| | | //åä¼ æ£æµæ°æ® |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // ç²®ç§ç¼ç |
| | | // 嫿°´çï¼ åæ´ = åå¼*100 |
| | | // å®¹éæ¯ï¼ åæ´ = åå¼*100 |
| | | //nSize : æ°æ®ä¸ªæ° |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3); |
| | | function UploadData(ctxDev:Pointer; nDatas:PWord; nSize:Word=3):Integer; stdcall; external actuator_dll; |
| | | |
| | | //ä¸åå½ä»¤ä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nCmdType ï¼å½ä»¤åï¼å¦ä¸æè¿° |
| | | // 0x01: ç²®ç§å·²ä¿®æ¹ |
| | | // 0x02: å¼å§æµè¯ |
| | | // 0x03: æ ¡åå½ä»¤ï¼å³ä¸ºæ å®é¡µé¢æ£æµæé®å½ä»¤ï¼ |
| | | //nGoodType: ç²®ç§ç¼å· |
| | | // 0x01: å°éº¦, |
| | | // 0x02: 水稻 |
| | | // 0x03: é»è± |
| | | // 0x04: çç±³ |
| | | // å½nCmdType 为0x02ï¼0x03æ¶ï¼ä¸ç¨èèç²®ç§ç¼å· |
| | | // nResponseSeconds: ååºæ¶é´ï¼ä»¥ç§è®¡ç® |
| | | // nResponseUSeconds: ååºæ¶é´ï¼ä»¥å¾®å¦è®¡ç®ï¼è¥å°äºç§ï¼å
¨é¨ç¨å¾®å¦è¡¨ç¤ºã |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000); |
| | | function SendCommands(ctxDev:Pointer; nCmdType:Word; nGrainType:Word=0; nResponseSeconds:Integer=20; nResponseUSeconds:Integer=0):Integer; stdcall; external actuator_dll; |
| | | |
| | | //å¤ä½å½ä»¤ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼æ ï¼ |
| | | //ACTUATOR_API int __stdcall ResetCommand(void* ctxDev); |
| | | function ResetCommand(ctxDev:Pointer):Integer;stdcall; external actuator_dll; |
| | | |
| | | //ä¸ååæ° |
| | | //ctxDev : 设å¤å¥æ |
| | | //nStartFreq ï¼èµ·å§é¢ç |
| | | //nStopFreq ï¼ ç»æ¢é¢ç |
| | | //nStepFreq ï¼ æ¥é¿ |
| | | //nDecayCode ï¼è¡°åç |
| | | //nAscValid ï¼ ASC å
é¨/å¤é¨ææï¼ åå¼ä¸º 0ï¼å
鍿æï¼ 1ï¼å¤é¨ææ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int WriteParams(void* ctxDev, unsigned short nStartFreq, unsigned short nStopFreq, |
| | | // unsigned short nStepFreq, unsigned short nDecayCode, unsigned short nAscValid); |
| | | function WriteParams(ctxDev:Pointer; nStartFreq,nStopFreq,nStepFreq,nDecayCode,nAscValid:Word):Integer; stdcall; external actuator_dll; |
| | | |
| | | //è¯»åæ£æµä¿¡æ¯ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nDatas ï¼æ°ç»ï¼æ°æ®é¡ºåºå¦ä¸ |
| | | // çµåå¼ |
| | | // éé /100 |
| | | // 温度 /100 |
| | | // 湿度 /100 |
| | | // nSize : 读å4个å¯åå¨ |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4); |
| | | function ReadDatas(ctxDev:Pointer; nDatas:PWord; nSize:Word=4):Integer; stdcall; external actuator_dll; |
| | | |
| | | //è¯»åæ«é¢å¼,å
¶å®ä¸ºçµå¹³å¼ï¼ |
| | | //ctxDev : 设å¤å¥æ |
| | | //nVcc ï¼çµå¹³å¼æé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int ReadVcc(void* ctxDev, unsigned short* nVcc); |
| | | function ReadVcc(ctxDev:Pointer; nVcc:PWord):Integer; stdcall; external actuator_dll; |
| | | function ReadWeight(ctxDev:Pointer; nWg:PWord):Integer; stdcall; external actuator_dll; |
| | | function CalcValue(nDValue:Word; Coef0,Coef1,Coef2,Coef3,Coef4:double):double; stdcall; external actuator_dll; |
| | | |
| | | //éæ¯æ°´å仪æPLCè®¾å¤ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int DestroyDevice(void* ctxDev); |
| | | function DestroyDevice(ctxDev:Pointer):Integer; stdcall; external actuator_dll; |
| | | |
| | | //æå¼æ°´å仪æPLC设å¤è¿æ¥ |
| | | //ctxDev : 设å¤å¥ææé |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int __stdcall Disconnect(void* ctxDev) |
| | | function Disconnect(ctxDev:Pointer):Integer; stdcall; external actuator_dll; |
| | | |
| | | |
| | | //ç®æ³å½æ° |
| | | //x 为æµéå¼ |
| | | //y 为å®é
å¼ |
| | | //n 为æåæ¬¡æ° |
| | | //nSampleNumber æ ·æ¬æ°é |
| | | //è¿åå¼ï¼å°äº0 表示 éè¯¯ï¼ |
| | | //ACTUATOR_API int Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5); |
| | | function Linearize(x,y:PSingle; Coefficient:PDouble; n:integer=2; nSampleNumber:integer=5):Integer; stdcall; external actuator_dll; |
| | | //ACTUATOR_API int __stdcall PolyNomialFit(double x[], double y[], double Coefficient[], const int nDegree = 3, const int nSampleNumber = 5); |
| | | function PolyNomialFit(x,y:PDouble; Coefficient:PDouble; n:integer=2; nSampleNumber:integer=5):Integer; stdcall; external actuator_dll; |
| | | |
| | | //读åºä»¶çæ¬å· |
| | | function ReadVersion(ctxDev:Pointer; Version:PWord; nSize:Word=2):Integer; stdcall; external actuator_dll; |
| | | |
| | | implementation |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {项ç®åç§°ï¼æ¥å¿åå
} |
| | | {åå
åç§°ï¼log4me.pas } |
| | | {çæ¬çæ¬¡ï¼1.3 } |
| | | {模ååç§°ï¼å
Œ
±å½æ°åº } |
| | | {åè½æè¿°ï¼è¾åºerrorãinfoãdebugãdata å个级å«çæ¥å¿ } |
| | | {å»ºç«æ¥æï¼2011-01-01 } |
| | | {çæææï¼æè¯åº } |
| | | {------------------------------------------------------------------------------} |
| | | {ä¿®æ¹æ¥å¿ |
| | | 2019-02-28 è°æ´ææ¯å°æ¶çææ¥å¿æä»¶ï¼æ¯ææ¥å¿è½½å
¥å管çã |
| | | |
| | | è°ç¨æ¹æ³ |
| | | procedure log4error(msg: AnsiString); //åERROR级å«çæ¥å¿ |
| | | procedure log4info(msg: AnsiString); //åINFO级å«çæ¥å¿ |
| | | procedure log4debug(msg: AnsiString); //åDEBUG级å«çæ¥å¿ |
| | | function log4filename():AnsiString; //å¾å°å½åæ¥å¿æä»¶å
¨å |
| | | |
| | | é
ç½®æä»¶ log4me.ini |
| | | |
| | | #é
ç½®æä»¶å主ç¨åºå¨åä¸ç®å½.没æè¿ä¸ªæä»¶æä¸å¨ä¸»ç®å½ä¸åä¸åæ¥å¿ |
| | | [log4me] |
| | | #path,æ¥å¿çåæ¾ç®å½.å¿
é¡»æ¯ä¸»ç¨åºç®å½ååç®å½. |
| | | #ä¾å:主ç¨åºç®å½ |
| | | #path=. |
| | | #ä¾å:åç®å½ |
| | | #path=temp\logs |
| | | path=logs |
| | | #level,æ¥å¿ç级,åªè½æ¯ error,info,debugä¹ä¸ |
| | | #为erroræ¶,åªælog4erroræå°çæ¥å¿è¢«è¾åº. |
| | | #为infoæ¶,log4errorålog4infoæå°çæ¥å¿è¢«è¾åº. |
| | | #为debugæ¶,log4error,log4info,log4debugæå°çæ¥å¿é½è¢«è¾åº. |
| | | level=info |
| | | } |
| | | |
| | | unit log4me; |
| | | |
| | | interface |
| | | |
| | | uses classes, sysutils, ComObj, windows,IniFiles; |
| | | |
| | | procedure log4error(msg: AnsiString); //åERROR级å«çæ¥å¿ |
| | | procedure log4info(msg: AnsiString); //åINFO 级å«çæ¥å¿ |
| | | procedure log4debug(msg: AnsiString); //åDEBUG级å«çæ¥å¿ |
| | | procedure log4data(msg, sfile: AnsiString);//ååå§æ°æ®æ¥å¿ |
| | | |
| | | function log4filename():AnsiString; //å¾å°å½åæ¥å¿æä»¶å
¨å |
| | | |
| | | var |
| | | log_filename: AnsiString; //æ¥å¿æä»¶å
¨å |
| | | |
| | | implementation |
| | | |
| | | |
| | | var |
| | | log_ThreadLock: TRTLCriticalSection; // 临çåº |
| | | log_fileStream: TFileStream; |
| | | log_filepath: AnsiString; //æ¥å¿æä»¶è·¯å¾ |
| | | |
| | | log_initime:TDateTime; |
| | | log_doerror, log_dodebug, log_doinfo: Boolean; |
| | | |
| | | |
| | | procedure log_init(); |
| | | var |
| | | tmpStr:String; |
| | | begin |
| | | |
| | | log_doerror := False; |
| | | log_dodebug := False; |
| | | log_doinfo := False; |
| | | |
| | | if FileExists(ExtractFilePath(ParamStr(0)) + 'config\log4me.ini') then |
| | | begin |
| | | |
| | | with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'config\log4me.ini') do |
| | | try |
| | | log_filepath := ExtractFilePath(ParamStr(0)) + '\' + ReadString('log4me','path','logs') + '\'; |
| | | tmpStr := LowerCase(ReadString('log4me','level','info')); |
| | | |
| | | log_doerror := (tmpStr = 'debug') or (tmpStr = 'info') or (tmpStr = 'error'); |
| | | log_doinfo := (tmpStr = 'debug') or (tmpStr = 'info'); |
| | | log_dodebug := (tmpStr = 'debug') ; |
| | | finally |
| | | Free; |
| | | end; |
| | | |
| | | end; |
| | | |
| | | log_initime := Now; |
| | | |
| | | end; |
| | | |
| | | procedure log4me_addLog(filename: AnsiString; p: PAnsiChar); |
| | | var |
| | | fmode :Word; |
| | | tmp:AnsiString; |
| | | begin |
| | | |
| | | //è¿å
¥ä¸´çåºï¼å¤çº¿ç¨æ¶å¯ä»¥ä¿æ¤èµæº |
| | | EnterCriticalSection(log_ThreadLock); |
| | | |
| | | try |
| | | try |
| | | //妿è¦åçæ¥å¿æä»¶åæå¼çä¸åï¼å¨ç¨åºç¬¬ä¸æ¬¡è¿è¡åè·¨å¤©çæ¶ååºç°ï¼ |
| | | //åå
³éæå¼çæ¥å¿æä»¶ã |
| | | if filename <> log_filename then |
| | | begin |
| | | log_filename := filename; |
| | | if Assigned(log_fileStream) then |
| | | begin |
| | | log_fileStream.Free; |
| | | log_fileStream := nil; |
| | | end; |
| | | end; |
| | | |
| | | //妿è¦åçæ¥å¿æä»¶æ²¡ææå¼ï¼å¨ç¨åºç¬¬ä¸æ¬¡è¿è¡åè·¨å¤©çæ¶ååºç°ï¼ |
| | | //åæå¼æ¥å¿æä»¶ã |
| | | if not Assigned(log_fileStream) then |
| | | begin |
| | | if FileExists(log_filename) then |
| | | fmode := fmOpenWrite or fmShareDenyNone |
| | | else |
| | | fmode := fmCreate or fmShareDenyNone ; |
| | | log_fileStream := TFileStream.Create(log_filename,fmode); |
| | | log_fileStream.Position := log_fileStream.Size; |
| | | end; |
| | | |
| | | //卿¥å¿æä»¶ä¸åå
¥æ¥å¿ |
| | | log_fileStream.Write(p^, strlen(p)); |
| | | |
| | | except |
| | | |
| | | on E:Exception do |
| | | begin |
| | | try |
| | | tmp := ExtractFilePath(ParamStr(0)) + 'log\log4me_err.log'; |
| | | if FileExists(tmp) then |
| | | fmode := fmOpenWrite or fmShareDenyNone |
| | | else |
| | | fmode := fmCreate or fmShareDenyNone ; |
| | | with TFileStream.Create(tmp, fmode) do |
| | | begin |
| | | Position := Size; |
| | | tmp := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + ' ' + E.Message + #13#10; |
| | | Write(tmp[1],Length(tmp)); |
| | | Free; |
| | | end; |
| | | except |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | finally |
| | | //æ 论å¦ä½ï¼ç¦»å¼ä¸´çåº |
| | | LeaveCriticalSection(log_ThreadLock); |
| | | end; |
| | | |
| | | end; |
| | | |
| | | procedure log4write(msg: AnsiString); |
| | | var |
| | | strline: AnsiString; |
| | | begin |
| | | |
| | | // æå¤æ¯ç§éå è½½ä¸æ¬¡é
ç½®æä»¶ |
| | | if (Now() - log_initime) > (1/(24*60*60)) then |
| | | log_init(); |
| | | |
| | | //æ¥å¿å¼å¤´å æ¶é´ |
| | | strline := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + ' ' + msg + #13#10; |
| | | |
| | | //åå°å½å¤©çæ¥å¿æä»¶ä¸ |
| | | log4me_addLog(log_filepath + FormatDateTime('yyyymmdd', Now) + '.log', PAnsiChar(strline)); |
| | | |
| | | end; |
| | | |
| | | |
| | | //-----ä¸é¢4个æ¯å¯¹å¤æ¹æ³------------------------- |
| | | |
| | | function log4filename():AnsiString; |
| | | begin |
| | | Result := log_filename; |
| | | end; |
| | | |
| | | procedure log4error(msg: AnsiString); |
| | | begin |
| | | if log_doerror then |
| | | log4write('[error]' + msg); |
| | | end; |
| | | |
| | | procedure log4info(msg: AnsiString); |
| | | begin |
| | | if log_doinfo then |
| | | log4write('[info ]' + msg); |
| | | end; |
| | | |
| | | procedure log4debug(msg: AnsiString); |
| | | begin |
| | | if log_dodebug then |
| | | log4write('[debug]' + msg); |
| | | end; |
| | | |
| | | procedure log4data(msg, sfile: AnsiString); //ååå§æ°æ®æ¥å¿ |
| | | begin |
| | | //æå¤æ¯ç§éå è½½ä¸æ¬¡é
ç½®æä»¶ |
| | | if (Now() - log_initime) > (1/(24*60*60)) then |
| | | log_init(); |
| | | |
| | | //夿00å符串ï¼å¢å å车æ¢è¡ |
| | | msg := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + ' [data]' + #13#10 + msg + #13#10#13#10; |
| | | |
| | | //åå°å½å¤©çæ¥å¿æä»¶ä¸ |
| | | log4me_addLog(sfile, PAnsiChar(msg)); |
| | | |
| | | end; |
| | | // ----------- ç±»åå§å -------------// |
| | | initialization |
| | | InitializeCriticalSection(log_ThreadLock); |
| | | log_init; |
| | | log4info('log4me: æ¥å¿ç³»ç»å¯å¨.'); |
| | | |
| | | // ----------- ç±»éæ¯ -------------// |
| | | finalization |
| | | |
| | | log4info('log4me: æ¥å¿ç³»ç»åæ¢.'); |
| | | DeleteCriticalSection(log_ThreadLock); |
| | | if Assigned(log_fileStream) then |
| | | log_fileStream.Free; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {项ç®åç§°ï¼è·åå¤CPUIDä¿¡æ¯ } |
| | | {åå
åç§°ï¼CpuidInfo.pas } |
| | | {çæ¬çæ¬¡ï¼1.0 } |
| | | {模ååç§°ï¼å
¨å±å
Œ
±å½æ°åº } |
| | | {åè½æè¿°ï¼è·åå¤CPUIDæ¯(æ¯æå¤æ ¸) } |
| | | {å»ºç«æ¥æï¼2023-09-19 } |
| | | {çæææï¼æè¯åº } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | unit CpuidInfo; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, SysUtils, StrUtils, Classes; |
| | | |
| | | function GetCPUID(): string; |
| | | function GetCnCPUID(): string; |
| | | procedure SetCPU(h: THandle;CpuNo: Integer); |
| | | function CmdGetCPUID(): string; |
| | | function CmdGetHDDID(): string; |
| | | |
| | | implementation |
| | | |
| | | //æ¹æ³ä¸ï¼è·åCPUID |
| | | function GetCPUID(): string; |
| | | const |
| | | CPUINFO = 'CPUå¶é å: %Såºåå·: %X'; |
| | | var |
| | | s: array[0.. 19] of Char; |
| | | MyCpuID: Integer; |
| | | begin |
| | | FillChar(s, 20, 0); |
| | | asm |
| | | push ebx |
| | | push ecx |
| | | push edx |
| | | mov eax, 0 |
| | | cpuid |
| | | mov dword ptr s[0],ebx |
| | | mov dword ptr s[4],edx |
| | | mov dword ptr s[8],ecx |
| | | mov eax, 1 |
| | | cpuid |
| | | mov MyCpuID, edx |
| | | pop edx |
| | | pop ecx |
| | | pop ebx |
| | | end; |
| | | Result := Format(CPUINFO, [s, MyCpuID]); |
| | | end; |
| | | |
| | | //æ¹æ³äºï¼è·åcpuçåºåå· |
| | | function GetCnCPUID(): string; |
| | | const |
| | | //CPUINFO= '%.8x-%.8x-%.8x-%.8x'; |
| | | CPUINFO= '%.8x%.8x'; |
| | | var |
| | | iEax: Integer; |
| | | iEbx: Integer; |
| | | iEcx: Integer; |
| | | iEdx: Integer; |
| | | begin |
| | | asm |
| | | push ebx |
| | | push ecx |
| | | push edx |
| | | mov eax, 1 |
| | | DW $A20F //cpuid |
| | | mov iEax, eax |
| | | mov iEbx, ebx |
| | | mov iEcx, ecx |
| | | mov iEdx, edx |
| | | pop edx |
| | | pop ecx |
| | | pop ebx |
| | | end; |
| | | //Result := Format(CPUINFO, [iEax, iEbx, iEcx, iEdx]); |
| | | Result := Format(CPUINFO, [iEdx,iEax]); |
| | | end; |
| | | |
| | | //æ ¹æ®Windowså¯ä»¥è®¾ç½®è¿ç¨å线ç¨çäº²ç¼æ§çç¹ç¹ï¼ |
| | | //使ç¨SetProcessAffinityMask彿°æ¥æ§å¶åªä¸ªcpu |
| | | //è¿è¡è·ååºåå·çè¿ç¨å æ¤ä¹å°±è·åäºæå®çcpu |
| | | //çåºåå·ã |
| | | //为äºååcpuå
¼å®¹,å»ºè®®æ»æ¯è·å第-个cpuçåºä¾å·ã |
| | | procedure SetCPU(h: THandle; CpuNo: Integer); |
| | | //CpuNo:å³å®äºè·å¾ç¬¬å 个cpuå
æ ¸ç第å 个åºåå· |
| | | var |
| | | ProcessAffinity: Cardinal; |
| | | _SystemAffinity: Cardinal; |
| | | begin |
| | | GetProcessAffinityMask(h, ProcessAffinity, _SystemAffinity) ; |
| | | ProcessAffinity := CpuNo; //this sets the process to only run on CPU 0 |
| | | //for CPU1 only use 2 and for CPUs1&2use3 |
| | | SetProcessAffinityMask(h, ProcessAffinity); |
| | | end; |
| | | |
| | | //CMDå½ä»¤è·åCPUIDçæ¹æ³ |
| | | //wmic cpu get processorid |
| | | function CmdGetCPUID(): string; |
| | | var |
| | | files : TStringList; |
| | | begin |
| | | //CMDå½ä»¤è·åmacä¿¡æ¯ |
| | | winexec('cmd /c wmic cpu get processorid >d:\cpuid.txt', SW_HIDE); |
| | | files:= TStringList.Create; |
| | | sleep(500); |
| | | try |
| | | try |
| | | files.LoadFromFile('d:\cpuid.txt'); |
| | | Result := files.Strings[1]; |
| | | except |
| | | Result := '0000000000000000'; |
| | | end; |
| | | finally |
| | | FreeAndNil(files); |
| | | winexec('cmd /c del d:\cpuid.txt', SW_HIDE); |
| | | end; |
| | | end; |
| | | |
| | | //CMDå½ä»¤è·åHDDIDçæ¹æ³ |
| | | //wmic diskdrive get serialnumber |
| | | function CmdGetHDDID(): string; |
| | | var |
| | | sl : TStringList; |
| | | begin |
| | | //CMDå½ä»¤è·åmacä¿¡æ¯ |
| | | winexec('cmd /c wmic diskdrive get serialnumber >d:\a.txt', SW_HIDE); |
| | | sl:= TStringList.Create; |
| | | sleep(500); |
| | | try |
| | | try |
| | | sl.LoadFromFile('d:\a.txt'); |
| | | Result := sl.Strings[0]; |
| | | except |
| | | Result := '0000000000000000'; |
| | | end; |
| | | finally |
| | | FreeAndNil(sl); |
| | | winexec('cmd /c del d:\a.txt', SW_HIDE); |
| | | end; |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {åå
åç§°ï¼Global.pas } |
| | | {模ååç§°ï¼å
¨å±å
Œ
񆂂 } |
| | | {模å说æï¼å
æ¬å
¨å±åéãå
¨å±å®å®ä¹ãåæ°æ°æ®ç»æç } |
| | | {å»ºç«æ¥æï¼2009-12-20 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2025-07-03 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | //2024-10-14 å¢å gmmdataæ°æ®åºï¼ç¨æ¥åå¨èªå¨æ£æµåæå¨æ£æµçæææ°æ®ã |
| | | //2025-07-03 å¢å 1024X768ã1024X600å辨çèªéåºåè½ã |
| | | |
| | | unit Global; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows; |
| | | |
| | | {å®ä¹å
¨å±å¸¸é} |
| | | const |
| | | NOTE = 'è¦åï¼æ¬è®¡ç®æºç¨åºåè使æ³åè®¡ç®æºè½¯ä»¶ä¿æ¤æ¡ä¾ä¿æ¤ï¼æªç»æææ
' |
| | | +'èªå¤å¶æä¼ ææ¬ç¨åºçé¨åæå
¨é¨ï¼å¯è½åå°ä¸¥åçæ°äºååäºå¶è£ï¼å¹¶' |
| | | +'å°å¨æ³å¾è®¸å¯çèå´å
å尿大å¯è½çèµ·è¯ã'; |
| | | |
| | | CONFIG_DIR = 'config\'; {é
ç½®æä»¶å¤¹} |
| | | DATA_DIR = 'data\'; {æ°æ®æä»¶å¤¹} |
| | | LOG_DIR = 'log\'; {æ¥å¿æä»¶å¤¹} |
| | | LOG_FILE = 'log4me.ini'; {æ¥å¿é
ç½®æä»¶} |
| | | LICENSE_FILE = 'License.lic'; {æææä»¶} |
| | | sConfig = 'Config.db'; {é
ç½®æä»¶} |
| | | |
| | | //configé
ç½®å
¨å±åé |
| | | t_Config = 'config'; {é
ç½®æ°æ®åº-仪å¨åæ°} |
| | | t_Conn = 'conn'; {é
ç½®æ°æ®åº-éè®¯åæ°} |
| | | t_Grain = 'grain'; {é
ç½®æ°æ®åº-ç²®ç§åæ°} |
| | | //t_Test = 'test'; {æ£æµæ°æ®åº-æ£æµç»æ} |
| | | t_Data = 'data'; {æ£æµæ°æ®åº-èªå¨åæå¨æ£æµç»æ} |
| | | t_Weight = 'weight'; {ééæ ¡åæ°æ®åº} |
| | | t_Manager = 'manager'; {ç»å½å£ä»¤æ°æ®åº} |
| | | |
| | | //æä¸¾è¿è¡æ¨¡å¼ |
| | | type RunMode = (rmAuto, rmManual); //èªå¨æ¨¡å¼=0ï¼æå¨æ¨¡å¼=1 |
| | | |
| | | //æ¦æ¡ç³»ç»é
ç½®åæ° |
| | | type |
| | | TPlcRec = Record |
| | | ip : string; //IPå°å |
| | | port : integer; //ç½ç»ç«¯å£ |
| | | heart_ip : string; //å¿è·³ip |
| | | heart_port : Integer; //å¿è·³ç«¯å£ |
| | | end; |
| | | |
| | | //WRé
ç½®åæ° |
| | | type |
| | | TWrRec = Record |
| | | SerialPort : string; |
| | | baud : integer; |
| | | parity : char; |
| | | data_bit : integer; |
| | | stop_bit : integer; |
| | | end; |
| | | |
| | | //configåæ° |
| | | type |
| | | TConfigRec = Record |
| | | Volume : double; //ä½ç§¯ |
| | | Tare : double; //ç®é |
| | | |
| | | Freq : double; //é¢çç |
| | | Decay : double; //è¡°åç |
| | | Ask : integer; //ASKéæ© |
| | | |
| | | StartFreq : double; //èµ·å§é¢ç |
| | | StopFreq : double; //ç»æ¢é¢ç |
| | | Step : Integer; //æ¥é¿ |
| | | |
| | | delay : Integer; //弿ºå»¶è¿æ¶é´s |
| | | password : string; //æå¨æ¨¡å¼ç»å½å£ä»¤ |
| | | end; |
| | | |
| | | //ç²®ç§ä¿¡æ¯åæ° |
| | | type |
| | | TGrainRec = Record |
| | | Code : Integer; //ä¸çº§ä»£ç |
| | | No : string; //ç¼ç |
| | | Name : string; //åç§° |
| | | Coef : array [0..4] of string; //æ ¡åç³»æ° |
| | | Intercept : string; //æªè· |
| | | flag : boolean; //æ¯å¦å¤§ç±» |
| | | end; |
| | | |
| | | //ééæ°æ®æ ¼å¼ |
| | | type |
| | | TDacRec = Record |
| | | Voltage : double; //çµå |
| | | Weight : double; //éé |
| | | Temp : double; //温度 |
| | | Humid : double; //湿度 |
| | | end; |
| | | |
| | | //ééæ ¡åæ ¼å¼ |
| | | type |
| | | TWeighgRec = Record |
| | | //ç³»æ° |
| | | k : double; //y=kx+b |
| | | b : double; |
| | | tare : double; //ȥƤ |
| | | range : double; //±误差èå´ |
| | | |
| | | //У׼ |
| | | test1 : double; |
| | | test2 : double; |
| | | test3 : double; |
| | | std1 : double; |
| | | std2 : double; |
| | | std3 : double; |
| | | end; |
| | | |
| | | //æµè¯æ ·æ¬åå¨ç»æ |
| | | type |
| | | TSampleRec = Record |
| | | flag : boolean; //èªå¨ä¿åæ å¿ |
| | | info : string; //æ ·æ¬ä¿¡æ¯ |
| | | prefix : string; //æä»¶ååç¼ |
| | | dir : string; //åå¨ç®å½ |
| | | end; |
| | | |
| | | {å®ä¹å
¨å±åé} |
| | | //------------------------------------------------------------------------------ |
| | | var |
| | | CompanyName:String; {å
¬å¸åç§°} |
| | | FileDescription:String; {说æ} |
| | | FileVersion:String; {æä»¶çæ¬} |
| | | InternalName:String; {å
é¨åç§°} |
| | | LegalCopyright:String; {çæ} |
| | | LegalTrademarks:String; {åæ³åæ } |
| | | OriginalFilename:String; {æºæä»¶å} |
| | | ProductName:String; {产ååç§°} |
| | | ProductVersion:String; {产åçæ¬} |
| | | Comments:String; {夿³¨} |
| | | //çæ¬ä¿¡æ¯ä¸ç¨æ°ç» |
| | | glVerInfo:array[1..9] of string=('ProductName', //产ååç§° |
| | | 'ProductVersion', //产åçæ¬ |
| | | 'FileDescription', //æä»¶è¯´æ |
| | | 'LegalCopyright', //çæ |
| | | 'FileVersion', //æä»¶çæ¬ |
| | | 'CompanyName', //å
¬å¸åç§° ï¼æ ï¼ |
| | | 'LegalTradeMarks', //åæ³åæ |
| | | 'InternalName', //å
é¨åç§°ï¼æ ï¼ |
| | | 'OriginalFileName');//æºæä»¶åï¼æ ï¼ |
| | | |
| | | //çæ¬ä¿¡æ¯ |
| | | glProductName, glProductVersion, glFileDescription, glLegalCopyright, glInternalName, |
| | | glFileVersion, glCompanyName, glLegalTrademarks, glOriginalFilename:string; |
| | | |
| | | //ç颿¾ç¤ºçæ¬åçæ |
| | | glVersion, glCopyright, glAppPath : String; |
| | | |
| | | //仿ææä»¶è§£ææºå¨ç ï¼æææéï¼æ³¨åç±»åï¼å¯é¥ï¼å¯çº§çä¿¡æ¯ |
| | | sDESMachineCode,sDESDate,sDESType,sDESKey,sDESLevel:string; |
| | | //æ³¨åæ¯å¦æåæ å¿ |
| | | glRegSuccess : Boolean; |
| | | |
| | | //å
¨å±xmlåé |
| | | cfg : TConfigRec; |
| | | |
| | | //å
¨å±æ°æ®åºå |
| | | glConfig_db, glConn_db, glGrain_db, glData_db, glWeight_db, glManager_db : String; |
| | | |
| | | //å
¨å±åé |
| | | glCalcOutput : String; //计ç®å¨è¿åå¼ |
| | | glCurrFocus : Integer; //å½åè¾å
¥çç¦ç¹ç¼å· |
| | | glStartTest : Int64; //å¼å§æ£æµçæ¶é´--æ¯«ç§ |
| | | glAutoRun : Boolean; //å
¨å±èªå¯å¨æ å¿ |
| | | glTime1, glTime2 : Integer; //ä¸åç²®ç§æ¶é´ï¼æ£æµæ¶é´ï¼å»¶æ¶ï¼ |
| | | |
| | | glMsgPos : TPoint; //é¼ æ å½åç»å¯¹åæ |
| | | |
| | | PlcConn : TPlcRec; //æ¦æ¡ç³»ç»éè®¯åæ° |
| | | WrConn : TWrRec; //æ°´å仪éè®¯åæ° |
| | | SysConfig : TConfigRec; //ç³»ç»åæ° |
| | | Grain : TGrainRec; //ç²®ç§åæ°ï¼å«æ ¡åç³»æ°ï¼ |
| | | Datas : TDacRec; //ééæ°æ® |
| | | Wg : TWeighgRec; //ééæ ¡ååæ° |
| | | |
| | | //----å
¨å±ä¸å¡åé------------- |
| | | glCoef : array [0..4] of Double; |
| | | |
| | | //线ç¨å¥æ |
| | | m_TestThread, m_ManTestThread, m_VerifyThread : THandle; |
| | | m_GrainThread, m_InterceptThread, m_ResetThread : THandle; |
| | | |
| | | //éæ©ç²®ç§çº¿ç¨æ å¿ï¼1-æå¨æ£æµï¼2-æå¨æ ¡å |
| | | s_Grain : Integer; |
| | | |
| | | //å½åéä¸çç²®ç§Index |
| | | glCurrIndex : Integer; |
| | | |
| | | //设å¤å¥æ |
| | | hPlcDev, hWrDev : Pointer; |
| | | glConn_err : Integer; //è¿æ¥è®¾å¤é误ç |
| | | glBtnTag, glBtnTag1 : Integer; //æé®index |
| | | glWg_k, glWg_b : double; //å
¨å±ä¸´æ¶ééç³»æ° |
| | | |
| | | //è°è¯å¼å
³ |
| | | glIsDebug : Boolean; //ç³»ç»è°è¯å¼å
³ |
| | | |
| | | //æ°æ®åå¨ |
| | | smp : TSampleRec; //æ°æ®æ ·æ¬ç»æ |
| | | |
| | | //æåç»ä»¶å
¨å±åé |
| | | glInkOutput : String; |
| | | |
| | | //è¾å
¥å¯¹è¯æ¡å
¨å±åé |
| | | glInput : String; //ç²®ç§åç§° |
| | | //glInputCod : Integer; //大类cod |
| | | //glInputCodnam : String; //大类nam |
| | | GrainType_rec : TGrainRec;//ç²®ç§å¤§ç±»rec |
| | | |
| | | //ä¾çº¿ç¨åè°å½æ°ä½¿ç¨ |
| | | gl_t_mos : Double; //计ç®åºæ¥ç嫿°´ç |
| | | gl_t_cod, gl_t_val, gl_t_err : Integer; //ç²®ç§ä»£ç |
| | | gl_log_old, gl_log_new : String; //鲿¢æ¥å¿éå¤è¾åº |
| | | |
| | | //å辨çç±»å |
| | | gl_display_type : Integer; //0-æå¤§å辨çï¼1-1024X768ï¼2-1024X600ï¼3-å
¶ä» |
| | | |
| | | implementation |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {åå
åç§°ï¼Global.pas } |
| | | {模ååç§°ï¼å
¨å±å
Œ
񆂂 } |
| | | {模å说æï¼å
æ¬å
¨å±åéãå
¨å±å®å®ä¹ãåæ°æ°æ®ç»æç } |
| | | {å»ºç«æ¥æï¼2009-12-20 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2024-10-14 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | //2024-10-14 å¢å gmmdataæ°æ®åºï¼ç¨æ¥åå¨èªå¨æ£æµåæå¨æ£æµçæææ°æ®ã |
| | | |
| | | unit Global; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows; |
| | | |
| | | {å®ä¹å
¨å±å¸¸é} |
| | | const |
| | | NOTE = 'è¦åï¼æ¬è®¡ç®æºç¨åºåè使æ³åè®¡ç®æºè½¯ä»¶ä¿æ¤æ¡ä¾ä¿æ¤ï¼æªç»æææ
' |
| | | +'èªå¤å¶æä¼ ææ¬ç¨åºçé¨åæå
¨é¨ï¼å¯è½åå°ä¸¥åçæ°äºååäºå¶è£ï¼å¹¶' |
| | | +'å°å¨æ³å¾è®¸å¯çèå´å
å尿大å¯è½çèµ·è¯ã'; |
| | | |
| | | CONFIG_DIR = 'config\'; {é
ç½®æä»¶å¤¹} |
| | | DATA_DIR = 'data\'; {æ°æ®æä»¶å¤¹} |
| | | LOG_DIR = 'log\'; {æ¥å¿æä»¶å¤¹} |
| | | LOG_FILE = 'log4me.ini'; {æ¥å¿é
ç½®æä»¶} |
| | | LICENSE_FILE = 'License.lic'; {æææä»¶} |
| | | sConfig = 'Config.db'; {é
ç½®æä»¶} |
| | | |
| | | //configé
ç½®å
¨å±åé |
| | | t_Config = 'config'; {é
ç½®æ°æ®åº-仪å¨åæ°} |
| | | t_Conn = 'conn'; {é
ç½®æ°æ®åº-éè®¯åæ°} |
| | | t_Grain = 'grain'; {é
ç½®æ°æ®åº-ç²®ç§åæ°} |
| | | //t_Test = 'test'; {æ£æµæ°æ®åº-æ£æµç»æ} |
| | | t_Data = 'data'; {æ£æµæ°æ®åº-èªå¨åæå¨æ£æµç»æ} |
| | | t_Weight = 'weight'; {ééæ ¡åæ°æ®åº} |
| | | t_Manager = 'manager'; {ç»å½å£ä»¤æ°æ®åº} |
| | | |
| | | //æä¸¾è¿è¡æ¨¡å¼ |
| | | type RunMode = (rmAuto, rmManual); //èªå¨æ¨¡å¼=0ï¼æå¨æ¨¡å¼=1 |
| | | |
| | | //PLCé
ç½®åæ° |
| | | type |
| | | TPlcRec = Record |
| | | ip : string; //IPå°å |
| | | port : integer; //ç½ç»ç«¯å£ |
| | | end; |
| | | |
| | | //WRé
ç½®åæ° |
| | | type |
| | | TWrRec = Record |
| | | SerialPort : string; |
| | | baud : integer; |
| | | parity : char; |
| | | data_bit : integer; |
| | | stop_bit : integer; |
| | | end; |
| | | |
| | | //configåæ° |
| | | type |
| | | TConfigRec = Record |
| | | Volume : double; //ä½ç§¯ |
| | | Tare : double; //ç®é |
| | | |
| | | Freq : double; //é¢çç |
| | | Decay : double; //è¡°åç |
| | | Ask : integer; //ASKéæ© |
| | | |
| | | StartFreq : double; //èµ·å§é¢ç |
| | | StopFreq : double; //ç»æ¢é¢ç |
| | | Step : Integer; //æ¥é¿ |
| | | |
| | | delay : Integer; //弿ºå»¶è¿æ¶é´s |
| | | password : string; //æå¨æ¨¡å¼ç»å½å£ä»¤ |
| | | end; |
| | | |
| | | //ç²®ç§ä¿¡æ¯åæ° |
| | | type |
| | | TGrainRec = Record |
| | | Code : Integer; //代ç |
| | | Name : string; //åç§° |
| | | Coef : array [0..4] of string; //æ ¡åç³»æ° |
| | | Intercept : string; //æªè· |
| | | end; |
| | | |
| | | //ééæ°æ®æ ¼å¼ |
| | | type |
| | | TDacRec = Record |
| | | Voltage : double; //çµå |
| | | Weight : double; //éé |
| | | Temp : double; //温度 |
| | | Humid : double; //湿度 |
| | | end; |
| | | |
| | | //ééæ ¡åæ ¼å¼ |
| | | type |
| | | TWeighgRec = Record |
| | | //ç³»æ° |
| | | k : double; //y=kx+b |
| | | b : double; |
| | | tare : double; //ȥƤ |
| | | range : double; //±误差èå´ |
| | | |
| | | //У׼ |
| | | test1 : double; |
| | | test2 : double; |
| | | test3 : double; |
| | | std1 : double; |
| | | std2 : double; |
| | | std3 : double; |
| | | end; |
| | | |
| | | //æµè¯æ ·æ¬åå¨ç»æ |
| | | type |
| | | TSampleRec = Record |
| | | flag : boolean; //èªå¨ä¿åæ å¿ |
| | | info : string; //æ ·æ¬ä¿¡æ¯ |
| | | prefix : string; //æä»¶ååç¼ |
| | | dir : string; //åå¨ç®å½ |
| | | end; |
| | | |
| | | {å®ä¹å
¨å±åé} |
| | | //------------------------------------------------------------------------------ |
| | | var |
| | | CompanyName:String; {å
¬å¸åç§°} |
| | | FileDescription:String; {说æ} |
| | | FileVersion:String; {æä»¶çæ¬} |
| | | InternalName:String; {å
é¨åç§°} |
| | | LegalCopyright:String; {çæ} |
| | | LegalTrademarks:String; {åæ³åæ } |
| | | OriginalFilename:String; {æºæä»¶å} |
| | | ProductName:String; {产ååç§°} |
| | | ProductVersion:String; {产åçæ¬} |
| | | Comments:String; {夿³¨} |
| | | //çæ¬ä¿¡æ¯ä¸ç¨æ°ç» |
| | | glVerInfo:array[1..9] of string=('ProductName', //产ååç§° |
| | | 'ProductVersion', //产åçæ¬ |
| | | 'FileDescription', //æä»¶è¯´æ |
| | | 'LegalCopyright', //çæ |
| | | 'FileVersion', //æä»¶çæ¬ |
| | | 'CompanyName', //å
¬å¸åç§° ï¼æ ï¼ |
| | | 'LegalTradeMarks', //åæ³åæ |
| | | 'InternalName', //å
é¨åç§°ï¼æ ï¼ |
| | | 'OriginalFileName');//æºæä»¶åï¼æ ï¼ |
| | | |
| | | //çæ¬ä¿¡æ¯ |
| | | glProductName, glProductVersion, glFileDescription, glLegalCopyright, glInternalName, |
| | | glFileVersion, glCompanyName, glLegalTrademarks, glOriginalFilename:string; |
| | | |
| | | //ç颿¾ç¤ºçæ¬åçæ |
| | | glVersion, glCopyright, glAppPath : String; |
| | | |
| | | //仿ææä»¶è§£ææºå¨ç ï¼æææéï¼æ³¨åç±»åï¼å¯é¥ï¼å¯çº§çä¿¡æ¯ |
| | | sDESMachineCode,sDESDate,sDESType,sDESKey,sDESLevel:string; |
| | | //æ³¨åæ¯å¦æåæ å¿ |
| | | glRegSuccess : Boolean; |
| | | |
| | | //å
¨å±xmlåé |
| | | cfg : TConfigRec; |
| | | |
| | | //å
¨å±æ°æ®åºå |
| | | glConfig_db, glConn_db, glGrain_db, glData_db, glWeight_db, glManager_db : String; |
| | | |
| | | //å
¨å±åé |
| | | glCalcOutput : String; //计ç®å¨è¿åå¼ |
| | | glCurrFocus : Integer; //å½åè¾å
¥çç¦ç¹ç¼å· |
| | | glStartTest : Int64; //å¼å§æ£æµçæ¶é´--æ¯«ç§ |
| | | glAutoRun : Boolean; //å
¨å±èªå¯å¨æ å¿ |
| | | glTime1, glTime2 : Integer; //ä¸åç²®ç§æ¶é´ï¼æ£æµæ¶é´ï¼å»¶æ¶ï¼ |
| | | |
| | | glMsgPos : TPoint; //é¼ æ å½åç»å¯¹åæ |
| | | |
| | | PlcConn : TPlcRec; //plcéè®¯åæ° |
| | | WrConn : TWrRec; //æ°´å仪éè®¯åæ° |
| | | SysConfig : TConfigRec; //ç³»ç»åæ° |
| | | Grain : TGrainRec; //ç²®ç§åæ°ï¼å«æ ¡åç³»æ°ï¼ |
| | | Datas : TDacRec; //ééæ°æ® |
| | | Wg : TWeighgRec; //ééæ ¡ååæ° |
| | | |
| | | //----å
¨å±ä¸å¡åé------------- |
| | | glCoef : array [0..4] of Double; |
| | | |
| | | //线ç¨å¥æ |
| | | m_TestThread, m_ManTestThread, m_VerifyThread : THandle; |
| | | m_GrainThread, m_InterceptThread, m_ResetThread : THandle; |
| | | |
| | | //éæ©ç²®ç§çº¿ç¨æ å¿ï¼1-æå¨æ£æµï¼2-æå¨æ ¡å |
| | | s_Grain : Integer; |
| | | |
| | | //å½åéä¸çç²®ç§Index |
| | | glCurrIndex : Integer; |
| | | |
| | | //设å¤å¥æ |
| | | hPlcDev, hWrDev : Pointer; |
| | | glConn_err : Integer; //è¿æ¥è®¾å¤é误ç |
| | | glBtnTag, glBtnTag1 : Integer; //æé®index |
| | | glWg_k, glWg_b : double; //å
¨å±ä¸´æ¶ééç³»æ° |
| | | |
| | | //è°è¯å¼å
³ |
| | | glIsDebug : Boolean; //ç³»ç»è°è¯å¼å
³ |
| | | |
| | | //æ°æ®åå¨ |
| | | smp : TSampleRec; //æ°æ®æ ·æ¬ç»æ |
| | | |
| | | implementation |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {项ç®åç§°ï¼é¡¹ç®å
¨å±å¸¸é } |
| | | {åå
åç§°ï¼MsgVar.pas } |
| | | {çæ¬çæ¬¡ï¼2.1 } |
| | | {模ååç§°ï¼æ¶æ¯åéåº } |
| | | {åè½æè¿°ï¼éä¸ç®¡çå
¨å±ä¸ææ¶æ¯å符串 } |
| | | {å»ºç«æ¥æï¼2017-09-15 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2023-01-27 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | unit MsgVar; |
| | | |
| | | interface |
| | | |
| | | const |
| | | //----Messageå符串----------------------------------------------------------- |
| | | MSG_INFO = 'æç¤º'; |
| | | MSG_WARNING = 'è¦å'; |
| | | MSG_ERROR = 'é误'; |
| | | |
| | | //----Loadé误å符串---------------------------------------------------------- |
| | | |
| | | |
| | | //----uMain------------------------------------------------------------------- |
| | | MSG_MN_SYSINFO = 'ç³»ç»ä¿¡æ¯: 产ååç§°[%s], çæ¬[%s %s]'; |
| | | |
| | | |
| | | //----åè°å½æ°---------------------------------------------------------------- |
| | | |
| | | |
| | | //----æä»¤-------------------------------------------------------------------- |
| | | |
| | | |
| | | //----çé¢è®¾ç½®---------------------------------------------------------------- |
| | | |
| | | |
| | | //----åæåè½---------------------------------------------------------------- |
| | | |
| | | implementation |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {项ç®åç§°ï¼å
Œ
±é¡¹ç® } |
| | | {åå
åç§°ï¼MultInst.pas } |
| | | {çæ¬çæ¬¡ï¼1.5 } |
| | | {模ååç§°ï¼ä¸ç¨åè½åº } |
| | | {åè½æè¿°ï¼è§£å³åºç¨ç¨åºå¤å®ä¾é®é¢ } |
| | | {å»ºç«æ¥æï¼2023-10-24 } |
| | | {çæææï¼æè¯åº } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | // 工使µç¨ |
| | | // ç¨åºè¿è¡å
å代åæåæææ¶æ¯å¤çè¿ç¨,ç¶å广æä¸ä¸ªæ¶æ¯. |
| | | // 妿æå
¶å®å®ä¾è¿è¡,æ¶å°å¹¿ææ¶æ¯ä¼ååæ¶æ¯ç»åéç¨åº,å¹¶ä¼ åå®èªå·±ç奿 |
| | | // åéç¨åºæ¥æ¶å°æ¤æ¶æ¯,æ¿æ´»æ¶å°æ¶æ¯çç¨åº,ç¶åå
³éèªå·± |
| | | |
| | | unit MultInst; |
| | | interface |
| | | |
| | | uses |
| | | Windows ,Messages, SysUtils, Classes, Forms; |
| | | |
| | | implementation |
| | | |
| | | const |
| | | STR_UNIQUE = '{2BE6D96E-827F-4BF9-B33E-8740414CDEEE}'; |
| | | MI_ACTIVEAPP =1; {æ¿æ´»åºç¨ç¨åº} |
| | | MI_GETHANDLE =2; {åå¾å¥æ} |
| | | |
| | | var |
| | | iMessageID : Integer; |
| | | OldWProc : TFNWndProc; |
| | | MutHandle : THandle; |
| | | BSMRecipients : DWORD; |
| | | |
| | | function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam:Longint): |
| | | Longint; stdcall; |
| | | begin |
| | | Result := 0; |
| | | if Msg = iMessageID then |
| | | begin |
| | | case wParam of |
| | | MI_ACTIVEAPP: {æ¿æ´»åºç¨ç¨åº} |
| | | if lParam<>0 then |
| | | begin |
| | | {æ¶å°æ¶æ¯çæ¿æ´»åä¸ä¸ªå®ä¾} |
| | | {å¨åä¸ä¸ªè¿ç¨ä¸SetForegroundWindowå¹¶ä¸è½æçªä½æå°æå} |
| | | if IsIconic(lParam) then |
| | | OpenIcon(lParam) |
| | | else |
| | | SetForegroundWindow(lParam); |
| | | Application.Terminate; {ç»æ¢æ¬å®ä¾} |
| | | end; |
| | | MI_GETHANDLE: {åå¾ç¨åºå¥æ} |
| | | begin |
| | | PostMessage(HWND(lParam), iMessageID, MI_ACTIVEAPP, |
| | | Application.Handle); |
| | | end; |
| | | end; |
| | | end |
| | | else |
| | | Result :=CallWindowProc(OldWProc, Handle, Msg, wParam, lParam); |
| | | end; |
| | | |
| | | procedure InitInstance; |
| | | begin |
| | | {å代åºç¨ç¨åºçæ¶æ¯å¤ç} |
| | | OldWProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC, |
| | | Longint(@NewWndProc))); |
| | | |
| | | {æå¼äºæ¥å¯¹è±¡} |
| | | MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False,STR_UNIQUE); |
| | | if MutHandle = 0 then |
| | | begin |
| | | {建ç«äºæ¥å¯¹è±¡} |
| | | MutHandle := CreateMutex(nil,False, STR_UNIQUE); |
| | | end |
| | | else begin |
| | | Application.ShowMainForm := False; |
| | | {å·²ç»æç¨åºå®ä¾,å¹¿ææ¶æ¯åå¾å®ä¾å¥æ} |
| | | BSMRecipients :=BSM_APPLICATIONS; |
| | | BroadCastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE, |
| | | @BSMRecipients, iMessageID, MI_GETHANDLE,Application.Handle); |
| | | end; |
| | | end; |
| | | |
| | | initialization |
| | | {æ³¨åæ¶æ¯} |
| | | iMessageID :=RegisterWindowMessage(STR_UNIQUE); |
| | | InitInstance; |
| | | |
| | | finalization |
| | | {è¿åæ¶æ¯å¤çè¿ç¨} |
| | | if OldWProc <> Nil then |
| | | SetWindowLong(Application.Handle, GWL_WNDPROC,LongInt(OldWProc)); |
| | | |
| | | {å
³éäºæ¥å¯¹è±¡} |
| | | if MutHandle <> 0then CloseHandle(MutHandle); |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {项ç®åç§°ï¼å
Œ
±é¡¹ç® } |
| | | {åå
åç§°ï¼PubUtils.pas } |
| | | {çæ¬çæ¬¡ï¼3.3 } |
| | | {模ååç§°ï¼å
¨å±å
Œ
±å½æ°åº } |
| | | {åè½æè¿°ï¼ç»´æ¤éç¨å
Œ
±å½æ°è°ç¨ } |
| | | {å»ºç«æ¥æï¼2011-01-01 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2025-02-12 } |
| | | {çæææï¼æè¯åº } |
| | | {------------------------------------------------------------------------------} |
| | | |
| | | //2011-10-26 æ°å¢ComboBox_XPMan_KeyPress彿°,è§£å³ComboBoxæ§ä»¶è¾å
¥ä¹±ç é®é¢, |
| | | // å¨KeyPressäºä»¶ä¸æ§è¡ComboBox_XPMan_KeyPresså³å¯è§£å³ã |
| | | //2015-12-01 æ°å¢Base16EncodeãBase16DecodeãDelayãGetVersionInfoçåè½å½æ°ã |
| | | //2015-12-24 æ°å¢Excelæä½å½æ°ï¼ä½¿ç¨ADOæ¹å¼è¿æ¥Excelæä»¶è¯»åã |
| | | //2017-10-15 æ°å¢å±å¹æªå¾ä¿å为pngæä»¶ï¼ä¼ å
¥æä»¶è·¯å¾ï¼éé»ä¿åè³æ¬å°ï¼ä½¿ç¨Tpngimageç»ä»¶. |
| | | //2018-04-01 æ°å¢æ ¹æ®ç¨åºåç§°è·åå¥æçæ¹æ³ï¼æ¯æè·¨è¿ç¨åéæ¶æ¯ã |
| | | //2018-10-20 为æ°éå¼å平尿°å¢Dllè°ç¨å½æ°ã |
| | | //2018-10-30 ä¼åå
Œ
±å½æ°åºï¼å»æé¨åéå¤å½æ°ã |
| | | //2019-01-17 åºäºDateUtilsåºï¼æ©å
DateTimeToUnix()彿°ï¼å8å°æ¶åææ ¼æå¨æ²»æ¶é´ |
| | | //2022-09-20 å¢å ç§å¦è®¡æ°æ³åæµ®ç¹åæ°åäºè½¬ï¼è¾å
¥è¾åºå使ç¨stringç±»åã |
| | | //2023-11-01 å¢å æ£æ¥ä¸²å£æ¯å¦åå¨ç彿°ã |
| | | //2025-02-12 å¢å æ´å½¢è½¬ä¸ºå¸å°å¼ç彿°ã |
| | | |
| | | unit PubUtils; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, Masks, |
| | | Math, ShellApi, ShlObj, ComObj, ActiveX, Registry, Dialogs, StrUtils, Printers, |
| | | Winsock, TLHelp32, PsAPI, DateUtils, Global; |
| | | |
| | | // å符串ç¸å
³ |
| | | function IsInt(const S: string): Boolean; |
| | | function IsFloat(const S: string): Boolean; |
| | | function IsEmail(const S: string): Boolean; |
| | | function PathWithSlash(const Path: string): string; |
| | | function PathWithoutSlash(const Path: string): string; |
| | | function CombineFileName(const Path, FileName: string): string; |
| | | function FileExtWithDot(const FileExt: string): string; |
| | | function FileExtWithoutDot(const FileExt: string): string; |
| | | function AddNumberComma(Number: Int64): string; |
| | | function ExtractFileMainName(const FileName: string): string; |
| | | function ExtractUrlFilePath(const Url: string): string; |
| | | function ExtractUrlFileName(const Url: string): string; |
| | | function ValidateFileName(const FileName: string): string; |
| | | function GetSizeString(Bytes: Int64; const Postfix: string = ' KB'): string; |
| | | function GetPercentString(Position, Max: Int64; const Postfix: string = ' %'): string; |
| | | function RestrictStrWidth(const S: WideString; Canvas: TCanvas; Width: Integer; const Suffix: string = '...'): WideString; |
| | | function RestrictFileNameWidth(const FileName: string; MaxBytes: Integer): string; |
| | | function LikeString(Value, Pattern: WideString; CaseInsensitive: Boolean): Boolean; |
| | | procedure SplitString(S: string; Delimiter: Char; List: TStrings); |
| | | function StartWith(const Source: string; const Left: string): Boolean; |
| | | function EndWith(const Source: string; const Right: string): Boolean; |
| | | function MyPos(c: Char; const str: string): Integer; |
| | | |
| | | // ç³»ç»ç¸å
³ |
| | | function GetComputerName: string; |
| | | function GetWinUserName: string; |
| | | function GetWindowsDir: string; |
| | | function GetWinTempDir: string; |
| | | function GetWinTempFile(const PrefixStr: string = ''): string; |
| | | function GetFullFileName(const FileName: string): string; |
| | | function GetShortFileName(const FileName: string): string; |
| | | function GetLongFileName(const FileName: string): string; |
| | | function GetSpecialFolder(FolderID: Integer): string; |
| | | function GetQuickLaunchPath: string; |
| | | function GetSystemDrivePath: string; |
| | | function GetEnvVar(const EnvVar: string): string; |
| | | function GetWorkAreaRect: TRect; |
| | | function SelectDir(ParentHWnd: HWND; const Caption: string; const Root: WideString; var Path: string): Boolean; |
| | | function ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): HWND; |
| | | function OpenURL(const URL: string): Boolean; |
| | | function OpenEmail(const Email: string): Boolean; |
| | | procedure SetStayOnTop(Form : TCustomForm; StayOnTop: Boolean); |
| | | procedure HideAppFromTaskBar; |
| | | function CheckLangChinesePR: Boolean; |
| | | function ShutdownWindows: Boolean; |
| | | function RebootWindows: Boolean; |
| | | function GetMouseCursorPos: TPoint; |
| | | function CreateShortCut(const OriginalFileName, ShortcutFileName, Arguments, |
| | | WorkingDir, Description: string; ShowCmd: Integer; IsFolderShortcut: Boolean): Boolean; |
| | | |
| | | // æä»¶ç¸å
³ |
| | | function GetFileSize(const FileName: string): Int64; |
| | | function GetFolderSize(FolderName: string): Int64; |
| | | function GetFileDate(const FileName: string): TDateTime; |
| | | function SetFileDate(const FileName: string; CreationTime, LastWriteTime, LastAccessTime: TFileTime): Boolean; |
| | | function CopyFileToFolder(FileName, BackupFolder: string): Boolean; |
| | | function AutoRenameFileName(const FullName: string): string; |
| | | function GetTempFileAtPath(const Path: string; const PrefixStr: string = ''): string; |
| | | function IsFileReadOnly(const FileName: string): Boolean; |
| | | function DeleteFileToRecycle(const FileName: string): Boolean; |
| | | procedure DeleteFileEx(FileName:string); |
| | | function DeleteDirectory(const Dir: string): Boolean; |
| | | function IsEmptyDir(sDir: String): Boolean; |
| | | function ReadFile(const sFile:String):String; //è¯»ææ¬æä»¶,liliangting 2016-01-18 |
| | | function ReadLogFile(const sFile:String):String; //è¯»ææ¬æä»¶,liliangting 2016-01-18 |
| | | procedure WriteLogFile(const sFile,sMsg: string); //åææ¬æä»¶,liliangting 2016-01-18 |
| | | |
| | | // 注å表ç¸å
³, å¢å 注å表读å彿° |
| | | function SetAutoRunOnStartup(AutoRun, CurrentUser: Boolean; AppTitle: string = ''; AppName: string = ''; AppPara: string = ''): Boolean; |
| | | procedure AutoRun(Flag: Boolean; title:String); |
| | | function ReadReg(const Name: String; CurrentUser: Boolean=true):String; |
| | | function WriteReg(const Name,Value: String; CurrentUser: Boolean=true):Boolean; |
| | | function AssociateFile(const FileExt, FileKey, SoftName, FileDesc: string; IconIndex: Integer = 0; Flush: Boolean = False): Boolean; |
| | | function SaveAppPath(const CompanyName, SoftName, Version: string): Boolean; |
| | | function ReadAppPath(const CompanyName, SoftName, Version: string; var Path: string): Boolean; |
| | | |
| | | // æ¥ææ¶é´ç¸å
³ |
| | | function FileTimeToLocalSystemTime(FTime: TFileTime): TSystemTime; |
| | | function LocalSystemTimeToFileTime(STime: TSystemTime): TFileTime; |
| | | function GetDatePart(DateTime: TDateTime): TDate; |
| | | function GetTimePart(DateTime: TDateTime): TTime; |
| | | |
| | | //è·åç¡¬ä»¶ä¿¡æ¯æ¨¡å |
| | | function GetCPUIDStr:String; //è·åCPUIDå¹¶è¾åºå符串 |
| | | function GetMacAddress: string; //è·åç½å¡MACå°å |
| | | function GetMemUse: Cardinal; //è·åå
å使ç¨é |
| | | |
| | | // å
¶å®å½æ° |
| | | procedure BeginWait; |
| | | procedure EndWait; |
| | | function Iif(Value: Boolean; Value1, Value2: Variant): Variant; |
| | | function Min(V1, V2: Integer): Integer; |
| | | function Max(V1, V2: Integer): Integer; |
| | | function TrimValue(Value, Min, Max: Integer): Integer; |
| | | procedure Swap(var V1, V2: Integer); |
| | | function GetTickDiff(const OldTickCount, NewTickCount: Cardinal): Cardinal; |
| | | function RestrictRectInScr(Rect: TRect; AllVisible: Boolean): TRect; |
| | | function GetModulePath: string; |
| | | function GetModuleSubPath(const SubFolder: string = ''): string; |
| | | function GetAppPath: string; |
| | | function GetAppSubPath(const SubFolder: string = ''): string; |
| | | function GetRectWidth(const R: TRect): Integer; |
| | | function GetRectHeight(const R: TRect): Integer; |
| | | procedure DrawStrokedText(Canvas: TCanvas; X, Y: Integer; const Text: string; |
| | | FontColor, StrokedColor, SmoothColor: TColor); |
| | | |
| | | //ç³»ç»Bugä¿®æ£ |
| | | function GetScreenWidth:Integer; //è·åå±å¹å®½åº¦åé«åº¦ï¼å³å辨ç |
| | | function GetScreenHeight:Integer; |
| | | function GetDesktopWidth:Integer; //è·åæ¡é¢å®½åº¦åé«åº¦ |
| | | function GetDesktopHeight:Integer; |
| | | function IsBigInt(const S:String): Boolean; //2012-04-12å¢å |
| | | function IsNTSystem:Boolean; //夿æ¯å¦NTç³»ç» |
| | | procedure ComboBox_XPMan_KeyPress(Sender:TObject;var Key: Char);//ä¿®æ£ä¸æéæ©æ¡è¾å
¥ä¹±ç |
| | | Function formatNum(Number, Length: Integer): string; //æ©å±å¹¶è½¬æ¢å符é¿åº¦ |
| | | Function Q(s1:string):string; //å åå¼å· |
| | | procedure Delay(MSecs: Longint); //æ å·æ°å»¶æ¶å½æ° |
| | | procedure PreparePrinter(Width,Height:Integer); //èªå®ä¹çº¸å¼ æå°ç¨åº |
| | | procedure DeleteMe; |
| | | procedure SetSystemDateFormat(sFormat:string='yyyy-MM-dd'); //è®¾ç½®ç³»ç»æ¥ææ ¼å¼ |
| | | |
| | | //å
¶ä»å½æ°ï¼liliangting 2015-12-01 |
| | | function Base16Encode(const Src: AnsiString): AnsiString; //Baseç¼ç å符串 |
| | | function Base16Decode(const Src: AnsiString): AnsiString; //Baseè§£ç å符串 |
| | | function GetGUID:string; //èªå¨çæä¸æ¡GUID |
| | | procedure Delay1(MSecs: Longint); //宿¶å¨1 |
| | | procedure Delay2(MSecs: Longint); //宿¶å¨2 |
| | | procedure GetVersionInfo(AppExeName:string); |
| | | procedure EnumComPorts(Ports: TStrings); //æä¸¾ç³»ç»COMå£ |
| | | function CheckComPort(ComPortName: string; var ComPortList: Tstrings): boolean; |
| | | function StrToHexStr(const S:string):string; //å符串转16è¿å¶å符串 |
| | | function StrToHexStr1(const S:string):string; |
| | | function HexStrToStr(const S:string; bFlag:boolean=false):string; //16è¿å¶å符串转ASCII(æ¯æä¸è±æ) |
| | | function GetMemBytes(var X; size: Integer): string; //以åå
è¿å¶æ¹å¼æ¥çå
åç彿° |
| | | procedure GetFileList(FilePath, ExtMask: string; FileList: TStrings; SubDir: Boolean = True); |
| | | procedure GetFileListEx(FilePath, ExtMask: string; FileList: TStrings; SubDir: Boolean = True); |
| | | function DeleteDir(Path: string;IsDelDir: Boolean = False): Boolean; |
| | | |
| | | //Excel彿°ï¼liliangting 2015-12-24 |
| | | function GetInstalledWordVersion: Integer; //è·åOfficeçæ¬ |
| | | function RandomNum:String; //çæ18ä½éæºæ° |
| | | |
| | | //TStringListèªå®ä¹æåºåæ°ï¼liliangting 2017-9-1 |
| | | function SortParam(List: TStringList; Index1, Index2: Integer): Integer; |
| | | function RoundEx(const Value: Extended; const Digit: Byte = 0): Extended; |
| | | |
| | | //另䏿çString转byte |
| | | function UniCode2GB(S: string): string; |
| | | function GB2UniCode(GB: string): string; |
| | | |
| | | //éåBoolToStr彿°ï¼True-1ï¼liliangting 2022-11-14 |
| | | function BoolToHexStr(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | function BoolToString(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | function BoolToString1(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | function BoolToString2(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | function BoolToString3(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | function BoolToString4(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | //Int-->booleanï¼0-Falseï¼å
¶ä»-Trueï¼liliangting 2025-02-12 |
| | | function IntToBool(AValue: Integer): Boolean; |
| | | |
| | | //å°æ¥ææ ¼å¼è½¬æ¢æUnixæ¶é´æ³ , é¿åº¦8åèï¼liliangting 2017-10-19 |
| | | function DateTimeToUnixDate(const ADate: TDateTime): Longint; |
| | | //å°æ°å¼è½¬æKBãMBãGB |
| | | function FormatFileSize(size:Int64):String; |
| | | //å°æ°å¼è½¬æ#.##ä¸ã#.##亿 |
| | | function FormatNumberSize(num:Int64):String; |
| | | function SplitStr(str:string;chr:char;i:Integer):string; |
| | | function SplitStrCount(str:string; chr:char):Integer; |
| | | |
| | | //windowsæè¿ç¨çä¸¤ç§æ¹æ³ |
| | | procedure KillProgram(WindowTitle: string); |
| | | function KillTask(ExeFileName: string): integer; |
| | | //å·æ°ä»»å¡æ 徿 çä¸¤ç§æ¹æ³ |
| | | procedure RefreshTaskbarIcon; |
| | | procedure RefreshTaskbarIcon2; |
| | | |
| | | //强è¡å
³éè®¡ç®æºç³»ç»çæ¹æ³ï¼liliangting 2018-1-4 |
| | | function GetOperatingSystem(): string; |
| | | |
| | | //è·¨è¿ç¨ä¼ éæ¶æ¯çè¿ç¨æ¹æ³ï¼liliangting 2018-04-01 |
| | | function GetHWndByPID(const hPID: THandle): THandle; |
| | | function GetHwndByAppName(const AppName: String): THandle; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | //æ°éå¼åå¹³å°ä¸ç¨æ¹æ³ |
| | | //liliangting 2018-10-20 |
| | | //----------------------------------------------------------------------------- |
| | | //å°è£
ç卿Dll彿°è°ç¨æ¹æ³ |
| | | function CallFunc(dllname,funcname:string; const param:array of const):DWORD; //éç¨Dllè°ç¨æ¹æ³ |
| | | function PingHost(HostIP: String): Boolean; //pingæµè¯ç½ç» |
| | | function SecondToTime(sec:Integer):String; //ç§è½¬æ¶é´å符串 |
| | | function SecondToTime1(second: Word): TDateTime; //ç§è½¬æ¶é´ |
| | | |
| | | //æ©å
DateUtilsåºï¼å¢å å京æ¶é´è½¬Int64æ¶é´æ ¼å¼ï¼æ³¨æå廿¶åº |
| | | function DateTimeToUnixPro(const AValue: TDateTime): Int64; |
| | | function UnixToDateTimePro(const AValue: Int64): TDateTime; |
| | | |
| | | //ç§å¦è®¡æ°ä¸æµ®ç¹åæ°äºè½¬ï¼'-1.4857E-02' <--> '-0.014857' |
| | | function ExpToFloat(s:String):String; |
| | | function FloatToExp(s:String):String; |
| | | |
| | | //------ å ç§æå¼ç®æ³ --------------------------------------------------------- |
| | | function LinearInterpolation(x0, y0, x1, y1, x: Double): Double; //çº¿æ§æå¼ç®æ³ |
| | | function LagrangeInterpolation(x, y: array of Double; n: Integer; xi: Double): Double; //ææ ¼ææ¥æå¼ç®æ³ |
| | | function NewtonInterpolation(x, fx: array of Double; n: Integer; t: Double): Double; //çé¡¿æå¼ç®æ³ |
| | | function LeastSquaresInterpolation(x, y: array of Double; n: Integer; t: Double): Double;//æå°äºä¹æ³æå¼ç®æ³ |
| | | function BayesianInterpolation(x,y: array of Double; xi: Double; sigma: Double): Double; //è´å¶æ¯æå¼ç®æ³ |
| | | //----------------------------------------------------------------------------- |
| | | |
| | | function GetMillisecondTimeStamp: Int64; |
| | | |
| | | function SwapHighLowWord(Value: Word): Word; |
| | | |
| | | implementation |
| | | |
| | | {$WARN SYMBOL_PLATFORM OFF} |
| | | {$WARN SYMBOL_DEPRECATED OFF} |
| | | |
| | | type |
| | | TCPUID = array[1..4] of Longint;//使ç¨CPUå
ç½®æä»¤è·åCPUç¼å·çäºè¿å¶ |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿å符串 S æ¯ä¸æ¯ä¸ä¸ªæ´åæ°å |
| | | //----------------------------------------------------------------------------- |
| | | function IsInt(const S: string): Boolean; |
| | | var |
| | | E, R: Integer; |
| | | begin |
| | | Val(S, R, E); |
| | | Result := E = 0; |
| | | E := R; // avoid hints |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿å符串 S æ¯ä¸æ¯ä¸ä¸ªæµ®ç¹åæ°å |
| | | //----------------------------------------------------------------------------- |
| | | function IsFloat(const S: string): boolean; |
| | | var |
| | | V: Extended; |
| | | begin |
| | | Result := TextToFloat(PChar(S), V, fvExtended); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿å符串 S æ¯ä¸æ¯ä¸ä¸ª Email å°å |
| | | //----------------------------------------------------------------------------- |
| | | function IsEmail(const S: string): Boolean; |
| | | begin |
| | | Result := True; |
| | | if Pos('@', S) = 0 then Result := False; |
| | | if Pos('.', S) = 0 then Result := False; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¡¥å
¨è·¯å¾å符串åé¢ç "\" |
| | | //----------------------------------------------------------------------------- |
| | | function PathWithSlash(const Path: string): string; |
| | | begin |
| | | Result := Trim(Path); |
| | | if Length(Result) > 0 then |
| | | Result := IncludeTrailingPathDelimiter(Result); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å»æè·¯å¾å符串åé¢ç "\" |
| | | //----------------------------------------------------------------------------- |
| | | function PathWithoutSlash(const Path: string): string; |
| | | begin |
| | | Result := Trim(Path); |
| | | if Length(Result) > 0 then |
| | | Result := ExcludeTrailingPathDelimiter(Result); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å°è·¯å¾åæä»¶åç»åå¨ä¸èµ· |
| | | //----------------------------------------------------------------------------- |
| | | function CombineFileName(const Path, FileName: string): string; |
| | | begin |
| | | Result := PathWithSlash(Path) + FileName; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¡¥å
¨æä»¶æ©å±ååé¢ç "." |
| | | //----------------------------------------------------------------------------- |
| | | function FileExtWithDot(const FileExt: string): string; |
| | | begin |
| | | Result := FileExt; |
| | | if Length(Result) > 0 then |
| | | if Copy(Result, 1, 1) <> '.' then |
| | | Result := '.' + Result; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 廿æä»¶æ©å±ååé¢ç "." |
| | | //----------------------------------------------------------------------------- |
| | | function FileExtWithoutDot(const FileExt: string): string; |
| | | begin |
| | | Result := FileExt; |
| | | if Length(Result) > 0 then |
| | | if Copy(Result, 1, 1) = '.' then |
| | | Delete(Result, 1, 1); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: ç»æ°åå ä¸åééå· |
| | | // 示ä¾: 1234567 -> 1,234,567 |
| | | //----------------------------------------------------------------------------- |
| | | function AddNumberComma(Number: Int64): string; |
| | | var |
| | | Temp: Double; |
| | | begin |
| | | Temp := Number; |
| | | Result := Format('%.0n', [Temp]); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å徿件åç主æä»¶å |
| | | // 示ä¾: "C:\test.dat" -> "test" |
| | | //----------------------------------------------------------------------------- |
| | | function ExtractFileMainName(const FileName: string): string; |
| | | var |
| | | Ext: string; |
| | | begin |
| | | Ext := ExtractFileExt(FileName); |
| | | Result := ExtractFileName(FileName); |
| | | Result := Copy(Result, 1, Length(Result) - Length(Ext)); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¿åURLä¸çæä»¶è·¯å¾ |
| | | // 示ä¾: |
| | | // ExtractUrlFileName('http://www.download.com/file.zip'); |
| | | // æ¤è°ç¨å°è¿å 'http://www.download.com/'. |
| | | //----------------------------------------------------------------------------- |
| | | function ExtractUrlFilePath(const Url: string): string; |
| | | var |
| | | I: Integer; |
| | | begin |
| | | I := LastDelimiter('/\:', Url); |
| | | Result := Copy(Url, 1, I); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¿åURLä¸çæä»¶å |
| | | // 示ä¾: |
| | | // ExtractUrlFileName('http://www.download.com/file.zip'); |
| | | // æ¤è°ç¨å°è¿å 'file.zip'. |
| | | //----------------------------------------------------------------------------- |
| | | function ExtractUrlFileName(const Url: string): string; |
| | | var |
| | | I: Integer; |
| | | begin |
| | | I := LastDelimiter('/\:', Url); |
| | | Result := Copy(Url, I + 1, MaxInt); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 廿æä»¶åä¸ä¸åæ³çå符 |
| | | // 示ä¾: "tes*t.dat?" -> "test.dat" |
| | | //----------------------------------------------------------------------------- |
| | | function ValidateFileName(const FileName: string): string; |
| | | var |
| | | I: Integer; |
| | | begin |
| | | Result := ''; |
| | | for I := 1 to Length(FileName) do |
| | | begin |
| | | if not (AnsiChar(FileName[I]) in ['\', '/', ':', '*', '?', '"', '<', '>', '|']) and |
| | | not (Ord(FileName[I]) < 32) then |
| | | Result := Result + FileName[I]; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ä¸ä¸ªç¨æ¥æè¿°åèæ°çå符串 |
| | | // åæ°: |
| | | // Bytes - åèæ° |
| | | // Postfix - åä½åç¼ï¼ç¼ºç为 " KB" |
| | | //----------------------------------------------------------------------------- |
| | | function GetSizeString(Bytes: Int64; const Postfix: string): string; |
| | | var |
| | | Temp: Double; |
| | | begin |
| | | if Bytes > 0 then |
| | | begin |
| | | Temp := Bytes div 1024; |
| | | if Bytes mod 1024 <> 0 then Temp := Temp + 1; |
| | | end else |
| | | Temp := 0; |
| | | Result := Format('%s%s', [Format('%.0n', [Temp]), Postfix]); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ä¸ä¸ªç¨æ¥æè¿°ç¾åæ¯çå符串 |
| | | // åæ°: |
| | | // Position, Max - å½åå¼ å æå¤§å¼ |
| | | // Postfix - åç¼å符串ï¼ç¼ºç为 " %" |
| | | //----------------------------------------------------------------------------- |
| | | function GetPercentString(Position, Max: Int64; const Postfix: string): string; |
| | | begin |
| | | if Max > 0 then |
| | | Result := IntToStr(Trunc((Position / Max) * 100)) + Postfix |
| | | else |
| | | Result := '100' + Postfix; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 缩çå符串çé¿åº¦ä»¥éåºæ¾ç¤ºå®½åº¦ |
| | | // åæ°: |
| | | // S - å¾
缩ççå符串. |
| | | // Canvas - å符串æå¨çCanvas. |
| | | // Width - æå¤§è±¡ç´ 宽度 |
| | | // Suffix - 妿åç¬¦ä¸²è¢«æªæï¼åæ·»å ä»ä¹åç¼ |
| | | // è¿å: |
| | | // 缩çä¹åçå符串 |
| | | //----------------------------------------------------------------------------- |
| | | function RestrictStrWidth(const S: WideString; Canvas: TCanvas; |
| | | Width: Integer; const Suffix: string): WideString; |
| | | var |
| | | Src: WideString; |
| | | begin |
| | | Src := S; |
| | | Result := S; |
| | | while (Canvas.TextWidth(Result) > Width) and (Length(Result) > 0) do |
| | | begin |
| | | if Length(Src) > 1 then |
| | | begin |
| | | Delete(Src, Length(Src), 1); |
| | | Result := Src + Suffix; |
| | | end else |
| | | Delete(Result, Length(Result), 1); |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 缩çæä»¶åçé¿åº¦ä»¥éåºæå¤§åèæ°éå¶ |
| | | // åæ°: |
| | | // FileName - å¾
缩ççæä»¶å(å¯ä»¥å
å«è·¯å¾) |
| | | // MaxBytes - æå¤§åèæ° |
| | | // è¿å: |
| | | // 缩çä¹åçæä»¶åå符串 |
| | | //----------------------------------------------------------------------------- |
| | | function RestrictFileNameWidth(const FileName: string; |
| | | MaxBytes: Integer): string; |
| | | |
| | | function GetBytes(const S: WideString): Integer; |
| | | var |
| | | AnsiStr: string; |
| | | begin |
| | | AnsiStr := S; |
| | | Result := Length(AnsiStr); |
| | | end; |
| | | |
| | | var |
| | | MainName, NewMainName: WideString; |
| | | Ext: string; |
| | | ExtLen: Integer; |
| | | begin |
| | | if Length(FileName) <= MaxBytes then |
| | | begin |
| | | Result := FileName; |
| | | end else |
| | | begin |
| | | Ext := ExtractFileExt(FileName); |
| | | MainName := Copy(FileName, 1, Length(FileName) - Length(Ext)); |
| | | ExtLen := Length(Ext); |
| | | |
| | | NewMainName := MainName; |
| | | while (GetBytes(NewMainName) + ExtLen > MaxBytes) and (Length(NewMainName) > 0) do |
| | | begin |
| | | if Length(MainName) > 1 then |
| | | begin |
| | | Delete(MainName, Length(MainName), 1); |
| | | NewMainName := MainName + '...'; |
| | | end else |
| | | Delete(NewMainName, Length(NewMainName), 1); |
| | | end; |
| | | |
| | | Result := NewMainName + Ext; |
| | | if Length(Result) > MaxBytes then |
| | | Result := Copy(Result, 1, MaxBytes); |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°ï¼è®¡ç®éé
符表达å¼ï¼æ¯æéé
符'*' å '?' |
| | | // åæ°ï¼ |
| | | // Value - æ¯ä¸² |
| | | // Pattern - å串 |
| | | // CaseInsensitive - æ¯å¦å¿½ç¥å¤§å°å |
| | | // è¿åï¼ |
| | | // True - å¹é
|
| | | // False - ä¸å¹é
|
| | | // 示ä¾ï¼ |
| | | // LikeString('abcdefg', 'abc*', True); |
| | | //----------------------------------------------------------------------------- |
| | | function LikeString(Value, Pattern: WideString; CaseInsensitive: Boolean): Boolean; |
| | | const |
| | | MultiWildChar = '*'; |
| | | SingleWildChar = '?'; |
| | | var |
| | | ValuePtr, PatternPtr: PWideChar; |
| | | I: Integer; |
| | | B: Boolean; |
| | | begin |
| | | ValuePtr := PWideChar(Value); |
| | | PatternPtr := PWideChar(Pattern); |
| | | |
| | | while True do |
| | | begin |
| | | if (CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE + SORT_STRINGSORT, |
| | | PatternPtr, Length(PatternPtr), WideChar(MultiWildChar), 1) - 2 = 0) then |
| | | begin |
| | | Result := True; |
| | | Exit; |
| | | end |
| | | else if (ValuePtr^ = #0) and (PatternPtr^ <> #0) then |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end |
| | | else if (ValuePtr^ = #0) then |
| | | begin |
| | | Result := True; |
| | | Exit; |
| | | end else |
| | | begin |
| | | case PatternPtr^ of |
| | | MultiWildChar: |
| | | begin |
| | | for I := 0 to Length(ValuePtr) - 1 do |
| | | begin |
| | | if LikeString(ValuePtr + I, PatternPtr + 1, CaseInsensitive) then |
| | | begin |
| | | Result := True; |
| | | Exit; |
| | | end; |
| | | end; |
| | | Result := False; |
| | | Exit; |
| | | end; |
| | | SingleWildChar: |
| | | begin |
| | | Inc(ValuePtr); |
| | | Inc(PatternPtr); |
| | | end; |
| | | else |
| | | begin |
| | | B := False; |
| | | if CaseInsensitive then |
| | | begin |
| | | if (CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE + SORT_STRINGSORT, |
| | | PatternPtr, 1, ValuePtr, 1) - 2 = 0) then |
| | | B := True; |
| | | end else |
| | | begin |
| | | if (CompareStringW(LOCALE_USER_DEFAULT, SORT_STRINGSORT, |
| | | PatternPtr, 1, ValuePtr, 1) - 2 = 0) then |
| | | B := True; |
| | | end; |
| | | |
| | | if B then |
| | | begin |
| | | Inc(ValuePtr); |
| | | Inc(PatternPtr); |
| | | end else |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end; |
| | | end; |
| | | end; // case |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå²å符串 |
| | | //----------------------------------------------------------------------------- |
| | | procedure SplitString(S: string; Delimiter: Char; List: TStrings); |
| | | var |
| | | I: Integer; |
| | | begin |
| | | List.Clear; |
| | | while Length(S) > 0 do |
| | | begin |
| | | I := Pos(Delimiter, S); |
| | | if I > 0 then |
| | | begin |
| | | List.Add(Copy(S, 1, I - 1)); |
| | | Delete(S, 1, I); |
| | | end else |
| | | begin |
| | | List.Add(S); |
| | | Break; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿å符串 Source æ¯ä¸æ¯ä»¥ Left å¼å§ |
| | | //----------------------------------------------------------------------------- |
| | | function StartWith(const Source: string; const Left: string): Boolean; |
| | | var |
| | | Start: string; |
| | | Len: Integer; |
| | | begin |
| | | Len := Length(Left); |
| | | if (Source = '') or (Left = '') or (Length(Source) < Len) then |
| | | begin |
| | | Result := False; |
| | | end else |
| | | begin |
| | | Start := Copy(Source, 1, Len); |
| | | Result := Start = Left; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿å符串 Source æ¯ä¸æ¯ä»¥ Right ç»æ |
| | | //----------------------------------------------------------------------------- |
| | | function EndWith(const Source: string; const Right: string): Boolean; |
| | | var |
| | | EndStr: string; |
| | | RightLen: Integer; |
| | | SourceLen: Integer; |
| | | begin |
| | | RightLen := Length(Right); |
| | | SourceLen := Length(Source); |
| | | |
| | | if (Source = '') or (Right = '') or (SourceLen < RightLen) then |
| | | begin |
| | | Result := False; |
| | | end else |
| | | begin |
| | | EndStr := Copy(Source, SourceLen - RightLen + 1, RightLen); |
| | | Result := EndStr = Right; |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æè¿°ï¼Pos 彿°ï¼è¿åæ¥æ¾å符åºç°æ¬¡æ° |
| | | //------------------------------------------------------------------------------ |
| | | function MyPos(c: Char; const str: string): Integer; |
| | | var |
| | | i,j: Integer; |
| | | begin |
| | | j := 0; |
| | | for i := 1 to Length(str) do |
| | | if c = str[i] then inc(j); |
| | | Result:=j; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾è®¡ç®æºå |
| | | //----------------------------------------------------------------------------- |
| | | function GetComputerName: string; |
| | | const |
| | | MaxSize = 256; |
| | | var |
| | | Buffer: array[0..MaxSize-1] of Char; |
| | | Size: Cardinal; |
| | | begin |
| | | Size := MaxSize; |
| | | Windows.GetComputerName(PChar(@Buffer[0]), Size); |
| | | Result := Buffer; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾å½åç³»ç»ç¨æ·å |
| | | //----------------------------------------------------------------------------- |
| | | function GetWinUserName: string; |
| | | const |
| | | Size = 255; |
| | | var |
| | | Buffer: array[0..Size] of Char; |
| | | Len: DWord; |
| | | begin |
| | | Len := Size; |
| | | GetUserName(Buffer, Len); |
| | | Result := Buffer; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ Windows ç®å½ |
| | | //----------------------------------------------------------------------------- |
| | | function GetWindowsDir: string; |
| | | var |
| | | Buffer: array[0..MAX_PATH] of Char; |
| | | begin |
| | | GetWindowsDirectory(Buffer, MAX_PATH); |
| | | Result := PathWithSlash(Buffer); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ç³»ç»ä¸´æ¶æä»¶ç®å½ |
| | | //----------------------------------------------------------------------------- |
| | | function GetWinTempDir: string; |
| | | const |
| | | Size = 1024; |
| | | var |
| | | Buffer: array[0..Size] of Char; |
| | | LongName: string; |
| | | begin |
| | | GetTempPath(Size, Buffer); |
| | | Result := PathWithSlash(Buffer); |
| | | LongName := GetLongFileName(Result); |
| | | if Length(LongName) >= Length(Result) then |
| | | Result := LongName; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ä¸ä¸ªä¸´æ¶æä»¶å(è·¯å¾ä¸ºç³»ç»ä¸´æ¶ç®å½) |
| | | // åæ°: |
| | | // PrefixStr - æä»¶ååç¼ï¼åä¸ä¸ªåç¬¦ææ |
| | | //----------------------------------------------------------------------------- |
| | | function GetWinTempFile(const PrefixStr: string): string; |
| | | var |
| | | FileName: array[0..MAX_PATH] of Char; |
| | | LongName: string; |
| | | begin |
| | | Windows.GetTempFileName(PChar(GetWinTempDir), PChar(PrefixStr), 0, FileName); |
| | | Result := FileName; |
| | | LongName := GetLongFileName(Result); |
| | | if Length(LongName) >= Length(Result) then |
| | | Result := LongName; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: æä»¶çå
¨å(å
å«è·¯å¾) |
| | | // 示ä¾: |
| | | // "test.dat" -> "C:\test.dat" |
| | | // "C:\a\..\test.dat" -> "C:\test.dat" |
| | | //----------------------------------------------------------------------------- |
| | | function GetFullFileName(const FileName: string): string; |
| | | const |
| | | Size = 1024; |
| | | var |
| | | Buffer: array[0..Size] of Char; |
| | | FileNamePtr: PChar; |
| | | Len: DWord; |
| | | begin |
| | | Len := Size; |
| | | GetFullPathName(PChar(FileName), Len, Buffer, FileNamePtr); |
| | | Result := Buffer; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: é¿æä»¶å -> çæä»¶å(8.3) |
| | | // 夿³¨: FileName å¯ä»¥æ¯è·¯å¾ï¼ä¹å¯ä»¥æ¯æä»¶åã |
| | | // 示ä¾: |
| | | // "C:\Program Files" -> "C:\PROGRA~1" |
| | | //----------------------------------------------------------------------------- |
| | | function GetShortFileName(const FileName: string): string; |
| | | const |
| | | Size = 1024; |
| | | var |
| | | Buffer: array[0..Size] of Char; |
| | | begin |
| | | GetShortPathName(PChar(FileName), Buffer, Size); |
| | | Result := Buffer; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: çæä»¶å(8.3) -> é¿æä»¶å |
| | | // 夿³¨: FileName å¯ä»¥æ¯è·¯å¾ï¼ä¹å¯ä»¥æ¯æä»¶åã |
| | | // 示ä¾: |
| | | // "C:\PROGRA~1\COMMON~1\" -> "C:\Program Files\Common Files\" |
| | | //----------------------------------------------------------------------------- |
| | | function GetLongFileName(const FileName: string): string; |
| | | var |
| | | Name, S: string; |
| | | SearchRec : TSearchRec; |
| | | begin |
| | | S := ExcludeTrailingPathDelimiter(FileName); |
| | | if (Length(S) < 3) or (ExtractFilePath(S) = S) then |
| | | begin |
| | | Result := FileName; |
| | | Exit; |
| | | end; |
| | | |
| | | if FindFirst(S, faAnyFile, SearchRec) = 0 then |
| | | Name := SearchRec.Name |
| | | else |
| | | Name := ExtractFileName(S); |
| | | FindClose(SearchRec); |
| | | |
| | | Result := GetLongFileName(ExtractFilePath(S)) + Name; |
| | | if Length(S) <> Length(FileName) then Result := Result + '\'; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ç¹æ®æä»¶å¤¹è·¯å¾ |
| | | // åæ°: |
| | | // FolderID - |
| | | // CSIDL_DESKTOP |
| | | // CSIDL_PROGRAMS |
| | | // CSIDL_RECENT |
| | | // CSIDL_SENDTO |
| | | // CSIDL_STARTMENU |
| | | // CSIDL_STARTUP |
| | | // CSIDL_TEMPLATES |
| | | // CSIDL_APPDATA |
| | | // è¿å: |
| | | // è¥æåï¼è¿å带æåæçº¿(\)çè·¯å¾ï¼ |
| | | // è¥å¤±è´¥ï¼è¿å空å符串ã |
| | | // 夿³¨: |
| | | // è¥è¦å"å¿«éå¯å¨"çè·¯å¾ï¼å¯: |
| | | // GetSpecialFolder(CSIDL_APPDATA) + 'Microsoft\Internet Explorer\Quick Launch\'. |
| | | //----------------------------------------------------------------------------- |
| | | function GetSpecialFolder(FolderID: Integer): string; |
| | | var |
| | | PidL: PItemIDList; |
| | | Buffer: array[0..MAX_PATH] of Char; |
| | | Malloc: IMalloc; |
| | | begin |
| | | Result := ''; |
| | | if Failed(SHGetMalloc(Malloc)) then |
| | | Malloc := nil; |
| | | if Succeeded(SHGetSpecialFolderLocation(0, FolderID, PidL)) then |
| | | begin |
| | | if SHGetPathFromIDList(PidL, Buffer) then |
| | | Result := Buffer; |
| | | if Assigned(Malloc) then |
| | | Malloc.Free(PidL); |
| | | Result := PathWithSlash(Result); |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ "å¿«éå¯å¨" çè·¯å¾ |
| | | //----------------------------------------------------------------------------- |
| | | function GetQuickLaunchPath: string; |
| | | begin |
| | | Result := GetSpecialFolder(CSIDL_APPDATA) + |
| | | 'Microsoft\Internet Explorer\Quick Launch\'; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ SystemDrive çè·¯å¾ |
| | | //----------------------------------------------------------------------------- |
| | | function GetSystemDrivePath: string; |
| | | begin |
| | | if Win32Platform = VER_PLATFORM_WIN32_NT then |
| | | Result := GetEnvVar('SystemDrive') {don't localize} |
| | | else |
| | | Result := ''; |
| | | |
| | | if Result = '' then |
| | | begin |
| | | Result := ExtractFileDrive(GetWindowsDir); |
| | | if Result = '' then |
| | | Result := 'C:'; |
| | | end; |
| | | |
| | | Result := PathWithSlash(Result); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ç¯å¢åéçå¼ |
| | | //----------------------------------------------------------------------------- |
| | | function GetEnvVar(const EnvVar: string): string; |
| | | |
| | | function AdjustLength(var S: string; const R: Cardinal): Boolean; |
| | | begin |
| | | Result := Integer(R) < Length(S); |
| | | SetLength(S, R); |
| | | end; |
| | | |
| | | const |
| | | MaxSize = 255; |
| | | var |
| | | R: DWORD; |
| | | begin |
| | | SetLength(Result, MaxSize); |
| | | repeat |
| | | R := GetEnvironmentVariable(PChar(EnvVar), PChar(Result), Length(Result)); |
| | | if R = 0 then |
| | | begin |
| | | Result := ''; |
| | | Break; |
| | | end; |
| | | until AdjustLength(Result, R); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å徿¡é¢ä¸é¤ä»»å¡æ 以å¤çåºå |
| | | //----------------------------------------------------------------------------- |
| | | function GetWorkAreaRect: TRect; |
| | | begin |
| | | SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: æµè§æä»¶å¤¹ï¼å¯å®ä½æä»¶å¤¹ |
| | | // åæ°: |
| | | // ParentHWnd - ç¶çªå£ç奿 |
| | | // Caption - æµè§å¯¹è¯æ¡çæç¤ºæ é¢ |
| | | // Root - æ ¹ç®å½ |
| | | // Path - åæ¾ç¨æ·æç»éæ©çç®å½ |
| | | // è¿å: |
| | | // True - ç¨æ·ç¹äºç¡®å® |
| | | // False - ç¨æ·ç¹äºåæ¶ |
| | | //----------------------------------------------------------------------------- |
| | | function SelectDir(ParentHWnd: HWND; const Caption: string; |
| | | const Root: WideString; var Path: string): Boolean; |
| | | const |
| | | {$WRITEABLECONST ON} |
| | | InitPath: string = ''; |
| | | {$WRITEABLECONST OFF} |
| | | var |
| | | WindowList: Pointer; |
| | | BrowseInfo: TBrowseInfo; |
| | | Buffer: PChar; |
| | | RootItemIDList, ItemIDList: PItemIDList; |
| | | ShellMalloc: IMalloc; |
| | | IDesktopFolder: IShellFolder; |
| | | Eaten, Flags: LongWord; |
| | | |
| | | function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: Cardinal; lpData: Cardinal):Integer; stdcall; |
| | | var |
| | | R: TRect; |
| | | begin |
| | | if uMsg = BFFM_INITIALIZED then |
| | | begin |
| | | GetWindowRect(hwnd, R); |
| | | MoveWindow(hwnd, |
| | | (Screen.Width - (R.Right - R.Left)) div 2, |
| | | (Screen.Height - (R.Bottom - R.Top)) div 2, |
| | | R.Right - R.Left, |
| | | R.Bottom - R.Top, |
| | | True); |
| | | Result := SendMessage(hwnd, BFFM_SETSELECTION, Ord(TRUE), Longint(PChar(InitPath))) |
| | | end else |
| | | Result := 1; |
| | | end; |
| | | |
| | | begin |
| | | Result := False; |
| | | InitPath := Path; |
| | | FillChar(BrowseInfo, SizeOf(BrowseInfo), 0); |
| | | if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then |
| | | begin |
| | | Buffer := ShellMalloc.Alloc(MAX_PATH); |
| | | try |
| | | RootItemIDList := nil; |
| | | if Root <> '' then |
| | | begin |
| | | SHGetDesktopFolder(IDesktopFolder); |
| | | IDesktopFolder.ParseDisplayName(Application.Handle, nil, |
| | | POleStr(Root), Eaten, RootItemIDList, Flags); |
| | | end; |
| | | with BrowseInfo do |
| | | begin |
| | | hwndOwner := ParentHWnd; |
| | | pidlRoot := RootItemIDList; |
| | | pszDisplayName := Buffer; |
| | | lpszTitle := PChar(Caption); |
| | | ulFlags := BIF_RETURNONLYFSDIRS; |
| | | lpfn :=@BrowseCallbackProc; |
| | | lParam :=BFFM_INITIALIZED; |
| | | end; |
| | | WindowList := DisableTaskWindows(0); |
| | | try |
| | | ItemIDList := ShBrowseForFolder(BrowseInfo); |
| | | finally |
| | | EnableTaskWindows(WindowList); |
| | | end; |
| | | Result := ItemIDList <> nil; |
| | | if Result then |
| | | begin |
| | | ShGetPathFromIDList(ItemIDList, Buffer); |
| | | ShellMalloc.Free(ItemIDList); |
| | | Path := Buffer; |
| | | end; |
| | | finally |
| | | ShellMalloc.Free(Buffer); |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: ç¨ç³»ç» Shell è°ç¨æ¥æå¼ä¸ä¸ªæä»¶ |
| | | //----------------------------------------------------------------------------- |
| | | function ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): HWND; |
| | | begin |
| | | Result := ShellExecute(Application.Handle, nil, |
| | | PChar(FileName), PChar(Params), PChar(DefaultDir), ShowCmd); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: æå¼ä¸ä¸ª URL |
| | | // 示ä¾: |
| | | // OpenURL('http://www.abc.com'); |
| | | // OpenURL('www.abc.com'); |
| | | // OpenURL('file:///c:\'); |
| | | //----------------------------------------------------------------------------- |
| | | function OpenURL(const URL: string): Boolean; |
| | | begin |
| | | Result := ShellExecute(Application.Handle, 'Open', PChar(Trim(URL)), '', '', SW_SHOW) > 32; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: æå¼ä¸ä¸ª Email åé客æ·ç«¯ |
| | | //----------------------------------------------------------------------------- |
| | | function OpenEmail(const Email: string): Boolean; |
| | | const |
| | | SPrefix = 'mailto:'; |
| | | var |
| | | S: string; |
| | | begin |
| | | S := Trim(Email); |
| | | if Pos(SPrefix, S) <> 1 then S := SPrefix + S; |
| | | |
| | | Result := OpenURL(S); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 让çªå£ä¿æå¨æä¸å± |
| | | //----------------------------------------------------------------------------- |
| | | procedure SetStayOnTop(Form : TCustomForm; StayOnTop: Boolean); |
| | | begin |
| | | if StayOnTop Then |
| | | SetWindowPos(Form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) |
| | | else |
| | | SetWindowPos(Form.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: éèåºç¨ç¨åºå¨ä»»å¡æ ä¸çéæ©æé® |
| | | //----------------------------------------------------------------------------- |
| | | procedure HideAppFromTaskBar; |
| | | var |
| | | ExtendedStyle : Integer; |
| | | begin |
| | | ExtendedStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE); |
| | | SetWindowLong(Application.Handle, GWL_EXSTYLE, |
| | | (ExtendedStyle or WS_EX_TOOLWINDOW) and not WS_EX_APPWINDOW); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: æ£æ¥å½åç³»ç»è¯è¨æ¯å¦ç®ä½ä¸æ |
| | | //----------------------------------------------------------------------------- |
| | | function CheckLangChinesePR: Boolean; |
| | | const |
| | | // LCID Consts |
| | | LangChinesePR = (SUBLANG_CHINESE_SIMPLIFIED shl 10) or LANG_CHINESE; |
| | | begin |
| | | Result := SysLocale.DefaultLCID = LangChinesePR; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å
³æº |
| | | //----------------------------------------------------------------------------- |
| | | function ShutdownWindows: Boolean; |
| | | const |
| | | SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; |
| | | var |
| | | hToken: THandle; |
| | | tkp: TTokenPrivileges; |
| | | tkpo: TTokenPrivileges; |
| | | Zero: DWORD; |
| | | begin |
| | | Result := True; |
| | | if Win32Platform = VER_PLATFORM_WIN32_NT then |
| | | begin |
| | | Zero := 0; |
| | | if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end; |
| | | if not LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, tkp.Privileges[0].Luid) then |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end; |
| | | tkp.PrivilegeCount := 1; |
| | | tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; |
| | | |
| | | AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTokenPrivileges), tkpo, Zero); |
| | | if Boolean(GetLastError()) then |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end else |
| | | ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0); |
| | | end else |
| | | ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æè¿°ï¼éå¯ |
| | | //------------------------------------------------------------------------------ |
| | | function RebootWindows: Boolean; |
| | | const |
| | | SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; |
| | | var |
| | | hToken: THandle; |
| | | tkp: TTokenPrivileges; |
| | | tkpo: TTokenPrivileges; |
| | | Zero: DWORD; |
| | | begin |
| | | Result := True; |
| | | if Win32Platform = VER_PLATFORM_WIN32_NT then |
| | | begin |
| | | Zero := 0; |
| | | if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end; |
| | | if not LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, tkp.Privileges[0].Luid) then |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end; |
| | | tkp.PrivilegeCount := 1; |
| | | tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; |
| | | |
| | | AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTokenPrivileges), tkpo, Zero); |
| | | if Boolean(GetLastError()) then |
| | | begin |
| | | Result := False; |
| | | Exit; |
| | | end else |
| | | ExitWindowsEx(EWX_SHUTDOWN or EWX_REBOOT, 0); |
| | | end else |
| | | ExitWindowsEx(EWX_SHUTDOWN or EWX_REBOOT, 0); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åé¼ æ çå½åä½ç½® |
| | | // 注æ: Mouse.CursorPos ä¼å¨å¸¦å¯ç ä¿æ¤çå±ä¿å¯å¨æ¶æåºå¼å¸¸ã |
| | | //----------------------------------------------------------------------------- |
| | | function GetMouseCursorPos: TPoint; |
| | | begin |
| | | if not Windows.GetCursorPos(Result) then |
| | | Result := Point(0, 0); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå»ºå¿«æ·æ¹å¼ |
| | | // åæ°: |
| | | // OriginalFileName - åå§æä»¶åï¼å«è·¯å¾ (å³å¿«æ·æ¹å¼æåçæä»¶) |
| | | // ShortcutFileName - å¿«æ·æ¹å¼æä»¶åï¼å«è·¯å¾ï¼å«æ©å±å(.lnk) |
| | | // Arguments - è¿è¡åæ° |
| | | // WorkingDir - å·¥ä½ç®å½ |
| | | // Description - å¿«æ·æ¹å¼æè¿° |
| | | // ShowCmd - è¿è¡æ¹å¼ (SW_SHOW, SW_MINIMIZE, SW_MAXIMIZE) |
| | | // IsFolderShortcut - æ¯å¦æä»¶å¤¹å¿«æ·æ¹å¼ |
| | | // è¿å: |
| | | // True - æå |
| | | // False - 失败 |
| | | //----------------------------------------------------------------------------- |
| | | function CreateShortCut(const OriginalFileName, ShortcutFileName, Arguments, |
| | | WorkingDir, Description: string; ShowCmd: Integer; |
| | | IsFolderShortcut: Boolean): Boolean; |
| | | |
| | | function IsWindowsXP: Boolean; |
| | | begin |
| | | Result := (Win32Platform >= VER_PLATFORM_WIN32_NT) and |
| | | (Win32MajorVersion >= 5) and (Win32MinorVersion >= 1); |
| | | end; |
| | | |
| | | const |
| | | CLSID_FolderShortcut: TGUID = ( |
| | | D1:$0AFACED1; D2:$E828; D3:$11D1; D4:($91,$87,$B5,$32,$F1,$E9,$57,$5D)); |
| | | var |
| | | OleResult: HRESULT; |
| | | Obj: IUnknown; |
| | | SL: IShellLink; |
| | | PF: IPersistFile; |
| | | WideFileName: WideString; |
| | | begin |
| | | if IsFolderShortcut then |
| | | begin |
| | | try |
| | | Obj := CreateComObject(CLSID_FolderShortcut); |
| | | except |
| | | { Folder shortcuts aren't supported prior to Windows 2000/Me. |
| | | Fall back to creating a normal shell link. } |
| | | Obj := nil; |
| | | end; |
| | | end; |
| | | if Obj = nil then |
| | | begin |
| | | IsFolderShortcut := False; |
| | | Obj := CreateComObject(CLSID_ShellLink); |
| | | end; |
| | | SL := Obj as IShellLink; |
| | | SL.SetPath(PChar(OriginalFileName)); |
| | | SL.SetArguments(PChar(Arguments)); |
| | | if WorkingDir <> '' then |
| | | SL.SetWorkingDirectory(PChar(WorkingDir)); |
| | | SL.SetShowCmd(ShowCmd); |
| | | if Description <> '' then |
| | | SL.SetDescription(PChar(Description)); |
| | | |
| | | PF := SL as IPersistFile; |
| | | { When creating a folder shortcut on 2000/Me, IPersistFile::Save will strip |
| | | off everything past the last '.' in the ShortcutFileName, so we keep the .lnk |
| | | extension on to give it something harmless to strip off. XP doesn't do |
| | | that, so we must remove the .lnk extension ourself. } |
| | | if IsFolderShortcut and IsWindowsXP then |
| | | WideFileName := ChangeFileExt(ShortcutFileName, '') |
| | | else |
| | | WideFileName := ShortcutFileName; |
| | | OleResult := PF.Save(PWideChar(WideFileName), True); |
| | | Result := OleResult = S_OK; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾æä»¶å¤§å° |
| | | //----------------------------------------------------------------------------- |
| | | function GetFileSize(const FileName: string): Int64; |
| | | var |
| | | Handle: THandle; |
| | | FindData: TWin32FindData; |
| | | begin |
| | | Result := -1; |
| | | Handle := FindFirstFile(PChar(FileName), FindData); |
| | | if Handle <> INVALID_HANDLE_VALUE then |
| | | begin |
| | | Windows.FindClose(Handle); |
| | | if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then |
| | | begin |
| | | Int64Rec(Result).Lo := FindData.nFileSizeLow; |
| | | Int64Rec(Result).Hi := FindData.nFileSizeHigh; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾æä»¶å¤¹å¤§å° |
| | | //----------------------------------------------------------------------------- |
| | | function GetFolderSize(FolderName: string): Int64; |
| | | var |
| | | sr: TSearchRec; |
| | | begin |
| | | Result := 0; |
| | | if RightStr(FolderName, 1) <> '\' then FolderName := FolderName + '\'; |
| | | if FindFirst(FolderName + '*.* ', faAnyFile, sr) = 0 then |
| | | repeat |
| | | if (sr.Name <> '.') and (sr.Name <> '..') then begin |
| | | Result := Result + GetFileSize(FolderName + sr.Name); |
| | | if (sr.Attr and faDirectory) <> 0 then |
| | | Result := Result + GetFolderSize(FolderName + sr.Name + '\'); |
| | | end; |
| | | until FindNext(sr) <> 0; |
| | | FindClose(sr); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å徿件çä¿®æ¹æ¶é´ |
| | | //----------------------------------------------------------------------------- |
| | | function GetFileDate(const FileName: string): TDateTime; |
| | | var |
| | | FileDate: Integer; |
| | | begin |
| | | FileDate := FileAge(FileName); |
| | | if FileDate = -1 then |
| | | Result := 0 |
| | | else |
| | | Result := FileDateToDateTime(FileDate); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 设置æä»¶çæ¶é´ |
| | | //----------------------------------------------------------------------------- |
| | | function SetFileDate(const FileName: string; |
| | | CreationTime, LastWriteTime, LastAccessTime: TFileTime): Boolean; |
| | | var |
| | | FileHandle : Integer; |
| | | begin |
| | | FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone); |
| | | try |
| | | if FileHandle <> Integer(INVALID_HANDLE_VALUE) then |
| | | begin |
| | | SetFileTime(FileHandle, @CreationTime, @LastAccessTime, @LastWriteTime); |
| | | Result := True; |
| | | end else |
| | | Result := False; |
| | | finally |
| | | FileClose(FileHandle); |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å¤å¶æä»¶å°ä¸ä¸ªæä»¶å¤¹ |
| | | //----------------------------------------------------------------------------- |
| | | function CopyFileToFolder(FileName, BackupFolder: string): Boolean; |
| | | var |
| | | MainFileName: string; |
| | | begin |
| | | BackupFolder := PathWithSlash(BackupFolder); |
| | | MainFileName := ExtractFileName(FileName); |
| | | ForceDirectories(BackupFolder); |
| | | Result := CopyFile(PChar(FileName), PChar(BackupFolder + MainFileName), False); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: èªå¨è°æ´æä»¶åï¼é²æ¢æä»¶åéå¤ |
| | | // åæ°: |
| | | // FullName - æä»¶çå
¨è·¯å¾å |
| | | // 示ä¾ï¼ |
| | | // NewName := AutoRenameFileName('C:\Downloads\test.dat'); |
| | | // 妿 "C:\Downloads\" ä¸å·²ç»åå¨test.datï¼å彿°è¿å "C:\Downloads\test(1).dat". |
| | | //----------------------------------------------------------------------------- |
| | | function AutoRenameFileName(const FullName: string): string; |
| | | const |
| | | SLeftSym = '('; |
| | | SRightSym = ')'; |
| | | |
| | | // è¥S='test(1)'ï¼åè¿å'(1)'ï¼ è¥S='test(a)'ï¼åè¿å''ã |
| | | function GetNumberSection(const S: string): string; |
| | | var |
| | | I: Integer; |
| | | begin |
| | | Result := ''; |
| | | if Length(S) < 3 then Exit; |
| | | if S[Length(S)] = SRightSym then |
| | | begin |
| | | for I := Length(S) - 2 downto 1 do |
| | | if S[I] = SLeftSym then |
| | | begin |
| | | Result := Copy(S, I, MaxInt); |
| | | Break; |
| | | end; |
| | | end; |
| | | if Length(Result) > 0 then |
| | | begin |
| | | if not IsInt(Copy(Result, 2, Length(Result)-2)) then |
| | | Result := ''; |
| | | end; |
| | | end; |
| | | |
| | | var |
| | | Number: Integer; |
| | | Name, Ext, NumSec: string; |
| | | begin |
| | | Ext := ExtractFileExt(FullName); |
| | | Result := FullName; |
| | | while FileExists(Result) do |
| | | begin |
| | | Name := Copy(Result, 1, Length(Result) - Length(Ext)); |
| | | NumSec := GetNumberSection(Name); |
| | | if Length(NumSec) = 0 then |
| | | begin |
| | | Result := Name + SLeftSym + '1' + SRightSym + Ext; |
| | | end else |
| | | begin |
| | | Number := StrToInt(Copy(NumSec, 2, Length(NumSec)-2)); |
| | | Inc(Number); |
| | | Result := Copy(Name, 1, Length(Name) - Length(NumSec)) + |
| | | SLeftSym + IntToStr(Number) + SRightSym + Ext; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ä¸ä¸ªä¸´æ¶æä»¶å |
| | | // åæ°: |
| | | // Path - ä¸´æ¶æä»¶æå¨è·¯å¾ |
| | | // PrefixStr - æä»¶ååç¼ï¼åä¸ä¸ªåç¬¦ææ |
| | | //----------------------------------------------------------------------------- |
| | | function GetTempFileAtPath(const Path: string; const PrefixStr: string): string; |
| | | var |
| | | I: Integer; |
| | | begin |
| | | I := 1; |
| | | while True do |
| | | begin |
| | | Result := PathWithSlash(Path) + Copy(PrefixStr, 1, 3) + IntToStr(I) + '.tmp'; |
| | | if FileExists(Result) then |
| | | Inc(I) |
| | | else |
| | | Break; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿æä»¶æ¯å¦å
·æåªè¯»å±æ§ |
| | | //----------------------------------------------------------------------------- |
| | | function IsFileReadOnly(const FileName: string): Boolean; |
| | | begin |
| | | Result := (GetFileAttributes(PChar(FileName)) and FILE_ATTRIBUTE_READONLY) <> 0; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å 餿件å°åæ¶ç« |
| | | //----------------------------------------------------------------------------- |
| | | function DeleteFileToRecycle(const FileName: string): Boolean; |
| | | var |
| | | OpStruct: TSHFileOpStruct; |
| | | begin |
| | | FillChar(OpStruct, SizeOf(OpStruct), 0); |
| | | with OpStruct do |
| | | begin |
| | | Wnd := 0; |
| | | wFunc := FO_DELETE; |
| | | pFrom := PChar(FileName); |
| | | fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT; |
| | | end; |
| | | Result := SHFileOperation(OpStruct) = 0; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æè¿°ï¼æ¨¡ç³å¹é
å 餿件 |
| | | //------------------------------------------------------------------------------ |
| | | procedure DeleteFileEx(FileName:string); |
| | | var |
| | | FileDir:string; |
| | | FileStruct:TSHFileOpStruct; |
| | | begin |
| | | FileDir := FileName;// 'C:\temp\*.txt'; |
| | | FileStruct.Wnd :=0; |
| | | FileStruct.wFunc := FO_delete; |
| | | FileStruct.pFrom := Pchar(FileDir+#0); |
| | | FileStruct.fFlags:= FOF_NOCONFIRMATION; |
| | | FileStruct.pTo := ' '; |
| | | if SHFileOperation(FileStruct)=0 then |
| | | MessageBox(0,'注æ: ç»¼åæµè¯å°ä»ªå¨æµéæ°æ®å·²ç»æ¸
空!','æç¤º',MB_OK+MB_ICONINFORMATION); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å é¤ç©ºæé空ç®å½ |
| | | //----------------------------------------------------------------------------- |
| | | function DeleteDirectory(const Dir: string): Boolean; |
| | | var |
| | | FileOp: TSHFileOpStruct; |
| | | begin |
| | | FillChar(FileOp, SizeOf(FileOp), 0); |
| | | with FileOp do |
| | | begin |
| | | Wnd := 0; |
| | | wFunc := FO_DELETE; |
| | | pFrom := PChar(Dir + #0); |
| | | pTo := #0#0; |
| | | fFlags := FOF_NOCONFIRMATION + FOF_SILENT; |
| | | end; |
| | | Result := (SHFileOperation(FileOp) = 0); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿ç®å½æ¯å¦ä¸ºç©º |
| | | //----------------------------------------------------------------------------- |
| | | function IsEmptyDir(sDir: String): Boolean; |
| | | var |
| | | sr: TsearchRec; |
| | | begin |
| | | Result := True; |
| | | if Copy(sDir, Length(sDir) - 1, 1) <> '\' then sDir := sDir + '\'; |
| | | if FindFirst(sDir + '*.*', faAnyFile, sr) = 0 then |
| | | repeat |
| | | if (sr.Name <> '.') and (sr.Name <> '..') then |
| | | begin |
| | | Result := False; |
| | | break; |
| | | end; |
| | | until FindNext(sr) <> 0; |
| | | FindClose(sr); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // è¯»åææ¬æä»¶çä¸ç§æ¹æ³ |
| | | //------------------------------------------------------------------------------ |
| | | function ReadFile(const sFile:String):String; |
| | | var |
| | | sList: TStringlist; |
| | | begin |
| | | sList := TStringList.Create; |
| | | try |
| | | if FileExists(sFile) then begin |
| | | sList.LoadFromFile(sFile); |
| | | Result := sList.GetText; |
| | | end; |
| | | finally |
| | | sList.Free; |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // 读åæä»¶ï¼ |
| | | //1ï¼å
³èæä»¶ï¼AssignFile(pMyFile,'c:\ttt.csv'); |
| | | //2ï¼æå¼æä»¶ï¼Reset(pMyFile); |
| | | //3ï¼è¯»åä¸è¡ï¼Readln(pMyFile,pStr); |
| | | //4ï¼å
³éæä»¶ï¼CloseFile(pMyFile); |
| | | //------------------------------------------------------------------------------ |
| | | function ReadLogFile(const sFile:String):String; |
| | | var |
| | | pMyFile:textfile; |
| | | pStr : string; |
| | | begin |
| | | try |
| | | Assignfile(pMyFile,sFile); |
| | | if FileExists(sFile) then begin |
| | | Reset(pMyFile); |
| | | while not Eof(pMyFile) do begin |
| | | Readln(pMyFile,pStr); |
| | | //next; |
| | | end; |
| | | end; |
| | | finally |
| | | CloseFile(pMyFile); |
| | | end; |
| | | Result := pStr; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // åå
¥æä»¶ï¼ |
| | | //1ï¼å
³èæä»¶ï¼AssignFile(pMyFile,'c:\ttt.csv'); |
| | | //2ï¼æå¼æä»¶ï¼ReWrite(pMyFile); //妿æä»¶ä¸åå¨,ç¨ReWriteæå¼ |
| | | // Append(pMyFile); //妿æä»¶å·²ç»åå¨,追å å
容ï¼ç¨Appendæå¼ |
| | | //3ï¼åå
¥ä¸è¡ï¼WriteLn(pMyFile,pStr); |
| | | //4ï¼å
³éæä»¶ï¼CloseFile(pMyFile); |
| | | //------------------------------------------------------------------------------ |
| | | procedure WriteLogFile(const sFile,sMsg: string); |
| | | var |
| | | pMyFile: textFile; |
| | | begin |
| | | try |
| | | AssignFile(pMyFile,sFile); |
| | | if FileExists(sFile) then |
| | | Append(pMyFile) |
| | | else |
| | | ReWrite(pMyFile); |
| | | WriteLn(pMyFile,sMsg); |
| | | finally |
| | | CloseFile(pMyFile); |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 设置èªå¯å¨ |
| | | // åæ°: |
| | | // AutoRun - æ¯å¦èªå¯å¨ |
| | | // CurrentUser - æ¯å¦åªå¯¹å½åç¨æ·ææ |
| | | // AppTitle - åºç¨ç¨åºçæ é¢ï¼å¦ "MSN" |
| | | // AppPara - èªå¯å¨çå½ä»¤è¡åæ°ï¼å¦ "/min" |
| | | //----------------------------------------------------------------------------- |
| | | function SetAutoRunOnStartup(AutoRun, CurrentUser: Boolean; |
| | | AppTitle, AppName, AppPara: string): Boolean; |
| | | var |
| | | R: TRegistry; |
| | | Key : string; |
| | | begin |
| | | Result := True; |
| | | try |
| | | R := TRegistry.Create; |
| | | try |
| | | if CurrentUser then |
| | | R.RootKey := HKEY_CURRENT_USER |
| | | else |
| | | R.RootKey := HKEY_LOCAL_MACHINE; |
| | | Key := '\Software\Microsoft\Windows\CurrentVersion\Run\'; |
| | | |
| | | if AppTitle = '' then AppTitle := Application.Title; |
| | | if AppName = '' then AppName := Application.ExeName; |
| | | if AppPara <> '' then AppName := AppName + ' ' + AppPara; |
| | | |
| | | if R.OpenKey(Key, True) then |
| | | begin |
| | | if AutoRun then |
| | | R.WriteString(AppTitle, AppName) |
| | | else |
| | | R.DeleteValue(AppTitle); |
| | | end; |
| | | finally |
| | | R.Free; |
| | | end; |
| | | except |
| | | Result := False; |
| | | end; |
| | | end; |
| | | |
| | | {弿ºè¿è¡ã} |
| | | procedure AutoRun(Flag: Boolean; title:String); |
| | | var |
| | | tempreg: TRegistry; |
| | | begin |
| | | tempreg := TRegistry.Create; |
| | | try |
| | | tempreg.RootKey := HKEY_CURRENT_USER; |
| | | tempreg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True); |
| | | if Flag then |
| | | tempreg.WriteString(title, '"' + ParamStr(0) + '"') |
| | | else begin |
| | | tempreg.DeleteValue(title); |
| | | end; |
| | | finally |
| | | tempreg.Closekey; |
| | | tempreg.Free; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 读注å表æå®é® |
| | | // åæ°: |
| | | // CurrentUser - æ¯å¦åªå¯¹å½åç¨æ·ææ |
| | | // Name - åºç¨ç¨åºçæ é¢ï¼å¦ "MSN" |
| | | // è¿åï¼Value - è¿åName对åºå¼ |
| | | //----------------------------------------------------------------------------- |
| | | function ReadReg(const Name: String; CurrentUser: Boolean=true):String; |
| | | var |
| | | R: TRegistry; |
| | | Key : String; |
| | | begin |
| | | Result := ''; |
| | | R := TRegistry.Create; |
| | | try |
| | | if CurrentUser then |
| | | R.RootKey := HKEY_CURRENT_USER |
| | | else |
| | | R.RootKey := HKEY_LOCAL_MACHINE; |
| | | Key := '\Software\liliangting\'; |
| | | |
| | | if R.OpenKey(Key,True) then |
| | | Result := R.ReadString(Name); |
| | | finally |
| | | R.Free; |
| | | end; |
| | | end; |
| | | |
| | | //åæ³¨å表æå®å¼ |
| | | function WriteReg(const Name,Value: String; CurrentUser: Boolean=true):Boolean; |
| | | var |
| | | R: TRegistry; |
| | | Key : String; |
| | | begin |
| | | Result := false; |
| | | R := TRegistry.Create; |
| | | try |
| | | if CurrentUser then |
| | | R.RootKey := HKEY_CURRENT_USER |
| | | else |
| | | R.RootKey := HKEY_LOCAL_MACHINE; |
| | | Key := '\Software\liliangting\'; |
| | | |
| | | if R.OpenKey(Key,True) then begin |
| | | R.WriteString(Name, Value); |
| | | Result := true; |
| | | end; |
| | | finally |
| | | R.Free; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: æä»¶å
³è |
| | | // åæ°: |
| | | // FileExt - æä»¶æ©å±å |
| | | // FileKey - 该æä»¶ç±»åçè±æç¬¦å· |
| | | // SoftName - 软件çåå (ç¨äºæ¾ç¤ºå¨èµæºç®¡çå¨çå³é®èåä¸) |
| | | // FileDesc - æä»¶ç±»åçæè¿° |
| | | // IconIndex - 徿 åºå·(0-based) |
| | | // Flush - æ¯å¦å·æ°Windowsç¼å² |
| | | // 示ä¾: |
| | | // AssociateFile('.edf', 'EDiaryFile', 'EDiary', 'çµåæ¥è®°æ¬æä»¶'); |
| | | //----------------------------------------------------------------------------- |
| | | function AssociateFile(const FileExt, FileKey, SoftName, FileDesc: string; |
| | | IconIndex: Integer; Flush: Boolean): Boolean; |
| | | var |
| | | R: TRegistry; |
| | | begin |
| | | Result := True; |
| | | try // Win2000ä¸åéç¨æ·æ§è¡æ¤æä½å°ä¼æ¥é |
| | | R := TRegistry.Create; |
| | | try |
| | | R.RootKey := HKEY_CLASSES_ROOT; |
| | | R.OpenKey('\' + FileExt, True); |
| | | R.WriteString('', FileKey); |
| | | R.OpenKey('\' + FileKey, True); |
| | | R.WriteString('', FileDesc); |
| | | R.OpenKey('\' + FileKey + '\Shell\Open\Command', True); |
| | | R.WriteString('', Application.ExeName + ' "%1"'); |
| | | R.OpenKey('\' + FileKey + '\Shell\Open with ' + SoftName + '\Command', True); |
| | | R.WriteString('', Application.ExeName + ' "%1"'); |
| | | R.OpenKey('\' + FileKey + '\DefaultIcon', True); |
| | | R.WriteString('', Application.ExeName + ',' + IntToStr(IconIndex)); |
| | | finally |
| | | R.Free; |
| | | end; |
| | | if Flush then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); |
| | | except |
| | | Result := False; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 卿³¨å表ä¸è®°ä¸ç¨åºè·¯å¾ |
| | | //----------------------------------------------------------------------------- |
| | | function SaveAppPath(const CompanyName, SoftName, Version: string): Boolean; |
| | | const |
| | | SPathKey = 'Path'; |
| | | var |
| | | R: TRegistry; |
| | | Key: string; |
| | | begin |
| | | Result := True; |
| | | try |
| | | R := TRegistry.Create; |
| | | try |
| | | R.RootKey := HKEY_CURRENT_USER; |
| | | Key := '\Software\' + CompanyName + '\' + SoftName + '\' + Version + '\'; |
| | | if R.OpenKey(Key, True) then |
| | | R.WriteString(SPathKey, GetModulePath); |
| | | finally |
| | | R.Free; |
| | | end; |
| | | except |
| | | Result := False; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 仿³¨å表ä¸è¯»åç¨åºè·¯å¾ |
| | | //----------------------------------------------------------------------------- |
| | | function ReadAppPath(const CompanyName, SoftName, Version: string; var Path: string): Boolean; |
| | | const |
| | | SPathKey = 'Path'; |
| | | var |
| | | R: TRegistry; |
| | | Key: string; |
| | | begin |
| | | try |
| | | R := TRegistry.Create; |
| | | try |
| | | R.RootKey := HKEY_CURRENT_USER; |
| | | Key := '\Software\' + CompanyName + '\' + SoftName + '\' + Version + '\'; |
| | | Result := R.OpenKey(Key, False); |
| | | if Result then |
| | | Path := R.ReadString(SPathKey); |
| | | finally |
| | | R.Free; |
| | | end; |
| | | except |
| | | Result := False; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: FileTime -> LocalSystemTime |
| | | //----------------------------------------------------------------------------- |
| | | function FileTimeToLocalSystemTime(FTime: TFileTime): TSystemTime; |
| | | var |
| | | STime: TSystemTime; |
| | | begin |
| | | FileTimeToLocalFileTime(FTime, FTime); |
| | | FileTimeToSystemTime(FTime, STime); |
| | | Result := STime; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: LocalSystemTime -> FileTime |
| | | //----------------------------------------------------------------------------- |
| | | function LocalSystemTimeToFileTime(STime: TSystemTime): TFileTime; |
| | | var |
| | | FTime: TFileTime; |
| | | begin |
| | | SystemTimeToFileTime(STime, FTime); |
| | | LocalFileTimeToFileTime(FTime, FTime); |
| | | Result := FTime; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¿å TDateTime ä¸çæ¥æé¨å |
| | | //----------------------------------------------------------------------------- |
| | | function GetDatePart(DateTime: TDateTime): TDate; |
| | | begin |
| | | Result := Trunc(DateTime); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¿å TDateTime ä¸çæ¶é´é¨å |
| | | //----------------------------------------------------------------------------- |
| | | function GetTimePart(DateTime: TDateTime): TTime; |
| | | begin |
| | | Result := DateTime - Trunc(DateTime); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | //è·åCPUIDå¹¶è¾åºå符串 |
| | | //----------------------------------------------------------------------------- |
| | | function GetCPUID: TCPUID; assembler; register; |
| | | asm |
| | | PUSH EBX {Save affected register} |
| | | PUSH EDI |
| | | MOV EDI,EAX {@Resukt} |
| | | MOV EAX,1 |
| | | DW $A20F {CPUID Command} |
| | | STOSD {CPUID[1]} |
| | | MOV EAX,EBX |
| | | STOSD {CPUID[2]} |
| | | MOV EAX,ECX |
| | | STOSD {CPUID[3]} |
| | | MOV EAX,EDX |
| | | STOSD {CPUID[4]} |
| | | POP EDI {Restore registers} |
| | | POP EBX |
| | | end; |
| | | |
| | | //è¾åºå½æ°: è·åCPUIDå¹¶è¾åºå符串 |
| | | function GetCPUIDStr:String; |
| | | var |
| | | CPUID:TCPUID; |
| | | begin |
| | | CPUID:=GetCPUID; |
| | | Result:=IntToStr(CPUID[1])+IntToStr(CPUID[2])+IntToStr(CPUID[3])+IntToStr(CPUID[4]); |
| | | end; |
| | | |
| | | //è·åç½å¡MACå°åé¨å |
| | | //è°ç¨ç³»ç»å½æ°è·åå½åå¯ç¨çmac |
| | | function GetMacAddress: string; |
| | | var |
| | | Lib: Cardinal; |
| | | Func: function(GUID: PGUID): Longint; stdcall; |
| | | GUID1, GUID2: TGUID; |
| | | begin |
| | | Result := '000000000000'; |
| | | Lib := LoadLibrary('rpcrt4.dll'); |
| | | if Lib <> 0 then |
| | | begin |
| | | if Win32Platform <>VER_PLATFORM_WIN32_NT then |
| | | @Func := GetProcAddress(Lib, 'UuidCreate') |
| | | else @Func := GetProcAddress(Lib, 'UuidCreateSequential'); |
| | | if Assigned(Func) then |
| | | begin |
| | | if (Func(@GUID1) = 0) and |
| | | (Func(@GUID2) = 0) and |
| | | (GUID1.D4[2] = GUID2.D4[2]) and |
| | | (GUID1.D4[3] = GUID2.D4[3]) and |
| | | (GUID1.D4[4] = GUID2.D4[4]) and |
| | | (GUID1.D4[5] = GUID2.D4[5]) and |
| | | (GUID1.D4[6] = GUID2.D4[6]) and |
| | | (GUID1.D4[7] = GUID2.D4[7]) then |
| | | begin |
| | | Result :=IntToHex(GUID1.D4[2], 2) + IntToHex(GUID1.D4[3], 2) + |
| | | IntToHex(GUID1.D4[4], 2) + IntToHex(GUID1.D4[5], 2) + |
| | | IntToHex(GUID1.D4[6], 2) + IntToHex(GUID1.D4[7], 2); |
| | | end; |
| | | end; |
| | | FreeLibrary(Lib); |
| | | end; |
| | | end; |
| | | |
| | | //è·å宿¶å
å使ç¨é |
| | | function GetMemUse: Cardinal; |
| | | function GetProcessMemUse(PID: Cardinal): Cardinal; |
| | | var |
| | | pmc: pprocess_memory_counters;//uses psApi |
| | | ProcHandle: HWND; |
| | | iSize: DWORD; |
| | | begin |
| | | Result := 0; |
| | | iSize := SizeOf(_PROCESS_MEMORY_COUNTERS); |
| | | GetMem(pmc, iSize); |
| | | try |
| | | pmc^.cb := iSize; |
| | | ProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID); |
| | | if GetProcessMemoryInfo(ProcHandle, pmc, iSize) then |
| | | Result := pmc^.WorkingSetSize; |
| | | finally |
| | | FreeMem(pmc); |
| | | end; |
| | | end; |
| | | begin |
| | | Result := GetProcessMemUse(GetCurrentProcessId); |
| | | end; |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å¼å§çå¾
|
| | | //----------------------------------------------------------------------------- |
| | | procedure BeginWait; |
| | | begin |
| | | Screen.Cursor := crHourGlass; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 忢çå¾
|
| | | //----------------------------------------------------------------------------- |
| | | procedure EndWait; |
| | | begin |
| | | Screen.Cursor := crDefault; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: ç¸å½äºCè¯è¨ä¸ç exp ? v1 : v2 |
| | | //----------------------------------------------------------------------------- |
| | | function Iif(Value: Boolean; Value1, Value2: Variant): Variant; |
| | | begin |
| | | if Value then Result := Value1 |
| | | else Result := Value2; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å V1, V2 ä¸çæå°å¼ |
| | | //----------------------------------------------------------------------------- |
| | | function Min(V1, V2: Integer): Integer; |
| | | begin |
| | | if V1 > V2 then Result := V2 |
| | | else Result := V1; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å V1, V2 ä¸çæå¤§å¼ |
| | | //----------------------------------------------------------------------------- |
| | | function Max(V1, V2: Integer): Integer; |
| | | begin |
| | | if V1 > V2 then Result := V1 |
| | | else Result := V2; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è°æ´ Valueï¼ä½¿ (Value >= Min) and (Value <= Max) |
| | | //----------------------------------------------------------------------------- |
| | | function TrimValue(Value, Min, Max: Integer): Integer; |
| | | begin |
| | | if Value < Min then Value := Min; |
| | | if Value > Max then Value := Max; |
| | | Result := Value; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: äº¤æ¢ V1, V2 |
| | | //----------------------------------------------------------------------------- |
| | | procedure Swap(var V1, V2: Integer); |
| | | var |
| | | Temp: Integer; |
| | | begin |
| | | Temp := V1; |
| | | V1 := V2; |
| | | V2 := Temp; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾ä¸¤ä¸ª Ticks ä¹å·® |
| | | //----------------------------------------------------------------------------- |
| | | function GetTickDiff(const OldTickCount, NewTickCount: Cardinal): Cardinal; |
| | | begin |
| | | if NewTickCount >= OldTickCount then |
| | | begin |
| | | Result := NewTickCount - OldTickCount; |
| | | end else |
| | | begin |
| | | Result := High(Cardinal) - OldTickCount + NewTickCount; |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: éå¶ç©å½¢åºåä¸è¦è¶
åºå±å¹èå´ |
| | | // åæ°: |
| | | // Rect - å¾
è°æ´çç©å½¢åºå |
| | | // AllVisible - ç©å½¢åºåæ¯ä¸æ¯è¦å
¨é¨å¯è§ |
| | | // è¿å: |
| | | // è°æ´åçç©å½¢åºå (宽ãé«ä¸å) |
| | | //----------------------------------------------------------------------------- |
| | | function RestrictRectInScr(Rect: TRect; AllVisible: Boolean): TRect; |
| | | const |
| | | Space = 100; |
| | | var |
| | | ScrRect: TRect; |
| | | W, H: Integer; |
| | | begin |
| | | ScrRect := Screen.WorkAreaRect; |
| | | W := Rect.Right - Rect.Left; |
| | | H := Rect.Bottom - Rect.Top; |
| | | |
| | | if AllVisible then |
| | | begin |
| | | if W > (ScrRect.Right - ScrRect.Left) then W := (ScrRect.Right - ScrRect.Left); |
| | | if H > (ScrRect.Bottom - ScrRect.Top) then H := (ScrRect.Bottom - ScrRect.Top); |
| | | if Rect.Right > ScrRect.Right then |
| | | Rect.Left := ScrRect.Right - W; |
| | | if Rect.Bottom > ScrRect.Bottom then Rect.Top := ScrRect.Bottom - H; |
| | | if Rect.Left < ScrRect.Left then Rect.Left := ScrRect.Left; |
| | | if Rect.Top < ScrRect.Top then Rect.Top := ScrRect.Top; |
| | | Rect.Right := Rect.Left + W; |
| | | Rect.Bottom := Rect.Top + H; |
| | | end else |
| | | begin |
| | | if Rect.Left >= ScrRect.Right - Space then |
| | | Rect.Left := ScrRect.Right - Space; |
| | | if Rect.Top >= ScrRect.Bottom - Space then |
| | | Rect.Top := ScrRect.Bottom - Space; |
| | | if Rect.Right <= ScrRect.Left + Space then |
| | | Rect.Left := ScrRect.Left - (Rect.Right - Rect.Left) + Space; |
| | | if Rect.Top < ScrRect.Top then |
| | | Rect.Top := ScrRect.Top; |
| | | Rect.Right := Rect.Left + W; |
| | | Rect.Bottom := Rect.Top + H; |
| | | end; |
| | | Result := Rect; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾èªèº« DLLæOCXæEXE æå¨çè·¯å¾ |
| | | // 注æ: ç¨ Application.ExeName æ æ³åå¾ ActiveX çè·¯å¾ã |
| | | //----------------------------------------------------------------------------- |
| | | function GetModulePath: string; |
| | | var |
| | | S: array[0..MAX_PATH] of Char; |
| | | begin |
| | | GetModuleFileName(HInstance, S, MAX_PATH); |
| | | Result := PathWithSlash(ExtractFilePath(S)); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾èªèº« DLLæOCXæEXE æå¨è·¯å¾çåç®å½è·¯å¾ |
| | | //----------------------------------------------------------------------------- |
| | | function GetModuleSubPath(const SubFolder: string = ''): string; |
| | | begin |
| | | Result := GetModulePath + SubFolder; |
| | | Result := PathWithSlash(Result); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾èªèº« EXE æå¨è·¯å¾ |
| | | //----------------------------------------------------------------------------- |
| | | function GetAppPath: string; |
| | | begin |
| | | Result := ExtractFilePath(Application.ExeName); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: åå¾èªèº« EXE æå¨è·¯å¾çåç®å½è·¯å¾ |
| | | //----------------------------------------------------------------------------- |
| | | function GetAppSubPath(const SubFolder: string): string; |
| | | begin |
| | | Result := GetAppPath + SubFolder; |
| | | Result := PathWithSlash(Result); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¿åç©å½¢ R ç宽度 |
| | | //----------------------------------------------------------------------------- |
| | | function GetRectWidth(const R: TRect): Integer; |
| | | begin |
| | | Result := R.Right - R.Left; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: è¿åç©å½¢ R çé«åº¦ |
| | | //----------------------------------------------------------------------------- |
| | | function GetRectHeight(const R: TRect): Integer; |
| | | begin |
| | | Result := R.Bottom - R.Top; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: ç»å¶æè¾¹æ¡çæå |
| | | //----------------------------------------------------------------------------- |
| | | procedure DrawStrokedText(Canvas: TCanvas; X, Y: Integer; const Text: string; |
| | | FontColor, StrokedColor, SmoothColor: TColor); |
| | | var |
| | | SaveStyle: TBrushStyle; |
| | | SaveFontColor: TColor; |
| | | begin |
| | | SaveStyle := Canvas.Brush.Style; |
| | | SaveFontColor := Canvas.Font.Color; |
| | | try |
| | | Canvas.Brush.Style := bsClear; |
| | | |
| | | Canvas.Font.Color := SmoothColor; |
| | | Canvas.TextOut(X - 1, Y - 1, Text); |
| | | Canvas.TextOut(X - 1, Y + 1, Text); |
| | | Canvas.TextOut(X + 1, Y - 1, Text); |
| | | Canvas.TextOut(X + 1, Y + 1, Text); |
| | | |
| | | Canvas.Font.Color := StrokedColor; |
| | | Canvas.TextOut(X, Y - 1, Text); |
| | | Canvas.TextOut(X, Y + 1, Text); |
| | | Canvas.TextOut(X + 1, Y, Text); |
| | | Canvas.TextOut(X - 1, Y, Text); |
| | | |
| | | Canvas.Font.Color := FontColor; |
| | | Canvas.TextOut(X, Y, Text); |
| | | finally |
| | | Canvas.Font.Color := SaveFontColor; |
| | | Canvas.Brush.Style := SaveStyle; |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //è¿åå±å¹å辨ç宽度 |
| | | //------------------------------------------------------------------------------ |
| | | function GetScreenWidth:Integer; |
| | | var |
| | | sysinfo: TSystemInfo; |
| | | begin |
| | | GetSystemInfo(sysinfo); |
| | | Result:= GetSystemMetrics(SM_CXSCREEN); //å辨ç宽 |
| | | //y:= GetSystemMetrics(SM_CYSCREEN); //å辨çé« |
| | | end; |
| | | //è¿åå±å¹å辨çé«åº¦ |
| | | function GetScreenHeight:Integer; |
| | | var |
| | | sysinfo: TSystemInfo; |
| | | begin |
| | | GetSystemInfo(sysinfo); |
| | | //x:= GetSystemMetrics(SM_CXSCREEN); //å辨ç宽 |
| | | Result:= GetSystemMetrics(SM_CYSCREEN); //å辨çé« |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //è¿åæ¡é¢é«åº¦å宽度 |
| | | //------------------------------------------------------------------------------ |
| | | function GetDesktopWidth:Integer; |
| | | var |
| | | hRect : TRect; |
| | | begin |
| | | SystemParametersInfo(SPI_GETWORKAREA,0,@hRect, 0); |
| | | Result:= hRect.Right; //è¿å宽度 |
| | | end; |
| | | function GetDesktopHeight:Integer; |
| | | var |
| | | hRect : TRect; |
| | | begin |
| | | SystemParametersInfo(SPI_GETWORKAREA,0,@hRect, 0); |
| | | Result:= hRect.Bottom; //è¿å宽度 |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 夿å符串æ¯å¦ä¸ºä»»æé¿åº¦å¸¦æ´æ° |
| | | //----------------------------------------------------------------------------- |
| | | function IsBigInt(const S:String): Boolean; //åéS为è¦å¤æçå符串,è¿åtrueåæ£ç¡® |
| | | var |
| | | i : integer; |
| | | begin |
| | | Result:=True; |
| | | for i :=1 to length(s) do |
| | | if not (s[i] in ['0'..'9']) then //夿å符串æ¯ä¸ªå符å³s[i],æ¯å¦ä¸º"0"å°'9"æ°å |
| | | Result:=False; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //2011-10-26 æ°å¢ComboBox_XPMan_KeyPress彿°,è§£å³ComboBoxæ§ä»¶è¾å
¥ä¹±ç é®é¢, |
| | | // å¨KeyPressäºä»¶ä¸æ§è¡ComboBox_XPMan_KeyPresså³å¯è§£å³ã |
| | | //------------------------------------------------------------------------------ |
| | | Function IsNTSystem:Boolean; |
| | | var |
| | | info:OSVERSIONINFO; |
| | | begin |
| | | info.dwOSVersionInfoSize:=sizeof(info); |
| | | GetVersionEx(info); |
| | | Result:=info.dwPlatformId=VER_PLATFORM_WIN32_NT; |
| | | end; |
| | | |
| | | procedure ComboBox_XPMan_KeyPress(Sender:TObject;var Key: Char); |
| | | {å彿°,å¤çæ¶æ¯} |
| | | function HasSelectedText(CB_HWND:HWND; var StartPos, EndPos: DWORD): Boolean; |
| | | begin |
| | | SendMessage(CB_HWND, CB_GETEDITSEL, Integer(@StartPos), |
| | | Integer(@EndPos)); |
| | | Result := EndPos > StartPos; |
| | | end; |
| | | var |
| | | StartPos, EndPos: DWORD; |
| | | OldText, SaveText: WideString; //å
³é®å¨æ¤ï¼ä¸é´å符串è¦è®¾ä¸ºå®½å符串å |
| | | LastByte: Integer; |
| | | TheCB:TComboBox; |
| | | CBHandle:HWND; |
| | | begin |
| | | if not IsNTSystem then Exit; //éNTç³»ç»åéåº |
| | | |
| | | TheCB:=TComboBox(Sender); |
| | | CBHandle:=TheCB.Handle; |
| | | |
| | | if not TheCB.AutoComplete then exit; |
| | | |
| | | if ord(Key) = VK_BACK then |
| | | begin |
| | | SaveText := TheCB.Text; |
| | | if HasSelectedText(CBHandle, StartPos, EndPos) then |
| | | begin |
| | | SendMessage(CBHandle,CB_GETEDITSEL,Integer(@StartPos),Integer(@EndPos)); |
| | | Delete(SaveText, StartPos + 1, EndPos - StartPos); |
| | | SendMessage(CBHandle, CB_SETCURSEL, -1, 0); |
| | | TheCB.Text := SaveText; |
| | | SendMessage(CBHandle,CB_SETEDITSEL,0,MakeLParam(StartPos,StartPos)); |
| | | Key := #0; |
| | | end |
| | | else if(TheCB.Style in [csDropDown,csSimple]) and (Length(SaveText)>0) then |
| | | begin |
| | | LastByte := StartPos; |
| | | OldText := Copy(SaveText, 1, LastByte - 1); |
| | | SendMessage(CBHandle, CB_SETCURSEL, -1, 0); |
| | | TheCB.Text := OldText + Copy(SaveText, EndPos + 1, MaxInt); |
| | | SendMessage(CBHandle, CB_SETEDITSEL, 0, MakeLParam(LastByte - 1,LastByte - 1)); |
| | | Key := #0; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //-------------------------------------------------- |
| | | // 彿°: æ ¼å¼åæ°å, ææå®ä½æ°æ©å±æ°å,转æ¢å符串 |
| | | // å
¥å: å¾
æ ¼å¼åçæ°å,æ©å±ä½æ° |
| | | // è¿å: 转æ¢çå符串 |
| | | // ä¾å¦: formatNum(12,4) = '0012' |
| | | //-------------------------------------------------- |
| | | Function formatNum(Number, Length: Integer): string; |
| | | var |
| | | i : Integer; |
| | | s1: string; |
| | | begin |
| | | s1:=''; |
| | | for i:=0 to Length-1 do |
| | | s1:=s1+'0'; |
| | | Result:=RightStr(s1+IntToStr(Number), Length); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // 彿°ï¼æ ¼å¼åå符串ï¼å åå¼å· |
| | | // å
¥åï¼å¾
æ ¼å¼åçå符串 |
| | | // è¿åï¼è½¬æ¢çå符串 |
| | | // ä¾å¦ï¼Q('abc') = ''abc'' |
| | | //------------------------------------------------------------------------------ |
| | | Function Q(s1:string):string; |
| | | begin |
| | | Result:=Quotedstr(s1); |
| | | end; |
| | | |
| | | //æ å·æ°å»¶æ¶å½æ° |
| | | procedure Delay(MSecs: Longint); |
| | | var |
| | | FirstTickCount, Now: Longint; |
| | | begin |
| | | FirstTickCount := GetTickCount(); |
| | | repeat |
| | | Application.ProcessMessages; |
| | | Now := GetTickCount(); |
| | | until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // 彿°: èªå®ä¹çº¸å¼ æå°å½æ° |
| | | // 以ä¸ç¨åºå°æå°æºçº¸å¼ 设为ï¼114mm*190mmï¼ |
| | | // Uses Printers; |
| | | //------------------------------------------------------------------------------ |
| | | procedure PreparePrinter(Width,Height:Integer); |
| | | var |
| | | aDevice: array[0..CCHDEVICENAME-1] of Char; |
| | | aDriver: array[0..MAX_PATH-1] of Char; |
| | | aPort: array[0..31] of Char; |
| | | hDevMode: THandle; |
| | | pDevMode: PDeviceMode; |
| | | begin |
| | | //è·åæå°æºDeviceModeç奿 |
| | | Printer.GetPrinter(aDevice, aDriver, aPort, hDevMode); |
| | | if hDevMode <> 0 then |
| | | begin |
| | | //è·åæåDeviceModeçæé |
| | | pDevMode:=GlobalLock(hDevMode); |
| | | if pDevMode <> nil then |
| | | begin |
| | | pDevMode^.dmPaperSize:= DMPAPER_USER; //èªå®ä¹çº¸å¼ :256 |
| | | pDevMode^.dmPaperLength:=Width*10; |
| | | pDevMode^.dmPaperWidth:= Height*10; |
| | | pDevMode^.dmFields:=pDevMode^.dmFields or DM_PAPERSIZE;//以ä¸ä¸å¥æ¯å¯¹åºdmFieldsæåç½®ä½ |
| | | pDevMode^.dmFields:=pDevMode^.dmFields or DM_PAPERLENGTH; |
| | | pDevMode^.dmFields:=pDevMode^.dmFields or DM_PAPERWIDTH; |
| | | ResetDC(Printer.Handle, pDevMode^); //设置æå°æºè®¾å¤å¥æ |
| | | GlobalUnlock(hDevMode); |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æè¿°ï¼ç¨åºç¬¦åè¦æ±æ¶èªå¨éæ¯ä¸»ç¨åº |
| | | //------------------------------------------------------------------------------ |
| | | procedure DeleteMe; |
| | | var |
| | | BatchFile: TextFile; |
| | | BatchFileName: string; |
| | | ProcessInfo: TProcessInformation; |
| | | StartUpInfo: TStartupInfo; |
| | | begin |
| | | BatchFileName := ExtractFilePath(ParamStr(0)) + '_deleteme.bat'; |
| | | AssignFile(BatchFile, BatchFileName); |
| | | Rewrite(BatchFile); |
| | | |
| | | Writeln(BatchFile, ':try'); |
| | | Writeln(BatchFile, 'del "' + ParamStr(0) + '"'); |
| | | Writeln(BatchFile, |
| | | 'if exist "' + ParamStr(0) + '"' + ' goto try'); |
| | | Writeln(BatchFile, 'del %0'); |
| | | CloseFile(BatchFile); |
| | | |
| | | FillChar(StartUpInfo, SizeOf(StartUpInfo), $00); |
| | | StartUpInfo.dwFlags := STARTF_USESHOWWINDOW; |
| | | StartUpInfo.wShowWindow := SW_HIDE; |
| | | if CreateProcess(nil, PChar(BatchFileName), nil, nil, |
| | | False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, |
| | | ProcessInfo) then |
| | | begin |
| | | CloseHandle(ProcessInfo.hThread); |
| | | CloseHandle(ProcessInfo.hProcess); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å¨ç³»ç»è¿è¡æ¶èªå¨æ¹åç³»ç»çæ¥ææ ¼å¼ |
| | | // å
¥å: æ¥ææ ¼å¼,å¦ yyyy-MM-dd |
| | | //------------------------------------------------------------------------------ |
| | | procedure SetSystemDateFormat(sFormat:string='yyyy-MM-dd'); |
| | | begin |
| | | SetLocaleInfo(LOCALE_SLONGDATE,LOCALE_SDATE,'- '); |
| | | SetLocaleInfo(LOCALE_SLONGDATE,LOCALE_SSHORTDATE, PChar(sFormat)); |
| | | SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0); |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: 对å符串è¿è¡ base16 ç¼ç |
| | | // åæ°: |
| | | // Value - å¾
ç¼ç çå符串 |
| | | // è¿å: |
| | | // ç¼ç åçå符串 |
| | | //----------------------------------------------------------------------------- |
| | | function Base16Encode(const Src: AnsiString): AnsiString; |
| | | const |
| | | H: array[0..15] of AnsiChar = '0123456789ABCDEF'; |
| | | var |
| | | S: PByte; |
| | | D: PAnsiChar; |
| | | SrcBytes: Integer; |
| | | begin |
| | | Result := ''; |
| | | SrcBytes := Length(Src); |
| | | SetLength(Result, SrcBytes * 2); |
| | | if SrcBytes = 0 then Exit; |
| | | D := PAnsiChar(Result); |
| | | S := PByte(Src); |
| | | while SrcBytes > 0 do |
| | | begin |
| | | D^ := H[S^ shr 4]; Inc(D); |
| | | D^ := H[S^ and $F]; Inc(D); |
| | | Inc(S); |
| | | Dec(SrcBytes); |
| | | end; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | // æè¿°: å° base16 ç¼ç çå
容è¿åæå符串 |
| | | // åæ°: |
| | | // Value - å¾
è§£ç çå符串 |
| | | // è¿å: |
| | | // è§£ç åçå符串 |
| | | //----------------------------------------------------------------------------- |
| | | function Base16Decode(const Src: AnsiString): AnsiString; |
| | | var |
| | | D: PByte; |
| | | V: Byte; |
| | | S: PAnsiChar; |
| | | SrcBytes: Integer; |
| | | begin |
| | | Result := ''; |
| | | SrcBytes := Length(Src); |
| | | SetLength(Result, (SrcBytes +1) div 2); |
| | | D := PByte(Result); |
| | | S := PAnsiChar(Src); |
| | | while SrcBytes > 0 do |
| | | begin |
| | | V := Byte(UpCase(S^)); |
| | | Inc(S); |
| | | if V > Byte('9') then D^ := V - Byte('A') + 10 |
| | | else D^ := V - Byte('0'); |
| | | V := Byte(UpCase(S^)); |
| | | Inc(S); |
| | | D^ := D^ shl 4; |
| | | if V > Byte('9') then D^ := D^ or (V - Byte('A') + 10) |
| | | else D^ := D^ or (V - Byte('0')); |
| | | Dec(SrcBytes, 2); |
| | | Inc(D); |
| | | end; |
| | | SetLength(Result, PAnsiChar(D) - PAnsiChar(Result)); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //ä¸ä¸ªéè¿ActiveXè·åGUIDç彿° |
| | | //è¿åå¼ï¼GUIDå符串 |
| | | //------------------------------------------------------------------------------ |
| | | Function GetGUID:string; |
| | | var |
| | | sGUID : string; |
| | | TmpGUID: TGUID; |
| | | begin |
| | | if CoCreateGUID(TmpGUID) = S_OK then |
| | | sGUID := GUIDToString(TmpGUID) |
| | | else |
| | | sGUID := '0'; |
| | | Result:=sGUID; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //å»¶æ¶å½æ°ï¼MSecsåä½ä¸ºæ¯«ç§(ååä¹1ç§) |
| | | //è¾å
¥å¼ï¼æ¯«ç§,å»¶æ¶æ¶é´ |
| | | //------------------------------------------------------------------------------ |
| | | procedure Delay1(MSecs: Longint); |
| | | var |
| | | First: Longint; |
| | | begin |
| | | for First:=1 to 10 do |
| | | begin |
| | | Sleep(Trunc(Msecs/10)); |
| | | //Application.ProcessMessages; |
| | | end; |
| | | end; |
| | | |
| | | procedure Delay2(MSecs: Longint); |
| | | var |
| | | FirstTickCount, Now: Longint; |
| | | begin |
| | | FirstTickCount := GetTickCount(); |
| | | repeat |
| | | Application.ProcessMessages; |
| | | Now := GetTickCount(); |
| | | until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //è·å软件çæä¿¡æ¯ |
| | | //è¾å
¥å¼ï¼åºç¨ç¨åºå |
| | | //è¿åå¼ï¼åå§åå
¨å±åéglxxx , å
æ¬äº§ååç§°ï¼äº§åçæ¬ï¼æä»¶æè¿°ï¼çæï¼æä»¶çæ¬ï¼ |
| | | // å
¬å¸åç§°ï¼æ³¨ååæ ï¼å¤é¨åç§°ï¼åå§åç§°ç |
| | | //------------------------------------------------------------------------------ |
| | | procedure GetVersionInfo(AppExeName:string); |
| | | var |
| | | BufSize, Len:DWORD; |
| | | Buf, Value:PChar; |
| | | begin |
| | | BufSize:=GetFileVersionInfoSize(PChar(AppExeName), BufSize); |
| | | if BufSize>0 then |
| | | begin |
| | | Buf:=AllocMem(BufSize); |
| | | GetFileVersionInfo(PChar(Application.ExeName), 0, BufSize, Buf); |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[1]),Pointer(Value),Len) then |
| | | glProductName:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[2]),Pointer(Value),Len) then |
| | | glProductVersion:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[3]),Pointer(Value),Len) then |
| | | glFileDescription:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[4]),Pointer(Value),Len) then |
| | | glLegalCopyright:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[5]),Pointer(Value),Len) then |
| | | glFileVersion:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[6]),Pointer(Value),Len) then |
| | | glCompanyName:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[7]),Pointer(Value),Len) then |
| | | glLegalTrademarks:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[8]),Pointer(Value),Len) then |
| | | glInternalName:=Value; |
| | | if VerQueryValue(Buf,PChar('StringFileInfo\080403A8\'+glVerInfo[9]),Pointer(Value),Len) then |
| | | glOriginalFilename:=Value; |
| | | FreeMem(Buf,BufSize); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æä¸¾ç³»ç»COMå£ï¼å å°COMå表 |
| | | // è¾å
¥å¼ï¼ç«¯å£å表 |
| | | // è¿åå¼ï¼nil |
| | | //------------------------------------------------------------------------------ |
| | | procedure EnumComPorts(Ports: TStrings); |
| | | var |
| | | KeyHandle: HKEY; |
| | | ErrCode, Index: Integer; |
| | | ValueName, Data: string; |
| | | ValueLen, DataLen, ValueType: DWORD; |
| | | TmpPorts: TStringList; |
| | | begin |
| | | ErrCode := RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'HARDWARE\DEVICEMAP\SERIALCOMM', 0, |
| | | KEY_READ, KeyHandle); |
| | | if ErrCode <> ERROR_SUCCESS then |
| | | Exit; // raise EComPort.Create(CError_RegError, ErrCode); |
| | | TmpPorts := TStringList.Create; |
| | | try |
| | | Index := 0; |
| | | repeat |
| | | ValueLen := 256; |
| | | DataLen := 256; |
| | | SetLength(ValueName, ValueLen); |
| | | SetLength(Data, DataLen); |
| | | ErrCode := RegEnumValue(KeyHandle, Index, PChar(ValueName), Cardinal(ValueLen), |
| | | nil, @ValueType, PByte(PChar(Data)), @DataLen); |
| | | if ErrCode = ERROR_SUCCESS then |
| | | begin |
| | | SetLength(Data, DataLen); |
| | | TmpPorts.Add(Data); |
| | | Inc(Index); |
| | | end |
| | | else |
| | | if ErrCode <> ERROR_NO_MORE_ITEMS then |
| | | exit; //raise EComPort.Create(CError_RegError, ErrCode); |
| | | until (ErrCode <> ERROR_SUCCESS) ; |
| | | TmpPorts.Sort; |
| | | Ports.Assign(TmpPorts); |
| | | finally |
| | | RegCloseKey(KeyHandle); |
| | | TmpPorts.Free; |
| | | end; |
| | | end; |
| | | |
| | | function CheckComPort(ComPortName: string; var ComPortList: Tstrings): boolean; |
| | | var |
| | | reg: TRegistry; //uses åå
æä»¶Registry |
| | | ts: TStrings; //é®å |
| | | i: Integer; |
| | | tl: TStringList; //串å£åç§° |
| | | nIndex: Integer; |
| | | begin |
| | | reg := TRegistry.Create; |
| | | ts := TStringList.Create; |
| | | try |
| | | reg.RootKey := HKEY_LOCAL_MACHINE; |
| | | reg.OpenKey('hardware\devicemap\serialcomm', False); |
| | | reg.GetValueNames(ts); //è·å注å表ä¸ä¸²å£ç é®å |
| | | |
| | | tl := TStringList.Create; |
| | | for i := 0 to ts.Count - 1 do |
| | | begin |
| | | tl.Add(reg.ReadString(ts.Strings[i])); //æ ¹æ®é®åï¼è¯»å注å表ä¸å¯¹åºç串å£åç§°ï¼ä¾å¦COM1ï¼ |
| | | end; |
| | | tl.Sort; |
| | | ComPortList := tl; |
| | | Result := tl.Find(ComPortName, nIndex);//æ¥è¯¢æ¯å¦åå¨ |
| | | //ShowMessage(IntToStr((nIndex))); |
| | | finally |
| | | // tl.Free; |
| | | ts.Free; |
| | | reg.CloseKey; |
| | | reg.Free; |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // åç¬¦ä¸²è½¬æ¢æ16è¿å¶å符串 |
| | | // è¾å
¥å¼ï¼ASCIIå符串 |
| | | // è¿åå¼ï¼ASCII转æ16è¿å¶æ°ï¼å¹¶ç¨stringæ¾ç¤º |
| | | //------------------------------------------------------------------------------ |
| | | function StrToHexStr(const S:string):string; |
| | | var |
| | | I:Integer; |
| | | begin |
| | | for I:=1 to Length(S) do |
| | | begin |
| | | if I=1 then |
| | | Result:=IntToHex(Ord(S[1]),2) |
| | | else |
| | | Result:=Result+' '+IntToHex(Ord(S[I]),2); |
| | | end; |
| | | end; |
| | | |
| | | //åç¬¦ä¸²è½¬æ¢æåå
è¿å¶å符串ï¼ä¸é´æ ç©ºæ ¼ï¼ï¼ï¼ |
| | | function StrToHexStr1(const S:string):string; |
| | | var |
| | | I:Integer; |
| | | ss:String; |
| | | begin |
| | | for I:=1 to Length(S) do |
| | | ss:=ss+IntToHex(Integer(S[I]),2); |
| | | Result:=ss; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // 16è¿å¶åç¬¦ä¸²è½¬æ¢æå符串 |
| | | // è¾å
¥å¼ï¼å¾
转æ¢ç16è¿å¶å符串 |
| | | // è¿åå¼ï¼ASCIIå符串 |
| | | //------------------------------------------------------------------------------ |
| | | function HexStrToStr(const S:string; bFlag:boolean=false):string; |
| | | var |
| | | t:Integer; |
| | | ts, SS:string; |
| | | M,Code:Integer; |
| | | begin |
| | | t:=1; |
| | | Result:=''; |
| | | //å¤çå符串 '00'-->'20' (å³å°nullè½¬ä¸ºç©ºæ ¼ï¼é²æ¢è¡è§£æç»æ¢) |
| | | if bFlag then |
| | | SS := StringReplace(S, '00', '20', [rfReplaceAll, rfIgnoreCase]) |
| | | else |
| | | SS := S ; |
| | | while t<=Length(SS) do |
| | | begin |
| | | while (t<=Length(SS)) and (not (SS[t] in ['0'..'9','A'..'F','a'..'f'])) do |
| | | inc(t); |
| | | if (t+1>Length(SS))or(not (SS[t+1] in ['0'..'9','A'..'F','a'..'f'])) then |
| | | ts:='$'+SS[t] |
| | | else |
| | | ts:='$'+SS[t]+SS[t+1]; |
| | | Val(ts,M,Code); |
| | | if Code=0 then |
| | | Result:=Result+Chr(M); |
| | | inc(t,2); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // 以åå
è¿å¶æ¹å¼æ¥çå
åç彿° |
| | | // è¾å
¥å¼ï¼ä»»æç±»åå¼ãå¼çé¿åº¦ |
| | | // è¿åå¼ï¼16è¿å¶ASCIIï¼å¹¶ç¨stringæ¾ç¤º |
| | | //------------------------------------------------------------------------------ |
| | | function GetMemBytes(var X; size: Integer): string; |
| | | var |
| | | pb: PByte; |
| | | i: Integer; |
| | | begin |
| | | pb := PByte(X); |
| | | for i := 0 to size - 1 do |
| | | begin |
| | | Result := Result + IntToHex(pb^, 2) + #32; |
| | | Inc(pb); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // éåç®å½ååç®å½ä¸çæä»¶åï¼å¯æåç¼åéåï¼ |
| | | // è¾å
¥å¼ï¼FilePath-è·¯å¾å¦'C:\DIR'ï¼ExtMask-æä»¶åç¼å¦'*.*'ï¼FileList-å符串å表 |
| | | // SubDir-æ¯å¦éååç®å½ |
| | | // è¿åå¼ï¼æ ï¼ç´æ¥è®¿é®fileListå符串å表 |
| | | // å
嫿件ï¼Contnrs ï¼TQueue类使ç¨ï¼ |
| | | // egï¼GetFileListEx(dir, '*.tst', clbSodimFile.Items, False); |
| | | //------------------------------------------------------------------------------ |
| | | procedure GetFileListEx(FilePath, ExtMask: string; FileList: TStrings; SubDir: Boolean = True); |
| | | function Match(FileName: string; MaskList: TStrings): Boolean; |
| | | var |
| | | i: integer; |
| | | begin |
| | | Result := False; |
| | | for i := 0 to MaskList.Count - 1 do |
| | | begin |
| | | if MatchesMask(FileName, MaskList[i]) then |
| | | begin |
| | | Result := True; |
| | | break; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | var |
| | | FileRec: TSearchRec; |
| | | MaskList: TStringList; |
| | | begin |
| | | if DirectoryExists(FilePath) then |
| | | begin |
| | | if FilePath[Length(FilePath)] <> '\' then |
| | | FilePath := FilePath + '\'; |
| | | if FindFirst(FilePath + '*.*', faAnyFile, FileRec) = 0 then |
| | | begin |
| | | MaskList := TStringList.Create; |
| | | try |
| | | ExtractStrings([';'], [], PChar(ExtMask), MaskList); |
| | | FileList.BeginUpdate; |
| | | repeat |
| | | if ((FileRec.Attr and faDirectory) <> 0) and SubDir then |
| | | begin |
| | | if (FileRec.Name <> '.') and (FileRec.Name <> '..') then |
| | | GetFileListEx(FilePath + FileRec.Name + '\', ExtMask, FileList); |
| | | end |
| | | else |
| | | begin |
| | | if Match(FilePath + FileRec.Name, MaskList) then |
| | | //è¿é妿åªè¿åæä»¶åï¼å注éæè·¯å¾å³å¯ |
| | | // FileList.Add( { FilePath + } FileRec.Name); |
| | | FileList.Add( FilePath + FileRec.Name); |
| | | end; |
| | | until FindNext(FileRec) <> 0; |
| | | FileList.EndUpdate; |
| | | finally |
| | | MaskList.Free; |
| | | end; |
| | | end; |
| | | FindClose(FileRec); |
| | | end; |
| | | end; |
| | | |
| | | //è¿åä¸å¸¦è·¯å¾çæä»¶éå |
| | | procedure GetFileList(FilePath, ExtMask: string; FileList: TStrings; SubDir: Boolean = True); |
| | | function Match(FileName: string; MaskList: TStrings): Boolean; |
| | | var |
| | | i: integer; |
| | | begin |
| | | Result := False; |
| | | for i := 0 to MaskList.Count - 1 do |
| | | begin |
| | | if MatchesMask(FileName, MaskList[i]) then |
| | | begin |
| | | Result := True; |
| | | break; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | var |
| | | FileRec: TSearchRec; |
| | | MaskList: TStringList; |
| | | begin |
| | | if DirectoryExists(FilePath) then |
| | | begin |
| | | if FilePath[Length(FilePath)] <> '\' then |
| | | FilePath := FilePath + '\'; |
| | | if FindFirst(FilePath + '*.*', faAnyFile, FileRec) = 0 then |
| | | begin |
| | | MaskList := TStringList.Create; |
| | | try |
| | | ExtractStrings([';'], [], PChar(ExtMask), MaskList); |
| | | FileList.BeginUpdate; |
| | | repeat |
| | | if ((FileRec.Attr and faDirectory) <> 0) and SubDir then |
| | | begin |
| | | if (FileRec.Name <> '.') and (FileRec.Name <> '..') then |
| | | GetFileListEx(FilePath + FileRec.Name + '\', ExtMask, FileList); |
| | | end |
| | | else |
| | | begin |
| | | if Match(FilePath + FileRec.Name, MaskList) then |
| | | //è¿é妿åªè¿åæä»¶åï¼å注éæè·¯å¾å³å¯ |
| | | FileList.Add( { FilePath + } FileRec.Name); |
| | | //FileList.Add( FilePath + FileRec.Name); |
| | | end; |
| | | until FindNext(FileRec) <> 0; |
| | | FileList.EndUpdate; |
| | | finally |
| | | MaskList.Free; |
| | | end; |
| | | end; |
| | | FindClose(FileRec); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å 餿´ä¸ªç®å½ä¸çæä»¶ï¼å
æ¬ç®å½ |
| | | // è¾å
¥å¼ï¼Path-è·¯å¾å¦'C:\DIR'ï¼IsDelDir-æ¯å¦å é¤ç®å½ |
| | | // è¿åå¼ï¼True-æä½æå |
| | | // egï¼DeleteDirectory(dir, True); |
| | | //------------------------------------------------------------------------------ |
| | | function DeleteDir(Path: string;IsDelDir: Boolean = False): Boolean; |
| | | var |
| | | search: TSearchRec; |
| | | ret: integer; |
| | | key: string; |
| | | begin |
| | | if Path[Length(Path)] <> '\' then |
| | | Path := Path + '\'; |
| | | key := Path + '*.*'; |
| | | ret := findFirst(key, faanyfile, search); |
| | | while ret = 0 do |
| | | begin |
| | | if ((search.Attr and fadirectory) = fadirectory) then |
| | | begin |
| | | if (search.Name <> '.') and (search.name <> '..') then |
| | | DeleteDirectory(Path + search.name); |
| | | end |
| | | else |
| | | begin |
| | | if ((search.Attr and fadirectory) <> fadirectory) then |
| | | begin |
| | | deletefile(Path + search.name); |
| | | end; |
| | | end; |
| | | ret := FindNext(search); |
| | | end; |
| | | findClose(search); |
| | | if IsDelDir then //妿éè¦å 餿件夹忷»å |
| | | removedir(Path); |
| | | result := True; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æä½Excelçç¸å
³å½æ° |
| | | // è·åExcelçæ¬ï¼è¿åå¼ï¼çæ¬å·11-2003ï¼12-2007 |
| | | {const |
| | | Wordversion97 = 8; |
| | | Wordversion2000 = 9; |
| | | WordversionXP = 10; |
| | | Wordversion2003 = 11; |
| | | Wordversion2007 = 12;} |
| | | //------------------------------------------------------------------------------ |
| | | function GetInstalledWordVersion: Integer; |
| | | var |
| | | Excel: OLEVariant; |
| | | begin |
| | | try |
| | | Excel:=CreateOLEObject('Excel.Application'); |
| | | except |
| | | on E: Exception do |
| | | showmessage('è·åExcleçæ¬æ¶åçé误ï¼' + #13#10 |
| | | + 'å¼å¸¸ç±»åç§°:' + E.ClassName + #13#10 |
| | | + 'å¼å¸¸ä¿¡æ¯:' + E.Message); |
| | | end; |
| | | result := Excel.version; |
| | | Excel.Quit; |
| | | FreeAndNil(Excel); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // çæéæºæ° |
| | | //------------------------------------------------------------------------------ |
| | | function RandomNum:String; |
| | | begin //çæéæºæ° |
| | | Result := FormatDateTime('yyyymmddhhnnss',Now) + IntToStr(Random(10))+IntToStr(Random(10))+IntToStr(Random(10))+IntToStr(Random(10)); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // TStringlistèªå®ä¹æåºåæ° |
| | | // åºç¨èä¾ï¼ |
| | | { sl := TStringList.Create; |
| | | try |
| | | sl.DelimitedText:='12,9.123,0.5,30'; //åå§åæåºsl |
| | | sl.Sorted:=false; //èªå®ä¹æåº |
| | | sl.CustomSort(SortParam); //æèªå®ä¹æåºåæ°éæ°æåº |
| | | showmessage(sl.Text); //æå°æåºåçç»æ |
| | | showmessage(sl.Strings[0]); //æå°æå°å¼ |
| | | showmessage(sl.Strings[sl.Count-1]); //æå°æå¤§å¼ |
| | | finally |
| | | FreeAndNil(sl); |
| | | end; |
| | | } |
| | | //------------------------------------------------------------------------------ |
| | | function SortParam(List: TStringList; Index1, Index2: Integer): Integer; |
| | | begin |
| | | if StrToFloat(List[index1])<StrToFloat(List[Index2]) then |
| | | result:=-1 |
| | | else if StrToFloat(List[index1])=StrToFloat(List[Index2]) then |
| | | Result:=0 |
| | | else |
| | | Result:=1; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //ä¼ ç»ç"åèäºå
¥"æ¹æ³ |
| | | //------------------------------------------------------------------------------ |
| | | function RoundEx(const Value: Extended; const Digit: Byte = 0): Extended; |
| | | var |
| | | tmp: Extended; |
| | | begin |
| | | tmp := Power(10, Digit); |
| | | if Value > 0 then |
| | | Result := Value * tmp + 0.5 |
| | | else |
| | | Result := Value * tmp - 0.5; |
| | | Result := Trunc(Result) / tmp; |
| | | end; |
| | | |
| | | {//Math |
| | | //RoundModeåæ°ï¼åä¸èå
¥-rmTruncateï¼åä¸èå
¥-rmUp |
| | | function RoundEx(const Value: Extended; const Digit: int = 0; RoundMode: TFPURoundingMode = rmUp): Extended; |
| | | var |
| | | RM: TFPURoundingMode; |
| | | begin |
| | | RM := GetRoundMode; |
| | | try |
| | | SetRoundMode(RoundMode); |
| | | Result := Round(Value); |
| | | finally |
| | | SetRoundMode(RM); |
| | | end; |
| | | end; } |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //ä¸æè½¬æ array of byte åºè¯¥å°±æ¯ä½ æ³è¦çç»æ |
| | | //ç¨åèåéå°ç½ç»ä¸åæ¥æ¶ç |
| | | //另䏿çString 转byte |
| | | //------------------------------------------------------------------------------ |
| | | function UniCode2GB(S: string): string; |
| | | var I: Integer; |
| | | begin |
| | | I := Length(S); |
| | | while I >= 4 do begin |
| | | try |
| | | Result := WideChar(StrToInt('$' + S[I - 3] + S[I - 2] + S[I - 1] + S[I])) + Result; |
| | | except |
| | | end; |
| | | I := I - 4; |
| | | end; |
| | | end; |
| | | function GB2UniCode(GB: string): string; |
| | | var |
| | | s: string; |
| | | i, j, k: integer; |
| | | a: array[1..160] of char; |
| | | begin |
| | | s := ''; |
| | | StringToWideChar(GB, @(a[1]), 500); |
| | | i := 1; |
| | | while ((a[i] <> #0) or (a[i + 1] <> #0)) do begin |
| | | j := Integer(a[i]); |
| | | k := Integer(a[i + 1]); |
| | | s := s + Copy(Format('%X ', [k * $100 + j + $10000]), 2, 4); |
| | | //S := S + Char(k)+Char(j); |
| | | i := i + 2; |
| | | end; |
| | | Result := s; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //éåSysUtilsåå
çBoolToStr-->BoolToHexStr |
| | | //å
¥åï¼boolå¼ |
| | | //è¿åï¼å符串ï¼False-0ï¼True-1 |
| | | //------------------------------------------------------------------------------ |
| | | function BoolToHexStr(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | const |
| | | cSimpleBoolStrs: array [boolean] of String = ('00', '01'); |
| | | begin |
| | | if UseBoolStrs then |
| | | begin |
| | | if Length(TrueBoolStrs) = 0 then |
| | | begin |
| | | SetLength(TrueBoolStrs, 1); |
| | | TrueBoolStrs[0] := DefaultTrueBoolStr; |
| | | end; |
| | | if Length(FalseBoolStrs) = 0 then |
| | | begin |
| | | SetLength(FalseBoolStrs, 1); |
| | | FalseBoolStrs[0] := DefaultFalseBoolStr; |
| | | end; |
| | | if B then |
| | | Result := TrueBoolStrs[0] |
| | | else |
| | | Result := FalseBoolStrs[0]; |
| | | end |
| | | else |
| | | Result := cSimpleBoolStrs[B]; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å°Boolå¼è½¬æå符串 |
| | | // å
¥åï¼bool |
| | | // è¿åï¼False,Trueå符串 |
| | | //------------------------------------------------------------------------------ |
| | | function BoolToString(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | const |
| | | cSimpleBoolStrs: array [boolean] of String = ('False', 'True'); |
| | | begin |
| | | if UseBoolStrs then |
| | | begin |
| | | if Length(TrueBoolStrs) = 0 then |
| | | begin |
| | | SetLength(TrueBoolStrs, 1); |
| | | TrueBoolStrs[0] := DefaultTrueBoolStr; |
| | | end; |
| | | if Length(FalseBoolStrs) = 0 then |
| | | begin |
| | | SetLength(FalseBoolStrs, 1); |
| | | FalseBoolStrs[0] := DefaultFalseBoolStr; |
| | | end; |
| | | if B then |
| | | Result := TrueBoolStrs[0] |
| | | else |
| | | Result := FalseBoolStrs[0]; |
| | | end |
| | | else |
| | | Result := cSimpleBoolStrs[B]; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //å°æ¥ææ ¼å¼è½¬æ¢æUnixæ¶é´æ³ , é¿åº¦8åè |
| | | //å
¥åï¼Delphiæ¥ææ¶é´ |
| | | //è¿åï¼é¿æ´å½¢æ°å¼ï¼ä»1970-01-01 00:00:00 å°ADateçç§æ° |
| | | //------------------------------------------------------------------------------ |
| | | function DateTimeToUnixDate(const ADate: TDateTime): Longint; |
| | | const |
| | | cUnixStartDate: TDateTime = 25569.0; // 1970/01/01 |
| | | begin |
| | | Result := Round((ADate - cUnixStartDate) * 86400) - 8*3600;//ä¸å
«åºä¿®æ£8å°æ¶ |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å°æ´æ°10241转æ '10.1KB' å符串 |
| | | // å
¥åï¼æ´æ° |
| | | // è¿åï¼å符串 |
| | | //------------------------------------------------------------------------------ |
| | | function FormatFileSize(size:Int64):String; |
| | | var |
| | | size1 : String; |
| | | begin |
| | | //ä¸è¶³1KBçæ°æ®ï¼æ1Kæ¾ç¤º |
| | | if size<1024 then size:=1 |
| | | else size := floor(size/1024); |
| | | |
| | | //ä»KBå¼å§ï¼æ·»å åä½åè¿åå符串 |
| | | if size<1024 then |
| | | size1 := IntToStr(size) + ' KB' |
| | | else if (size>=1024)and(size<1048576) then |
| | | size1 := FormatFloat('#.#',size/1024) + ' MB' |
| | | else if (size>=1048576)and(size<1073741824) then |
| | | size1 := FormatFloat('#.##',size/1048576) + ' GB' |
| | | else |
| | | size1 := FormatFloat('#.##',size/1073741824) + ' TB'; |
| | | Result := size1; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å°æ´æ°10241转æ '1.02ä¸'ï¼120000000转æ '1.2亿' å符串 |
| | | // å
¥åï¼æ´æ° |
| | | // è¿åï¼å符串 |
| | | //------------------------------------------------------------------------------ |
| | | function FormatNumberSize(num:Int64):String; |
| | | var |
| | | new : String; |
| | | begin |
| | | if num<10000 then |
| | | new := IntToStr(num)+' ' |
| | | else if (num>=10000)and(num<100000000) then |
| | | new := FormatFloat('#.##',num/10000) + ' ä¸' |
| | | else |
| | | new := FormatFloat('#.##',num/100000000) + ' 亿'; |
| | | Result := new; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // ä»å符串str䏿åé符chræªå第i个å符串ï¼è¿åæªåå°çå符串 |
| | | //------------------------------------------------------------------------------ |
| | | function SplitStr(str:string;chr:char;i:Integer):string; |
| | | var |
| | | sltemp : TStringlist; |
| | | begin |
| | | sltemp := TStringlist.Create(); |
| | | try |
| | | SplitString(str,chr,sltemp); |
| | | Result := sltemp.Strings[i]; |
| | | finally |
| | | FreeAndNil(sltemp); |
| | | end; |
| | | end; |
| | | |
| | | //è¿ååå²åçè®°å½æ¡æ° |
| | | function SplitStrCount(str:string; chr:char):Integer; |
| | | var |
| | | sltemp : TStringlist; |
| | | begin |
| | | sltemp := TStringlist.Create(); |
| | | try |
| | | SplitString(str,chr,sltemp); |
| | | Result := sltemp.Count; |
| | | finally |
| | | FreeAndNil(sltemp); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // Windows䏿è¿ç¨ï¼æ ¹æ®æ 颿¥æ |
| | | //------------------------------------------------------------------------------ |
| | | procedure KillProgram(WindowTitle: string); |
| | | const |
| | | PROCESS_TERMINATE = $0001; |
| | | var |
| | | ProcessHandle : THandle; |
| | | ProcessID: Integer; |
| | | TheWindow : HWND; |
| | | begin |
| | | TheWindow := FindWindow(nil, PChar(WindowTitle)); |
| | | GetWindowThreadProcessID(TheWindow, @ProcessID); |
| | | ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId); |
| | | TerminateProcess(ProcessHandle,4); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // Windows䏿è¿ç¨ï¼æ ¹æ®exeåç§°æ¥æ |
| | | //------------------------------------------------------------------------------ |
| | | function KillTask(ExeFileName: string): integer; |
| | | const |
| | | PROCESS_TERMINATE=$0001; |
| | | var |
| | | ContinueLoop: BOOL; |
| | | FSnapshotHandle: THandle; |
| | | FProcessEntry32: TProcessEntry32; |
| | | begin |
| | | result := 0; |
| | | |
| | | FSnapshotHandle := CreateToolhelp32Snapshot |
| | | (TH32CS_SNAPPROCESS, 0); |
| | | FProcessEntry32.dwSize := Sizeof(FProcessEntry32); |
| | | ContinueLoop := Process32First(FSnapshotHandle, |
| | | FProcessEntry32); |
| | | |
| | | while integer(ContinueLoop) <> 0 do |
| | | begin |
| | | if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = |
| | | UpperCase(ExeFileName)) |
| | | or (UpperCase(FProcessEntry32.szExeFile) = |
| | | UpperCase(ExeFileName))) then |
| | | Result := Integer(TerminateProcess(OpenProcess( |
| | | PROCESS_TERMINATE, BOOL(0), |
| | | FProcessEntry32.th32ProcessID), 0)); |
| | | ContinueLoop := Process32Next(FSnapshotHandle, |
| | | FProcessEntry32); |
| | | end; |
| | | |
| | | CloseHandle(FSnapshotHandle); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //å·æ°ä»»å¡æ å è¿ç¨å
³éèæ®çç徿 |
| | | //------------------------------------------------------------------------------ |
| | | procedure RefreshTaskbarIcon; |
| | | var |
| | | hShellTrayWnd: HWND; //任塿 çªå£ |
| | | hTrayNotifyWnd: HWND; //任塿 å³è¾¹æç徿 +æ¶é´åº |
| | | hSysPager: HWND; //ä¸åç³»ç»å¯è½æå¯è½æ²¡æè¿å± |
| | | hToolbarWindow32: HWND; //æç徿 çªå£ |
| | | r: TRECT; |
| | | width, height: integer; |
| | | x: Integer; |
| | | begin |
| | | hShellTrayWnd := FindWindow('Shell_TrayWnd',nil); |
| | | hTrayNotifyWnd := FindWindowEx(hShellTrayWnd,0,'TrayNotifyWnd',nil); |
| | | hSysPager := FindWindowEx(hTrayNotifyWnd,0,'SysPager',nil); |
| | | if (hSysPager <> 0) then |
| | | hToolbarWindow32 := FindWindowEx(hSysPager,0,'ToolbarWindow32',nil) |
| | | else |
| | | hToolbarWindow32 := FindWindowEx(hTrayNotifyWnd,0,'ToolbarWindow32',nil); |
| | | |
| | | if (hToolbarWindow32 <> 0) then |
| | | begin |
| | | GetWindowRect(hToolbarWindow32,r); |
| | | width := r.right - r.left; |
| | | height := r.bottom - r.top; |
| | | //ä»ä»»å¡æ ä¸é´ä»å·¦å°å³ MOUSEMOVEä¸éï¼ææå¾æ ç¶æä¼è¢«æ´æ° |
| | | for x := 1 to width-1 do |
| | | SendMessage(hToolbarWindow32,WM_MOUSEMOVE,0,MAKELPARAM(x,trunc(height/2))); |
| | | end; |
| | | end; |
| | | //å¦ä¸ç§å·æ°ä»»å¡æ 徿 çæ¹æ³ |
| | | procedure RefreshTaskbarIcon2; |
| | | var |
| | | TrayWindow : HWnd; |
| | | WindowRect : TRect; |
| | | SmallIconWidth : Integer; |
| | | SmallIconHeight : Integer; |
| | | CursorPos : TPoint; |
| | | Row : Integer; |
| | | Col : Integer; |
| | | begin |
| | | { è·å¾ä»»å¡æ 奿åè¾¹æ¡} |
| | | TrayWindow := FindWindowEx(FindWindow('Shell_TrayWnd',NIL),0,'TrayNotifyWnd',NIL); |
| | | if not GetWindowRect(TrayWindow,WindowRect) then |
| | | Exit; |
| | | { è·å¾å°å¾æ 大å°} |
| | | SmallIconWidth := GetSystemMetrics(SM_CXSMICON); |
| | | SmallIconHeight := GetSystemMetrics(SM_CYSMICON); |
| | | { ä¿åå½åé¼ æ ä½ç½®} |
| | | GetCursorPos(CursorPos); |
| | | { ä½¿é¼ æ å¿«éåè¿æ¯ä¸ªå¾æ } |
| | | with WindowRect do |
| | | begin |
| | | for Row := 0 to (Bottom - Top) DIV SmallIconHeight do |
| | | begin |
| | | for Col := 0 to (Right - Left) DIV SmallIconWidth do |
| | | begin |
| | | SetCursorPos(Left + Col * SmallIconWidth, Top + Row * SmallIconHeight); |
| | | Sleep(10); //åç°è¿ä¸ªå°æ¹åæ°ä¸º 0 çæ¶åï¼ææ¶åæ¯ä¸å¤ç |
| | | end; |
| | | end; |
| | | end; |
| | | {æ¢å¤é¼ æ ä½ç½®} |
| | | SetCursorPos(CursorPos.X,CursorPos.Y); |
| | | { éç»ä»»å¡æ } |
| | | RedrawWindow(TrayWindow,NIL,0,RDW_INVALIDATE OR RDW_ERASE OR RDW_UPDATENOW); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | //强è¡å
³éæä½ç³»ç»ç彿° |
| | | //------------------------------------------------------------------------------ |
| | | {procedure RebootSystem(); |
| | | begin |
| | | if GetOperatingSystem() = 'Windows NT/2000/XP' then |
| | | begin |
| | | Get_Shutdown_Privilege(); |
| | | //è°ç¨æ¤å½æ°ä¼åºç°ç³»ç»å
³æºæç¤ºçªå£ï¼å¹¶å
è®¸ç¨æ·åæ¶å
³æºå¨ä½ï¼å»æå°±ä¸æ¾ç¤ºæç¤ºçªå£ |
| | | //InitiateSystemShutDown(nil, 'å
³æºæç¤º', 3, True, False); |
| | | //ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG,0); |
| | | ExitWindowsEx(EWX_REBOOT+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG, $FFFF); |
| | | end |
| | | else |
| | | begin |
| | | ExitWindowsEx(EWX_REBOOT+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG, $FFFF); |
| | | end; |
| | | end; } |
| | | //è·åæä½ç³»ç»ä¿¡æ¯ |
| | | function GetOperatingSystem(): string; |
| | | var |
| | | osVerInfo: TOSVersionInfo; |
| | | begin |
| | | Result:= ''; |
| | | osVerInfo.dwOSVersionInfoSize:= SizeOf(TOSVersionInfo); |
| | | |
| | | if GetVersionEx(osVerInfo) then |
| | | case osVerInfo.dwPlatformId of |
| | | VER_PLATFORM_WIN32_NT: |
| | | begin |
| | | Result:= 'Windows NT/2000/XP' |
| | | end; |
| | | VER_PLATFORM_WIN32_WINDOWS: |
| | | begin |
| | | Result := 'Windows 95/98/98SE/Me'; |
| | | end; |
| | | end; |
| | | end; |
| | | //è·å¾ç¨æ·å
³æºç¹æï¼ä»
对Windows NT/2000/XP |
| | | {procedure Get_Shutdown_Privilege(); |
| | | var |
| | | rl: Cardinal; |
| | | hToken: Cardinal; |
| | | tkp: TOKEN_PRIVILEGES; |
| | | begin |
| | | OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken); |
| | | |
| | | if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then |
| | | begin |
| | | tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED; |
| | | tkp.PrivilegeCount:= 1; |
| | | AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl); |
| | | end; |
| | | end; } |
| | | |
| | | //----------------------------------------------------------------------------// |
| | | // æ ¹æ®ç¨åºåç§°è·å HWNDçæ¹æ³ // |
| | | // 1.GetHWndByPID()è·åPIDï¼2.GetHwndByAppName()è·åHWND // |
| | | //----------------------------------------------------------------------------// |
| | | //æ ¹æ® ProcessIdè·åè¿ç¨ççªå£å¥æå¦ä¸ï¼ |
| | | //1.éè¿EnumWindowsæä¸¾ææçªå£ |
| | | //2.使ç¨GetWindowThreadProcessIDï¼éè¿çªå£å¥æè·åè¿ç¨ID |
| | | //3.æ¯è¾è·åçè¿ç¨IDä¸å½åå·²ç¥çè¿ç¨IDï¼å¤ææ¯å¦ä¸ºéè¦ççªå£ |
| | | //è·æ®ProcessIdè·åè¿ç¨ççªå£å¥æ |
| | | function GetHWndByPID(const hPID: THandle): THandle; |
| | | type |
| | | PEnumInfo = ^TEnumInfo; |
| | | TEnumInfo = record |
| | | ProcessID: DWORD; |
| | | HWND: THandle; |
| | | end; |
| | | |
| | | function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall; |
| | | var |
| | | PID: DWORD; |
| | | begin |
| | | GetWindowThreadProcessID(Wnd, @PID); |
| | | Result := (PID <> EI.ProcessID) or |
| | | (not IsWindowVisible(WND)) or |
| | | (not IsWindowEnabled(WND)); |
| | | |
| | | if not Result then EI.HWND := WND; |
| | | end; |
| | | |
| | | function FindMainWindow(PID: DWORD): DWORD; |
| | | var |
| | | EI: TEnumInfo; |
| | | begin |
| | | EI.ProcessID := PID; |
| | | EI.HWND := 0; |
| | | EnumWindows(@EnumWindowsProc, Integer(@EI)); |
| | | Result := EI.HWND; |
| | | end; |
| | | begin |
| | | if hPID<>0 then |
| | | Result:=FindMainWindow(hPID) |
| | | else |
| | | Result:=0; |
| | | end; |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | //æ ¹æ® AppNameè·åç¨åºHWND |
| | | //å
¥å = 'åºç¨ç¨åºå.exe' |
| | | //è¿å = ç¨åºå¥æ |
| | | //----------------------------------------------------------------------------- |
| | | function GetHwndByAppName(const AppName: String): THandle; |
| | | var |
| | | pName : string; //è¿ç¨å |
| | | hSnapshot : THandle; //è¿ç¨å¿«ç
§å¥æ |
| | | tPE : TProcessEntry32; //è¿ç¨å
¥å£çç»æä½ä¿¡æ¯ |
| | | flag : BOOL; |
| | | begin |
| | | Result := 0; |
| | | hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //å建ä¸ä¸ªè¿ç¨å¿«ç
§ |
| | | tPE.dwSize:= Sizeof(tPE); |
| | | flag := Process32First(hSnapshot, tPE); //å¾å°ç³»ç»ä¸ç¬¬ä¸ä¸ªè¿ç¨ |
| | | //循ç¯ä¾ä¸¾ |
| | | while flag do begin |
| | | pName := tPE.szExeFile; |
| | | if(pName = AppName) then |
| | | Result := GetHWndByPID(tPE.th32ProcessID); |
| | | flag := Process32Next(hSnapshot, tPE); |
| | | end; |
| | | CloseHandle(hSnapshot); // éæ¾å¿«ç
§å¥æ |
| | | end; |
| | | |
| | | |
| | | //----------------------------------------------------------------------------- |
| | | //å°è£
ç卿Dll彿°è°ç¨æ¹æ³ |
| | | //CallFunc('user32.dll', 'MessageBoxA', [0, 'hello world', 'title', MB_OK]); |
| | | //CallFunc('user32.dll', 'MessageBeep', []); |
| | | //CallFunc('kernel32.dll', 'Sleep', [1000]); |
| | | //----------------------------------------------------------------------------- |
| | | function CallFunc(dllname, funcname: string; const param: array of const): DWORD; |
| | | var |
| | | hLib: THandle; |
| | | pFunc: Pointer; |
| | | intSize: Integer; |
| | | begin |
| | | Result := 0; |
| | | |
| | | hLib := LoadLibrary(PChar(dllname)); |
| | | if hLib <> 0 then |
| | | begin |
| | | pFunc := GetProcAddress(hLib, PChar(funcname)); |
| | | if pFunc <> nil then |
| | | begin |
| | | // è·ååæ°å¤§å° |
| | | intSize := Length(param); |
| | | |
| | | // èªå¨å®æå½æ°è°ç¨, asmå®ç° |
| | | asm |
| | | push ecx |
| | | push esi |
| | | |
| | | mov ecx, intSize; // åæ°çä¸ªæ° |
| | | mov esi, param |
| | | |
| | | test ecx, ecx // 夿æ¯å¦æåæ° |
| | | je @call // å¦ææ²¡æåæ°å跳转å°å½æ°è°ç¨å¤ |
| | | |
| | | @again: |
| | | dec ecx |
| | | push dword ptr [esi + ecx * 8] // å¾ªç¯æåæ°åå
¥å æ |
| | | cmp ecx, 0 |
| | | jnz @again // ä¸ç´å¾ªç¯å° ecx 为0 |
| | | |
| | | @call: |
| | | call pFunc // è°ç¨å½æ° |
| | | mov @Result, eax // è¿åå¼ |
| | | |
| | | pop esi |
| | | pop ecx |
| | | end; |
| | | end; |
| | | |
| | | FreeLibrary(hLib); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // è°ç¨windowsç³»ç» ping æµè¯ç½ç»æ¯å¦éç
|
| | | // å
嫿件 Winsock |
| | | // å
¥åï¼IPå°å |
| | | // è¿åï¼false or true |
| | | //------------------------------------------------------------------------------ |
| | | function PingHost(HostIP: String): Boolean; |
| | | type |
| | | PIPOptionInformation = ^TIPOptionInformation; |
| | | TIPOptionInformation = packed record |
| | | TTL:Byte; |
| | | TOS:Byte; |
| | | Flags:Byte; |
| | | OptionsSize:Byte; |
| | | OptionsData:PChar; |
| | | end; |
| | | |
| | | PIcmpEchoReply= ^TIcmpEchoReply; |
| | | TIcmpEchoReply = packed record |
| | | Address: DWORD; |
| | | Status:DWORD; |
| | | RTT:DWORD; |
| | | DataSize:Word; |
| | | Reserved:Word; |
| | | Data:Pointer; |
| | | Options:TIPOptionInformation; |
| | | end; |
| | | TIcmpCreateFile = function:THandle;stdcall; |
| | | TIcmpCloseHandle= function(IcmpHandle:THandle):Boolean;stdcall; |
| | | TIcmpSendEcho=function(IcmpHandle:THandle; |
| | | DestinationAddress: DWORD; |
| | | RequestData: Pointer; |
| | | RequestSize: Word; |
| | | RequestOptions: PIPOptionInformation; |
| | | ReplyBuffer: Pointer; |
| | | ReplySize: DWord; |
| | | Timeout: DWord |
| | | ):DWord;stdcall; |
| | | var |
| | | hICMP:THandle; |
| | | hICMPdll:THandle; |
| | | IcmpCreateFile:TIcmpCreateFile; |
| | | IcmpCloseHandle:TIcmpCloseHandle; |
| | | IcmpSendEcho:TIcmpSendEcho; |
| | | pIPE:PIcmpEchoReply;// ICMP Echo reply buffer |
| | | FIPAddress:DWORD; |
| | | FSize:DWORD; |
| | | FTimeOut:DWORD; |
| | | BufferSize:DWORD; |
| | | pReqData,pRevData:PChar; |
| | | MyString:string; |
| | | begin |
| | | Result:=False; |
| | | hICMPdll:=LoadLibrary('icmp.dll'); |
| | | if hICMPdll=0 then exit; |
| | | |
| | | @ICMPCreateFile:=GetProcAddress(hICMPdll,'IcmpCreateFile'); |
| | | @IcmpCloseHandle:=GetProcAddress(hICMPdll,'IcmpCloseHandle'); |
| | | @IcmpSendEcho:=GetProcAddress(hICMPdll, 'IcmpSendEcho'); |
| | | hICMP := IcmpCreateFile; |
| | | if (hICMP=INVALID_HANDLE_VALUE) then exit; |
| | | FIPAddress:=inet_addr(PChar(HostIP)); |
| | | MyString := 'Hello,World'; //send data buffer |
| | | pReqData:=PChar(MyString); |
| | | |
| | | FSize:=40; //receive data buffer |
| | | BufferSize:=SizeOf(TICMPEchoReply)+FSize; |
| | | GetMem(pIPE,BufferSize); |
| | | FillChar(pIPE^,SizeOf(pIPE^), 0); |
| | | GetMem(pRevData,FSize); |
| | | pIPE^.Data:=pRevData; |
| | | FTimeOut:=500; |
| | | try |
| | | Result:=IcmpSendEcho(hICMP, |
| | | FIPAddress, |
| | | pReqData, |
| | | Length(MyString), |
| | | nil, |
| | | pIPE, |
| | | BufferSize, |
| | | FTimeOut)>0; |
| | | finally |
| | | IcmpCloseHandle(hICMP); |
| | | FreeLibrary(hICMPdll); |
| | | FreeMem(pRevData); |
| | | FreeMem(pIPE); |
| | | end; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æè¿°ï¼ç§è½¬æ¶é´å符串 |
| | | // å
¥åï¼Integer-ç§ |
| | | // è¿åï¼String-HH:MM:SSæ ¼å¼å符串 |
| | | //------------------------------------------------------------------------------ |
| | | function SecondToTime(sec:Integer):String; |
| | | begin |
| | | Result := TimeToStr(sec/86400); |
| | | end; |
| | | |
| | | // æè¿°ï¼ç§è½¬æ¢æTDateTImeæ ¼å¼ |
| | | function SecondToTime1(second: Word): TDateTime; |
| | | var |
| | | Hour, Min, Sec: Word; |
| | | begin |
| | | Hour := second div 3600; |
| | | Min := (second div 60) mod 60; |
| | | Sec := second mod 60; |
| | | Result := EncodeTime(Hour, Min, Sec, 0); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æ©å
DateUtilsåºï¼å¢å å京æ¶é´è½¬Int64æ¶é´æ ¼å¼ï¼æ³¨æå廿¶åº |
| | | // 说æï¼ |
| | | {uses DateUtils; |
| | | DateTimeToUnix(Now)å¯ä»¥è½¬æ¢å°unixæ¶é´ï¼ä½æ¯æ³¨æçæ¯ï¼å®å¾å°çæ¶é´ |
| | | æ¯cè¯è¨ä¸time()å¾å°çæ¶é´å¤§äº8*60*60 |
| | | å 为Nowæ¯å½åæ¶åºçæ¶é´ï¼cè¯è¨ä¸time()æ¯ææ ¼æå¨æ²»æ¶é´è®¡ç®çï¼ |
| | | å京æ¶é´æ¯æ ¼æå¨æ²»æ¶é´å¤äº8å°æ¶ |
| | | DateTimeToUnix(Now)-8*60*60 å°±åcè¯è¨ä¸time()å¾å°ç䏿 ·äº} |
| | | //------------------------------------------------------------------------------ |
| | | // 使ç¨ç¤ºä¾ï¼DateTimeToUnixPro(VarToDateTime(edit1.Text)) |
| | | function DateTimeToUnixPro(const AValue: TDateTime): Int64; |
| | | begin |
| | | Result := DateTimeToUnix(AValue)- 8*60*60 ; |
| | | end; |
| | | |
| | | function UnixToDateTimePro(const AValue: Int64): TDateTime; |
| | | begin |
| | | Result := UnixToDateTime(floor(AValue/1000) + 8*60*60); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // ç§å¦è®¡æ°æ³ä¸æµ®ç¹åæ°åäºè½¬ï¼éç¨å符串è¾å
¥è¾åº |
| | | // uses SysUtils |
| | | // |
| | | // eg: '-1.4857E-02' --> '-0.014857' |
| | | //------------------------------------------------------------------------------ |
| | | //ç§å¦è®¡æ°è½¬æµ®ç¹åï¼'-1.4857E-02' --> '-0.014857' |
| | | function ExpToFloat(s:String):String; |
| | | var |
| | | f : Extended; |
| | | begin |
| | | f := StrToFloatDef(s,0); |
| | | Result := FloatToStr(f); |
| | | end; |
| | | //æµ®ç¹å转ç§å¦è®¡æ°ï¼'-0.014857' --> '-1.4857E-02' |
| | | function FloatToExp(s:String):String; |
| | | var |
| | | f : Extended; |
| | | begin |
| | | f := StrToFloatDef(s,0); |
| | | Result := FloatToStrF(f, ffExponent,7,2); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å°Boolå¼è½¬æå¼å
³å符 |
| | | // å
¥åï¼bool |
| | | // è¿åï¼å¼å¯,å
³éå符串 |
| | | //------------------------------------------------------------------------------ |
| | | function BoolToString1(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | const |
| | | cSimpleBoolStrs: array [boolean] of String = ('å
³é', 'å¼å¯'); |
| | | begin |
| | | if UseBoolStrs then |
| | | begin |
| | | if Length(TrueBoolStrs) = 0 then |
| | | begin |
| | | SetLength(TrueBoolStrs, 1); |
| | | TrueBoolStrs[0] := 'å¼å¯'; |
| | | end; |
| | | if Length(FalseBoolStrs) = 0 then |
| | | begin |
| | | SetLength(FalseBoolStrs, 1); |
| | | FalseBoolStrs[0] := 'å
³é'; |
| | | end; |
| | | if B then |
| | | Result := TrueBoolStrs[0] |
| | | else |
| | | Result := FalseBoolStrs[0]; |
| | | end |
| | | else |
| | | Result := cSimpleBoolStrs[B]; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å°Boolå¼è½¬æå¼å
³å符 |
| | | // å
¥åï¼bool |
| | | // è¿åï¼å¼,å
³å符串 |
| | | //------------------------------------------------------------------------------ |
| | | function BoolToString3(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | const |
| | | cSimpleBoolStrs: array [boolean] of String = ('å
³', 'å¼'); |
| | | begin |
| | | if UseBoolStrs then |
| | | begin |
| | | if Length(TrueBoolStrs) = 0 then |
| | | begin |
| | | SetLength(TrueBoolStrs, 1); |
| | | TrueBoolStrs[0] := 'å¼'; |
| | | end; |
| | | if Length(FalseBoolStrs) = 0 then |
| | | begin |
| | | SetLength(FalseBoolStrs, 1); |
| | | FalseBoolStrs[0] := 'å
³'; |
| | | end; |
| | | if B then |
| | | Result := TrueBoolStrs[0] |
| | | else |
| | | Result := FalseBoolStrs[0]; |
| | | end |
| | | else |
| | | Result := cSimpleBoolStrs[B]; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // å°Boolå¼è½¬æå¼å
³å符 |
| | | // å
¥åï¼bool |
| | | // è¿åï¼0,1å符串 |
| | | //------------------------------------------------------------------------------ |
| | | function BoolToString2(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | const |
| | | cSimpleBoolStrs: array [boolean] of String = ('0', '1'); |
| | | begin |
| | | if UseBoolStrs then |
| | | begin |
| | | if Length(TrueBoolStrs) = 0 then |
| | | begin |
| | | SetLength(TrueBoolStrs, 1); |
| | | TrueBoolStrs[0] := '1'; |
| | | end; |
| | | if Length(FalseBoolStrs) = 0 then |
| | | begin |
| | | SetLength(FalseBoolStrs, 1); |
| | | FalseBoolStrs[0] := '0'; |
| | | end; |
| | | if B then |
| | | Result := TrueBoolStrs[0] |
| | | else |
| | | Result := FalseBoolStrs[0]; |
| | | end |
| | | else |
| | | Result := cSimpleBoolStrs[B]; |
| | | end; |
| | | |
| | | function BoolToString4(B: Boolean; UseBoolStrs: Boolean = False): string; |
| | | const |
| | | cSimpleBoolStrs: array [boolean] of String = ('false', 'true'); |
| | | begin |
| | | if UseBoolStrs then |
| | | begin |
| | | if Length(TrueBoolStrs) = 0 then |
| | | begin |
| | | SetLength(TrueBoolStrs, 1); |
| | | TrueBoolStrs[0] := DefaultTrueBoolStr; |
| | | end; |
| | | if Length(FalseBoolStrs) = 0 then |
| | | begin |
| | | SetLength(FalseBoolStrs, 1); |
| | | FalseBoolStrs[0] := DefaultFalseBoolStr; |
| | | end; |
| | | if B then |
| | | Result := TrueBoolStrs[0] |
| | | else |
| | | Result := FalseBoolStrs[0]; |
| | | end |
| | | else |
| | | Result := cSimpleBoolStrs[B]; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------ |
| | | // æ´å½¢è½¬ä¸ºå¸å°å¼ |
| | | // è¾å
¥ï¼integer |
| | | // è¾åºï¼True/False |
| | | // 说æï¼å¦æAValueä¸çäº0ï¼åResult为Trueï¼å¦å为Falseã |
| | | //------------------------------------------------------------------------ |
| | | function IntToBool(AValue: Integer): Boolean; |
| | | begin |
| | | Result := AValue <> 0; // 妿AValueä¸çäº0ï¼åResult为Trueï¼å¦å为Falseã |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------ |
| | | // çº¿æ§æå¼ç®æ³ |
| | | // è¾å
¥ï¼ï¼x0ãy0)(x1ãy1)ï¼åéè¦æå¼çç®æ ç¹xçå¼ |
| | | // è¾åºï¼x对åºçæå¼yå¼ |
| | | // 说æï¼è¯¥å½æ°çå®ç°åçæ¯æ ¹æ®çº¿æ§æå¼çå
¬å¼ï¼è®¡ç®ç®æ ç¹x对åºçyå¼ã |
| | | // 彿°é¦å
计ç®åºç®æ ç¹x卿°æ®ç¹x0åx1ä¹é´çä½ç½®å æ¯ï¼å³(x - x0) / (x1 - x0)ï¼ |
| | | // ç¶åå°è¯¥æ¯ä¾ä¹ä»¥y1 - y0ï¼å¹¶å ä¸y0ï¼å³å¯å¾å°ç®æ ç¹x对åºçæå¼yå¼ã |
| | | //------------------------------------------------------------------------ |
| | | function LinearInterpolation(x0, y0, x1, y1, x: Double): Double; |
| | | begin |
| | | Result := y0 + (y1 - y0) * (x - x0) / (x1 - x0); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // ææ ¼ææ¥æå¼ç®æ³ |
| | | // å
¥åï¼xï¼è¡¨ç¤ºç»å®çä¸ç» x åæ ï¼æ¯ä¸ä¸ªå®æ°æ°ç»ã |
| | | // yï¼è¡¨ç¤ºç»å®çä¸ç» y åæ ï¼ä¹æ¯ä¸ä¸ªå®æ°æ°ç»ï¼ä¸ x æ°ç»ä¸ä¸å¯¹åºã |
| | | // nï¼è¡¨ç¤º x å y æ°ç»ä¸çæ°æ®ç¹ä¸ªæ°ã |
| | | // xiï¼è¡¨ç¤ºè¦æ±è§£ç x åæ ï¼å³è¦æ±å¨ x è½´ä¸æ¾å°ä¸ä¹å¯¹åºç y åæ ã |
| | | // è¿åå¼ï¼è¿å xi 对åºç y åæ ã |
| | | // 彿°å®ç°ï¼å®äºä¸¤ä¸ªå¾ªç¯åé i å jï¼ç¨äºéå x å y æ°ç»ãç¶åå¨å¤å±å¾ªç¯ä¸ï¼ |
| | | // éåæ¯ä¸ªæ°æ®ç¹ iï¼è®¡ç®å¯¹åºç Lagrange æå¼å¤é¡¹å¼ Lï¼å°æ¯ä¸ªæ°æ®ç¹ |
| | | // Lagrange å¤é¡¹å¼ L ä¸å¯¹åºç y åæ ç¸ä¹ï¼å¹¶æ±åå¾å° pã |
| | | // æåè¿å pï¼å³ä¸ºææ±ç xi 对åºç y åæ ã |
| | | //------------------------------------------------------------------------------ |
| | | function LagrangeInterpolation(x, y: array of Double; n: Integer; xi: Double): Double; |
| | | var |
| | | i, j: Integer; |
| | | p, L: Double; |
| | | begin |
| | | p := 0.0; |
| | | for i := 0 to n do |
| | | begin |
| | | L := 1.0; |
| | | for j := 0 to n do |
| | | if j <> i then |
| | | L := L * (xi - x[j]) / (x[i] - x[j]); |
| | | p := p + y[i] * L; |
| | | end; |
| | | Result := p; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // çé¡¿æå¼ç®æ³ |
| | | // å
¥åï¼xï¼è¡¨ç¤ºç»å®çä¸ç» x åæ ï¼æ¯ä¸ä¸ªå®æ°æ°ç»ã |
| | | // fxï¼è¡¨ç¤ºç»å®çä¸ç» y åæ ï¼ä¹æ¯ä¸ä¸ªå®æ°æ°ç»ï¼ä¸ x æ°ç»ä¸ä¸å¯¹åºã |
| | | // nï¼è¡¨ç¤º x å y æ°ç»ä¸çæ°æ®ç¹ä¸ªæ°ã |
| | | // tï¼è¡¨ç¤ºè¦æ±è§£ç x åæ ï¼å³è¦æ±å¨ x è½´ä¸æ¾å°ä¸ä¹å¯¹åºç y åæ ã |
| | | // è¿åå¼ï¼è¿å t 对åºç y åæ ã |
| | | //------------------------------------------------------------------------------ |
| | | function NewtonInterpolation(x, fx: array of Double; n: Integer; t: Double): Double; |
| | | var |
| | | i, j: Integer; |
| | | c: array of Double; |
| | | sum: Double; |
| | | begin |
| | | SetLength(c, n); |
| | | for i := 0 to n - 1 do |
| | | c[i] := fx[i]; |
| | | for i := 1 to n - 1 do |
| | | begin |
| | | for j := n - 1 downto i do |
| | | c[j] := (c[j] - c[j - 1]) / (x[j] - x[j - i]); |
| | | end; |
| | | sum := c[n - 1]; |
| | | for i := n - 2 downto 0 do |
| | | begin |
| | | sum := c[i] + (t - x[i]) * sum; |
| | | end; |
| | | Result := sum; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // æå°äºä¹æ³æå¼ç®æ³ |
| | | // å
¥åï¼æ°ç» x å y |
| | | // æ°ç»é¿åº¦ n |
| | | // åæ° tè¡¨ç¤ºè¦æå¼çä½ç½® |
| | | // è¿åï¼æå¼ç»æ |
| | | // å
¬å¼ï¼f(t) = a * t + b + (y[i] - a * x[i] - b) * sum[(x[i] - t)^2] / sum[(x[i] - t)^2] |
| | | // è§£éï¼å
¶ä¸ï¼a å b æ¯æå°äºä¹æ³çç³»æ°ï¼y[i] å x[i] å嫿¯è¾å
¥æ°ç»ç第 i 个 |
| | | // å
ç´ çå¼ãsum[] 表示æ±å符å·ã彿°éè¿è®¡ç® a å bï¼ç¶åè®¡ç® f(t) æ¥è·å¾æå¼ç»æã |
| | | //------------------------------------------------------------------------------ |
| | | function LeastSquaresInterpolation(x, y: array of Double; n: Integer; t: Double): Double; |
| | | function dot2(a, b: array of Double): Double; |
| | | var |
| | | i: Integer; |
| | | begin |
| | | Result := 0; |
| | | for i := 0 to Length(a) - 1 do |
| | | Result := Result + a[i] * b[i]; |
| | | end; |
| | | function dot1(a: array of Double): Double; |
| | | begin |
| | | Result := dot2(a, a); |
| | | end; |
| | | var |
| | | i : Integer; |
| | | a, b, c, d, s, ss: Double; |
| | | begin |
| | | if n < 2 then |
| | | begin |
| | | Result := 0; |
| | | Exit; |
| | | end; |
| | | |
| | | s := 0; |
| | | ss := 0; |
| | | for i := 0 to n - 1 do |
| | | begin |
| | | s := s + y[i]; |
| | | ss := ss + sqr(y[i]); |
| | | end; |
| | | |
| | | a := (n * dot2(x, y) - dot1(x) * s) / (n * dot2(x, x) - sqr(dot1(x))); |
| | | b := (s - a * dot1(x)) / n; |
| | | |
| | | c := 0; |
| | | d := 0; |
| | | for i := 0 to n - 1 do |
| | | begin |
| | | c := c + (y[i] - a * x[i] - b) * sqr(x[i] - t); |
| | | d := d + sqr(x[i] - t); |
| | | end; |
| | | |
| | | Result := a * t + b + c / d; |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------ |
| | | // è´å¶æ¯æå¼ç®æ³ |
| | | // å
¥åï¼xåyæ¯å·²ç¥çæ°æ®ç¹ï¼xiæ¯æå¼çä½ç½®ï¼sigmaæ¯é«æ¯æ ¸å½æ°ç另宽忰 |
| | | // è¾åºï¼ |
| | | // 说æï¼è¯¥ç®æ³ä½¿ç¨é«æ¯æ ¸å½æ°æ¥å¯¹è¾å
¥æ°æ®è¿è¡å æï¼ä»¥ä¾¿çææå¼ç»æãå
¶ä¸ï¼ |
| | | // GaussianKernel()计ç®ä¸¤ç¹ä¹é´ç髿¯æ ¸å½æ°å¼ï¼BayesianInterpolation() |
| | | // 计ç®å æå¹³åå¼å¹¶è¿åæå¼ç»æã |
| | | //------------------------------------------------------------------------ |
| | | function BayesianInterpolation(x,y: array of Double; xi: Double; sigma: Double): Double; |
| | | function GaussianKernel(x, xi, sigma: Double): Double; |
| | | begin |
| | | GaussianKernel := exp(-(x - xi) * (x - xi) / (2 * sigma * sigma)); |
| | | end; |
| | | var |
| | | n, i: Integer; |
| | | k, W, Wsum, yfit: Double; |
| | | begin |
| | | n := Length(x); |
| | | Wsum := 0; |
| | | yfit := 0; |
| | | for i := 0 to n - 1 do |
| | | begin |
| | | k := GaussianKernel(x[i], xi, sigma); |
| | | W := k / sigma; |
| | | Wsum := Wsum + W; |
| | | yfit := yfit + W * y[i]; |
| | | end; |
| | | BayesianInterpolation := yfit / Wsum; |
| | | end; |
| | | |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // è·å13ä½Int64æ ¼å¼æ¯«ç§ |
| | | // å
¥åï¼å½åæ¶é´-1970-1-1 00:00:00 |
| | | // è¿åï¼Int64æ ¼å¼æ¯«ç§ |
| | | //------------------------------------------------------------------------------ |
| | | function GetTimeStampMilliseconds:string; |
| | | var |
| | | SysTime:TsystemTime; |
| | | timen,time2:TDateTime; |
| | | ss2,ss3:int64; |
| | | str2:string; |
| | | |
| | | begin |
| | | GetLocalTime(SysTime); |
| | | timen:= SystemTimeToDateTime(SysTime); |
| | | time2 := EncodeDateTime( 1970, 1, 1, 0, 0, 0, 0 ); |
| | | |
| | | ss2 := 28800000; |
| | | ss3 := MilliSecondsBetween( timen, time2 ); |
| | | ss3 :=ss3- ss2; |
| | | |
| | | str2 := IntToStr(ss3); |
| | | result:=str2; |
| | | end; |
| | | |
| | | function GetMillisecondTimeStamp: Int64; |
| | | var |
| | | st: TDateTime; |
| | | begin |
| | | st := EncodeDateTime( 1970, 1, 1, 0, 0, 0, 0 ); |
| | | Result := MilliSecondsBetween( Now, st )-8*60*60*1000; |
| | | end; |
| | | |
| | | //交æ¢16è¿å¶æ°çé«ä½ä½ |
| | | // ABCD--> CDAB |
| | | function SwapHighLowWord(Value: Word): Word; |
| | | begin |
| | | // 交æ¢é«ä½ä½ |
| | | Result := (Value and $FF) shl 8 or (Value and $FF00) shr 8; |
| | | end; |
| | | |
| | | end. |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {*************************************************************************} |
| | | { åå
æè¿°: DESå
¬ç¨å¯å对å å¯ç®æ³åå
} |
| | | { åå
çæ¬: 1.0 } |
| | | { å¼åç¯å¢: Delphi 2009, æ¯æUnicode } |
| | | { å¼å人å: æè¯åº } |
| | | { ä¿®æ¹æ¥æ: 2009-11-25 } |
| | | {*************************************************************************} |
| | | |
| | | unit UntDes; |
| | | |
| | | interface |
| | | |
| | | uses SysUtils; |
| | | |
| | | type |
| | | TKeyByte = array[0..5] of Byte; |
| | | TDesMode = (dmEncry, dmDecry); |
| | | |
| | | function EncryStr(Str, Key: String): String; |
| | | function DecryStr(Str, Key: String): String; |
| | | function EncryStrHex(Str, Key: String): String; |
| | | function DecryStrHex(StrHex, Key: String): String; |
| | | |
| | | const |
| | | BitIP: array[0..63] of Byte = |
| | | (57, 49, 41, 33, 25, 17, 9, 1, |
| | | 59, 51, 43, 35, 27, 19, 11, 3, |
| | | 61, 53, 45, 37, 29, 21, 13, 5, |
| | | 63, 55, 47, 39, 31, 23, 15, 7, |
| | | 56, 48, 40, 32, 24, 16, 8, 0, |
| | | 58, 50, 42, 34, 26, 18, 10, 2, |
| | | 60, 52, 44, 36, 28, 20, 12, 4, |
| | | 62, 54, 46, 38, 30, 22, 14, 6 ); |
| | | |
| | | BitCP: array[0..63] of Byte = |
| | | ( 39, 7, 47, 15, 55, 23, 63, 31, |
| | | 38, 6, 46, 14, 54, 22, 62, 30, |
| | | 37, 5, 45, 13, 53, 21, 61, 29, |
| | | 36, 4, 44, 12, 52, 20, 60, 28, |
| | | 35, 3, 43, 11, 51, 19, 59, 27, |
| | | 34, 2, 42, 10, 50, 18, 58, 26, |
| | | 33, 1, 41, 9, 49, 17, 57, 25, |
| | | 32, 0, 40, 8, 48, 16, 56, 24 ); |
| | | |
| | | BitExp: array[0..47] of Integer = |
| | | ( 31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, 7, 8, 9,10, |
| | | 11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20, |
| | | 21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,0 ); |
| | | |
| | | BitPM: array[0..31] of Byte = |
| | | ( 15, 6,19,20,28,11,27,16, 0,14,22,25, 4,17,30, 9, |
| | | 1, 7,23,13,31,26, 2, 8,18,12,29, 5,21,10, 3,24 ); |
| | | |
| | | sBox: array[0..7] of array[0..63] of Byte = |
| | | ( ( 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, |
| | | 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, |
| | | 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, |
| | | 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 ), |
| | | |
| | | ( 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, |
| | | 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, |
| | | 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, |
| | | 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 ), |
| | | |
| | | ( 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, |
| | | 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, |
| | | 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, |
| | | 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 ), |
| | | |
| | | ( 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, |
| | | 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, |
| | | 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, |
| | | 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 ), |
| | | |
| | | ( 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, |
| | | 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, |
| | | 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, |
| | | 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 ), |
| | | |
| | | ( 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, |
| | | 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, |
| | | 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, |
| | | 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 ), |
| | | |
| | | ( 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, |
| | | 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, |
| | | 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, |
| | | 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 ), |
| | | |
| | | ( 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, |
| | | 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, |
| | | 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, |
| | | 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 ) ); |
| | | |
| | | BitPMC1: array[0..55] of Byte = |
| | | ( 56, 48, 40, 32, 24, 16, 8, |
| | | 0, 57, 49, 41, 33, 25, 17, |
| | | 9, 1, 58, 50, 42, 34, 26, |
| | | 18, 10, 2, 59, 51, 43, 35, |
| | | 62, 54, 46, 38, 30, 22, 14, |
| | | 6, 61, 53, 45, 37, 29, 21, |
| | | 13, 5, 60, 52, 44, 36, 28, |
| | | 20, 12, 4, 27, 19, 11, 3 ); |
| | | |
| | | BitPMC2: array[0..47] of Byte = |
| | | ( 13, 16, 10, 23, 0, 4, |
| | | 2, 27, 14, 5, 20, 9, |
| | | 22, 18, 11, 3, 25, 7, |
| | | 15, 6, 26, 19, 12, 1, |
| | | 40, 51, 30, 36, 46, 54, |
| | | 29, 39, 50, 44, 32, 47, |
| | | 43, 48, 38, 55, 33, 52, |
| | | 45, 41, 49, 35, 28, 31 ); |
| | | |
| | | var |
| | | subKey: array[0..15] of TKeyByte; |
| | | |
| | | implementation |
| | | |
| | | procedure initPermutation(var inData: array of Byte); |
| | | var |
| | | newData: array[0..7] of Byte; |
| | | i: Integer; |
| | | begin |
| | | FillChar(newData, 8, 0); |
| | | for i := 0 to 63 do |
| | | if (inData[BitIP[i] shr 3] and (1 shl (7- (BitIP[i] and $07)))) <> 0 then |
| | | newData[i shr 3] := newData[i shr 3] or (1 shl (7-(i and $07))); |
| | | for i := 0 to 7 do inData[i] := newData[i]; |
| | | end; |
| | | |
| | | procedure conversePermutation(var inData: array of Byte); |
| | | var |
| | | newData: array[0..7] of Byte; |
| | | i: Integer; |
| | | begin |
| | | FillChar(newData, 8, 0); |
| | | for i := 0 to 63 do |
| | | if (inData[BitCP[i] shr 3] and (1 shl (7-(BitCP[i] and $07)))) <> 0 then |
| | | newData[i shr 3] := newData[i shr 3] or (1 shl (7-(i and $07))); |
| | | for i := 0 to 7 do inData[i] := newData[i]; |
| | | end; |
| | | |
| | | procedure expand(inData: array of Byte; var outData: array of Byte); |
| | | var |
| | | i: Integer; |
| | | begin |
| | | FillChar(outData, 6, 0); |
| | | for i := 0 to 47 do |
| | | if (inData[BitExp[i] shr 3] and (1 shl (7-(BitExp[i] and $07)))) <> 0 then |
| | | outData[i shr 3] := outData[i shr 3] or (1 shl (7-(i and $07))); |
| | | end; |
| | | |
| | | procedure permutation(var inData: array of Byte); |
| | | var |
| | | newData: array[0..3] of Byte; |
| | | i: Integer; |
| | | begin |
| | | FillChar(newData, 4, 0); |
| | | for i := 0 to 31 do |
| | | if (inData[BitPM[i] shr 3] and (1 shl (7-(BitPM[i] and $07)))) <> 0 then |
| | | newData[i shr 3] := newData[i shr 3] or (1 shl (7-(i and $07))); |
| | | for i := 0 to 3 do inData[i] := newData[i]; |
| | | end; |
| | | |
| | | function si(s,inByte: Byte): Byte; |
| | | var |
| | | c: Byte; |
| | | begin |
| | | c := (inByte and $20) or ((inByte and $1e) shr 1) or |
| | | ((inByte and $01) shl 4); |
| | | Result := (sBox[s][c] and $0f); |
| | | end; |
| | | |
| | | procedure permutationChoose1(inData: array of Byte; |
| | | var outData: array of Byte); |
| | | var |
| | | i: Integer; |
| | | begin |
| | | FillChar(outData, 7, 0); |
| | | for i := 0 to 55 do |
| | | if (inData[BitPMC1[i] shr 3] and (1 shl (7-(BitPMC1[i] and $07)))) <> 0 then |
| | | outData[i shr 3] := outData[i shr 3] or (1 shl (7-(i and $07))); |
| | | end; |
| | | |
| | | procedure permutationChoose2(inData: array of Byte; |
| | | var outData: array of Byte); |
| | | var |
| | | i: Integer; |
| | | begin |
| | | FillChar(outData, 6, 0); |
| | | for i := 0 to 47 do |
| | | if (inData[BitPMC2[i] shr 3] and (1 shl (7-(BitPMC2[i] and $07)))) <> 0 then |
| | | outData[i shr 3] := outData[i shr 3] or (1 shl (7-(i and $07))); |
| | | end; |
| | | |
| | | procedure cycleMove(var inData: array of Byte; bitMove: Byte); |
| | | var |
| | | i: Integer; |
| | | begin |
| | | for i := 0 to bitMove - 1 do |
| | | begin |
| | | inData[0] := (inData[0] shl 1) or (inData[1] shr 7); |
| | | inData[1] := (inData[1] shl 1) or (inData[2] shr 7); |
| | | inData[2] := (inData[2] shl 1) or (inData[3] shr 7); |
| | | inData[3] := (inData[3] shl 1) or ((inData[0] and $10) shr 4); |
| | | inData[0] := (inData[0] and $0f); |
| | | end; |
| | | end; |
| | | |
| | | procedure makeKey(inKey: array of Byte; var outKey: array of TKeyByte); |
| | | const |
| | | bitDisplace: array[0..15] of Byte = |
| | | ( 1,1,2,2, 2,2,2,2, 1,2,2,2, 2,2,2,1 ); |
| | | var |
| | | outData56: array[0..6] of Byte; |
| | | key28l: array[0..3] of Byte; |
| | | key28r: array[0..3] of Byte; |
| | | key56o: array[0..6] of Byte; |
| | | i: Integer; |
| | | begin |
| | | permutationChoose1(inKey, outData56); |
| | | |
| | | key28l[0] := outData56[0] shr 4; |
| | | key28l[1] := (outData56[0] shl 4) or (outData56[1] shr 4); |
| | | key28l[2] := (outData56[1] shl 4) or (outData56[2] shr 4); |
| | | key28l[3] := (outData56[2] shl 4) or (outData56[3] shr 4); |
| | | key28r[0] := outData56[3] and $0f; |
| | | key28r[1] := outData56[4]; |
| | | key28r[2] := outData56[5]; |
| | | key28r[3] := outData56[6]; |
| | | |
| | | for i := 0 to 15 do |
| | | begin |
| | | cycleMove(key28l, bitDisplace[i]); |
| | | cycleMove(key28r, bitDisplace[i]); |
| | | key56o[0] := (key28l[0] shl 4) or (key28l[1] shr 4); |
| | | key56o[1] := (key28l[1] shl 4) or (key28l[2] shr 4); |
| | | key56o[2] := (key28l[2] shl 4) or (key28l[3] shr 4); |
| | | key56o[3] := (key28l[3] shl 4) or (key28r[0]); |
| | | key56o[4] := key28r[1]; |
| | | key56o[5] := key28r[2]; |
| | | key56o[6] := key28r[3]; |
| | | permutationChoose2(key56o, outKey[i]); |
| | | end; |
| | | end; |
| | | |
| | | procedure encry(inData, subKey: array of Byte; |
| | | var outData: array of Byte); |
| | | var |
| | | outBuf: array[0..5] of Byte; |
| | | buf: array[0..7] of Byte; |
| | | i: Integer; |
| | | begin |
| | | expand(inData, outBuf); |
| | | for i := 0 to 5 do outBuf[i] := outBuf[i] xor subKey[i]; |
| | | // outBuf xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx |
| | | buf[0] := outBuf[0] shr 2; //xxxxxx -> 2 |
| | | buf[1] := ((outBuf[0] and $03) shl 4) or (outBuf[1] shr 4); // 4 <- xx xxxx -> 4 |
| | | buf[2] := ((outBuf[1] and $0f) shl 2) or (outBuf[2] shr 6); // 2 <- xxxx xx -> 6 |
| | | buf[3] := outBuf[2] and $3f; // xxxxxx |
| | | buf[4] := outBuf[3] shr 2; // xxxxxx |
| | | buf[5] := ((outBuf[3] and $03) shl 4) or (outBuf[4] shr 4); // xx xxxx |
| | | buf[6] := ((outBuf[4] and $0f) shl 2) or (outBuf[5] shr 6); // xxxx xx |
| | | buf[7] := outBuf[5] and $3f; // xxxxxx |
| | | for i := 0 to 7 do buf[i] := si(i, buf[i]); |
| | | for i := 0 to 3 do outBuf[i] := (buf[i*2] shl 4) or buf[i*2+1]; |
| | | permutation(outBuf); |
| | | for i := 0 to 3 do outData[i] := outBuf[i]; |
| | | end; |
| | | |
| | | procedure desData(desMode: TDesMode; |
| | | inData: array of Byte; var outData: array of Byte); |
| | | // inData, outData é½ä¸º8Bytesï¼å¦ååºé |
| | | var |
| | | i, j: Integer; |
| | | temp, buf: array[0..3] of Byte; |
| | | begin |
| | | for i := 0 to 7 do outData[i] := inData[i]; |
| | | initPermutation(outData); |
| | | if desMode = dmEncry then |
| | | begin |
| | | for i := 0 to 15 do |
| | | begin |
| | | for j := 0 to 3 do temp[j] := outData[j]; //temp = Ln |
| | | for j := 0 to 3 do outData[j] := outData[j + 4]; //Ln+1 = Rn |
| | | encry(outData, subKey[i], buf); //Rn ==Kn==> buf |
| | | for j := 0 to 3 do outData[j + 4] := temp[j] xor buf[j]; //Rn+1 = Ln^buf |
| | | end; |
| | | |
| | | for j := 0 to 3 do temp[j] := outData[j + 4]; |
| | | for j := 0 to 3 do outData[j + 4] := outData[j]; |
| | | for j := 0 to 3 do outData[j] := temp[j]; |
| | | end |
| | | else if desMode = dmDecry then |
| | | begin |
| | | for i := 15 downto 0 do |
| | | begin |
| | | for j := 0 to 3 do temp[j] := outData[j]; |
| | | for j := 0 to 3 do outData[j] := outData[j + 4]; |
| | | encry(outData, subKey[i], buf); |
| | | for j := 0 to 3 do outData[j + 4] := temp[j] xor buf[j]; |
| | | end; |
| | | for j := 0 to 3 do temp[j] := outData[j + 4]; |
| | | for j := 0 to 3 do outData[j + 4] := outData[j]; |
| | | for j := 0 to 3 do outData[j] := temp[j]; |
| | | end; |
| | | conversePermutation(outData); |
| | | end; |
| | | |
| | | ////////////////////////////////////////////////////////////// |
| | | |
| | | function EncryStr(Str, Key: String): String; |
| | | var |
| | | StrByte, OutByte, KeyByte: array[0..7] of Byte; |
| | | StrResult: String; |
| | | I, J: Integer; |
| | | begin |
| | | if (Length(Str) > 0) and (Ord(Str[Length(Str)]) = 0) then |
| | | raise Exception.Create('Error: the last char is NULL char.'); |
| | | if Length(Key) < 8 then |
| | | while Length(Key) < 8 do Key := Key + Chr(0); |
| | | while Length(Str) mod 8 <> 0 do Str := Str + Chr(0); |
| | | |
| | | for J := 0 to 7 do KeyByte[J] := Ord(Key[J + 1]); |
| | | makeKey(keyByte, subKey); |
| | | |
| | | StrResult := ''; |
| | | |
| | | for I := 0 to Length(Str) div 8 - 1 do |
| | | begin |
| | | for J := 0 to 7 do |
| | | StrByte[J] := Ord(Str[I * 8 + J + 1]); |
| | | desData(dmEncry, StrByte, OutByte); |
| | | for J := 0 to 7 do |
| | | StrResult := StrResult + Chr(OutByte[J]); |
| | | end; |
| | | |
| | | Result := StrResult; |
| | | end; |
| | | |
| | | function DecryStr(Str, Key: String): String; |
| | | var |
| | | StrByte, OutByte, KeyByte: array[0..7] of Byte; |
| | | StrResult: String; |
| | | I, J: Integer; |
| | | begin |
| | | if Length(Key) < 8 then |
| | | while Length(Key) < 8 do Key := Key + Chr(0); |
| | | |
| | | for J := 0 to 7 do KeyByte[J] := Ord(Key[J + 1]); |
| | | makeKey(keyByte, subKey); |
| | | |
| | | StrResult := ''; |
| | | |
| | | for I := 0 to Length(Str) div 8 - 1 do |
| | | begin |
| | | for J := 0 to 7 do StrByte[J] := Ord(Str[I * 8 + J + 1]); |
| | | desData(dmDecry, StrByte, OutByte); |
| | | for J := 0 to 7 do |
| | | StrResult := StrResult + Chr(OutByte[J]); |
| | | end; |
| | | while (Length(StrResult) > 0) and |
| | | (Ord(StrResult[Length(StrResult)]) = 0) do |
| | | Delete(StrResult, Length(StrResult), 1); |
| | | Result := StrResult; |
| | | end; |
| | | |
| | | /////////////////////////////////////////////////////////// |
| | | |
| | | function EncryStrHex(Str, Key: String): String; |
| | | var |
| | | StrResult, TempResult, Temp: String; |
| | | I: Integer; |
| | | begin |
| | | TempResult := EncryStr(Str, Key); |
| | | StrResult := ''; |
| | | for I := 0 to Length(TempResult) - 1 do |
| | | begin |
| | | Temp := Format('%x', [Ord(TempResult[I + 1])]); |
| | | if Length(Temp) = 1 then Temp := '0' + Temp; |
| | | StrResult := StrResult + Temp; |
| | | end; |
| | | Result := StrResult; |
| | | end; |
| | | |
| | | function DecryStrHex(StrHex, Key: String): String; |
| | | function HexToInt(Hex: String): Integer; |
| | | var |
| | | I, Res: Integer; |
| | | ch: Char; |
| | | begin |
| | | Res := 0; |
| | | for I := 0 to Length(Hex) - 1 do |
| | | begin |
| | | ch := Hex[I + 1]; |
| | | if (ch >= '0') and (ch <= '9') then |
| | | Res := Res * 16 + Ord(ch) - Ord('0') |
| | | else if (ch >= 'A') and (ch <= 'F') then |
| | | Res := Res * 16 + Ord(ch) - Ord('A') + 10 |
| | | else if (ch >= 'a') and (ch <= 'f') then |
| | | Res := Res * 16 + Ord(ch) - Ord('a') + 10 |
| | | else raise Exception.Create('Error: not a Hex String'); |
| | | end; |
| | | Result := Res; |
| | | end; |
| | | |
| | | var |
| | | Str, Temp: String; |
| | | I: Integer; |
| | | begin |
| | | Str := ''; |
| | | for I := 0 to Length(StrHex) div 2 - 1 do |
| | | begin |
| | | Temp := Copy(StrHex, I * 2 + 1, 2); |
| | | Str := Str + Chr(HexToInt(Temp)); |
| | | end; |
| | | Result := DecryStr(Str, Key); |
| | | end; |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | unit SQLite3; |
| | | |
| | | { |
| | | Simplified interface for SQLite. |
| | | Updated for Sqlite 3 by Tim Anderson (tim@itwriting.com) |
| | | Note: NOT COMPLETE for version 3, just minimal functionality |
| | | Adapted from file created by Pablo Pissanetzky (pablo@myhtpc.net) |
| | | which was based on SQLite.pas by Ben Hochstrasser (bhoc@surfeu.ch) |
| | | } |
| | | |
| | | {$IFDEF FPC} |
| | | {$MODE DELPHI} |
| | | {$H+} (* use AnsiString *) |
| | | {$PACKENUM 4} (* use 4-byte enums *) |
| | | {$PACKRECORDS C} (* C/C++-compatible record packing *) |
| | | {$ELSE} |
| | | {$MINENUMSIZE 4} (* use 4-byte enums *) |
| | | {$ENDIF} |
| | | |
| | | interface |
| | | |
| | | const |
| | | {$IF Defined(MSWINDOWS)} |
| | | SQLiteDLL = 'core\sqlite3_x86.dll'; |
| | | {$ELSEIF Defined(DARWIN)} |
| | | SQLiteDLL = 'libsqlite3.dylib'; |
| | | {$linklib libsqlite3} |
| | | {$ELSEIF Defined(UNIX)} |
| | | SQLiteDLL = 'sqlite3.so'; |
| | | {$IFEND} |
| | | |
| | | // Return values for sqlite3_exec() and sqlite3_step() |
| | | |
| | | const |
| | | SQLITE_OK = 0; // Successful result |
| | | (* beginning-of-error-codes *) |
| | | SQLITE_ERROR = 1; // SQL error or missing database |
| | | SQLITE_INTERNAL = 2; // An internal logic error in SQLite |
| | | SQLITE_PERM = 3; // Access permission denied |
| | | SQLITE_ABORT = 4; // Callback routine requested an abort |
| | | SQLITE_BUSY = 5; // The database file is locked |
| | | SQLITE_LOCKED = 6; // A table in the database is locked |
| | | SQLITE_NOMEM = 7; // A malloc() failed |
| | | SQLITE_READONLY = 8; // Attempt to write a readonly database |
| | | SQLITE_INTERRUPT = 9; // Operation terminated by sqlite3_interrupt() |
| | | SQLITE_IOERR = 10; // Some kind of disk I/O error occurred |
| | | SQLITE_CORRUPT = 11; // The database disk image is malformed |
| | | SQLITE_NOTFOUND = 12; // (Internal Only) Table or record not found |
| | | SQLITE_FULL = 13; // Insertion failed because database is full |
| | | SQLITE_CANTOPEN = 14; // Unable to open the database file |
| | | SQLITE_PROTOCOL = 15; // Database lock protocol error |
| | | SQLITE_EMPTY = 16; // Database is empty |
| | | SQLITE_SCHEMA = 17; // The database schema changed |
| | | SQLITE_TOOBIG = 18; // Too much data for one row of a table |
| | | SQLITE_CONSTRAINT = 19; // Abort due to contraint violation |
| | | SQLITE_MISMATCH = 20; // Data type mismatch |
| | | SQLITE_MISUSE = 21; // Library used incorrectly |
| | | SQLITE_NOLFS = 22; // Uses OS features not supported on host |
| | | SQLITE_AUTH = 23; // Authorization denied |
| | | SQLITE_FORMAT = 24; // Auxiliary database format error |
| | | SQLITE_RANGE = 25; // 2nd parameter to sqlite3_bind out of range |
| | | SQLITE_NOTADB = 26; // File opened that is not a database file |
| | | SQLITE_ROW = 100; // sqlite3_step() has another row ready |
| | | SQLITE_DONE = 101; // sqlite3_step() has finished executing |
| | | |
| | | SQLITE_INTEGER = 1; |
| | | SQLITE_FLOAT = 2; |
| | | SQLITE_TEXT = 3; |
| | | SQLITE_BLOB = 4; |
| | | SQLITE_NULL = 5; |
| | | |
| | | SQLITE_UTF8 = 1; |
| | | SQLITE_UTF16 = 2; |
| | | SQLITE_UTF16BE = 3; |
| | | SQLITE_UTF16LE = 4; |
| | | SQLITE_ANY = 5; |
| | | |
| | | SQLITE_STATIC {: TSQLite3Destructor} = Pointer(0); |
| | | SQLITE_TRANSIENT {: TSQLite3Destructor} = Pointer(-1); |
| | | |
| | | type |
| | | TSQLiteDB = Pointer; |
| | | TSQLiteResult = ^PAnsiChar; |
| | | TSQLiteStmt = Pointer; |
| | | TSQLiteBackup = pointer; |
| | | |
| | | type |
| | | PPAnsiCharArray = ^TPAnsiCharArray; |
| | | TPAnsiCharArray = array[0 .. (MaxInt div SizeOf(PAnsiChar))-1] of PAnsiChar; |
| | | |
| | | type |
| | | TSQLiteExecCallback = function(UserData: Pointer; NumCols: integer; ColValues: |
| | | PPAnsiCharArray; ColNames: PPAnsiCharArray): integer; cdecl; |
| | | TSQLiteBusyHandlerCallback = function(UserData: Pointer; P2: integer): integer; cdecl; |
| | | |
| | | //function prototype for define own collate |
| | | TCollateXCompare = function(UserData: pointer; Buf1Len: integer; Buf1: pointer; |
| | | Buf2Len: integer; Buf2: pointer): integer; cdecl; |
| | | |
| | | |
| | | function SQLite3_Open(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_open'; |
| | | function SQLite3_Close(db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_close'; |
| | | function SQLite3_Exec(db: TSQLiteDB; SQLStatement: PAnsiChar; CallbackPtr: TSQLiteExecCallback; UserData: Pointer; var ErrMsg: PAnsiChar): integer; cdecl; external SQLiteDLL name 'sqlite3_exec'; |
| | | function SQLite3_Version(): PAnsiChar; cdecl; external SQLiteDLL name 'sqlite3_libversion'; |
| | | function SQLite3_ErrMsg(db: TSQLiteDB): PAnsiChar; cdecl; external SQLiteDLL name 'sqlite3_errmsg'; |
| | | function SQLite3_ErrCode(db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_errcode'; |
| | | procedure SQlite3_Free(P: PAnsiChar); cdecl; external SQLiteDLL name 'sqlite3_free'; |
| | | function SQLite3_GetTable(db: TSQLiteDB; SQLStatement: PAnsiChar; var ResultPtr: TSQLiteResult; var RowCount: Cardinal; var ColCount: Cardinal; var ErrMsg: PAnsiChar): integer; cdecl; external SQLiteDLL name 'sqlite3_get_table'; |
| | | procedure SQLite3_FreeTable(Table: TSQLiteResult); cdecl; external SQLiteDLL name 'sqlite3_free_table'; |
| | | function SQLite3_Complete(P: PAnsiChar): boolean; cdecl; external SQLiteDLL name 'sqlite3_complete'; |
| | | function SQLite3_LastInsertRowID(db: TSQLiteDB): int64; cdecl; external SQLiteDLL name 'sqlite3_last_insert_rowid'; |
| | | procedure SQLite3_Interrupt(db: TSQLiteDB); cdecl; external SQLiteDLL name 'sqlite3_interrupt'; |
| | | procedure SQLite3_BusyHandler(db: TSQLiteDB; CallbackPtr: TSQLiteBusyHandlerCallback; UserData: Pointer); cdecl; external SQLiteDLL name 'sqlite3_busy_handler'; |
| | | procedure SQLite3_BusyTimeout(db: TSQLiteDB; TimeOut: integer); cdecl; external SQLiteDLL name 'sqlite3_busy_timeout'; |
| | | function SQLite3_Changes(db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_changes'; |
| | | function SQLite3_TotalChanges(db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_total_changes'; |
| | | function SQLite3_Prepare(db: TSQLiteDB; SQLStatement: PAnsiChar; nBytes: integer; var hStmt: TSqliteStmt; var pzTail: PAnsiChar): integer; cdecl; external SQLiteDLL name 'sqlite3_prepare'; |
| | | function SQLite3_Prepare_v2(db: TSQLiteDB; SQLStatement: PAnsiChar; nBytes: integer; var hStmt: TSqliteStmt; var pzTail: PAnsiChar): integer; cdecl; external SQLiteDLL name 'sqlite3_prepare_v2'; |
| | | function SQLite3_ColumnCount(hStmt: TSqliteStmt): integer; cdecl; external SQLiteDLL name 'sqlite3_column_count'; |
| | | function SQLite3_ColumnName(hStmt: TSqliteStmt; ColNum: integer): PAnsiChar; cdecl; external SQLiteDLL name 'sqlite3_column_name'; |
| | | function SQLite3_ColumnDeclType(hStmt: TSqliteStmt; ColNum: integer): PAnsiChar; cdecl; external SQLiteDLL name 'sqlite3_column_decltype'; |
| | | function SQLite3_Step(hStmt: TSqliteStmt): integer; cdecl; external SQLiteDLL name 'sqlite3_step'; |
| | | function SQLite3_DataCount(hStmt: TSqliteStmt): integer; cdecl; external SQLiteDLL name 'sqlite3_data_count'; |
| | | |
| | | function SQLite3_ColumnBlob(hStmt: TSqliteStmt; ColNum: integer): pointer; cdecl; external SQLiteDLL name 'sqlite3_column_blob'; |
| | | function SQLite3_ColumnBytes(hStmt: TSqliteStmt; ColNum: integer): integer; cdecl; external SQLiteDLL name 'sqlite3_column_bytes'; |
| | | function SQLite3_ColumnDouble(hStmt: TSqliteStmt; ColNum: integer): double; cdecl; external SQLiteDLL name 'sqlite3_column_double'; |
| | | function SQLite3_ColumnInt(hStmt: TSqliteStmt; ColNum: integer): integer; cdecl; external SQLiteDLL name 'sqlite3_column_int'; |
| | | function SQLite3_ColumnText(hStmt: TSqliteStmt; ColNum: integer): PAnsiChar; cdecl; external SQLiteDLL name 'sqlite3_column_text'; |
| | | function SQLite3_ColumnType(hStmt: TSqliteStmt; ColNum: integer): integer; cdecl; external SQLiteDLL name 'sqlite3_column_type'; |
| | | function SQLite3_ColumnInt64(hStmt: TSqliteStmt; ColNum: integer): Int64; cdecl; external SQLiteDLL name 'sqlite3_column_int64'; |
| | | function SQLite3_Finalize(hStmt: TSqliteStmt): integer; cdecl; external SQLiteDLL name 'sqlite3_finalize'; |
| | | function SQLite3_Reset(hStmt: TSqliteStmt): integer; cdecl; external SQLiteDLL name 'sqlite3_reset'; |
| | | |
| | | function SQLite3_Backup_Init(DestDb: TSQLiteDB; DestDbName: PAnsiChar; SourceDb: TSQLiteDB; SourceDbName: PAnsiChar): TSqliteBackup; cdecl; external SQLiteDLL name 'sqlite3_backup_init'; |
| | | function SQLite3_Backup_Step(hBackup: TSQLiteBackup; nPage: integer): integer; cdecl; external SQLiteDLL name 'sqlite3_backup_step'; |
| | | function SQLite3_Backup_Finish(hBackup: TSQLiteBackup): integer; cdecl; external SQLiteDLL name 'sqlite3_backup_finish'; |
| | | function SQLite3_Backup_Remaining(hBackup: TSQLiteBackup): integer; cdecl; external SQLiteDLL name 'sqlite3_backup_remaining'; |
| | | function SQLite3_Backup_Pagecount(hBackup: TSQLiteBackup): integer; cdecl; external SQLiteDLL name 'sqlite3_backup_pagecount'; |
| | | |
| | | // |
| | | // In the SQL strings input to sqlite3_prepare() and sqlite3_prepare16(), |
| | | // one or more literals can be replace by a wildcard "?" or ":N:" where |
| | | // N is an integer. These value of these wildcard literals can be set |
| | | // using the routines listed below. |
| | | // |
| | | // In every case, the first parameter is a pointer to the sqlite3_stmt |
| | | // structure returned from sqlite3_prepare(). The second parameter is the |
| | | // index of the wildcard. The first "?" has an index of 1. ":N:" wildcards |
| | | // use the index N. |
| | | // |
| | | // The fifth parameter to sqlite3_bind_blob(), sqlite3_bind_text(), and |
| | | //sqlite3_bind_text16() is a destructor used to dispose of the BLOB or |
| | | //text after SQLite has finished with it. If the fifth argument is the |
| | | // special value SQLITE_STATIC, then the library assumes that the information |
| | | // is in static, unmanaged space and does not need to be freed. If the |
| | | // fifth argument has the value SQLITE_TRANSIENT, then SQLite makes its |
| | | // own private copy of the data. |
| | | // |
| | | // The sqlite3_bind_* routine must be called before sqlite3_step() after |
| | | // an sqlite3_prepare() or sqlite3_reset(). Unbound wildcards are interpreted |
| | | // as NULL. |
| | | // |
| | | |
| | | type |
| | | TSQLite3Destructor = procedure(Ptr: Pointer); cdecl; |
| | | |
| | | function sqlite3_bind_blob(hStmt: TSqliteStmt; ParamNum: integer; |
| | | ptrData: pointer; numBytes: integer; ptrDestructor: TSQLite3Destructor): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_bind_blob'; |
| | | function sqlite3_bind_text(hStmt: TSqliteStmt; ParamNum: integer; |
| | | Text: PAnsiChar; numBytes: integer; ptrDestructor: TSQLite3Destructor): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_bind_text'; |
| | | function sqlite3_bind_double(hStmt: TSqliteStmt; ParamNum: integer; Data: Double): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_bind_double'; |
| | | function sqlite3_bind_int(hStmt: TSqLiteStmt; ParamNum: integer; Data: integer): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_bind_int'; |
| | | function sqlite3_bind_int64(hStmt: TSqliteStmt; ParamNum: integer; Data: int64): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_bind_int64'; |
| | | function sqlite3_bind_null(hStmt: TSqliteStmt; ParamNum: integer): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_bind_null'; |
| | | |
| | | function sqlite3_bind_parameter_index(hStmt: TSqliteStmt; zName: PAnsiChar): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_bind_parameter_index'; |
| | | |
| | | function sqlite3_enable_shared_cache(Value: integer): integer; cdecl; external SQLiteDLL name 'sqlite3_enable_shared_cache'; |
| | | |
| | | //user collate definiton |
| | | function SQLite3_create_collation(db: TSQLiteDB; Name: PAnsiChar; eTextRep: integer; |
| | | UserData: pointer; xCompare: TCollateXCompare): integer; cdecl; external SQLiteDLL name 'sqlite3_create_collation'; |
| | | |
| | | function SQLiteFieldType(SQLiteFieldTypeCode: Integer): AnsiString; |
| | | function SQLiteErrorStr(SQLiteErrorCode: Integer): AnsiString; |
| | | |
| | | implementation |
| | | |
| | | uses |
| | | SysUtils; |
| | | |
| | | function SQLiteFieldType(SQLiteFieldTypeCode: Integer): AnsiString; |
| | | begin |
| | | case SQLiteFieldTypeCode of |
| | | SQLITE_INTEGER: Result := 'Integer'; |
| | | SQLITE_FLOAT: Result := 'Float'; |
| | | SQLITE_TEXT: Result := 'Text'; |
| | | SQLITE_BLOB: Result := 'Blob'; |
| | | SQLITE_NULL: Result := 'Null'; |
| | | else |
| | | Result := 'Unknown SQLite Field Type Code "' + IntToStr(SQLiteFieldTypeCode) + '"'; |
| | | end; |
| | | end; |
| | | |
| | | function SQLiteErrorStr(SQLiteErrorCode: Integer): AnsiString; |
| | | begin |
| | | case SQLiteErrorCode of |
| | | SQLITE_OK: Result := 'Successful result'; |
| | | SQLITE_ERROR: Result := 'SQL error or missing database'; |
| | | SQLITE_INTERNAL: Result := 'An internal logic error in SQLite'; |
| | | SQLITE_PERM: Result := 'Access permission denied'; |
| | | SQLITE_ABORT: Result := 'Callback routine requested an abort'; |
| | | SQLITE_BUSY: Result := 'The database file is locked'; |
| | | SQLITE_LOCKED: Result := 'A table in the database is locked'; |
| | | SQLITE_NOMEM: Result := 'A malloc() failed'; |
| | | SQLITE_READONLY: Result := 'Attempt to write a readonly database'; |
| | | SQLITE_INTERRUPT: Result := 'Operation terminated by sqlite3_interrupt()'; |
| | | SQLITE_IOERR: Result := 'Some kind of disk I/O error occurred'; |
| | | SQLITE_CORRUPT: Result := 'The database disk image is malformed'; |
| | | SQLITE_NOTFOUND: Result := '(Internal Only) Table or record not found'; |
| | | SQLITE_FULL: Result := 'Insertion failed because database is full'; |
| | | SQLITE_CANTOPEN: Result := 'Unable to open the database file'; |
| | | SQLITE_PROTOCOL: Result := 'Database lock protocol error'; |
| | | SQLITE_EMPTY: Result := 'Database is empty'; |
| | | SQLITE_SCHEMA: Result := 'The database schema changed'; |
| | | SQLITE_TOOBIG: Result := 'Too much data for one row of a table'; |
| | | SQLITE_CONSTRAINT: Result := 'Abort due to contraint violation'; |
| | | SQLITE_MISMATCH: Result := 'Data type mismatch'; |
| | | SQLITE_MISUSE: Result := 'Library used incorrectly'; |
| | | SQLITE_NOLFS: Result := 'Uses OS features not supported on host'; |
| | | SQLITE_AUTH: Result := 'Authorization denied'; |
| | | SQLITE_FORMAT: Result := 'Auxiliary database format error'; |
| | | SQLITE_RANGE: Result := '2nd parameter to sqlite3_bind out of range'; |
| | | SQLITE_NOTADB: Result := 'File opened that is not a database file'; |
| | | SQLITE_ROW: Result := 'sqlite3_step() has another row ready'; |
| | | SQLITE_DONE: Result := 'sqlite3_step() has finished executing'; |
| | | else |
| | | Result := 'Unknown SQLite Error Code "' + IntToStr(SQLiteErrorCode) + '"'; |
| | | end; |
| | | end; |
| | | |
| | | function ColValueToStr(Value: PAnsiChar): AnsiString; |
| | | begin |
| | | if (Value = nil) then |
| | | Result := 'NULL' |
| | | else |
| | | Result := Value; |
| | | end; |
| | | |
| | | |
| | | end. |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | unit SQLiteTable3; |
| | | |
| | | { |
| | | Simple classes for using SQLite's exec and get_table. |
| | | |
| | | TSQLiteDatabase wraps the calls to open and close an SQLite database. |
| | | It also wraps SQLite_exec for queries that do not return a result set |
| | | |
| | | TSQLiteTable wraps execution of SQL query. |
| | | It run query and read all returned rows to internal buffer. |
| | | It allows accessing fields by name as well as index and can move through a |
| | | result set forward and backwards, or randomly to any row. |
| | | |
| | | TSQLiteUniTable wraps execution of SQL query. |
| | | It run query as TSQLiteTable, but reading just first row only! |
| | | You can step to next row (until not EOF) by 'Next' method. |
| | | You cannot step backwards! (So, it is called as UniDirectional result set.) |
| | | It not using any internal buffering, this class is very close to Sqlite API. |
| | | It allows accessing fields by name as well as index on actual row only. |
| | | Very good and fast for sequentional scanning of large result sets with minimal |
| | | memory footprint. |
| | | |
| | | Warning! Do not close TSQLiteDatabase before any TSQLiteUniTable, |
| | | because query is closed on TSQLiteUniTable destructor and database connection |
| | | is used during TSQLiteUniTable live! |
| | | |
| | | SQL parameter usage: |
| | | You can add named parameter values by call set of AddParam* methods. |
| | | Parameters will be used for first next SQL statement only. |
| | | Parameter name must be prefixed by ':', '$' or '@' and same prefix must be |
| | | used in SQL statement! |
| | | Sample: |
| | | table.AddParamText(':str', 'some value'); |
| | | s := table.GetTableString('SELECT value FROM sometable WHERE id=:str'); |
| | | |
| | | Notes from Andrew Retmanski on prepared queries |
| | | The changes are as follows: |
| | | |
| | | SQLiteTable3.pas |
| | | - Added new boolean property Synchronised (this controls the SYNCHRONOUS pragma as I found that turning this OFF increased the write performance in my application) |
| | | - Added new type TSQLiteQuery (this is just a simple record wrapper around the SQL string and a TSQLiteStmt pointer) |
| | | - Added PrepareSQL method to prepare SQL query - returns TSQLiteQuery |
| | | - Added ReleaseSQL method to release previously prepared query |
| | | - Added overloaded BindSQL methods for Integer and String types - these set new values for the prepared query parameters |
| | | - Added overloaded ExecSQL method to execute a prepared TSQLiteQuery |
| | | |
| | | Usage of the new methods should be self explanatory but the process is in essence: |
| | | |
| | | 1. Call PrepareSQL to return TSQLiteQuery 2. Call BindSQL for each parameter in the prepared query 3. Call ExecSQL to run the prepared query 4. Repeat steps 2 & 3 as required 5. Call ReleaseSQL to free SQLite resources |
| | | |
| | | One other point - the Synchronised property throws an error if used inside a transaction. |
| | | |
| | | Acknowledments |
| | | Adapted by Tim Anderson (tim@itwriting.com) |
| | | Originally created by Pablo Pissanetzky (pablo@myhtpc.net) |
| | | Modified and enhanced by Lukas Gebauer |
| | | Modified and enhanced by Tobias Gunkel |
| | | } |
| | | |
| | | interface |
| | | |
| | | {$IFDEF FPC} |
| | | {$MODE Delphi}{$H+} |
| | | {$ENDIF} |
| | | |
| | | uses |
| | | {$IFDEF WIN32} |
| | | Windows, |
| | | {$ENDIF} |
| | | SQLite3, Classes, SysUtils; |
| | | |
| | | const |
| | | |
| | | dtInt = 1; |
| | | dtNumeric = 2; |
| | | dtStr = 3; |
| | | dtBlob = 4; |
| | | dtNull = 5; |
| | | |
| | | type |
| | | |
| | | ESQLiteException = class(Exception) |
| | | end; |
| | | |
| | | TSQliteParam = class |
| | | public |
| | | name: string; |
| | | valuetype: integer; |
| | | valueinteger: int64; |
| | | valuefloat: double; |
| | | valuedata: string; |
| | | end; |
| | | |
| | | THookQuery = procedure(Sender: TObject; SQL: String) of object; |
| | | |
| | | TSQLiteQuery = record |
| | | SQL: String; |
| | | Statement: TSQLiteStmt; |
| | | end; |
| | | |
| | | TSQLiteTable = class; |
| | | TSQLiteUniTable = class; |
| | | |
| | | TSQLiteDatabase = class |
| | | private |
| | | fDB: TSQLiteDB; |
| | | fInTrans: boolean; |
| | | fSync: boolean; |
| | | fParams: TList; |
| | | FOnQuery: THookQuery; |
| | | procedure RaiseError(s: string; SQL: string); |
| | | procedure SetParams(Stmt: TSQLiteStmt); |
| | | procedure BindData(Stmt: TSQLiteStmt; const Bindings: array of const); |
| | | function GetRowsChanged: integer; |
| | | protected |
| | | procedure SetSynchronised(Value: boolean); |
| | | procedure DoQuery(value: string); |
| | | public |
| | | constructor Create(const FileName: string); |
| | | destructor Destroy; override; |
| | | function GetTable(const SQL: Ansistring): TSQLiteTable; overload; |
| | | function GetTable(const SQL: Ansistring; const Bindings: array of const): TSQLiteTable; overload; |
| | | procedure ExecSQL(const SQL: Ansistring); overload; |
| | | procedure ExecSQL(const SQL: Ansistring; const Bindings: array of const); overload; |
| | | procedure ExecSQL(Query: TSQLiteQuery); overload; |
| | | function PrepareSQL(const SQL: Ansistring): TSQLiteQuery; |
| | | procedure BindSQL(Query: TSQLiteQuery; const Index: Integer; const Value: Integer); overload; |
| | | procedure BindSQL(Query: TSQLiteQuery; const Index: Integer; const Value: String); overload; |
| | | procedure ReleaseSQL(Query: TSQLiteQuery); |
| | | function GetUniTable(const SQL: Ansistring): TSQLiteUniTable; overload; |
| | | function GetUniTable(const SQL: Ansistring; const Bindings: array of const): TSQLiteUniTable; overload; |
| | | function GetTableValue(const SQL: Ansistring): int64; overload; |
| | | function GetTableValue(const SQL: Ansistring; const Bindings: array of const): int64; overload; |
| | | function GetTableString(const SQL: Ansistring): string; overload; |
| | | function GetTableString(const SQL: Ansistring; const Bindings: array of const): string; overload; |
| | | procedure GetTableStrings(const SQL: Ansistring; const Value: TStrings); |
| | | procedure UpdateBlob(const SQL: Ansistring; BlobData: TStream); |
| | | procedure BeginTransaction; |
| | | procedure Commit; |
| | | procedure Rollback; |
| | | function TableExists(TableName: string): boolean; |
| | | function GetLastInsertRowID: int64; |
| | | function GetLastChangedRows: int64; |
| | | procedure SetTimeout(Value: integer); |
| | | function Backup(TargetDB: TSQLiteDatabase): integer; Overload; |
| | | function Backup(TargetDB: TSQLiteDatabase; targetName: Ansistring; sourceName: Ansistring): integer; Overload; |
| | | function Version: string; |
| | | procedure AddCustomCollate(name: string; xCompare: TCollateXCompare); |
| | | //adds collate named SYSTEM for correct data sorting by user's locale |
| | | Procedure AddSystemCollate; |
| | | procedure ParamsClear; |
| | | procedure AddParamInt(name: string; value: int64); |
| | | procedure AddParamFloat(name: string; value: double); |
| | | procedure AddParamText(name: string; value: string); |
| | | procedure AddParamNull(name: string); |
| | | |
| | | property DB: TSQLiteDB read fDB; |
| | | published |
| | | property IsTransactionOpen: boolean read fInTrans; |
| | | //database rows that were changed (or inserted or deleted) by the most recent SQL statement |
| | | property RowsChanged : integer read getRowsChanged; |
| | | property Synchronised: boolean read FSync write SetSynchronised; |
| | | property OnQuery: THookQuery read FOnQuery write FOnQuery; |
| | | end; |
| | | |
| | | TSQLiteTable = class |
| | | private |
| | | fResults: TList; |
| | | fRowCount: cardinal; |
| | | fColCount: cardinal; |
| | | fCols: TStringList; |
| | | fColTypes: TList; |
| | | fRow: cardinal; |
| | | function GetFields(I: cardinal): string; |
| | | function GetEOF: boolean; |
| | | function GetBOF: boolean; |
| | | function GetColumns(I: integer): string; |
| | | function GetFieldByName(FieldName: string): string; |
| | | function GetFieldIndex(FieldName: string): integer; |
| | | function GetCount: integer; |
| | | function GetCountResult: integer; |
| | | public |
| | | constructor Create(DB: TSQLiteDatabase; const SQL: Ansistring); overload; |
| | | constructor Create(DB: TSQLiteDatabase; const SQL: Ansistring; const Bindings: array of const); overload; |
| | | destructor Destroy; override; |
| | | function FieldAsInteger(I: cardinal): int64; |
| | | function FieldAsBlob(I: cardinal): TMemoryStream; |
| | | function FieldAsBlobText(I: cardinal): string; |
| | | function FieldIsNull(I: cardinal): boolean; |
| | | function FieldAsString(I: cardinal): string; |
| | | function FieldAsDouble(I: cardinal): double; |
| | | function Next: boolean; |
| | | function Previous: boolean; |
| | | property EOF: boolean read GetEOF; |
| | | property BOF: boolean read GetBOF; |
| | | property Fields[I: cardinal]: string read GetFields; |
| | | property FieldByName[FieldName: string]: string read GetFieldByName; |
| | | property FieldIndex[FieldName: string]: integer read GetFieldIndex; |
| | | property Columns[I: integer]: string read GetColumns; |
| | | property ColCount: cardinal read fColCount; |
| | | property RowCount: cardinal read fRowCount; |
| | | property Row: cardinal read fRow; |
| | | function MoveFirst: boolean; |
| | | function MoveLast: boolean; |
| | | function MoveTo(position: cardinal): boolean; |
| | | property Count: integer read GetCount; |
| | | // The property CountResult is used when you execute count(*) queries. |
| | | // It returns 0 if the result set is empty or the value of the |
| | | // first field as an integer. |
| | | property CountResult: integer read GetCountResult; |
| | | end; |
| | | |
| | | TSQLiteUniTable = class |
| | | private |
| | | fColCount: cardinal; |
| | | fCols: TStringList; |
| | | fRow: cardinal; |
| | | fEOF: boolean; |
| | | fStmt: TSQLiteStmt; |
| | | fDB: TSQLiteDatabase; |
| | | fSQL: string; |
| | | function GetFields(I: cardinal): string; |
| | | function GetColumns(I: integer): string; |
| | | function GetFieldByName(FieldName: string): string; |
| | | function GetFieldIndex(FieldName: string): integer; |
| | | public |
| | | constructor Create(DB: TSQLiteDatabase; const SQL: Ansistring); overload; |
| | | constructor Create(DB: TSQLiteDatabase; const SQL: Ansistring; const Bindings: array of const); overload; |
| | | destructor Destroy; override; |
| | | function FieldAsInteger(I: cardinal): int64; |
| | | function FieldAsBlob(I: cardinal): TMemoryStream; |
| | | function FieldAsBlobPtr(I: cardinal; out iNumBytes: integer): Pointer; |
| | | function FieldAsBlobText(I: cardinal): string; |
| | | function FieldIsNull(I: cardinal): boolean; |
| | | function FieldAsString(I: cardinal): string; |
| | | function FieldAsDouble(I: cardinal): double; |
| | | function Next: boolean; |
| | | property EOF: boolean read FEOF; |
| | | property Fields[I: cardinal]: string read GetFields; |
| | | property FieldByName[FieldName: string]: string read GetFieldByName; |
| | | property FieldIndex[FieldName: string]: integer read GetFieldIndex; |
| | | property Columns[I: integer]: string read GetColumns; |
| | | property ColCount: cardinal read fColCount; |
| | | property Row: cardinal read fRow; |
| | | end; |
| | | |
| | | procedure DisposePointer(ptr: pointer); cdecl; |
| | | |
| | | {$IFDEF WIN32} |
| | | function SystemCollate(Userdta: pointer; Buf1Len: integer; Buf1: pointer; |
| | | Buf2Len: integer; Buf2: pointer): integer; cdecl; |
| | | {$ENDIF} |
| | | |
| | | implementation |
| | | |
| | | procedure DisposePointer(ptr: pointer); cdecl; |
| | | begin |
| | | if assigned(ptr) then |
| | | freemem(ptr); |
| | | end; |
| | | |
| | | {$IFDEF WIN32} |
| | | function SystemCollate(Userdta: pointer; Buf1Len: integer; Buf1: pointer; |
| | | Buf2Len: integer; Buf2: pointer): integer; cdecl; |
| | | begin |
| | | Result := CompareStringW(LOCALE_USER_DEFAULT, 0, PWideChar(Buf1), Buf1Len, |
| | | PWideChar(Buf2), Buf2Len) - 2; |
| | | end; |
| | | {$ENDIF} |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // TSQLiteDatabase |
| | | //------------------------------------------------------------------------------ |
| | | |
| | | constructor TSQLiteDatabase.Create(const FileName: string); |
| | | var |
| | | Msg: PAnsiChar; |
| | | iResult: integer; |
| | | utf8FileName: UTF8string; |
| | | begin |
| | | inherited Create; |
| | | fParams := TList.Create; |
| | | |
| | | self.fInTrans := False; |
| | | |
| | | Msg := nil; |
| | | try |
| | | utf8FileName := UTF8String(FileName); |
| | | iResult := SQLite3_Open(PAnsiChar(utf8FileName), Fdb); |
| | | |
| | | if iResult <> SQLITE_OK then |
| | | if Assigned(Fdb) then |
| | | begin |
| | | Msg := Sqlite3_ErrMsg(Fdb); |
| | | raise ESqliteException.CreateFmt('Failed to open database "%s" : %s', |
| | | [FileName, Msg]); |
| | | end |
| | | else |
| | | raise ESqliteException.CreateFmt('Failed to open database "%s" : unknown error', |
| | | [FileName]); |
| | | |
| | | //set a few configs |
| | | //L.G. Do not call it here. Because busy handler is not setted here, |
| | | // any share violation causing exception! |
| | | |
| | | // self.ExecSQL('PRAGMA SYNCHRONOUS=NORMAL;'); |
| | | // self.ExecSQL('PRAGMA temp_store = MEMORY;'); |
| | | |
| | | finally |
| | | if Assigned(Msg) then |
| | | SQLite3_Free(Msg); |
| | | end; |
| | | |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | destructor TSQLiteDatabase.Destroy; |
| | | begin |
| | | if self.fInTrans then |
| | | self.Rollback; //assume rollback |
| | | if Assigned(fDB) then |
| | | SQLite3_Close(fDB); |
| | | ParamsClear; |
| | | fParams.Free; |
| | | inherited; |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetLastInsertRowID: int64; |
| | | begin |
| | | Result := Sqlite3_LastInsertRowID(self.fDB); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetLastChangedRows: int64; |
| | | begin |
| | | Result := SQLite3_TotalChanges(self.fDB); |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | procedure TSQLiteDatabase.RaiseError(s: string; SQL: string); |
| | | //look up last error and raise an exception with an appropriate message |
| | | var |
| | | Msg: PAnsiChar; |
| | | ret : integer; |
| | | begin |
| | | |
| | | Msg := nil; |
| | | |
| | | ret := sqlite3_errcode(self.fDB); |
| | | if ret <> SQLITE_OK then |
| | | Msg := sqlite3_errmsg(self.fDB); |
| | | |
| | | if Msg <> nil then |
| | | raise ESqliteException.CreateFmt(s +'.'#13'Error [%d]: %s.'#13'"%s": %s', [ret, SQLiteErrorStr(ret),SQL, Msg]) |
| | | else |
| | | raise ESqliteException.CreateFmt(s, [SQL, 'No message']); |
| | | |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.SetSynchronised(Value: boolean); |
| | | begin |
| | | if Value <> fSync then |
| | | begin |
| | | if Value then |
| | | ExecSQL('PRAGMA synchronous = ON;') |
| | | else |
| | | ExecSQL('PRAGMA synchronous = OFF;'); |
| | | fSync := Value; |
| | | end; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.BindData(Stmt: TSQLiteStmt; const Bindings: array of const); |
| | | var |
| | | BlobMemStream: TCustomMemoryStream; |
| | | BlobStdStream: TStream; |
| | | DataPtr: Pointer; |
| | | DataSize: integer; |
| | | AnsiStr: AnsiString; |
| | | AnsiStrPtr: PAnsiString; |
| | | I: integer; |
| | | begin |
| | | for I := 0 to High(Bindings) do |
| | | begin |
| | | case Bindings[I].VType of |
| | | vtString, |
| | | vtAnsiString, vtPChar, |
| | | vtWideString, vtPWideChar, |
| | | vtChar, vtWideChar: |
| | | begin |
| | | case Bindings[I].VType of |
| | | vtString: begin // ShortString |
| | | AnsiStr := Bindings[I].VString^; |
| | | DataPtr := PAnsiChar(AnsiStr); |
| | | DataSize := Length(AnsiStr)+1; |
| | | end; |
| | | vtPChar: begin |
| | | DataPtr := Bindings[I].VPChar; |
| | | DataSize := -1; |
| | | end; |
| | | vtAnsiString: begin |
| | | AnsiStrPtr := PAnsiString(@Bindings[I].VAnsiString); |
| | | DataPtr := PAnsiChar(AnsiStrPtr^); |
| | | DataSize := Length(AnsiStrPtr^)+1; |
| | | end; |
| | | vtPWideChar: begin |
| | | DataPtr := PAnsiChar(UTF8Encode(WideString(Bindings[I].VPWideChar))); |
| | | DataSize := -1; |
| | | end; |
| | | vtWideString: begin |
| | | DataPtr := PAnsiChar(UTF8Encode(PWideString(@Bindings[I].VWideString)^)); |
| | | DataSize := -1; |
| | | end; |
| | | vtChar: begin |
| | | DataPtr := PAnsiChar(String(Bindings[I].VChar)); |
| | | DataSize := 2; |
| | | end; |
| | | vtWideChar: begin |
| | | DataPtr := PAnsiChar(UTF8Encode(WideString(Bindings[I].VWideChar))); |
| | | DataSize := -1; |
| | | end; |
| | | else |
| | | raise ESqliteException.Create('Unknown string-type'); |
| | | end; |
| | | if (sqlite3_bind_text(Stmt, I+1, DataPtr, DataSize, SQLITE_STATIC) <> SQLITE_OK) then |
| | | RaiseError('Could not bind text', 'BindData'); |
| | | end; |
| | | vtInteger: |
| | | if (sqlite3_bind_int(Stmt, I+1, Bindings[I].VInteger) <> SQLITE_OK) then |
| | | RaiseError('Could not bind integer', 'BindData'); |
| | | vtInt64: |
| | | if (sqlite3_bind_int64(Stmt, I+1, Bindings[I].VInt64^) <> SQLITE_OK) then |
| | | RaiseError('Could not bind int64', 'BindData'); |
| | | vtExtended: |
| | | if (sqlite3_bind_double(Stmt, I+1, Bindings[I].VExtended^) <> SQLITE_OK) then |
| | | RaiseError('Could not bind extended', 'BindData'); |
| | | vtBoolean: |
| | | if (sqlite3_bind_int(Stmt, I+1, Integer(Bindings[I].VBoolean)) <> SQLITE_OK) then |
| | | RaiseError('Could not bind boolean', 'BindData'); |
| | | vtPointer: |
| | | begin |
| | | if (Bindings[I].VPointer = nil) then |
| | | begin |
| | | if (sqlite3_bind_null(Stmt, I+1) <> SQLITE_OK) then |
| | | RaiseError('Could not bind null', 'BindData'); |
| | | end |
| | | else |
| | | raise ESqliteException.Create('Unhandled pointer (<> nil)'); |
| | | end; |
| | | vtObject: |
| | | begin |
| | | if (Bindings[I].VObject is TCustomMemoryStream) then |
| | | begin |
| | | BlobMemStream := TCustomMemoryStream(Bindings[I].VObject); |
| | | if (sqlite3_bind_blob(Stmt, I+1, @PAnsiChar(BlobMemStream.Memory)[BlobMemStream.Position], |
| | | BlobMemStream.Size-BlobMemStream.Position, SQLITE_STATIC) <> SQLITE_OK) then |
| | | begin |
| | | RaiseError('Could not bind BLOB', 'BindData'); |
| | | end; |
| | | end |
| | | else if (Bindings[I].VObject is TStream) then |
| | | begin |
| | | BlobStdStream := TStream(Bindings[I].VObject); |
| | | DataSize := BlobStdStream.Size; |
| | | |
| | | GetMem(DataPtr, DataSize); |
| | | if (DataPtr = nil) then |
| | | raise ESqliteException.Create('Error getting memory to save blob'); |
| | | |
| | | BlobStdStream.Position := 0; |
| | | BlobStdStream.Read(DataPtr^, DataSize); |
| | | |
| | | if (sqlite3_bind_blob(stmt, I+1, DataPtr, DataSize, @DisposePointer) <> SQLITE_OK) then |
| | | RaiseError('Could not bind BLOB', 'BindData'); |
| | | end |
| | | else |
| | | raise ESqliteException.Create('Unhandled object-type in binding'); |
| | | end |
| | | else |
| | | begin |
| | | raise ESqliteException.Create('Unhandled binding'); |
| | | end; |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.ExecSQL(const SQL: Ansistring); |
| | | begin |
| | | ExecSQL(SQL, []); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.ExecSQL(const SQL: Ansistring; const Bindings: array of const); |
| | | var |
| | | Stmt: TSQLiteStmt; |
| | | NextSQLStatement: PAnsiChar; |
| | | iStepResult: integer; |
| | | begin |
| | | try |
| | | if Sqlite3_Prepare_v2(self.fDB, PAnsiChar(SQL), -1, Stmt, NextSQLStatement) <> |
| | | SQLITE_OK then |
| | | RaiseError('Error executing SQL', SQL); |
| | | if (Stmt = nil) then |
| | | RaiseError('Could not prepare SQL statement', SQL); |
| | | DoQuery(SQL); |
| | | SetParams(Stmt); |
| | | BindData(Stmt, Bindings); |
| | | |
| | | iStepResult := Sqlite3_step(Stmt); |
| | | if (iStepResult <> SQLITE_DONE) then |
| | | begin |
| | | SQLite3_reset(stmt); |
| | | RaiseError('Error executing SQL statement', SQL); |
| | | end; |
| | | finally |
| | | if Assigned(Stmt) then |
| | | Sqlite3_Finalize(stmt); |
| | | end; |
| | | end; |
| | | |
| | | {$WARNINGS OFF} |
| | | procedure TSQLiteDatabase.ExecSQL(Query: TSQLiteQuery); |
| | | var |
| | | iStepResult: integer; |
| | | begin |
| | | if Assigned(Query.Statement) then |
| | | begin |
| | | iStepResult := Sqlite3_step(Query.Statement); |
| | | |
| | | if (iStepResult <> SQLITE_DONE) then |
| | | begin |
| | | SQLite3_reset(Query.Statement); |
| | | RaiseError('Error executing prepared SQL statement', Query.SQL); |
| | | end; |
| | | Sqlite3_Reset(Query.Statement); |
| | | end; |
| | | end; |
| | | {$WARNINGS ON} |
| | | |
| | | {$WARNINGS OFF} |
| | | function TSQLiteDatabase.PrepareSQL(const SQL: Ansistring): TSQLiteQuery; |
| | | var |
| | | Stmt: TSQLiteStmt; |
| | | NextSQLStatement: PAnsiChar; |
| | | begin |
| | | Result.SQL := SQL; |
| | | Result.Statement := nil; |
| | | |
| | | if Sqlite3_Prepare(self.fDB, PAnsiChar(SQL), -1, Stmt, NextSQLStatement) <> |
| | | SQLITE_OK then |
| | | RaiseError('Error executing SQL', SQL) |
| | | else |
| | | Result.Statement := Stmt; |
| | | |
| | | if (Result.Statement = nil) then |
| | | RaiseError('Could not prepare SQL statement', SQL); |
| | | DoQuery(SQL); |
| | | end; |
| | | {$WARNINGS ON} |
| | | |
| | | {$WARNINGS OFF} |
| | | procedure TSQLiteDatabase.BindSQL(Query: TSQLiteQuery; const Index: Integer; const Value: Integer); |
| | | begin |
| | | if Assigned(Query.Statement) then |
| | | sqlite3_Bind_Int(Query.Statement, Index, Value) |
| | | else |
| | | RaiseError('Could not bind integer to prepared SQL statement', Query.SQL); |
| | | end; |
| | | {$WARNINGS ON} |
| | | |
| | | {$WARNINGS OFF} |
| | | procedure TSQLiteDatabase.BindSQL(Query: TSQLiteQuery; const Index: Integer; const Value: String); |
| | | begin |
| | | if Assigned(Query.Statement) then |
| | | Sqlite3_Bind_Text(Query.Statement, Index, PAnsiChar(Value), Length(Value), Pointer(SQLITE_STATIC)) |
| | | else |
| | | RaiseError('Could not bind string to prepared SQL statement', Query.SQL); |
| | | end; |
| | | {$WARNINGS ON} |
| | | |
| | | {$WARNINGS OFF} |
| | | procedure TSQLiteDatabase.ReleaseSQL(Query: TSQLiteQuery); |
| | | begin |
| | | if Assigned(Query.Statement) then |
| | | begin |
| | | Sqlite3_Finalize(Query.Statement); |
| | | Query.Statement := nil; |
| | | end |
| | | else |
| | | RaiseError('Could not release prepared SQL statement', Query.SQL); |
| | | end; |
| | | {$WARNINGS ON} |
| | | |
| | | procedure TSQLiteDatabase.UpdateBlob(const SQL: Ansistring; BlobData: TStream); |
| | | var |
| | | iSize: integer; |
| | | ptr: pointer; |
| | | Stmt: TSQLiteStmt; |
| | | Msg: PAnsiChar; |
| | | NextSQLStatement: PAnsiChar; |
| | | iStepResult: integer; |
| | | iBindResult: integer; |
| | | begin |
| | | //expects SQL of the form 'UPDATE MYTABLE SET MYFIELD = ? WHERE MYKEY = 1' |
| | | if pos('?', SQL) = 0 then |
| | | RaiseError('SQL must include a ? parameter', SQL); |
| | | |
| | | Msg := nil; |
| | | try |
| | | |
| | | if Sqlite3_Prepare_v2(self.fDB, PAnsiChar(SQL), -1, Stmt, NextSQLStatement) <> |
| | | SQLITE_OK then |
| | | RaiseError('Could not prepare SQL statement', SQL); |
| | | |
| | | if (Stmt = nil) then |
| | | RaiseError('Could not prepare SQL statement', SQL); |
| | | DoQuery(SQL); |
| | | |
| | | //now bind the blob data |
| | | iSize := BlobData.size; |
| | | |
| | | GetMem(ptr, iSize); |
| | | |
| | | if (ptr = nil) then |
| | | raise ESqliteException.CreateFmt('Error getting memory to save blob', |
| | | [SQL, 'Error']); |
| | | |
| | | BlobData.position := 0; |
| | | BlobData.Read(ptr^, iSize); |
| | | |
| | | iBindResult := SQLite3_Bind_Blob(stmt, 1, ptr, iSize, @DisposePointer); |
| | | |
| | | if iBindResult <> SQLITE_OK then |
| | | RaiseError('Error binding blob to database', SQL); |
| | | |
| | | iStepResult := Sqlite3_step(Stmt); |
| | | |
| | | if (iStepResult <> SQLITE_DONE) then |
| | | begin |
| | | SQLite3_reset(stmt); |
| | | RaiseError('Error executing SQL statement', SQL); |
| | | end; |
| | | |
| | | finally |
| | | |
| | | if Assigned(Stmt) then |
| | | Sqlite3_Finalize(stmt); |
| | | |
| | | if Assigned(Msg) then |
| | | SQLite3_Free(Msg); |
| | | end; |
| | | |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | function TSQLiteDatabase.GetTable(const SQL: Ansistring): TSQLiteTable; |
| | | begin |
| | | Result := TSQLiteTable.Create(Self, SQL); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetTable(const SQL: Ansistring; const Bindings: array of const): TSQLiteTable; |
| | | begin |
| | | Result := TSQLiteTable.Create(Self, SQL, Bindings); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetUniTable(const SQL: Ansistring): TSQLiteUniTable; |
| | | begin |
| | | Result := TSQLiteUniTable.Create(Self, SQL); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetUniTable(const SQL: Ansistring; const Bindings: array of const): TSQLiteUniTable; |
| | | begin |
| | | Result := TSQLiteUniTable.Create(Self, SQL, Bindings); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetTableValue(const SQL: Ansistring): int64; |
| | | begin |
| | | Result := GetTableValue(SQL, []); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetTableValue(const SQL: Ansistring; const Bindings: array of const): int64; |
| | | var |
| | | Table: TSQLiteUniTable; |
| | | begin |
| | | Result := 0; |
| | | Table := self.GetUniTable(SQL, Bindings); |
| | | try |
| | | if not Table.EOF then |
| | | Result := Table.FieldAsInteger(0); |
| | | finally |
| | | Table.Free; |
| | | end; |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetTableString(const SQL: Ansistring): String; |
| | | begin |
| | | Result := GetTableString(SQL, []); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.GetTableString(const SQL: Ansistring; const Bindings: array of const): String; |
| | | var |
| | | Table: TSQLiteUniTable; |
| | | begin |
| | | Result := ''; |
| | | Table := self.GetUniTable(SQL, Bindings); |
| | | try |
| | | if not Table.EOF then |
| | | Result := Table.FieldAsString(0); |
| | | finally |
| | | Table.Free; |
| | | end; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.GetTableStrings(const SQL: Ansistring; |
| | | const Value: TStrings); |
| | | var |
| | | Table: TSQLiteUniTable; |
| | | begin |
| | | Value.Clear; |
| | | Table := self.GetUniTable(SQL); |
| | | try |
| | | while not table.EOF do |
| | | begin |
| | | Value.Add(Table.FieldAsString(0)); |
| | | table.Next; |
| | | end; |
| | | finally |
| | | Table.Free; |
| | | end; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.BeginTransaction; |
| | | begin |
| | | if not self.fInTrans then |
| | | begin |
| | | self.ExecSQL('BEGIN TRANSACTION'); |
| | | self.fInTrans := True; |
| | | end |
| | | else |
| | | raise ESqliteException.Create('Transaction already open'); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.Commit; |
| | | begin |
| | | self.ExecSQL('COMMIT'); |
| | | self.fInTrans := False; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.Rollback; |
| | | begin |
| | | self.ExecSQL('ROLLBACK'); |
| | | self.fInTrans := False; |
| | | end; |
| | | |
| | | function TSQLiteDatabase.TableExists(TableName: string): boolean; |
| | | var |
| | | sql: string; |
| | | ds: TSqliteTable; |
| | | begin |
| | | //returns true if table exists in the database |
| | | sql := 'select [sql] from sqlite_master where [type] = ''table'' and lower(name) = ''' + |
| | | lowercase(TableName) + ''' '; |
| | | ds := self.GetTable(sql); |
| | | try |
| | | Result := (ds.Count > 0); |
| | | finally |
| | | ds.Free; |
| | | end; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.SetTimeout(Value: integer); |
| | | begin |
| | | SQLite3_BusyTimeout(self.fDB, Value); |
| | | end; |
| | | |
| | | function TSQLiteDatabase.Version: string; |
| | | begin |
| | | Result := SQLite3_Version; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.AddCustomCollate(name: string; |
| | | xCompare: TCollateXCompare); |
| | | begin |
| | | sqlite3_create_collation(fdb, PAnsiChar(name), SQLITE_UTF8, nil, xCompare); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.AddSystemCollate; |
| | | begin |
| | | {$IFDEF WIN32} |
| | | sqlite3_create_collation(fdb, 'SYSTEM', SQLITE_UTF16LE, nil, @SystemCollate); |
| | | {$ENDIF} |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.ParamsClear; |
| | | var |
| | | n: integer; |
| | | begin |
| | | for n := fParams.Count - 1 downto 0 do |
| | | TSQliteParam(fparams[n]).free; |
| | | fParams.Clear; |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.AddParamInt(name: string; value: int64); |
| | | var |
| | | par: TSQliteParam; |
| | | begin |
| | | par := TSQliteParam.Create; |
| | | par.name := name; |
| | | par.valuetype := SQLITE_INTEGER; |
| | | par.valueinteger := value; |
| | | fParams.Add(par); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.AddParamFloat(name: string; value: double); |
| | | var |
| | | par: TSQliteParam; |
| | | begin |
| | | par := TSQliteParam.Create; |
| | | par.name := name; |
| | | par.valuetype := SQLITE_FLOAT; |
| | | par.valuefloat := value; |
| | | fParams.Add(par); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.AddParamText(name: string; value: string); |
| | | var |
| | | par: TSQliteParam; |
| | | begin |
| | | par := TSQliteParam.Create; |
| | | par.name := name; |
| | | par.valuetype := SQLITE_TEXT; |
| | | par.valuedata := value; |
| | | fParams.Add(par); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.AddParamNull(name: string); |
| | | var |
| | | par: TSQliteParam; |
| | | begin |
| | | par := TSQliteParam.Create; |
| | | par.name := name; |
| | | par.valuetype := SQLITE_NULL; |
| | | fParams.Add(par); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.SetParams(Stmt: TSQLiteStmt); |
| | | var |
| | | n: integer; |
| | | i: integer; |
| | | par: TSQliteParam; |
| | | begin |
| | | try |
| | | for n := 0 to fParams.Count - 1 do |
| | | begin |
| | | par := TSQliteParam(fParams[n]); |
| | | i := sqlite3_bind_parameter_index(Stmt, PAnsiChar(par.name)); |
| | | if i > 0 then |
| | | begin |
| | | case par.valuetype of |
| | | SQLITE_INTEGER: |
| | | sqlite3_bind_int64(Stmt, i, par.valueinteger); |
| | | SQLITE_FLOAT: |
| | | sqlite3_bind_double(Stmt, i, par.valuefloat); |
| | | SQLITE_TEXT: |
| | | sqlite3_bind_text(Stmt, i, PAnsiChar(par.valuedata), |
| | | length(par.valuedata), SQLITE_TRANSIENT); |
| | | SQLITE_NULL: |
| | | sqlite3_bind_null(Stmt, i); |
| | | end; |
| | | end; |
| | | end; |
| | | finally |
| | | ParamsClear; |
| | | end; |
| | | end; |
| | | |
| | | //database rows that were changed (or inserted or deleted) by the most recent SQL statement |
| | | function TSQLiteDatabase.GetRowsChanged: integer; |
| | | begin |
| | | Result := SQLite3_Changes(self.fDB); |
| | | end; |
| | | |
| | | procedure TSQLiteDatabase.DoQuery(value: string); |
| | | begin |
| | | if assigned(OnQuery) then |
| | | OnQuery(Self, Value); |
| | | end; |
| | | |
| | | //returns result of SQLITE3_Backup_Step |
| | | function TSQLiteDatabase.Backup(TargetDB: TSQLiteDatabase; targetName: Ansistring; sourceName: Ansistring): integer; |
| | | var |
| | | pBackup: TSQLiteBackup; |
| | | begin |
| | | pBackup := Sqlite3_backup_init(TargetDB.DB,PAnsiChar(targetName),self.DB,PAnsiChar(sourceName)); |
| | | |
| | | if (pBackup = nil) then |
| | | raise ESqliteException.Create('Could not initialize backup') |
| | | else begin |
| | | try |
| | | result := SQLITE3_Backup_Step(pBackup,-1); //copies entire db |
| | | finally |
| | | SQLITE3_backup_finish(pBackup); |
| | | end; |
| | | end; |
| | | end; |
| | | |
| | | function TSQliteDatabase.Backup(TargetDB: TSQLiteDatabase): integer; |
| | | begin |
| | | result := self.Backup(TargetDB,'main','main'); |
| | | end; |
| | | |
| | | //------------------------------------------------------------------------------ |
| | | // TSQLiteTable |
| | | //------------------------------------------------------------------------------ |
| | | |
| | | constructor TSQLiteTable.Create(DB: TSQLiteDatabase; const SQL: Ansistring); |
| | | begin |
| | | Create(DB, SQL, []); |
| | | end; |
| | | |
| | | constructor TSQLiteTable.Create(DB: TSQLiteDatabase; const SQL: Ansistring; const Bindings: array of const); |
| | | var |
| | | Stmt: TSQLiteStmt; |
| | | NextSQLStatement: PAnsiChar; |
| | | iStepResult: integer; |
| | | ptr: pointer; |
| | | iNumBytes: integer; |
| | | thisBlobValue: TMemoryStream; |
| | | thisStringValue: pstring; |
| | | thisDoubleValue: pDouble; |
| | | thisIntValue: pInt64; |
| | | thisColType: pInteger; |
| | | i: integer; |
| | | DeclaredColType: PAnsiChar; |
| | | ActualColType: integer; |
| | | ptrValue: PAnsiChar; |
| | | begin |
| | | inherited create; |
| | | try |
| | | self.fRowCount := 0; |
| | | self.fColCount := 0; |
| | | //if there are several SQL statements in SQL, NextSQLStatment points to the |
| | | //beginning of the next one. Prepare only prepares the first SQL statement. |
| | | if Sqlite3_Prepare_v2(DB.fDB, PAnsiChar(SQL), -1, Stmt, NextSQLStatement) <> SQLITE_OK then |
| | | DB.RaiseError('Error executing SQL', SQL); |
| | | if (Stmt = nil) then |
| | | DB.RaiseError('Could not prepare SQL statement', SQL); |
| | | DB.DoQuery(SQL); |
| | | DB.SetParams(Stmt); |
| | | DB.BindData(Stmt, Bindings); |
| | | |
| | | iStepResult := Sqlite3_step(Stmt); |
| | | while (iStepResult <> SQLITE_DONE) do |
| | | begin |
| | | case iStepResult of |
| | | SQLITE_ROW: |
| | | begin |
| | | Inc(fRowCount); |
| | | if (fRowCount = 1) then |
| | | begin |
| | | //get data types |
| | | fCols := TStringList.Create; |
| | | fColTypes := TList.Create; |
| | | fColCount := SQLite3_ColumnCount(stmt); |
| | | for i := 0 to Pred(fColCount) do |
| | | fCols.Add(AnsiUpperCase(Sqlite3_ColumnName(stmt, i))); |
| | | for i := 0 to Pred(fColCount) do |
| | | begin |
| | | new(thisColType); |
| | | DeclaredColType := Sqlite3_ColumnDeclType(stmt, i); |
| | | if DeclaredColType = nil then |
| | | thisColType^ := Sqlite3_ColumnType(stmt, i) //use the actual column type instead |
| | | //seems to be needed for last_insert_rowid |
| | | else |
| | | if (DeclaredColType = 'INTEGER') or (DeclaredColType = 'BOOLEAN') then |
| | | thisColType^ := dtInt |
| | | else |
| | | if (DeclaredColType = 'NUMERIC') or |
| | | (DeclaredColType = 'FLOAT') or |
| | | (DeclaredColType = 'DOUBLE') or |
| | | (DeclaredColType = 'REAL') then |
| | | thisColType^ := dtNumeric |
| | | else |
| | | if DeclaredColType = 'BLOB' then |
| | | thisColType^ := dtBlob |
| | | else |
| | | thisColType^ := dtStr; |
| | | fColTypes.Add(thiscoltype); |
| | | end; |
| | | fResults := TList.Create; |
| | | end; |
| | | |
| | | //get column values |
| | | for i := 0 to Pred(ColCount) do |
| | | begin |
| | | ActualColType := Sqlite3_ColumnType(stmt, i); |
| | | if (ActualColType = SQLITE_NULL) then |
| | | fResults.Add(nil) |
| | | else |
| | | if pInteger(fColTypes[i])^ = dtInt then |
| | | begin |
| | | new(thisintvalue); |
| | | thisintvalue^ := Sqlite3_ColumnInt64(stmt, i); |
| | | fResults.Add(thisintvalue); |
| | | end |
| | | else |
| | | if pInteger(fColTypes[i])^ = dtNumeric then |
| | | begin |
| | | new(thisdoublevalue); |
| | | thisdoublevalue^ := Sqlite3_ColumnDouble(stmt, i); |
| | | fResults.Add(thisdoublevalue); |
| | | end |
| | | else |
| | | if pInteger(fColTypes[i])^ = dtBlob then |
| | | begin |
| | | iNumBytes := Sqlite3_ColumnBytes(stmt, i); |
| | | if iNumBytes = 0 then |
| | | thisblobvalue := nil |
| | | else |
| | | begin |
| | | thisblobvalue := TMemoryStream.Create; |
| | | thisblobvalue.position := 0; |
| | | ptr := Sqlite3_ColumnBlob(stmt, i); |
| | | thisblobvalue.writebuffer(ptr^, iNumBytes); |
| | | end; |
| | | fResults.Add(thisblobvalue); |
| | | end |
| | | else |
| | | begin |
| | | new(thisstringvalue); |
| | | ptrValue := Sqlite3_ColumnText(stmt, i); |
| | | setstring(thisstringvalue^, ptrvalue, strlen(ptrvalue)); |
| | | fResults.Add(thisstringvalue); |
| | | end; |
| | | end; |
| | | end; |
| | | SQLITE_BUSY: |
| | | raise ESqliteException.CreateFmt('Could not prepare SQL statement', |
| | | [SQL, 'SQLite is Busy']); |
| | | else |
| | | begin |
| | | SQLite3_reset(stmt); |
| | | DB.RaiseError('Could not retrieve data', SQL); |
| | | end; |
| | | end; |
| | | iStepResult := Sqlite3_step(Stmt); |
| | | end; |
| | | fRow := 0; |
| | | finally |
| | | if Assigned(Stmt) then |
| | | Sqlite3_Finalize(stmt); |
| | | end; |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | destructor TSQLiteTable.Destroy; |
| | | var |
| | | i: cardinal; |
| | | iColNo: integer; |
| | | begin |
| | | if Assigned(fResults) then |
| | | begin |
| | | for i := 0 to fResults.Count - 1 do |
| | | begin |
| | | //check for blob type |
| | | iColNo := (i mod fColCount); |
| | | case pInteger(self.fColTypes[iColNo])^ of |
| | | dtBlob: |
| | | TMemoryStream(fResults[i]).Free; |
| | | dtStr: |
| | | if fResults[i] <> nil then |
| | | begin |
| | | setstring(string(fResults[i]^), nil, 0); |
| | | dispose(fResults[i]); |
| | | end; |
| | | else |
| | | dispose(fResults[i]); |
| | | end; |
| | | end; |
| | | fResults.Free; |
| | | end; |
| | | if Assigned(fCols) then |
| | | fCols.Free; |
| | | if Assigned(fColTypes) then |
| | | for i := 0 to fColTypes.Count - 1 do |
| | | dispose(fColTypes[i]); |
| | | fColTypes.Free; |
| | | inherited; |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | function TSQLiteTable.GetColumns(I: integer): string; |
| | | begin |
| | | Result := fCols[I]; |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | function TSQLiteTable.GetCountResult: integer; |
| | | begin |
| | | if not EOF then |
| | | Result := StrToInt(Fields[0]) |
| | | else |
| | | Result := 0; |
| | | end; |
| | | |
| | | function TSQLiteTable.GetCount: integer; |
| | | begin |
| | | Result := FRowCount; |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | function TSQLiteTable.GetEOF: boolean; |
| | | begin |
| | | Result := fRow >= fRowCount; |
| | | end; |
| | | |
| | | function TSQLiteTable.GetBOF: boolean; |
| | | begin |
| | | Result := fRow <= 0; |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | function TSQLiteTable.GetFieldByName(FieldName: string): string; |
| | | begin |
| | | Result := GetFields(self.GetFieldIndex(FieldName)); |
| | | end; |
| | | |
| | | function TSQLiteTable.GetFieldIndex(FieldName: string): integer; |
| | | begin |
| | | if (fCols = nil) then |
| | | begin |
| | | raise ESqliteException.Create('Field ' + fieldname + ' Not found. Empty dataset'); |
| | | exit; |
| | | end; |
| | | |
| | | if (fCols.count = 0) then |
| | | begin |
| | | raise ESqliteException.Create('Field ' + fieldname + ' Not found. Empty dataset'); |
| | | exit; |
| | | end; |
| | | |
| | | Result := fCols.IndexOf(AnsiUpperCase(FieldName)); |
| | | |
| | | if (result < 0) then |
| | | begin |
| | | raise ESqliteException.Create('Field not found in dataset: ' + fieldname) |
| | | end; |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | function TSQLiteTable.GetFields(I: cardinal): string; |
| | | var |
| | | thisvalue: pstring; |
| | | thistype: integer; |
| | | begin |
| | | Result := ''; |
| | | if EOF then |
| | | raise ESqliteException.Create('Table is at End of File'); |
| | | //integer types are not stored in the resultset |
| | | //as strings, so they should be retrieved using the type-specific |
| | | //methods |
| | | thistype := pInteger(self.fColTypes[I])^; |
| | | |
| | | case thistype of |
| | | dtStr: |
| | | begin |
| | | thisvalue := self.fResults[(self.frow * self.fColCount) + I]; |
| | | if (thisvalue <> nil) then |
| | | Result := thisvalue^ |
| | | else |
| | | Result := ''; |
| | | end; |
| | | dtInt: |
| | | Result := IntToStr(self.FieldAsInteger(I)); |
| | | dtNumeric: |
| | | Result := FloatToStr(self.FieldAsDouble(I)); |
| | | dtBlob: |
| | | Result := self.FieldAsBlobText(I); |
| | | else |
| | | Result := ''; |
| | | end; |
| | | end; |
| | | |
| | | function TSqliteTable.FieldAsBlob(I: cardinal): TMemoryStream; |
| | | begin |
| | | if EOF then |
| | | raise ESqliteException.Create('Table is at End of File'); |
| | | if (self.fResults[(self.frow * self.fColCount) + I] = nil) then |
| | | Result := nil |
| | | else |
| | | if pInteger(self.fColTypes[I])^ = dtBlob then |
| | | Result := TMemoryStream(self.fResults[(self.frow * self.fColCount) + I]) |
| | | else |
| | | raise ESqliteException.Create('Not a Blob field'); |
| | | end; |
| | | |
| | | function TSqliteTable.FieldAsBlobText(I: cardinal): string; |
| | | var |
| | | MemStream: TMemoryStream; |
| | | Buffer: PAnsiChar; |
| | | begin |
| | | Result := ''; |
| | | MemStream := self.FieldAsBlob(I); |
| | | if MemStream <> nil then |
| | | if MemStream.Size > 0 then |
| | | begin |
| | | MemStream.position := 0; |
| | | {$IFDEF UNICODE} |
| | | Buffer := AnsiStralloc(MemStream.Size + 1); |
| | | {$ELSE} |
| | | Buffer := Stralloc(MemStream.Size + 1); |
| | | {$ENDIF} |
| | | MemStream.readbuffer(Buffer[0], MemStream.Size); |
| | | (Buffer + MemStream.Size)^ := chr(0); |
| | | SetString(Result, Buffer, MemStream.size); |
| | | strdispose(Buffer); |
| | | end; |
| | | //do not free the TMemoryStream here; it is freed when |
| | | //TSqliteTable is destroyed |
| | | |
| | | end; |
| | | |
| | | |
| | | function TSqliteTable.FieldAsInteger(I: cardinal): int64; |
| | | begin |
| | | if EOF then |
| | | raise ESqliteException.Create('Table is at End of File'); |
| | | if (self.fResults[(self.frow * self.fColCount) + I] = nil) then |
| | | Result := 0 |
| | | else |
| | | if pInteger(self.fColTypes[I])^ = dtInt then |
| | | Result := pInt64(self.fResults[(self.frow * self.fColCount) + I])^ |
| | | else |
| | | if pInteger(self.fColTypes[I])^ = dtNumeric then |
| | | Result := trunc(strtofloat(pString(self.fResults[(self.frow * self.fColCount) + I])^)) |
| | | else |
| | | raise ESqliteException.Create('Not an integer or numeric field'); |
| | | end; |
| | | |
| | | function TSqliteTable.FieldAsDouble(I: cardinal): double; |
| | | begin |
| | | if EOF then |
| | | raise ESqliteException.Create('Table is at End of File'); |
| | | if (self.fResults[(self.frow * self.fColCount) + I] = nil) then |
| | | Result := 0 |
| | | else |
| | | if pInteger(self.fColTypes[I])^ = dtInt then |
| | | Result := pInt64(self.fResults[(self.frow * self.fColCount) + I])^ |
| | | else |
| | | if pInteger(self.fColTypes[I])^ = dtNumeric then |
| | | Result := pDouble(self.fResults[(self.frow * self.fColCount) + I])^ |
| | | else |
| | | raise ESqliteException.Create('Not an integer or numeric field'); |
| | | end; |
| | | |
| | | function TSqliteTable.FieldAsString(I: cardinal): string; |
| | | begin |
| | | if EOF then |
| | | raise ESqliteException.Create('Table is at End of File'); |
| | | if (self.fResults[(self.frow * self.fColCount) + I] = nil) then |
| | | Result := '' |
| | | else |
| | | Result := self.GetFields(I); |
| | | end; |
| | | |
| | | function TSqliteTable.FieldIsNull(I: cardinal): boolean; |
| | | var |
| | | thisvalue: pointer; |
| | | begin |
| | | if EOF then |
| | | raise ESqliteException.Create('Table is at End of File'); |
| | | thisvalue := self.fResults[(self.frow * self.fColCount) + I]; |
| | | Result := (thisvalue = nil); |
| | | end; |
| | | |
| | | //.............................................................................. |
| | | |
| | | function TSQLiteTable.Next: boolean; |
| | | begin |
| | | Result := False; |
| | | if not EOF then |
| | | begin |
| | | Inc(fRow); |
| | | Result := True; |
| | | end; |
| | | end; |
| | | |
| | | function TSQLiteTable.Previous: boolean; |
| | | begin |
| | | Result := False; |
| | | if not BOF then |
| | | begin |
| | | Dec(fRow); |
| | | Result := True; |
| | | end; |
| | | end; |
| | | |
| | | function TSQLiteTable.MoveFirst: boolean; |
| | | begin |
| | | Result := False; |
| | | if self.fRowCount > 0 then |
| | | begin |
| | | fRow := 0; |
| | | Result := True; |
| | | end; |
| | | end; |
| | | |
| | | function TSQLiteTable.MoveLast: boolean; |
| | | begin |
| | | Result := False; |
| | | if self.fRowCount > 0 then |
| | | begin |
| | | fRow := fRowCount - 1; |
| | | Result := True; |
| | | end; |
| | | end; |
| | | |
| | | {$WARNINGS OFF} |
| | | function TSQLiteTable.MoveTo(position: cardinal): boolean; |
| | | begin |
| | | Result := False; |
| | | if (self.fRowCount > 0) and (self.fRowCount > position) then |
| | | begin |
| | | fRow := position; |
| | | Result := True; |
| | | end; |
| | | end; |
| | | {$WARNINGS ON} |
| | | |
| | | |
| | | |
| | | { TSQLiteUniTable } |
| | | |
| | | constructor TSQLiteUniTable.Create(DB: TSQLiteDatabase; const SQL: Ansistring); |
| | | begin |
| | | Create(DB, SQL, []); |
| | | end; |
| | | |
| | | constructor TSQLiteUniTable.Create(DB: TSQLiteDatabase; const SQL: Ansistring; const Bindings: array of const); |
| | | var |
| | | NextSQLStatement: PAnsiChar; |
| | | i: integer; |
| | | begin |
| | | inherited create; |
| | | self.fDB := db; |
| | | self.fEOF := false; |
| | | self.fRow := 0; |
| | | self.fColCount := 0; |
| | | self.fSQL := SQL; |
| | | if Sqlite3_Prepare_v2(DB.fDB, PAnsiChar(SQL), -1, fStmt, NextSQLStatement) <> SQLITE_OK then |
| | | DB.RaiseError('Error executing SQL', SQL); |
| | | if (fStmt = nil) then |
| | | DB.RaiseError('Could not prepare SQL statement', SQL); |
| | | DB.DoQuery(SQL); |
| | | DB.SetParams(fStmt); |
| | | DB.BindData(fStmt, Bindings); |
| | | |
| | | //get data types |
| | | fCols := TStringList.Create; |
| | | fColCount := SQLite3_ColumnCount(fstmt); |
| | | for i := 0 to Pred(fColCount) do |
| | | fCols.Add(AnsiUpperCase(Sqlite3_ColumnName(fstmt, i))); |
| | | |
| | | Next; |
| | | end; |
| | | |
| | | destructor TSQLiteUniTable.Destroy; |
| | | begin |
| | | if Assigned(fStmt) then |
| | | Sqlite3_Finalize(fstmt); |
| | | if Assigned(fCols) then |
| | | fCols.Free; |
| | | inherited; |
| | | end; |
| | | |
| | | function TSQLiteUniTable.FieldAsBlob(I: cardinal): TMemoryStream; |
| | | var |
| | | iNumBytes: integer; |
| | | ptr: pointer; |
| | | begin |
| | | Result := TMemoryStream.Create; |
| | | iNumBytes := Sqlite3_ColumnBytes(fstmt, i); |
| | | if iNumBytes > 0 then |
| | | begin |
| | | ptr := Sqlite3_ColumnBlob(fstmt, i); |
| | | Result.writebuffer(ptr^, iNumBytes); |
| | | Result.Position := 0; |
| | | end; |
| | | end; |
| | | |
| | | function TSQLiteUniTable.FieldAsBlobPtr(I: cardinal; out iNumBytes: integer): Pointer; |
| | | begin |
| | | iNumBytes := Sqlite3_ColumnBytes(fstmt, i); |
| | | Result := Sqlite3_ColumnBlob(fstmt, i); |
| | | end; |
| | | |
| | | function TSQLiteUniTable.FieldAsBlobText(I: cardinal): string; |
| | | var |
| | | MemStream: TMemoryStream; |
| | | Buffer: PAnsiChar; |
| | | begin |
| | | Result := ''; |
| | | MemStream := self.FieldAsBlob(I); |
| | | if MemStream <> nil then |
| | | try |
| | | if MemStream.Size > 0 then |
| | | begin |
| | | MemStream.position := 0; |
| | | {$IFDEF UNICODE} |
| | | Buffer := AnsiStralloc(MemStream.Size + 1); |
| | | {$ELSE} |
| | | Buffer := Stralloc(MemStream.Size + 1); |
| | | {$ENDIF} |
| | | MemStream.readbuffer(Buffer[0], MemStream.Size); |
| | | (Buffer + MemStream.Size)^ := chr(0); |
| | | SetString(Result, Buffer, MemStream.size); |
| | | strdispose(Buffer); |
| | | end; |
| | | finally |
| | | MemStream.Free; |
| | | end |
| | | end; |
| | | |
| | | function TSQLiteUniTable.FieldAsDouble(I: cardinal): double; |
| | | begin |
| | | Result := Sqlite3_ColumnDouble(fstmt, i); |
| | | end; |
| | | |
| | | function TSQLiteUniTable.FieldAsInteger(I: cardinal): int64; |
| | | begin |
| | | Result := Sqlite3_ColumnInt64(fstmt, i); |
| | | end; |
| | | |
| | | function TSQLiteUniTable.FieldAsString(I: cardinal): string; |
| | | begin |
| | | Result := self.GetFields(I); |
| | | end; |
| | | |
| | | function TSQLiteUniTable.FieldIsNull(I: cardinal): boolean; |
| | | begin |
| | | Result := Sqlite3_ColumnText(fstmt, i) = nil; |
| | | end; |
| | | |
| | | function TSQLiteUniTable.GetColumns(I: integer): string; |
| | | begin |
| | | Result := fCols[I]; |
| | | end; |
| | | |
| | | function TSQLiteUniTable.GetFieldByName(FieldName: string): string; |
| | | begin |
| | | Result := GetFields(self.GetFieldIndex(FieldName)); |
| | | end; |
| | | |
| | | function TSQLiteUniTable.GetFieldIndex(FieldName: string): integer; |
| | | begin |
| | | if (fCols = nil) then |
| | | begin |
| | | raise ESqliteException.Create('Field ' + fieldname + ' Not found. Empty dataset'); |
| | | exit; |
| | | end; |
| | | |
| | | if (fCols.count = 0) then |
| | | begin |
| | | raise ESqliteException.Create('Field ' + fieldname + ' Not found. Empty dataset'); |
| | | exit; |
| | | end; |
| | | |
| | | Result := fCols.IndexOf(AnsiUpperCase(FieldName)); |
| | | |
| | | if (result < 0) then |
| | | begin |
| | | raise ESqliteException.Create('Field not found in dataset: ' + fieldname) |
| | | end; |
| | | end; |
| | | |
| | | function TSQLiteUniTable.GetFields(I: cardinal): string; |
| | | begin |
| | | Result := Sqlite3_ColumnText(fstmt, i); |
| | | end; |
| | | |
| | | function TSQLiteUniTable.Next: boolean; |
| | | var |
| | | iStepResult: integer; |
| | | begin |
| | | fEOF := true; |
| | | iStepResult := Sqlite3_step(fStmt); |
| | | case iStepResult of |
| | | SQLITE_ROW: |
| | | begin |
| | | fEOF := false; |
| | | inc(fRow); |
| | | end; |
| | | SQLITE_DONE: |
| | | // we are on the end of dataset |
| | | // return EOF=true only |
| | | ; |
| | | else |
| | | begin |
| | | SQLite3_reset(fStmt); |
| | | fDB.RaiseError('Could not retrieve data', fSQL); |
| | | end; |
| | | end; |
| | | Result := not fEOF; |
| | | end; |
| | | |
| | | end. |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | UDF Sqlite3 support v1.0.0 |
| | | translation to Pascal by Lukas Gebauer |
| | | |
| | | This is experimental translation. Be patient! |
| | | } |
| | | unit sqlite3udf; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | sqlite3; |
| | | |
| | | type |
| | | Psqlite3_context = pointer; |
| | | Psqlite3_value = ppchar; |
| | | |
| | | TxFunc = procedure(sqlite3_context: Psqlite3_context; cArg: integer; ArgV: Psqlite3_value); |
| | | TxStep = procedure(sqlite3_context: Psqlite3_context; cArg: integer; ArgV: Psqlite3_value); |
| | | TxFinal = procedure(sqlite3_context: Psqlite3_context); |
| | | { |
| | | void (*xFunc)(sqlite3_context*,int,sqlite3_value**), |
| | | void (*xStep)(sqlite3_context*,int,sqlite3_value**), |
| | | void (*xFinal)(sqlite3_context*) |
| | | } |
| | | |
| | | //UDF SQLITE3 support |
| | | function sqlite3_create_function(db: TSQLiteDB; functionName: PChar; nArg: integer; |
| | | eTextRep: integer; pUserdata: pointer; xFunc: TxFunc; xStep: TxStep; xFinal: TxFinal |
| | | ): integer; cdecl; external SQLiteDLL name 'sqlite3_create_function'; |
| | | |
| | | procedure sqlite3_result_blob(sqlite3_context: Psqlite3_context; value: Pointer; |
| | | n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_blob'; |
| | | procedure sqlite3_result_double(sqlite3_context: Psqlite3_context; value: Double); |
| | | cdecl; external SQLiteDLL name 'sqlite3_result_double'; |
| | | procedure sqlite3_result_error(sqlite3_context: Psqlite3_context; value: Pchar; |
| | | n: integer); cdecl; external SQLiteDLL name 'sqlite3_result_error'; |
| | | procedure sqlite3_result_error16(sqlite3_context: Psqlite3_context; value: PWidechar; |
| | | n: integer); cdecl; external SQLiteDLL name 'sqlite3_result_error16'; |
| | | procedure sqlite3_result_int(sqlite3_context: Psqlite3_context; value: integer); |
| | | cdecl; external SQLiteDLL name 'sqlite3_result_int'; |
| | | procedure sqlite3_result_int64(sqlite3_context: Psqlite3_context; value: int64); |
| | | cdecl; external SQLiteDLL name 'sqlite3_result_int64'; |
| | | procedure sqlite3_result_null(sqlite3_context: Psqlite3_context); |
| | | cdecl; external SQLiteDLL name 'sqlite3_result_null'; |
| | | procedure sqlite3_result_text(sqlite3_context: Psqlite3_context; value: PChar; |
| | | n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text'; |
| | | procedure sqlite3_result_text16(sqlite3_context: Psqlite3_context; value: PWideChar; |
| | | n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text16'; |
| | | procedure sqlite3_result_text16be(sqlite3_context: Psqlite3_context; value: PWideChar; |
| | | n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text16be'; |
| | | procedure sqlite3_result_text16le(sqlite3_context: Psqlite3_context; value: PWideChar; |
| | | n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text16le'; |
| | | procedure sqlite3_result_value(sqlite3_context: Psqlite3_context; value: Psqlite3_value); |
| | | cdecl; external SQLiteDLL name 'sqlite3_result_value'; |
| | | |
| | | { |
| | | void sqlite3_result_blob(sqlite3_context*, const void*, int n, void(*)(void*)); |
| | | void sqlite3_result_double(sqlite3_context*, double); |
| | | void sqlite3_result_error(sqlite3_context*, const char*, int); |
| | | void sqlite3_result_error16(sqlite3_context*, const void*, int); |
| | | void sqlite3_result_int(sqlite3_context*, int); |
| | | void sqlite3_result_int64(sqlite3_context*, long long int); |
| | | void sqlite3_result_null(sqlite3_context*); |
| | | void sqlite3_result_text(sqlite3_context*, const char*, int n, void(*)(void*)); |
| | | void sqlite3_result_text16(sqlite3_context*, const void*, int n, void(*)(void*)); |
| | | void sqlite3_result_text16be(sqlite3_context*, const void*, int n, void(*)(void*)); |
| | | void sqlite3_result_text16le(sqlite3_context*, const void*, int n, void(*)(void*)); |
| | | void sqlite3_result_value(sqlite3_context*, sqlite3_value*); |
| | | } |
| | | |
| | | function sqlite3_value_blob(value: pointer): Pointer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_blob'; |
| | | function sqlite3_value_bytes(value: pointer): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_bytes'; |
| | | function sqlite3_value_bytes16(value: pointer): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_bytes16'; |
| | | function sqlite3_value_double(value: pointer): double; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_double'; |
| | | function sqlite3_value_int(value: pointer): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_int'; |
| | | function sqlite3_value_int64(value: pointer): int64; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_int64'; |
| | | function sqlite3_value_text(value: pointer): PChar; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_text'; |
| | | function sqlite3_value_text16(value: pointer): PWideChar; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_text16'; |
| | | function sqlite3_value_text16be(value: pointer): PWideChar; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_text16be'; |
| | | function sqlite3_value_text16le(value: pointer): PWideChar; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_text16le'; |
| | | function sqlite3_value_type(value: pointer): integer; |
| | | cdecl; external SQLiteDLL name 'sqlite3_value_type'; |
| | | |
| | | { const void *sqlite3_value_blob(sqlite3_value*); |
| | | int sqlite3_value_bytes(sqlite3_value*); |
| | | int sqlite3_value_bytes16(sqlite3_value*); |
| | | double sqlite3_value_double(sqlite3_value*); |
| | | int sqlite3_value_int(sqlite3_value*); |
| | | long long int sqlite3_value_int64(sqlite3_value*); |
| | | const unsigned char *sqlite3_value_text(sqlite3_value*); |
| | | const void *sqlite3_value_text16(sqlite3_value*); |
| | | const void *sqlite3_value_text16be(sqlite3_value*); |
| | | const void *sqlite3_value_text16le(sqlite3_value*); |
| | | int sqlite3_value_type(sqlite3_value*); |
| | | } |
| | | |
| | | { |
| | | //Sample of usage: |
| | | PROCEDURE fn(ctx:pointer;n:integer;args:ppchar);cdecl; |
| | | VAR p : ppchar; theString : string; res:integer; |
| | | BEGIN |
| | | p := args; |
| | | theString := trim(sqlite3_value_text(p^)); |
| | | |
| | | ...do something with theString... |
| | | |
| | | sqlite3_result_int(ctx,res); // < return a number based on string |
| | | END; |
| | | ... |
| | | var i:integer; |
| | | begin |
| | | i := sqlite3_create_function(db3,'myfn',1,SQLITE_UTF8,nil,@fn,nil,nil); |
| | | s := 'select myfn(thestring) from theTable;' |
| | | ...execute statement... |
| | | end; |
| | | } |
| | | |
| | | implementation |
| | | |
| | | end. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | {------------------------------------------------------------------------------} |
| | | {åå
åç§°ï¼grainThread.pas } |
| | | {模ååç§°ï¼ç²®ç§éæ©çº¿ç¨ } |
| | | {模å说æï¼çº¿ç¨å建åèªå¨è¿è¡ï¼å®æä¸æ¬¡ç²®ç§éæ© } |
| | | {å»ºç«æ¥æï¼2024-07-02 } |
| | | {ä¿®æ¹ä¿®æ¹ï¼2024-07-02 } |
| | | {çæææï¼æè¯åº liangtingli@outlook.com } |
| | | {------------------------------------------------------------------------------} |
| | | unit grainThread; |
| | | |
| | | interface |
| | | |
| | | uses |
| | | Windows, Classes, SysUtils, PubUtils, DateUtils, ActuatorLib; |
| | | |
| | | type |
| | | TGrainThread = class(TThread) |
| | | private |
| | | { Private declarations } |
| | | t_ret : Integer; //è¿åå¼ |
| | | t_faultCode : Word; //æ°´å仪æ
éç |
| | | |
| | | procedure UpdateCaption; //æå¨æ£æµåé¦ |
| | | procedure UpdateCaption1; //æå¨æ ¡ååé¦ |
| | | procedure UpdateCaption2; //è°æ´æªè·åé¦ |
| | | procedure UpdateFaultCode; |
| | | protected |
| | | procedure Start(); |
| | | procedure Execute; override; |
| | | public |
| | | constructor Create(param: Boolean=false); |
| | | procedure Terminate; |
| | | end; |
| | | |
| | | implementation |
| | | |
| | | uses |
| | | uMain, Global, log4me, uInit; |
| | | |
| | | { TGrainThread } |
| | | |
| | | //--------线ç¨åå§å---------------------------------------- |
| | | //线ç¨åå§å |
| | | constructor TGrainThread.Create(param: Boolean=false); |
| | | begin |
| | | //线ç¨åæ¢åèªå¨éæ¾ |
| | | inherited Create(param); //设置线ç¨è¿è¡, False-èªå¨è¿è¡, True-æå¨å¯å¨ |
| | | FreeOnTerminate := True; //设置线ç¨éåºèªå¨é |
| | | //è¿åå¼ |
| | | t_ret := 0; |
| | | t_faultCode := 0; |
| | | end; |
| | | |
| | | //线ç¨éæ¯äºä»¶ |
| | | procedure TGrainThread.Terminate; |
| | | begin |
| | | inherited; |
| | | m_GrainThread := 0; //æ¸
ç线ç¨å¥æ |
| | | end; |
| | | |
| | | //--------çé¢å¤ç彿°-------------------------------------- |
| | | //æå¨æ£æµæ¶ï¼ä¸åç²®ç§åé¦ä¿¡æ¯ |
| | | procedure TGrainThread.UpdateCaption; |
| | | begin |
| | | with frmMain do begin |
| | | //åçé¢è¿åä¿¡æ¯ |
| | | if t_ret<>0 then |
| | | lblManTest.Caption := 'ç²®é£åç§ä¿®æ¹å¤±è´¥ï¼' |
| | | else |
| | | lblManTest.Caption := 'ç²®é£åç§ä¿®æ¹æåï¼åå¤å°±ç»ªï¼'; |
| | | |
| | | //æ¾ç¤ºå½åå è½½çç²®ç§ä¿¡æ¯ |
| | | sLabel15.Caption := Format('ç²®é£ç§ç±» - [%s]',[Grain.Name]); |
| | | log4Info(Format('ç²®ç§ï¼å½åéä¸[%s], 代ç [%d], æ ¡åç³»æ°[%s,%s,%s,%s,%s]', |
| | | [Grain.Name, |
| | | Grain.Code, |
| | | Grain.Coef[0], |
| | | Grain.Coef[1], |
| | | Grain.Coef[2], |
| | | Grain.Coef[3], |
| | | Grain.Coef[4]])); |
| | | end; |
| | | end; |
| | | |
| | | //æå¨æ ¡åæ¶ï¼ä¸åç²®ç§åé¦ä¿¡æ¯ |
| | | procedure TGrainThread.UpdateCaption1; |
| | | begin |
| | | with frmMain do begin |
| | | if t_ret<>0 then |
| | | lblVerify.Caption := 'ç²®é£åç§ä¿®æ¹å¤±è´¥' |
| | | else |
| | | lblVerify.Caption := 'ç²®é£åç§ä¿®æ¹æåï¼æ ¡å就绪ï¼'; |
| | | |
| | | //å è½½ç²®ç§æ ¡åç³»æ° |
| | | edtAutoCoef1.Text := Grain.coef[0]; |
| | | edtAutoCoef2.Text := Grain.coef[1]; |
| | | edtAutoCoef3.Text := Grain.coef[2]; |
| | | edtAutoCoef4.Text := Grain.coef[3]; |
| | | edtAutoCoef5.Text := Grain.coef[4]; |
| | | |
| | | //æ¾ç¤ºå½åå è½½çç²®ç§ä¿¡æ¯ |
| | | sLabel3.Caption := Format('éæ© - [%s]',[Grain.Name]); |
| | | log4Info(Format('ç²®ç§ï¼å½åéä¸[%s], 代ç [%d], æ ¡åç³»æ°[%s,%s,%s,%s,%s]', |
| | | [Grain.Name, |
| | | Grain.Code, |
| | | Grain.Coef[0], |
| | | Grain.Coef[1], |
| | | Grain.Coef[2], |
| | | Grain.Coef[3], |
| | | Grain.Coef[4]])); |
| | | end; |
| | | end; |
| | | |
| | | //è°æ´æªè·æ¶ï¼ä¸åç²®ç§åé¦ä¿¡æ¯ |
| | | procedure TGrainThread.UpdateCaption2; |
| | | begin |
| | | with frmMain do begin |
| | | //åçé¢è¿åä¿¡æ¯ |
| | | if t_ret<>0 then |
| | | lblInter.Caption := 'ç²®é£åç§ä¿®æ¹å¤±è´¥ï¼' |
| | | else |
| | | lblInter.Caption := 'ç²®é£åç§ä¿®æ¹æåï¼åå¤å°±ç»ªï¼'; |
| | | |
| | | //æ¾ç¤ºå½åå è½½çç²®ç§ä¿¡æ¯ |
| | | sLabel70.Caption := Format('ç²®é£ç§ç±» - [%s]',[Grain.Name]); |
| | | log4Info(Format('ç²®ç§ï¼å½åéä¸[%s], 代ç [%d], æ ¡åç³»æ°[%s,%s,%s,%s,%s]', |
| | | [Grain.Name, |
| | | Grain.Code, |
| | | Grain.Coef[0], |
| | | Grain.Coef[1], |
| | | Grain.Coef[2], |
| | | Grain.Coef[3], |
| | | Grain.Coef[4]])); |
| | | end; |
| | | end; |
| | | |
| | | //åºéæ¾ç¤º--仪å¨èªæ£åºé |
| | | procedure TGrainThread.UpdateFaultCode; |
| | | begin |
| | | RefashFaultCode(t_faultCode); |
| | | end; |
| | | |
| | | //------- æ§è¡çº¿ç¨ ---------------------------------------- |
| | | procedure TGrainThread.Start(); |
| | | begin |
| | | //ä¸åç²®ç§ä¿¡æ¯ |
| | | {log4info(Format('线ç¨ä¿¡æ¯ï¼ä¸åç²®ç§æä»¤ï¼ctxDev=[%d],CmdType=[%d],GrainType=[%d],Resp=[2].', |
| | | [hWrDev, WR_GOODS, Grain.Code]));} |
| | | t_ret := SendCommands(hWrDev, WR_GOODS, Grain.Code, 2); //è¿éæä»¤é»å¡æ¶é´=2s |
| | | |
| | | //åçé¢è¾åºç»æ |
| | | if s_Grain=1 then |
| | | Synchronize(UpdateCaption) //æå¨æ£æµåé¦ 1 |
| | | else if s_Grain=2 then |
| | | Synchronize(UpdateCaption1) //æå¨æ ¡ååé¦ 2 |
| | | else |
| | | Synchronize(UpdateCaption2);//è°æ´æªè·åé¦ 3 |
| | | |
| | | //æ£æ¥æ°´å仪æ
éç |
| | | ReadFaultCode(hWrDev, @t_faultCode); |
| | | Synchronize(UpdateFaultCode); |
| | | end; |
| | | |
| | | //------- 线ç¨å
¥å£ ---------------------------------------- |
| | | procedure TGrainThread.Execute; |
| | | begin |
| | | { Place thread code here } |
| | | try |
| | | //éæ©ç²®ç§ |
| | | Start(); |
| | | //鲿¢çº¿ç¨é»å¡CPU |
| | | Sleep(1); |
| | | finally |
| | | //æå¨éåºçº¿ç¨ |
| | | m_GrainThread := 0; |
| | | end; |
| | | end; |
| | | |
| | | end. |
src/thread/grainThread.~pas
src/thread/interceptThread.pas
src/thread/interceptThread.~pas
src/thread/mantestThread.pas
src/thread/mantestThread.~pas
src/thread/readyThread.pas
src/thread/resetThread.pas
src/thread/resetThread.~pas
src/thread/statusThread.pas
src/thread/statusThread.~pas
src/thread/testThread - 副本.pas
src/thread/testThread.pas
src/thread/testThread.~pas
src/thread/verifyThread.pas
src/thread/verifyThread.~pas
src/thread/vreadyThread.pas
src/uCalc.ddp
src/uCalc.dfm
src/uCalc.pas
src/uCalc.~ddp
src/uCalc.~dfm
src/uCalc.~pas
src/uDM.ddp
src/uDM.dfm
src/uDM.pas
src/uDM.~ddp
src/uDM.~dfm
src/uDM.~pas
src/uInput.ddp
src/uInput.dfm
src/uInput.pas
src/uMain.ddp
src/uMain.dfm
src/uMain.pas
src/uMain.~ddp
src/uMain.~dfm
src/uMain.~pas
src/uSaveData.pas
src/uSaveData.~pas
src/uTablet.ddp
src/uTablet.dfm
src/uTablet.pas
src/uTablet.~dfm
src/uTablet.~pas |