Delphi: How to make cells' texts in TStringGrid center aligned?

前端 未结 2 895
抹茶落季
抹茶落季 2020-12-10 04:10

It seems something obvious to have. I want the texts to be in the center of the cells, but for some reason I can\'t find it in properties. How can I do this?

2条回答
  •  情书的邮戳
    2020-12-10 05:07

    There's no property to center the text in TStringGrid, but you can do that at DrawCell event as:

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      S: string;
      SavedAlign: word;
    begin
      if ACol = 1 then begin  // ACol is zero based
        S := StringGrid1.Cells[ACol, ARow]; // cell contents
        SavedAlign := SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
        StringGrid1.Canvas.TextRect(Rect,
          Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
        SetTextAlign(StringGrid1.Canvas.Handle, SavedAlign);
      end;
    end;
    

    The code I posted from here

    UPDATE:

    to center text while writing in the cell, add this code to GetEditText Event:

    procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
      var Value: string);
    var
      S : String;
      I: Integer;
      IE : TInplaceEdit ;
    begin
      for I := 0 to StringGrid1.ControlCount - 1 do
        if StringGrid1.Controls[i].ClassName = 'TInplaceEdit' then
        begin
          IE := TInplaceEdit(StringGrid1.Controls[i]);
          ie.Alignment := taCenter
        end;
    end;
    

提交回复
热议问题