unit DBGridEh; 把下面这个函数替换成这样 procedure TDBGridInplaceEdit.WMPaste(var Message: TMessage); var ClipboardText: WideString; FSearchText, AText, tmpText: WideString; AColumn: TColumnEh; Idx: Integer; CanChange, TextLocated, CanTryEdit: Boolean; EditKeyValue: Variant; NewSelStart: Integer; begin if Grid.AllowedOperationUpdate and Column.CanModify(False) then if ((EditStyle = esDataList) or (Column.GetColumnType = ctKeyPickList)) then begin if Clipboard.HasFormat(CF_TEXT) then ClipboardText := Clipboard.AsText else Exit; with Grid do AColumn := Columns[SelectedIndex]; FSearchText := Copy(Text, 1, SelStart) + ClipboardText + Copy(Text, SelStart + SelLength + 1, MAXINT); CanTryEdit := False; TextLocated := False; AText := FSearchText; if (EditStyle = esDataList) and (AColumn.UsedLookupDataSet <> nil) then //lookup begin EditKeyValue := Null; if AColumn.UsedLookupDataSet.Locate(AColumn.Field.LookupResultField, FSearchText, [loCaseInsensitive, loPartialKey]) then begin AText := AColumn.UsedLookupDataSet.FieldByName(AColumn.Field.LookupResultField).Text; EditKeyValue := AColumn.UsedLookupDataSet.FieldValues[AColumn.Field.LookupKeyFields]; TextLocated := True; CanTryEdit := True; end else if Assigned(AColumn.OnNotInList) then CanTryEdit := True; if CanTryEdit then begin Grid.DataLink.Edit; CanChange := Grid.Datalink.Editing; if CanChange then begin Grid.Datalink.Modified; Text := AText; SelStart := Length(Text); if TextLocated then SelLength := Length(FSearchText) - SelStart else SelLength := 0; Grid.FEditKeyValue := EditKeyValue; Grid.FEditText := Text; if Assigned(FDataList) then FDataList.KeyValue := Grid.FEditKeyValue; end; end; end else //keypicklist begin Idx := StringsLocate(AColumn.PickList, FSearchText, [loCaseInsensitive, loPartialKey]); if (Idx <> -1) and Grid.CanEditModifyText then begin AText := AColumn.PickList[Idx]; TextLocated := True; CanTryEdit := True; end else if Assigned(AColumn.OnNotInList) then CanTryEdit := True; if CanTryEdit then begin SelStart := Length(AText); if TextLocated then SelLength := Length(FSearchText) - SelStart else SelLength := 0; Grid.DataLink.Edit; CanChange := Grid.Datalink.Editing; if CanChange then Grid.Datalink.Modified; Text := AText; Grid.FEditText := Text; if Assigned(FPickList) then FPickList.ItemIndex := Idx; end; end; end else begin if EditCanModify and ( Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT) or Clipboard.HasFormat(CF_UNICODETEXT) ) then begin with Grid do AColumn := Columns[SelectedIndex]; ClipboardText := Clipboard.AsText; AText := AColumn.GetAcceptableEditText(ClipboardText); tmpText := Text; FSearchText := Copy(tmpText, 1, SelStart) + AText + Copy(tmpText, SelStart + SelLength + 1, MAXINT); NewSelStart := Length(Copy(tmpText, 1, SelStart) + AText); Grid.DataLink.Edit; if Grid.Datalink.Editing then begin Grid.Datalink.Modified; Text := FSearchText; SelStart := NewSelStart; Grid.FEditText := Text; SendMessage(Handle, EM_SCROLLCARET, 0,0); end; end else inherited; end; end;
转载于:https://www.cnblogs.com/CodeGear/p/4480440.html
标签:begin,AColumn,DBGridEh,SelStart,Text,乱码,Grid,end,粘贴 From: https://www.cnblogs.com/0n355/p/18130600