AGB  ·  Datenschutz  ·  Impressum  







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

Länge eines Strings in Pixel?

Ein Thema von nyquist2108 · begonnen am 28. Apr 2006 · letzter Beitrag vom 15. Feb 2013
Antwort Antwort
nyquist2108

Registriert seit: 21. Feb 2006
5 Beiträge
 
#1

Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 13:22
Hallo!

In meinem Programm versuche ich zur Zeit Strings in die StatusPanels einer StatusBar richtig einzufügen. Das ist nicht besonders schwierig, nur habe ich ein Problem. Die Strings werden dynamisch erzeugt, z.B. Windows User-Name, und somit muss ich die Breite der Panels setzen.
Gibt es eine Funktion, welche die Breite eines Strings in Pixel zurückgibt? Habe wirklich keinen Plan, wie so etwas funktionieren könnte. Habe schon im Forum gesucht, doch (noch) nichts gefunden ...
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 13:25
Hi,
ein Canvas besitzt die Funktion TextWidth, die dir zu der Schrift des Canvas die Breite eines Strings zurück gibt

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von R2D2
R2D2

Registriert seit: 20. Jan 2006
Ort: München
253 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 13:26
Schalte doch Autosize der Panels, sowie des Labels auf true.
if then then then = else else else = then;

Meine Webseite
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#4

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 13:28
Mist, R2D2 war schneller, aber trotzdem hier nochmal ausführlicher:

Alternativ kannst du einfach ein Label auf ein Formular legen, die Eigenschaft "visible" auf False und die Eigenschaft "Autosize" auf true setzen.
Dadurch wird das Label in der Größe immer an den enthaltenen Text angepasst.
Zur Laufzeit kannst du dann deinen String in die Eigenschaft "Caption" des Labels eintragen & danach über die Eigenschaft "Width" abfragen, wie breit das Label ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#5

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 14:58
Zitat von KrasserChecker:
Alternativ kannst du einfach ein Label auf ein Formular legen, die Eigenschaft "visible" auf False und die Eigenschaft "Autosize" auf true setzen.
Nimm den Tipp von Der_Unwissende, das letzte funtioniert zwar, aber muß das sein ... ständig ein meißt sinloses Label auf der Form?

Code-Library -> Sonstiges -> Länge und Höhe eines Textes (String)
oder gleich die Canvas der StatusBar .. ich denk mal die hat eines
StatusBar1.Canvas.TextWidth(S);[i], oder so ähnlich (da hast du auch gleich die passende Font drin, damit richtig gemessen wird)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#6

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 15:08
@himitsu:
Stimmt muss nicht sein
Aber man könnte sich bei Bedarf ja auch kurz manuell ein Label erzeugen, dass gar nicht erst auf dem Formular angezeigt wird. Nach dem Ermitteln der Breite kann es dann ja gleich wieder freigegeben werden.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 15:12
Hallo,
folgendende Funktionen verwende ich für das Thema
Delphi-Quellcode:
function GetFontHeight( Font : TFont ) : Integer;
var
  Canvas : TCanvas;
begin
  Canvas := TCanvas.Create;
  Try
    Canvas.Handle := GetDC( 0 );
    Try
    Canvas.Font := Font;
    Result := Canvas.TextHeight( 'Yy' );
    Finally
      ReleaseDC( 0, Canvas.Handle );
    end;
  Finally
    Canvas.Free;
  end;
end;

function GetTextwidth(const T : String; Font : TFont ) : Integer;
var
  Canvas : TCanvas;
begin
  Canvas := TCanvas.Create;
  Try
    Canvas.Handle := GetDC( 0 );
    Try
    Canvas.Font := Font;
    Result := Canvas.TextWidth(T);
    Finally
      ReleaseDC( 0, Canvas.Handle );
    end;
  Finally
    Canvas.Free;
  end;
end;
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 15:22
Laut Sharky (http://www.delphipraxis.net/internal...=430254#430254) hat die StatusBar wirklich schon ein Canvas und du mußt somit nicht erst noch etwas neues Canvas erstellen/löschen.

Delphi-Quellcode:
// SB = deine StatusBar
// S = der Text, von welchem du die länge brauchst
SB.Canvas.TextWidth(S);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
nyquist2108

Registriert seit: 21. Feb 2006
5 Beiträge
 
#9

Re: Länge eines Strings in Pixel?

  Alt 28. Apr 2006, 15:51
Danke an alle!

So viele Antworten schon nach so kurzer Zeit!!

Habe es über die TextWidth-Eigenschaft der Canvas der StatusBar gemacht ... manchmal ist die Lösung viel einfacher als man denkt!
  Mit Zitat antworten Zitat
moe120

Registriert seit: 1. Okt 2012
Ort: Radeberg
34 Beiträge
 
Delphi XE6 Enterprise
 
#10

AW: Länge eines Strings in Pixel?

  Alt 15. Feb 2013, 13:29
ohne einen schon ewig geschlossenen Thread wieder aufwärmen zu wollen
eine Anmerkung noch:

unter Delphi XE2/3 Firemonkey klappt der Tipp mit dem Label auf der Form nur dann, wenn es auch visible ist. Ansonsten wird label.width nicht aktualisiert, egal was man da an Text reinpackt und was man auch probiert.

meine Lösung war dafür:
- Label auf Form packen
- visible auf true, Opacity = 0, autosize = true
- zur Laufzeit: label.Text + label.Font ändern auf das was man ermitteln möchte
- dann ganz wichtig: label.updateStyle einmal aufrufen
- erst dann kann mit label.width die Breite in Pixel abgelesen werden, vorher steht sonst noch der original width-Wert der Entwurfszeit drin

Geändert von moe120 (15. Feb 2013 um 15:29 Uhr)
  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 20:55 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