AGB  ·  Datenschutz  ·  Impressum  







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

Textgröße an Rechteck anpassen

Ein Thema von daschaos · begonnen am 30. Aug 2007 · letzter Beitrag vom 30. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
daschaos

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

Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 10: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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 10:42
Vieliecht weil es sich um eine var-Parametervariable handelt. Schon mal mit einem lokalen String versucht?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 10:50
Ich denke, das ist nur in einer Schleife zu lösen.
Delphi-Quellcode:
if (TWidth > RWidth) then
  begin
    AText := AText + Points;
    while ACanvas.TextWidth(AText) > RWidth do
      System.Delete(AText, Length(AText) - Length(Points), 1);
  end;
Ungetestet!
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 10:59
Hallo,

das Kürzen des Textes und auch die Ellipse am Ende gehören zur Funktionalität der API Funktion DrawText() - da muss nichts selbst programmiert werden.

Grüße vom marabu
  Mit Zitat antworten Zitat
daschaos

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

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 10:59
Hm, falls das auch noch ein Problem sein sollte... ich habs auch ma umgeändert .

Was ich gerade aber beim Debuggen gesehen hab:

Mein Rechteck ist dann zum Beispiel 46 Pixel breit und mein Text ist z.b. 12 Zeichen lang, was zwar einer Pixellänge von 63 entsprechen würde, aber bei Delete geht es ja dann anscheinend um die Länge 12. Damit gäbe es den Index RWidth - PWidth (46-12) garnich und somit macht er auch nichts....

Aber ich denke ma gerade über die Schleife nach ...
  Mit Zitat antworten Zitat
daschaos

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

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 11:02
Klar, er kürzt den Text automatisch, er schneidet das was nich passt, einfach ab, das möchte ich aber nich (bzw. mein Chef nich ), ich hätte eben gerne dann den Text modifiziert mit den Punkten...
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 11:24
Guck mal in der OH nach TextRect das dürfte dein Problem beheben.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
daschaos

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

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 11:35
Ja, das TextRect benutze ich ja auch. Ich rufe zuerst die Funktion TtryText auf und will dann den modifizierten Text in TextRect ausgeben. Aber das er den Text einfach abschneidet ist ja nich das was ich will...

TryText(AText, ARect, ACanvas);
ACanvas.TextRect(ARect, ARect.TopLeft.X, ARect.TopLeft.Y, AText);
  Mit Zitat antworten Zitat
daschaos

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

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 11:50
Ja, die Schleife klappt, dankeschön!!!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Textgröße an Rechteck anpassen

  Alt 30. Aug 2007, 12:24
Hallo Laura,

ich glaube dein Chef braucht eine neue Brille, wenn er die Ellipsis nicht sieht:

Delphi-Quellcode:
var
  s: string;
  r: TRect;
begin
  s := 'Der Affe den Sie meinen heißt Parmesan';
  r := Rect(20, 60, 180, 110);
  DrawText(Canvas.Handle, PChar(s), Length(s), r, DT_BOTTOM or DT_END_ELLIPSIS);
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz