Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Länge eines Strings in Pixel? (https://www.delphipraxis.net/68353-laenge-eines-strings-pixel.html)

nyquist2108 28. Apr 2006 13:22


Länge eines Strings in Pixel?
 
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 ...

Der_Unwissende 28. Apr 2006 13:25

Re: Länge eines Strings in Pixel?
 
Hi,
ein Canvas besitzt die Funktion TextWidth, die dir zu der Schrift des Canvas die Breite eines Strings zurück gibt

Gruß Der Unwissende

R2D2 28. Apr 2006 13:26

Re: Länge eines Strings in Pixel?
 
Schalte doch Autosize der Panels, sowie des Labels auf true.

KrasserChecker 28. Apr 2006 13:28

Re: Länge eines Strings in Pixel?
 
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.

himitsu 28. Apr 2006 14:58

Re: Länge eines Strings in Pixel?
 
Zitat:

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)

KrasserChecker 28. Apr 2006 15:08

Re: Länge eines Strings in Pixel?
 
@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.

Jens Schumann 28. Apr 2006 15:12

Re: Länge eines Strings in Pixel?
 
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;

himitsu 28. Apr 2006 15:22

Re: Länge eines Strings in Pixel?
 
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);

nyquist2108 28. Apr 2006 15:51

Re: Länge eines Strings in Pixel?
 
Danke an alle!

So viele Antworten schon nach so kurzer Zeit!! :-D

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

moe120 15. Feb 2013 13:29

AW: Länge eines Strings in Pixel?
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 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