Index: trunk/ab5.0/abdev/abdev/DrawBuffer.cpp
===================================================================
--- trunk/ab5.0/abdev/abdev/DrawBuffer.cpp	(revision 770)
+++ trunk/ab5.0/abdev/abdev/DrawBuffer.cpp	(revision 771)
@@ -23,10 +23,9 @@
 public:
 	HDC memdc;
-	CDrawReserve(int WndNum,HDC _hDC,int cx,int cy,int ctrl_tab_space,int nMaxOnePageChar,int linenum_textcount){
+	CDrawReserve(int WndNum,HDC _hDC,int cx,int cy,int ctrl_tab_space,int nMaxOnePageChar,int linenum_textcount,BOOL isRemoteSession){
 		m_WndNum=WndNum;
 		x=-1;
 		y=-1;
 		bNowUnder=0;
-		hdc=_hDC;
 		ClientSize.cx=cx;
 		ClientSize.cy=cy;
@@ -35,7 +34,14 @@
 		iMax_OneLine_TextLength=cx/font_width+1;
 		iLineNumberTextCount=linenum_textcount;
-		memdc=CreateCompatibleDC(hdc);
-		hMemBmp=CreateCompatibleBitmap(hdc,cx,cy);
-		hOldBitmap=(HBITMAP)SelectObject(memdc,hMemBmp);
+		if(isRemoteSession){
+			hdc=0;
+			memdc=_hDC;
+		}
+		else{
+			hdc=_hDC;
+			memdc=CreateCompatibleDC(hdc);
+			hMemBmp=CreateCompatibleBitmap(hdc,cx,cy);
+			hOldBitmap=(HBITMAP)SelectObject(memdc,hMemBmp);
+		}
 
 		//背景色でメモリ画面を初期化
@@ -43,5 +49,5 @@
 		hBrush=CreateSolidBrush(tci.rgbBackground);
 		hOldBrush=(HBRUSH)SelectObject(memdc,hBrush);
-		PatBlt(memdc,0,0,cx,cy,PATCOPY);
+		PatBlt(memdc,ctrl_tab_space,0,cx-ctrl_tab_space,cy,PATCOPY);
 		DeleteObject(hBrush);
 
@@ -69,11 +75,11 @@
 	}
 	~CDrawReserve(){
-		SelectObject(memdc,hOldBitmap);
-		DeleteObject(hMemBmp);
-
 		SelectObject(memdc,hOldFont);
-
-		DeleteDC(memdc);
-
+		if(hdc){
+			SelectObject(memdc,hOldBitmap);
+			DeleteObject(hMemBmp);
+
+			DeleteDC(memdc);
+		}
 		HeapDefaultFree(lpszBuffer);
 	}
@@ -260,6 +266,8 @@
 
 
-		//メモリDCの内容を画面に描画
-		BitBlt(hdc,0,0,ClientSize.cx,ClientSize.cy,memdc,0,0,SRCCOPY);
+		//メモリDCを使用している場合、その内容を画面に描画
+		if (hdc){
+			BitBlt(hdc,0,0,ClientSize.cx,ClientSize.cy,memdc,0,0,SRCCOPY);
+		}
 	}
 };
@@ -298,5 +306,6 @@
 		iControlTabSpace,
 		OnePage_CharHeight,
-		iLineNumberTextCount);
+		iLineNumberTextCount,
+		GetSystemMetrics(SM_REMOTESESSION));
 
 
Index: trunk/ab5.0/abdev/abdev/TextEditor_KeyEvent.cpp
===================================================================
--- trunk/ab5.0/abdev/abdev/TextEditor_KeyEvent.cpp	(revision 770)
+++ trunk/ab5.0/abdev/abdev/TextEditor_KeyEvent.cpp	(revision 771)
@@ -488,4 +488,6 @@
 	int WndNum;
 	WndNum=GetWndNum(GetParent(hwnd));
+	bool isSelectedBefore = MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x!=MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.x
+		|| MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y!=MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.y;
 
 	if(nVirtualKey==VK_LEFT||nVirtualKey==VK_UP||nVirtualKey==VK_RIGHT||nVirtualKey==VK_DOWN||nVirtualKey==VK_PRIOR||nVirtualKey==VK_NEXT){
@@ -665,7 +667,9 @@
 		ResetState_EditMenu();
 
-		//再描画（選択時の反転表示が解除されたときを考慮）
-		UpdateWindow(hwnd);	//ちらつき防止
-		InvalidateRect(hwnd,NULL,0);
+		if(!TextEdit_ScrollCaret(WndNum,0)&&isSelectedBefore){
+			UpdateWindow(hwnd);	//ちらつき防止
+			//再描画（選択時の反転表示が解除されたときを考慮）
+			InvalidateRect(hwnd,NULL,0);
+		}
 	}
 	else if(nVirtualKey==VK_HOME||nVirtualKey==VK_END){
@@ -705,5 +709,5 @@
 		}
 
-		if(!TextEdit_ScrollCaret(WndNum,0)){
+		if(!TextEdit_ScrollCaret(WndNum,0)&&isSelectedBefore){
 			//再描画（選択時の反転表示が解除されたときを考慮）
 			InvalidateRect(hwnd,NULL,0);
