UxTheme.GetThemeSysFont ist falsch deklariert. Der letzte Parameter muss ein LOGFONTW (
Unicode) sein. In Delphi 2007 ist er aber als LOGFONTA (
ANSI) deklariert. Dadurch schreibt die Funktion GetThemeSysFont über das Ende von lLogFont hinaus und trifft dabei auf lRect.
Hier eine korrigierte Version:
Delphi-Quellcode:
var
GetThemeSysFont: function(hTheme: HTHEME; iFontId: Integer;
var plf: LOGFONTW): HRESULT; stdcall; // << Änderung
lRect: TRect;
lLogFont: TLogFontW; // << Änderung
begin
@GetThemeSysFont := @UxTheme.GetThemeSysFont; // << Änderung
lRect := Rect(10,0,100,20);
GetThemeSysFont(0, TMT_CAPTIONFONT, lLogFont); // << Änderung
DrawText(Canvas.Handle,PChar('Titel1'),Length(PChar('Titel1')) ,
lRect,DT_LEFT or DT_SINGLELINE or DT_END_ELLIPSIS or DT_VCENTER);
lRect := Rect(10,30,100,50);
DrawText(Canvas.Handle,PChar('Titel2'),Length(PChar('Titel2')) ,
lRect,DT_LEFT or DT_SINGLELINE or DT_END_ELLIPSIS or DT_VCENTER);
end;