edit.c
来自「好记星的控件,包括button,list,对文件操作」· C语言 代码 · 共 1,029 行 · 第 1/3 页
C
1,029 行
/* 编辑器选中所有数据 */
/* Input: pEdit - Edit控件句柄 */
/* output: */
/* TURE - 成功 */
/* FALSE - 失败 */
/****************************************************************************/
/* 高林辉 2006-1-14 创建 */
/****************************************************************************/
BOOL EditSetAll(MEdit* pEdit)
{
BOOL bRet = TRUE;
UINT uMemLen;
//如果编辑器只读或是密码状态,返回设置失败
if((pEdit->pmEditInfo->wState & OF_EDITOR_READONLY)
|| (pEdit->pmEditInfo->wState & OF_EDITOR_PASSWORD) )
{
bRet = FALSE;
}
else
{
uMemLen = pEdit->pmEditInfo->uUseMemLen - 1;
pEdit->pmEditInfo->m_Block.uBlkHead = 0;
pEdit->pmEditInfo->m_Block.uBlkTail = uMemLen;
//光标显示在块尾
pEdit->pmEditInfo->m_CurSor.uCursorMem = uMemLen;
//调整光标行列
__EditLineRowChange(pEdit,pEdit->pmEditInfo->uUseDspLen+1,TRUE,FALSE);
}
return bRet;
}
/****************************************************************************/
/* BOOL EditGetCursorMem(MEdit* pEdit,UINT* pCurMem); */
/* description: */
/* 获取光标内存位置 */
/* Input: pEdit - Edit控件句柄 */
/* output: */
/* TURE - 成功 */
/* FALSE - 如果当前没有光标,返回失败 */
/****************************************************************************/
/* 高林辉 2006-1-14 创建 */
/****************************************************************************/
BOOL EditGetCursorMem(MEdit* pEdit,UINT* pCurMem)
{
BOOL bRet = TRUE;
if(pEdit->pmEditInfo->wState & OF_EDITOR_READONLY)
{ //只读状态下没有光标
bRet = FALSE;
}
else
{
*pCurMem = pEdit->pmEditInfo->m_CurSor.uCursorMem;
}
return bRet;
}
/****************************************************************************/
/* BOOL EditSetCursorMem(MEdit* pEdit,UINT uMemPos); */
/* description: */
/* 设置光标内存位置 */
/* Input: pEdit - Edit控件句柄 */
/* uMemPos - 光标的位置 */
/* output: */
/* TURE - 设置成功 */
/* FALSE - 设置失败 */
/****************************************************************************/
/* 高林辉 2006-5-18 创建 */
/****************************************************************************/
BOOL EditSetCursorMem(MEdit* pEdit,UINT uMemPos)
{
BOOL bFlag = FALSE;
if(!pEdit) return FALSE;
if(uMemPos > pEdit->pmEditInfo->uUseMemLen - 1)
uMemPos = pEdit->pmEditInfo->uUseMemLen - 1;
pEdit->pmEditInfo->m_CurSor.uCursorMem = uMemPos;
if(pEdit->pmEditInfo->pBuf+uMemPos < pEdit->pmEditInfo->pScrnStart)
bFlag = TRUE;
__EditLineRowChange(pEdit, pEdit->pmEditInfo->uUseDspLen, bFlag,FALSE);
return TRUE;
}
/****************************************************************************/
/* BOOL EditGetCursorLineRow(MEdit* pEdit,UINT* pLine, UINT* pRow); */
/* description: */
/* 获取光标行列位置 */
/* Input: pEdit - Edit控件句柄 */
/* pLine - 行号在此地址返回 */
/* pRow - 列号在此地址返回 */
/* output: */
/* TURE - 成功 */
/* FALSE - 如果当前没有光标,返回失败 */
/****************************************************************************/
/* 高林辉 2006-1-14 创建 */
/****************************************************************************/
BOOL EditGetCursorLineRow(MEdit* pEdit,UINT* pLine, UINT* pRow)
{
BOOL bRet = TRUE;
UINT uStart;
if(pEdit->pmEditInfo->wState & OF_EDITOR_READONLY)
{ //只读状态下没有光标
bRet = FALSE;
}
else
{
uStart = pEdit->pmEditInfo->uStart;
if(pEdit->pmEditInfo->wState & OF_EDITOR_MULTILINE)
{//如果是多行编辑
*pLine = pEdit->pmEditInfo->m_CurSor.wCurLine - uStart;
*pRow = pEdit->pmEditInfo->m_CurSor.wCurCol;
}
else
{
*pLine = pEdit->pmEditInfo->m_CurSor.wCurLine;
*pRow = pEdit->pmEditInfo->m_CurSor.wCurCol - uStart;
}
}
return bRet;
}
/****************************************************************************/
/* BOOL EditSetCursorLineRow(MEdit* pEdit, UINT uLine, UINT uRow); */
/* description: */
/* 设置光标行列位置 */
/* Input: pEdit - Edit控件句柄 */
/* uLine - 行号 */
/* uRow - 列号 */
/* output: */
/* TURE - 成功 */
/* FALSE - 失败 */
/****************************************************************************/
/* 高林辉 2006-1-14 创建 */
/****************************************************************************/
BOOL EditSetCursorLineRow(MEdit* pEdit, UINT uLine, UINT uRow)
{
BOOL bRet = TRUE;
UINT uDspCol;
if(pEdit->pmEditInfo->wState & OF_EDITOR_READONLY)
{ //只读状态下没有光标
bRet = FALSE;
}
else
{
uDspCol = __EditGetRectRowNum(pEdit->pmEditInfo->wFontID,pEdit->uWidth);
//首先隐藏光标
__EditCursorHide(pEdit);
//取消块选择
__EditFlushSelBlock(pEdit);
__EditCursorToMemCol(pEdit,&uLine,&uRow,uDspCol);
__EditShowCursor(pEdit);
}
return bRet;
}
/****************************************************************************/
/* BOOL EditSetText(MEdit* pEdit, UINT8* pData); */
/* description: */
/* 设置编辑器的数据 */
/* Input: pEdit - Edit控件句柄 */
/* pData - 字符串指针 */
/* output: */
/* TURE - 成功 */
/* FALSE - 失败 */
/****************************************************************************/
/* 高林辉 2006-1-14 创建 */
/****************************************************************************/
BOOL EditSetText(MEdit* pEdit, UINT8* pData)
{
BOOL bRet = TRUE;
UINT uTempMemLen,uTempDspLen,uTemp;
//FIRST,CLEAR THE BUFFER
*(pEdit->pmEditInfo->pBuf) = 0;
pEdit->pmEditInfo->pScrnStart = pEdit->pmEditInfo->pBuf;
pEdit->pmEditInfo->uDataLines = 1;
pEdit->pmEditInfo->uStart = 0;
pEdit->pmEditInfo->uUseMemLen = 1;
pEdit->pmEditInfo->uUseDspLen = 0;
pEdit->pmEditInfo->m_Block.uBlkHead = 0;
pEdit->pmEditInfo->m_Block.uBlkTail = 0;
pEdit->pmEditInfo->m_CurSor.uCursorMem = 0;
pEdit->pmEditInfo->m_CurSor.wCurLine = 0;
pEdit->pmEditInfo->m_CurSor.wCurCol = __EditGetCaptionLen(pEdit->pmEditInfo->pCaption);
uTemp = __EditGetStrLength(pEdit->pmEditInfo->wFontID, pData, FALSE );
__EditStrValidLenCheck( pEdit->pmEditInfo->wFontID, pEdit->pmEditInfo->wAllowChar
, pData, 0, &uTempDspLen, &uTempMemLen);
__EditAddStringProc( pEdit, pData, uTempMemLen);
MsgPost(NULL,EVENT_DRAW,0);
return bRet;
}
/****************************************************************************/
/* BOOL EditClear(MEdit* pEdit); */
/* description: */
/* 清除所有数据 */
/* Input: pEdit - Edit控件句柄 */
/* output: */
/****************************************************************************/
/* 高林辉 2006-1-14 创建 */
/****************************************************************************/
BOOL EditClear(MEdit* pEdit)
{
BOOL bRet = TRUE;
if(pEdit->pmEditInfo->wState & OF_EDITOR_READONLY)
{
bRet = FALSE;
}
else
{
if(pEdit->pmEditInfo->m_Block.uBlkHead == pEdit->pmEditInfo->m_Block.uBlkTail)
{
//如果当前没有块
bRet = FALSE;
}
else
{
__EditDeleteProc(pEdit,TRUE);
}
}
return bRet;
}
/****************************************************************************/
/* BOOL EditSetBuffer(MEdit* pEdit,UINT8* pBuf); */
/* description: */
/* 编辑器设置编辑buffer */
/* Input: pEdit - Edit控件句柄 */
/* pBuf - buffer */
/* uBufLen - 指定buffer的长度 */
/* output: */
/* 返回设置成功 */
/* 注意:如果模板中没有指定buffer,在Ap初始化中必须调用此函数 */
/****************************************************************************/
/* 高林辉 2006-1-19 创建 */
/****************************************************************************/
BOOL EditSetBuffer(MEdit* pEdit,UINT8* pBuf,UINT uBufLen)
{
BOOL bRet = FALSE;
if(pBuf && (uBufLen > 0) )
{
pEdit->pEditBuf = pBuf;
pEdit->uBufLen = uBufLen;
if(!(pEdit->pmEditInfo->wState & SF_EDITOR_INIT))
{
MsgSend2((APGUI_STRUCT_MODEL*)pEdit,EVENT_INITIALIZE,0);
MsgPost(NULL,EVENT_DRAW,0);
}
bRet = TRUE;
}
return bRet;
}
/****************************************************************************/
/* UINT8* EditGetBuffer(MEdit* pEdit); */
/* description: */
/* 获取编辑器buffer */
/* Input: pEdit - Edit控件句柄 */
/* output: */
/* return: 返回buffer地址,如果编辑器未设置buffer,返回NULL. */
/* 注意:如果模板中没有指定buffer,在Ap初始化中必须调用此函数 */
/****************************************************************************/
/* 高林辉 2006-3-15 创建 */
/****************************************************************************/
UINT8* EditGetBuffer(MEdit* pEdit)
{
if(pEdit->pmEditInfo->wState & SF_EDITOR_INIT)
{
return pEdit->pmEditInfo->pBuf;
}
else
{
return (UINT8*)NULL;
}
}
/****************************************************************************/
/* VOID BOOL __EditSetDefaultParam(MEdit* pEdit) */
/* description: */
/* 设置编辑器的默认参数 */
/* Input: pEdit - Edit控件句柄 */
/* output: 返回设置默认参数是否成功 */
/* 无 */
/****************************************************************************/
/* 高林辉 2005-12-20 创建 */
/****************************************************************************/
BOOL __EditSetDefaultParam(MEdit* pEdit)
{
BOOL bRet = TRUE; //返回值
UINT16 wCurID;
if( (pEdit->pmEditInfo == NULL) || (pEdit->pEditBuf == NULL) )
{
bRet = FALSE;
}
else
{
//首先清0
memset(pEdit->pmEditInfo,0,sizeof(LIST_INFO));
//设置编辑器状态
pEdit->pmEditInfo->wState = SF_EDITOR_NONE;
if(pEdit->uStyle & EDS_READONLY)
pEdit->pmEditInfo->wState |= OF_EDITOR_READONLY;
if(pEdit->uStyle & EDS_MULTILINE)
pEdit->pmEditInfo->wState |= OF_EDITOR_MULTILINE;
if(pEdit->uStyle & EDS_PASSWORD)
pEdit->pmEditInfo->wState |= OF_EDITOR_PASSWORD;
if(pEdit->uStyle & EDS_INSERSECAP)
pEdit->pmEditInfo->wState |= OF_EDITOR_INSERSECAP;
if(pEdit->uStyle & EDS_LINETHREAD)
pEdit->pmEditInfo->wState |= OF_EDITOR_LINETHREAD;
if(pEdit->uStyle & EDS_NOBACKGROUND)
pEdit->pmEditInfo->wState |= OF_EDITOR_NOBACKGRND;
if(pEdit->uStyle & EDS_NOMARK)
pEdit->pmEditInfo->wState |= OF_EDITOR_NOMARK;
if(pEdit->pmEditInfo->wState & OF_EDITOR_PASSWORD)
{ //如果是密码编辑,只允许单行编辑
pEdit->pmEditInfo->wState &= ~OF_EDITOR_MULTILINE;
}
//设置编辑器默认值
pEdit->pmEditInfo->pCaption = NULL;
pEdit->pmEditInfo->pBuf = pEdit->pEditBuf;
//设置默认的参数
pEdit->pmEditInfo->uBufLen = pEdit->uBufLen;
pEdit->pmEditInfo->uRowSpace = 1;
pEdit->pmEditInfo->uIndent = 0;
pEdit->pmEditInfo->wAllowChar = EDITALLOW_ALL;
pEdit->pmEditInfo->wFirstChar = EDITALLOW_SBCCASE;
pEdit->pmEditInfo->byPassword = '*';
pEdit->pmEditInfo->wFontID = SYSTLIB;
pEdit->pmEditInfo->pScrnStart = pEdit->pmEditInfo->pBuf;
pEdit->pmEditInfo->uStart = 0;
pEdit->pmEditInfo->m_CurSor.bCursorState = FALSE;
pEdit->pmEditInfo->m_CurSor.uCursorMem = 0;
pEdit->pmEditInfo->m_CurSor.wCurLine = 0;
pEdit->pmEditInfo->m_Block.uBlkHead = 0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?