Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: UxTheme-Funktion "vernichtet" TRect

  Alt 18. Okt 2014, 10:59
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;
  Mit Zitat antworten Zitat