直接打回车就变成编辑完成了,还请指点

解决方案 »

  1.   

    1、如果楼主的意图是“在某一格里输入回车键,则退出编辑状态”:只需把StringGrid的Options设置为[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing]即可注意,仅是比默认设置多了一个goEditing---------------------------------------------------------------------2、如果楼主的意图是“在某一格里输入回车键,则该格文本换行继续输入”:procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      with TStringGrid(Sender) do
      if Key=#13 then
         begin
         Cells[Col,Row] := Cells[Col,Row]+#13+#10;
         Options := [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect];
         Options := [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goAlwaysShowEditor];
         end;
    end;procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var     //DrawCell代码参考自 老冯 的一个例子
      HCell: Integer;
      HRow: Integer;
      SCell: string;
    begin
      with TStringGrid(Sender) do
        begin
        SCell := Cells[ACol, ARow];
        HRow := RowHeights[ARow];
        Canvas.FillRect(Rect);
        HCell := DrawText(Canvas.Handle, PChar(SCell), Length(SCell), Rect, 0 );
        if HCell > HRow then RowHeights[ARow] := HCell;
        end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      StringGrid1.Options := [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goAlwaysShowEditor];
    end;
    //楼主可以在某一格里输入一行文本,然后打回车再输入一行,然后把焦点移至其他格子看一下
      

  2.   

    可能没表述清楚
    单元格已有文字,我只是想在编辑状态,可以在文字段光标位置输入回车
    Cells[Col,Row] := Cells[Col,Row]+#13+#10;
    只是在文字末位回车,如何获得光标所在位置?
      

  3.   

    解决了,散分
    procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
    var
    H:Hwnd;
    BufferSize:Longint;
    P: Pchar;
    S:string;
    begin
    if Key=#13 then
    begin
      H:=GetFocus;
      BufferSize:=SendMessage(h,WM_GETTEXTLENGTH,0,0);
      P:=StrAlloc(BufferSize);
      SendMessage(h,WM_GETTEXT,BufferSize+1,LPARAM(P));
      S:=StrPas(P);
      Insert(#$D+#$A,S,HIWord(SendMessage(h, EM_GETSEL,0,0))+1);
      SendMessage(h,WM_SETTEXT,0,LPARAM(Pchar(S)));
      Key := #0;
    end;
    end;