LWQ
2025-08-22 e3da46c70ef597490c3791984b9e020428924469
Merge branch 'LWQ'
已修改14个文件
188 ■■■■■ 文件已修改
EdgeInspector_App/BICommon.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/PostProcess.cpp 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/PostProcess.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/Global_Define.h 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/InspectionBase.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/InspectionBase.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/StatusMonitor.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/StatusMonitor.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/EdgeInspector_App.rc 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Process/InspectCamera.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/HardwareSettings.cpp 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/HardwareSettings.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_HWSetting.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/resource.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/BICommon.h
@@ -11,7 +11,7 @@
#define OFFLINE_KEY           1   //OFFLINE_KEY:1是离线模式;0是在线模式
#define MINI_LED              0   //Mini车间
#define MINI_NOTCH              0   //Mini车间, 是否使用刻槽功能
#define HALCON_VISION_KEY     0   //是否启用HALCON
#define HALCON_VISION_KEY     1   //是否启用HALCON
#define USE_WEBSOCKET         0   //是否启用websocket(AI)
#define USE_AI_DETECT         0   //是否启用AI检测
EdgeInspector_App/Data/PostProcess.cpp
@@ -657,6 +657,16 @@
        double fontScale = 0.7;
        int thickness = 1;
            if (m_pHardware->m_bUse_SaveDLDefectImage==TRUE)
            {
                if (eCategory== DefectLoc_Chip|| eCategory== DefectLoc_Crack|| eCategory == DefectLoc_Burr|| eCategory == DefectLoc_In_Chip|| eCategory == DefectLoc_In_Burr|| eCategory == DefectLoc_UserDefect)
                {
                    CT2CA pszConvertedAnsiDLFile(strDLFile);
                    cv::String strDLFile(pszConvertedAnsiDLFile);
                    cv::imwrite(strDLFile, imgTmp);
                }
            }
        CT2CA pszConvertedAnsiTitle(strTitle);
        cv::String strCVTitle(pszConvertedAnsiTitle);
        cv::putText(colorImg, strCVTitle, cv::Point(10, szImage.cy - 10), fontFace, fontScale, CV_RGB(255, 255, 255), thickness);
@@ -1462,9 +1472,10 @@
        }
        CString strSaveImagePath;
        CString strSaveImageDLPath;
        //strSaveImagePath.Format(_T("%s\\%03d_%s_%s_%s.jpg"),m_strDefectFolder,pNewDefect->m_nIdx, g_pBase->m_strHPanelID, PANEL_SIDE[pNewDefect->m_DefectInfo.m_nSideIdx], strDefectType);
        strSaveImagePath.Format(_T("%s\\%s_%s_%s_%d.jpg"),m_strDefectFolder, g_pBase->m_strHPanelID, PANEL_SIDE[pDefect->m_DefectInfo.m_nSideIdx], strDefectType, pDefect->m_nIdx);
        strSaveImageDLPath.Format(_T("%s\\%s_%s_%s_%d.bmp"),m_strImageDLFolder, g_pBase->m_strHPanelID, PANEL_SIDE[pDefect->m_DefectInfo.m_nSideIdx], strDefectType, pDefect->m_nIdx);
        CRect rectDefect;
        rectDefect.left        = DEFECTIMAGE_WIDTH/2    - pDefect->m_DefectInfo.m_rtDefectPos_pxl.Width()/2;
        rectDefect.right    = DEFECTIMAGE_WIDTH/2    + pDefect->m_DefectInfo.m_rtDefectPos_pxl.Width()/2;
@@ -1472,6 +1483,8 @@
        rectDefect.bottom    = DEFECTIMAGE_HEIGHT/2    + pDefect->m_DefectInfo.m_rtDefectPos_pxl.Height()/2;
        CheckDirectory(strSaveImagePath);
        CheckDirectory(strSaveImageDLPath);
        strDLFile.Format(_T("%s"), strSaveImageDLPath);
        // SaveDefectImage2(pNewDefect->m_Image,CSize(DEFECTIMAGE_WIDTH,DEFECTIMAGE_HEIGHT), rectDefect, strSaveImagePath);
        SaveDefectImage_with_Title(pDefect, CSize(DEFECTIMAGE_WIDTH,DEFECTIMAGE_HEIGHT), rectDefect, strSaveImagePath);
@@ -2003,6 +2016,9 @@
    m_strDefectFolder.Format(_T("%s\\IMG_DEFECT\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID);
    DeleteFolder(m_strDefectFolder);
    CheckDirectory(m_strDefectFolder,TRUE);
    m_strImageDLFolder.Format(_T("%s\\IMG_DEFECT_DL\\%s\\%s"), PATH_INSPECTION_DATA, g_pBase->m_strLoadingDay, g_pBase->m_strHPanelID);
    DeleteFolder(m_strImageDLFolder);
    CheckDirectory(m_strImageDLFolder, TRUE);
    m_strSplineFolder.Format(_T("%s\\SPLINE\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID);
    CheckDirectory(m_strSplineFolder);
    m_strFullImgeFolder.Format(_T("%s\\IMG_FULL\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID);
EdgeInspector_App/Data/PostProcess.h
@@ -74,7 +74,8 @@
    CString            m_strSplineFolder;
    CString            m_strFullImgeFolder;
    CString            m_strImageMarkFolder;
    CString            m_strImageDLFolder;
    CString             strDLFile;
    void*            m_pView;
};
EdgeInspector_App/Define/Global_Define.h
@@ -1,4 +1,4 @@
#ifndef GLOBAL_DEFINE_H
#ifndef GLOBAL_DEFINE_H
#define GLOBAL_DEFINE_H
#include <map>
@@ -42,11 +42,11 @@
#define CHKMAX(a,b)    (((a) > (b)) ? (a) : (b))
#define CHKMIN(a,b)    (((a) < (b)) ? (a) : (b))
#define MAX_PANEL_SIDE                            4            // 搁 荐
#define    UPDN_TYPE                                2            // 惑窍 鞍捞 乐绰版快 2 窍唱父 乐绰版快 1
#define MAX_PANEL_SIDE                            4            // 搁 荐
#define    UPDN_TYPE                                2            // 惑窍 鞍捞 乐绰版快 2 窍唱父 乐绰版快 1
#define MAX_SIDE_COUNT                            8
#define MAX_CORNER_DIMENSION_MEASURE_COUNT        5
#define MAX_SIDE_DIMENSION_MEASURE_COUNT        16            // 弥措 Frame 荐 父怒
#define MAX_SIDE_DIMENSION_MEASURE_COUNT        16            // 弥措 Frame 荐 父怒
#define MAX_SIDE_EXCEPTION_AREA_COUNT            32
#define MAX_SIDE_USER_DEFECT_AREA_COUNT            32
@@ -87,7 +87,7 @@
    enum    EmSplashCmd                    {emShow=0, emHide, emText};
    enum    ScanDirectionIns            { SD_Forward = 0, SD_Backward, SD_Unknown };    // Glass 扁霖 Scan 规氢.
    enum    ScanDirectionIns            { SD_Forward = 0, SD_Backward, SD_Unknown };    // Glass 扁霖 Scan 规氢.
    enum    DimensionDir                { DIMENSION_A=0, DIMENSION_B, DIMENSION_C, DIMENSION_D,DIMENSION_A_DN, DIMENSION_B_DN, DIMENSION_C_DN, DIMENSION_D_DN, DIMENSION_NONE};
    enum    EM_CORNER_JUDGE                {A_ZONE_CRACK=0,B_ZONE_CRACK,B_ZONE_BURR,C_ZONE_CRACK,C_ZONE_BURR, D_ZONE_CRACK, EDGE_THINCRACK, CHIP_WHITE};
@@ -188,17 +188,17 @@
#define IMAGE_WIDTH                        4096 // 8192//2048
#define IMAGE_HEIGHT                    1024    
#define MAX_IMAGE_FRAME                    160//100
#define MAX_IMAGE_FRAME_SHORT            160//100            // 弥措 橇饭烙 荐
#define MAX_IMAGE_FRAME_LONG            160//100            // 弥措 橇饭烙 荐
#define MAX_IMAGE_FRAME_SHORT            160//100            // 弥措 橇饭烙 荐
#define MAX_IMAGE_FRAME_LONG            160//100            // 弥措 橇饭烙 荐
#define MAX_SIDE_INSPECT_AREA_COUNT        12
#define MAX_IMAGE_LINE_SHORT    MAX_IMAGE_FRAME_SHORT          * IMAGE_HEIGHT // 弥措 扼牢荐
#define MAX_IMAGE_LINE_LONG        MAX_IMAGE_FRAME_LONG          * IMAGE_HEIGHT // 弥措 扼牢荐
#define MAX_IMAGE_LINE_SHORT    MAX_IMAGE_FRAME_SHORT          * IMAGE_HEIGHT // 弥措 扼牢荐
#define MAX_IMAGE_LINE_LONG        MAX_IMAGE_FRAME_LONG          * IMAGE_HEIGHT // 弥措 扼牢荐
#define MAX_IMAGE_LINE            MAX_IMAGE_LINE_LONG
#define MAX_LIMIT_LINE            (MAX_IMAGE_FRAME - 1) * IMAGE_HEIGHT
#define MAX_IMAGE_LINE_MARGIN        ((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // 弥措 扼牢荐
#define MAX_IMAGE_LINE_MARGIN        ((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // 弥措 扼牢荐
#define ALIGN_4BYTE(width)        (width + 3)/4*4
#define PI                        3.14159265358979323846
@@ -331,53 +331,53 @@
#define MAX_SIDE_INSPECT_TYPE 8
struct WSSendData {
    //=======================待定==========================
    //uint8_t operation;      // 操作符 (1字节)
    //uint8_t operand;        // 操作数 (1字节)
    //uint16_t blockNumber;   // 图像块编号 (2字节无符号整数)
    //uint32_t dataOffset;    // 数据偏移 (4字节无符号整数)
    //=======================待定==========================
    //uint8_t operation;      // 操作符 (1字节)
    //uint8_t operand;        // 操作数 (1字节)
    //uint16_t blockNumber;   // 图像块编号 (2字节无符号整数)
    //uint32_t dataOffset;    // 数据偏移 (4字节无符号整数)
    //=====================================================
    uint8_t nCheckType = 0;       // 检测类型
    uint8_t nRecipe = 0;          // 配方
    uint8_t nLineType = 0;        // 线别类型
    uint8_t nIndex = 0;           // 图片序号
    uint8_t nFrameIdx = 0;        // 帧序号
    uint8_t nScanIdx = 0;         // 侧别
    uint8_t nNGType = 0;          // NG 类型
    uint8_t nPosition = 0;        // 位置
    uint8_t    nState = 0;           // 状态
    uint16_t nEdgeX = 0;          // X方向边缘坐标
    uint16_t nEdgeY = 0;          // X方向边缘坐标
    uint16_t nNPointY = 0;        // Y方向NG区域坐标
    uint16_t nWidth = 0;          // 图像宽度
    uint16_t nHeight = 0;         // 图像高度
    double dTimeStamp = 0.0;      // 时间戳
    uint16_t nLeft = 0;           // 在原图的位置
    uint16_t nTop = 0;            // 在原图的位置
    std::string strSN = "";       // 序列号
    std::vector<char> image = {}; // 图像数据 (二进制数据)
    uint8_t nCheckType = 0;       // 检测类型
    uint8_t nRecipe = 0;          // 配方
    uint8_t nLineType = 0;        // 线别类型
    uint8_t nIndex = 0;           // 图片序号
    uint8_t nFrameIdx = 0;        // 帧序号
    uint8_t nScanIdx = 0;         // 侧别
    uint8_t nNGType = 0;          // NG 类型
    uint8_t nPosition = 0;        // 位置
    uint8_t    nState = 0;           // ״̬
    uint16_t nEdgeX = 0;          // X方向边缘坐标
    uint16_t nEdgeY = 0;          // X方向边缘坐标
    uint16_t nNPointY = 0;        // Y方向NG区域坐标
    uint16_t nWidth = 0;          // 图像宽度
    uint16_t nHeight = 0;         // 图像高度
    double dTimeStamp = 0.0;      // 时间戳
    uint16_t nLeft = 0;           // 在原图的位置
    uint16_t nTop = 0;            // 在原图的位置
    std::string strSN = "";       // 序列号
    std::vector<char> image = {}; // 图像数据 (二进制数据)
};
struct WSReceiveData {
    // 定义一个表示NG位置的结构体
    // 定义一个表示NG位置的结构体
    struct NGPosition {
        uint8_t nNGType = 0;     // NG 类型
        uint16_t nLeft = 0;      // 在原图的位置
        uint16_t nTop = 0;       // 在原图的位置
        uint16_t nRight = 0;     // 在原图的位置
        uint16_t nBottom = 0;    // 在原图的位置
        uint8_t nNGType = 0;     // NG 类型
        uint16_t nLeft = 0;      // 在原图的位置
        uint16_t nTop = 0;       // 在原图的位置
        uint16_t nRight = 0;     // 在原图的位置
        uint16_t nBottom = 0;    // 在原图的位置
    };
    uint8_t nRecipe = 0;         // 配方
    uint8_t nLineType = 0;       // 线别类型
    uint8_t nIndex = 0;          // 图片序号
    uint8_t nFrameIdx = 0;       // 帧序号
    uint8_t nScanIdx = 0;        // 侧别
    std::string strSN = "";      // 序列号
    double dTimeStamp = 0.0;     // 时间戳
    uint8_t nGNum = 0;           // NG 数量
    std::vector<NGPosition> ngPosArray = {}; // NG 位置数组
    uint8_t nRecipe = 0;         // 配方
    uint8_t nLineType = 0;       // 线别类型
    uint8_t nIndex = 0;          // 图片序号
    uint8_t nFrameIdx = 0;       // 帧序号
    uint8_t nScanIdx = 0;        // 侧别
    std::string strSN = "";      // 序列号
    double dTimeStamp = 0.0;     // 时间戳
    uint8_t nGNum = 0;           // NG 数量
    std::vector<NGPosition> ngPosArray = {}; // NG 位置数组
};
#endif // GLOBAL_DEFINE_H
EdgeInspector_App/Define/InspectionBase.cpp
@@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "config.h"
const TCHAR *PANEL_SIDE[]        = {_T("A_TOP"), _T("B_TOP"), _T("C_TOP"), _T("D_TOP"),_T("A_BOT"), _T("B_BOT"), _T("C_BOT"), _T("D_BOT")};
EdgeInspector_App/Define/InspectionBase.h
@@ -1,4 +1,4 @@
// HMX64Fundamentals.h: interface for the CHMX64Fundamentals class.
// HMX64Fundamentals.h: interface for the CHMX64Fundamentals class.
//
//////////////////////////////////////////////////////////////////////
@@ -17,17 +17,17 @@
public:            
    CStringArray        m_strCamCCA;
    CStringArray        m_strCamCVI;    
    int                    *m_pBufferSize;            // Grab俊辑 Buffer狼 农扁.
    int                    *m_pBufferCount;            // Grab Buffer狼 荐.
    int                    *m_pMemFrameNo;            // 角力 皋葛府 橇饭烙 荐
    int                    *m_pBufferSize;            // Grab俊辑 Buffer狼 农扁.
    int                    *m_pBufferCount;            // Grab Buffer狼 荐.
    int                    *m_pMemFrameNo;            // 角力 皋葛府 橇饭烙 荐
    int                    *m_pCameraPort;
    int                    *m_pFrameHeight;
    int                    *m_pFrameWidth;    
    int                    *m_nBoardID;
    int                    *m_nBoardCh;
    AcqMode                m_AcqMode;
    int                    m_nFrameDefectPixel;    // 茄 Frame狼 弥措 搬窃 Pixel 荐
    int                    m_nMaxDefect;            // miniont,2011-04-28, 弥措 搬窃 俺荐
    int                    m_nFrameDefectPixel;    // 茄 Frame狼 弥措 搬窃 Pixel 荐
    int                    m_nMaxDefect;            // miniont,2011-04-28, 弥措 搬窃 俺荐
    int                    m_nCameraCount;    
    int                    m_nScanCount;
    int                    m_nThreadCount;
EdgeInspector_App/Define/StatusMonitor.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "StatusMonitor.h"
@@ -66,13 +66,13 @@
    TCHAR szTemp[MAX_PATH];
    wcscpy_s(szTemp, MAX_PATH, strFolder);
    szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 滴俺 甸绢啊具 茄促.
    szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 滴俺 甸绢啊具 茄促.
    FileOp.hwnd = NULL;
    FileOp.wFunc = FO_DELETE;
    FileOp.pFrom = NULL;
    FileOp.pTo = NULL;
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // 犬牢皋矫瘤啊 救哆档废 汲沥
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // 犬牢皋矫瘤啊 救哆档废 汲沥
    FileOp.fAnyOperationsAborted = false;
    FileOp.hNameMappings = NULL;
    FileOp.lpszProgressTitle = NULL;
EdgeInspector_App/Define/StatusMonitor.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Singleton.h"
#include "Config.h"
@@ -16,13 +16,13 @@
#include "LicenseChecker.h"
/* 
Main Interface 狼 Instance Pointer 甫 爱绊 乐绰促.
Main Interface 狼 Instance Pointer 甫 爱绊 乐绰促.
UI俊辑绰 Main Interface 立辟阑 窍霸登搁 惑龋 曼炼捞骨肺,
UI俊辑绰 Main Interface 立辟阑 窍霸登搁 惑龋 曼炼捞骨肺,
CStatusMonitor 肺 阿 Instance 俊 立辟窍档废 窍磊
CStatusMonitor 肺 阿 Instance 俊 立辟窍档废 窍磊
UI 付促 Interface 父靛绰芭 蓖满栏聪瘪
UI 付促 Interface 父靛绰芭 蓖满栏聪瘪
*/
class CStatusMonitor : public Singleton<CStatusMonitor>
EdgeInspector_App/EdgeInspector_App.rc
Binary files differ
EdgeInspector_App/Process/InspectCamera.cpp
@@ -4486,6 +4486,7 @@
    int iFrame = stFrame.nFrameIdx;
    CRect rtProcessArea = rtROI;
    int nMinSize_X = (pNotchParam->m_nNotch_Inspect_Defect_Min_X_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeX);
    int nMinSize_Y = (pNotchParam->m_nNotch_Inspect_Defect_Min_Y_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeY);
    int nMinSize = 0;
EdgeInspector_App/Recipe/HardwareSettings.cpp
@@ -1041,6 +1041,10 @@
        m_bEnableAutoDelete = rhs.m_bEnableAutoDelete;
        m_strDeleteToolExePath = rhs.m_strDeleteToolExePath;
        m_strDeleteToolConfigPath = rhs.m_strDeleteToolConfigPath;
        // lwq,2025.08.04
        m_bUse_SaveDLDefectImage = rhs.m_bUse_SaveDLDefectImage;
    }
    return *this;
}
@@ -1282,7 +1286,9 @@
        str = _T("DELETETOOL_EXE_PATH");
    else if ((void*)&m_strDeleteToolConfigPath == pValue)
        str = _T("DELETETOOL_CONFIG_PATH");
    // lwq,2025.08.04
        else if ((void*)&m_bUse_SaveDLDefectImage == pValue)
        str = _T("SAVE_DLDEFECT_IMAGE");
    return str;
}
@@ -1465,6 +1471,11 @@
        return FALSE;
    BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath, _T(""));
    // ly,2025.08.04
    str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
    if (str.IsEmpty() == TRUE)
        return FALSE;
    BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage, FALSE);
    return TRUE;
}
@@ -1645,6 +1656,12 @@
        return FALSE;
    Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath, _T(""));
    // lwq,2025.08.04
    str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
    if (str.IsEmpty() == TRUE)
        return FALSE;
    Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage, FALSE);
    return TRUE;
}
@@ -1807,6 +1824,12 @@
    if (str.IsEmpty() == TRUE)
        return FALSE;
    Register.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath);
    //lwq2025.08.04
    str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
    if (str.IsEmpty() == TRUE)
        return FALSE;
    Register.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bUse_SaveDLDefectImage);
    return TRUE;
}
@@ -1980,6 +2003,13 @@
        return FALSE;
    BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath);
    //lwq,2025.08.04
    str = GetFileString((void*)&m_bUse_SaveDLDefectImage);
    if (str.IsEmpty() == TRUE)
        return FALSE;
    BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage);
    BasicInfoFile.WriteToFile();
    return TRUE;
EdgeInspector_App/Recipe/HardwareSettings.h
@@ -202,6 +202,7 @@
public:
    BOOL                        m_bUse_SaveDebugImage;
    BOOL                        m_bUse_SaveDLDefectImage;
public:
    BOOL                        m_bSaveResultByHour;
EdgeInspector_App/View/ViewMain_HWSetting.cpp
@@ -83,6 +83,7 @@
    DDX_Check(pDX,IDC_CHECK_USE_SAVE_DEBUG_IMAGE,m_pDlgHDSettingParm->m_bUse_SaveDebugImage);    
    DDX_Check(pDX, IDC_CHECK_USE_SAVE_ALL_DMP, g_bUse_SaveAllDMP);
        DDX_Check(pDX, IDC_CHECK_USE_SAVE_DL_IMAGE, m_pDlgHDSettingParm->m_bUse_SaveDLDefectImage);
    DDX_Check(pDX, IDC_CHECK_SAVE_RESULT_BY_HOUR, m_pDlgHDSettingParm->m_bSaveResultByHour);        // ly,2025.07.10
    DDX_Check(pDX, IDC_CHECK_ENABLE_AUTO_COPY, m_pDlgHDSettingParm->m_bEnableAutoCopy);                // ly,2025.07.07
EdgeInspector_App/resource.h
@@ -446,6 +446,8 @@
#define IDC_RDO_SIGNAL1                 1181
#define IDC_CHECK_USE_SAVE_ALL_DMP      1181
#define IDC_RDO_SIGNAL2                 1182
#define IDC_CHECK_USE_SAVE_ALL_DMP2     1182
#define IDC_CHECK_USE_SAVE_DL_IMAGE     1182
#define IDC_NEWPPID_NAME_TITLE          1201
#define IDC_EDIT_PPIDNEW_NAME           1202
#define IDC_BUTTON_LINK                 1203