Hallo,
geht es um Delphi?
Du könntest du die Pixelbreite über das Canvas ermitteln, falls dir das hilft bzw. du sowieso das Canvas-Objekt nutzt:
StringWidthInPixels := Canvas.TextWidth('Etikettentext')
Wenn du natürlich eine Schriftart wie "Courier New" nutzt, bei der jeder Buchstabe gleich breit ist, kannst du die Buchstabenbreite mit der Anzahl der Buchstaben multiplizieren. Nur das hilft dir vermutlich nichts.
Edit: Da es mich selbst interessiert hat, habe ich eine kleine Funktion geschrieben, die dir die Breite des Texts in Pixeln zurück gibt:
Delphi-Quellcode:
function GetTextWidthInPixels(Text: string; Font: TFont): Integer;
var
PxWidth: Integer;
TmpBmp: TBitmap;
begin
TmpBmp := TBitmap.Create;
try
TmpBmp.Canvas.Font := Font;
PxWidth := TmpBmp.Canvas.TextWidth(Text);
finally
FreeAndNil(TmpBmp);
end;
Result := PxWidth;
end;
Ein möglicher Aufruf könnte so aussehen:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
TextWidthPx: Integer;
Font: TFont;
begin
Font := TFont.Create;
try
Font.Name := 'Arial';
Font.Size := 12;
Font.Style := [fsBold, fsUnderline];
TextWidthPx := GetTextWidthInPixels('Der Text', Font);
finally
FreeAndNil(Font);
end;
// oder mit FontDialog
if FontDialog1.Execute then
TextWidthPx := GetTextWidthInPixels('Der Text', FontDialog1.Font);
ShowMessage(IntToStr(TextWidthPx) + ' Pixel');
end;
Grüße, Matze