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 + -
显示快捷键?