Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.043 Beiträge
 
Delphi 12 Athens
 
#5

AW: Problem mit TextWidth

  Alt 5. Mär 2024, 11:29
Ein Blick in die Sourcen könnte da hilfreich sein:
Delphi-Quellcode:
procedure TStringGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
  AState: TGridDrawState);
var
  LText: string;
  LX: Integer;
  LTextRect: TRect;
begin
  if DefaultDrawing then
  begin
    LTextRect := ARect;
    LTextRect.Inflate(-1, -1);
    if not LTextRect.IsEmpty then
    begin
      LText := Cells[ACol, ARow];
      case CellAlignments[ACol, ARow] of
      taLeftJustify:
        LX := LTextRect.Left + 5;
      taRightJustify:
        LX := LTextRect.Right - 5 - Canvas.TextWidth(LText);
      taCenter:
        LX := LTextRect.Left + (LTextRect.Width - Canvas.TextWidth(LText)) div 2;
      else
        LX := 0;
      end;
      Canvas.TextRect(LTextRect, LX, LTextRect.Top + (LTextRect.Height - Canvas.TextHeight(LText)) div 2, LText);
    end;
  end;
  inherited DrawCell(ACol, ARow, ARect, AState);
end;
Beim Aufruf von DrawCell hat ARect die Breite des entsprechenden ColWidths-Werts. Mit dem Inflate wird es 2 Pixel schmaler. Dann kommt je nach CellAlignments eventuell noch ein Offset dazu.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat