Einzelnen Beitrag anzeigen

daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#1

Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 11:15
Hi!

Ich zeichne Rechtecke, die immer einem bestimmten Element zugeordnet sind. Diese Elemente haben immer einen Namen, der Links oben innerhalb des Rechtecks erscheint. Wenn der Text länger ist als die Breite des Rechtecks, also Canvas.TextWidth(Name) > (Rect.Right - Rect.Left), dann soll er halt nur soviel Text ausgeben, wie in das Recteck passt und mit '...' symbolisieren, dass der Name noch weiter geht. Er soll also die Textlänge so anpassen, dass dieser soviele Buchstaben dazu nimmt bis das Wort + '...' noch in das Recteck passen. Eingentlich hatte ich mir das folgendermaßen vorgestellt:

Delphi-Quellcode:
procedure TCustomTreemapChart.TryText(var AText: WideString; ARect: TRect; ACanvas: TCanvas);
var
  TWidth: Integer;
  RWidth: Integer;
  PWidth: Integer;
  Points: WideString;
  Help: Integer;
begin
  Points := '...';
  TWidth := ACanvas.TextWidth(AText);
  RWidth := ARect.Right - ARect.Left;
  PWidth := ACanvas.TextWidth(Points);
  Help := Length(AText);

  if (TWidth > RWidth) then
  begin
    System.Delete(AText, RWidth-PWidth, TWidth);
    AText := AText + Points;
  end;
end;
Delete ist ja so aufgebaut, dass ich einen String übergeben muss, der dann ab Index (2.Parameter) den String TWidth Zeichen kürzt (3.Parameter). Wobei der 3. Parameter auch länger sein darf, als Zeichen da sind, dann schneidet er einfach soviele ab wie vorhanden sind.
Aber so einfach funktioniert es wohl nich mit Delete wie ich gehofft hatte... er macht da nämlich garnichts. Und gibt mir einfach den Text konkateniert mit den Punkten aus... es ist wohl das Problem, das er einmal die Länge des Textes hat und das die Breiten Pixelwerte sind.

Hat jemand eine Idee, wie ich daran gehen muss?

Dankeschön schonmal!

Lg,
Laura
  Mit Zitat antworten Zitat