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