TeDBEdit对中文支持不好TeDBEdit的父类TTeEdit竟然这样的代码 procedure TTeEdit.KeyDown(var Key: word; Shift: TShiftState); var TmpS: WideString; OldCaretPosition: integer; begin inherited KeyDown(Key, Shift); if Key = 0 then Exit;
OldCaretPosition := CaretPosition; case Key of VK_END: CaretPosition := Length(Text); VK_HOME: CaretPosition := 0; VK_LEFT: if ssCtrl in Shift then CaretPosition := GetPrivWordBeging(CaretPosition) else CaretPosition := CaretPosition - 1; //-----》也不考虑中文占两个字节,晕!!! VK_RIGHT: if ssCtrl in Shift then CaretPosition := GetNextWordBeging(CaretPosition) else CaretPosition := CaretPosition + 1; VK_DELETE, 8: {Delete or BackSpace key was pressed} if not ReadOnly then begin if SelLength <> 0 then begin if Shift = [ssShift] then CutToClipboard else ClearSelection; end else begin TmpS := Text; if TmpS <> ' then if Key = VK_DELETE then begin FActionStack.FragmentDeleted(CaretPosition + 1,TmpS[CaretPosition + 1]); Delete(TmpS, CaretPosition + 1, 1); end else begin {BackSpace key was pressed} if CaretPosition > 0 then FActionStack.FragmentDeleted(CaretPosition,TmpS[CaretPosition]); Delete(TmpS, CaretPosition, 1); CaretPosition := CaretPosition - 1; end; Text := TmpS; end; end; VK_INSERT: if Shift = [ssCtrl] then CopyToClipboard else if Shift = [ssShift] then PasteFromClipboard; Ord('c'), Ord('C'): if Shift = [ssCtrl] then CopyToClipboard; Ord('v'), Ord('V'): if Shift = [ssCtrl] then PasteFromClipboard; Ord('x'), Ord('X'): if Shift = [ssCtrl] then CutToClipboard; Ord('z'), Ord('Z'): if Shift = [ssCtrl] then UnDo; end;
if Key in [VK_END, VK_HOME, VK_LEFT, VK_RIGHT] then begin if ssShift in Shift then begin if SelLength = 0 then FSelStart := OldCaretPosition; FSelStart := CaretPosition; FSelLength := FSelLength - (CaretPosition - OldCaretPosition); end else FSelLength := 0; Invalidate; end; UpdateCaretePosition; end;
45版本有很多缺陷,其中一项就是在隐藏(只在工具栏上面点击隐藏或打开)得时候会出错,错误就在这个事件{ Internal Tray Event ==========} procedure TTeDefaultForm.DoApplicationMinimize(Sender: TObject); begin Application.OnMinimize := nil; try if FWindowState <> kwsMinimized then if FMinimizeApplication then if FWindowState <> kwsTray then begin Minimize; if Assigned(FOldApplicationMinimize) then FOldApplicationMinimize(Sender); end; finally Application.OnMinimize := DoApplicationMinimize; end; end; 我在上面加了try except end事件也不知道对不对,有好办法得请发一下啊