Index: regedit/hexedit.c =================================================================== --- regedit/hexedit.c (revision 47581) +++ regedit/hexedit.c (working copy) @@ -362,7 +362,7 @@ { INT tmp = bufsize % hed->ColumnsPerLine; Pos = bufsize; - EditPos->x = (tmp == 0 ? hed->ColumnsPerLine : tmp); + EditPos->x = (tmp == 0 ? hed->ColumnsPerLine - 1 : tmp); } return Pos; } @@ -768,6 +768,7 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode) { size_t bufsize; + PBYTE buf; if(GetKeyState(VK_MENU) & 0x8000) { return FALSE; @@ -777,13 +778,51 @@ switch(VkCode) { + case VK_DELETE: + if (hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine < bufsize) + { + buf = (PBYTE) LocalLock(hed->hBuffer); + MoveMemory(buf + hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine, + buf + hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine + 1, + bufsize - hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine - 1); + LocalUnlock(hed->hBuffer); + HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1); + InvalidateRect(hed->hWndSelf, NULL, TRUE); + HEXEDIT_MoveCaret(hed, TRUE); + } + break; + + case VK_BACK: + if (0 < hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine) + { + buf = (PBYTE) LocalLock(hed->hBuffer); + MoveMemory(buf + hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine - 1, + buf + hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine, + bufsize - hed->CaretCol + hed->CaretLine * hed->ColumnsPerLine); + LocalUnlock(hed->hBuffer); + HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1); + if(hed->Position > 0) + { + if(--hed->CaretCol < 0) + { + hed->CaretLine--; + hed->CaretCol = hed->ColumnsPerLine - 1; + } + else + hed->Position--; + } + InvalidateRect(hed->hWndSelf, NULL, TRUE); + HEXEDIT_MoveCaret(hed, TRUE); + } + break; + case VK_LEFT: if(hed->Position > 0) { if(--hed->CaretCol < 0) { hed->CaretLine--; - hed->CaretCol = hed->ColumnsPerLine; + hed->CaretCol = hed->ColumnsPerLine - 1; } else hed->Position--; @@ -794,7 +833,7 @@ case VK_RIGHT: if(hed->Position < (INT)bufsize) { - if(++hed->CaretCol > hed->ColumnsPerLine) + if(++hed->CaretCol >= hed->ColumnsPerLine) { hed->CaretCol = 0; hed->CaretLine++;