AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TextWidth

Ein Thema von BRobby · begonnen am 5. Mär 2024 · letzter Beitrag vom 5. Mär 2024
Antwort Antwort
BRobby

Registriert seit: 30. Dez 2004
Ort: Bottrop
30 Beiträge
 
Delphi 12 Athens
 
#1

AW: Problem mit TextWidth

  Alt 5. Mär 2024, 11:06
Ja, muss breit genug sein, denn MaxColWidth wird auf die maximale Breite ALLER Strings in dem Feld cells[] gesetzt.
Habe jetzt eine Teillösung gefunden, indem ich

MaxColWidth:=Max(MaxColWidth, Canvas.TextWidth(' '+aTxt+' '));
die Strings mit einem Leerzeichen davor und dahinter verlängere.
Trotzdem bin ich mit dem Ergebnis nicht zufrieden.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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
BRobby

Registriert seit: 30. Dez 2004
Ort: Bottrop
30 Beiträge
 
Delphi 12 Athens
 
#3

AW: Problem mit TextWidth

  Alt 5. Mär 2024, 11:50
Danke,
das ist die Lösung.

Mit dem Summand +7 in
MaxColWidth:=Max(MaxColWidth, Canvas.TextWidth(aTxt)+7);werden die Zahlen nun korrekt dargestellt.

Danke für die Erklärung!
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit TextWidth

  Alt 5. Mär 2024, 13:57
Delphi-Quellcode:
        LX := LTextRect.Left + 5;
        LX := LTextRect.Right - 5 -State);
Zur 5 eine Frage: Wird da effektiv - egal für welche Monitorauflösung - 5 verwendet?
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Problem mit TextWidth

  Alt 5. Mär 2024, 14:32
Zur 5 eine Frage: Wird da effektiv - egal für welche Monitorauflösung - 5 verwendet?
Ja, das ist so. In Folge hat man bei höherer Auflösung nicht nur eine schärfere Schrift, sondern kann auch mehr Buchstaben sichtbar machen. Ich bin mir aber nicht sicher ob das Absicht ist.

Das deckt sich allerdings auch mit dem (Windows-)Verhalten eines simplem TEdit (zumindest wenn man das Default AutoSize auf True lässt). Die Höhe wird zwar an den skalierten Font angepasst, ist dann aber kleiner als man es bei der Skalierung erwarten würde. Kann man einfach mal selbst mit zwei Edits probieren und bei einem davon AutoSize auf False stellen. Persönlich finde ich die Darstellung mit AutoSize besser.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz