function GetTextBound(UseText: WideString; UseFont: WideString; UseSize: single;
var bW: integer;
var bH: integer; UseStrFormat: integer): GPSTATUS;
stdcall;
var
Graphics: GPGRAPHICS;
// Tigü: Hier war ein falscher Typ (Cardinal)
Fam: GpFontFamily;
TempFont: GpFont;
DC: HDC;
strFormat: GPSTRINGFORMAT;
// Tigü: war nicht definiert
boundingBox, layoutRect: TGPRectF;
// Tigü: war nicht definiert
begin
Result := GPSTATUS.GenericError;
// Tigü: Result ist immer GenericError?? Wird nirgens auf GPStatus.ok gesetzt
strFormat :=
nil;
Fam :=
nil;
TempFont :=
nil;
// Tigü: war nicht initialisiert!
// Create matching font
try
GdipCheck(GdipCreateFontFamilyFromName(PWideChar(UseFont),
nil, Fam));
// Tigü: PWideChar fehlte
if Assigned(Fam)
then
begin
GdipCheck(GdipCreateFont(Fam, UseSize, 0, 2, TempFont));
if Assigned(TempFont)
then
begin
DC := GetDC(GetDesktopWindow);
GdipCheck(GdipCreateStringFormat(0, 0, strFormat));
GdipCheck(GdipCreateFromHDC(
DC, Graphics));
FillChar(boundingBox, SizeOf(boundingBox), 0);
// Tigü: waren nicht initialisiert, Werte waren "unendlich" klein oder groß
FillChar(layoutRect, SizeOf(layoutRect), 0);
// Tigü: waren nicht initialisiert, Werte waren "unendlich" klein oder groß
//
GdipCheck(GdipMeasureString(Graphics, PWideChar(UseText), Length(UseText), TempFont,
@layoutRect, strFormat, @boundingBox,
nil,
nil));
if Assigned(strFormat)
then
GdipCheck(GdipDeleteStringFormat(strFormat));
bW := round(boundingBox.Width - boundingBox.x);
bH := round(boundingBox.Height - boundingBox.y);
if UseStrFormat <> 0
then
Swap(bW, bH);
if (bW <> 0)
or (bH <> 0)
then
Result := GPSTATUS.Ok;
// Tigü: Wenns klappt, sollte das so auch per Result mitgeteilt werden!!
ReleaseDc(GetDesktopWindow,
DC);
end;
end;
finally
if Assigned(Graphics)
then // Tigü: entsprechend des neuen Typs anpassen
GdipCheck(GdipDeleteGraphics(Graphics));
if Assigned(TempFont)
then
GdipCheck(GdipDeleteFont(TempFont));
// Lösche das Font Object
if Assigned(Fam)
then
GdipCheck(GdipDeleteFontFamily(Fam));
// Lösche das Font Family Object
end;
end;