zoukankan      html  css  js  c++  java
  • DBGridEh 在粘贴中文时出现乱码和错位 100zhx_888]

    http://www.fx114.net/qa-29-3439.aspx

    回复于: 2011-10-11 15:02:08
    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;
  • 相关阅读:
    【洛谷 P5409】 【模板】—第一类斯特林数·列(多项式Ln+多项式快速幂)
    【洛谷 P5395】【模板】—第二类斯特林数·行(NTT)
    【洛谷 P5395】【模板】—第二类斯特林数·行(NTT)
    【洛谷 P5408】【模板】—第一类斯特林数·行(倍增+NTT)
    【洛谷 P5408】【模板】—第一类斯特林数·行(倍增+NTT)
    多测师讲解badboy_录制脚本工具安装001_高级讲师肖sir
    多测师讲解jmetera___启动方式—___高级讲师肖sir
    多测师讲解jmeter的——性能测试理论——高级讲师肖sir
    多测师讲解性能测试 _理论_(总结)高级讲师肖sir
    多测师面试讲解 _第三方测试点_高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/CodeGear/p/4480440.html
Copyright © 2011-2022 走看看