KDJ wrote:I need a function that gets the text in columns.
For example:
AkelPad.GetTextRangeColumn(Start, End[, nNewLine])
where
Start = [nLineStart, nColumnStart]
End = [nLineEnd, nColumnEnd]
Is it possible to do this?
The function should retrieve the text without selecting. I wrote this function:FeyFre wrote:KDJ, definitely yes
AkelEdit message AEM_GETTEXTRANGE
There is usage example in source of AkelPad (AkelEdit.h)
Code: Select all
// Example of use
var Txt = GetTextRangeColumn([0, 0], [6, 9]);
AkelPad.Command(4101);
AkelPad.ReplaceSel(Txt);
///////////////////////////////////////////
// aBeg = [nBeginLine, nBeginColumn]
// aEnd = [nEndLine, nEndColumn]
// nNewLine = 1 //"\r" new line (default)
// 2 //"\n" new line
// 3 //"\r\n" new line
///////////////////////////////////////////
function GetTextRangeColumn(aBeg, aEnd, nNewLine)
{
var DT_DWORD = 3;
var hEditWnd = AkelPad.GetEditWnd();
var Txt = "";
var lpAETEXTRANGEW;
var nTxtLen;
var lpTxt;
if (! nNewLine) nNewLine = 1;
nNewLine += 4;
if (lpAETEXTRANGEW = AkelPad.MemAlloc(56 /*sizeof(AETEXTRANGEW)*/))
{
AkelPad.MemCopy(lpAETEXTRANGEW, aBeg[0], DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 8, aBeg[1], DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 12, aEnd[0], DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 20, aEnd[1], DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 24, 1, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 28, 0, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 32, 0, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 36, nNewLine, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 40, 0, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 44, 0, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 48, 0, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 52, 0, DT_DWORD);
AkelPad.SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, lpAETEXTRANGEW);
AkelPad.SendMessage(hEditWnd, 3132 /*AEM_INDEXUPDATE*/, 0, lpAETEXTRANGEW + 12);
if (nTxtLen = AkelPad.SendMessage(hEditWnd, 3032 /*AEM_GETTEXTRANGEW*/, 0, lpAETEXTRANGEW))
{
if (lpTxt = AkelPad.MemAlloc(nTxtLen * _TSIZE + _TSIZE))
{
AkelPad.MemCopy(lpAETEXTRANGEW + 28, lpTxt, DT_DWORD);
AkelPad.MemCopy(lpAETEXTRANGEW + 32, nTxtLen, DT_DWORD);
AkelPad.SendMessage(hEditWnd, 3032 /*AEM_GETTEXTRANGEW*/, 0, lpAETEXTRANGEW);
Txt = AkelPad.MemRead(lpTxt, _TSTR);
AkelPad.MemFree(lpTxt);
}
}
AkelPad.MemFree(lpAETEXTRANGEW);
}
return Txt;
}
I don't know where is the error?