![]() |
Delphi-Version: 2007
UxTheme-Funktion "vernichtet" TRect
Hallo zusammen,
kann bitte irgendjemand einmal diesen Codeschnipsel in einer Paintmethode ausprobieren?
Delphi-Quellcode:
Bei mir wird nur der 2. Text ausgegeben.
procedure TNewComponent.Paint;
var lRect: TRect; lLogFont: LOGFONT; begin lRect := Rect(10,0,100,20); UxTheme.GetThemeSysFont(0, TMT_CAPTIONFONT, lLogFont); 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; Delphi 2007 auf Windows XP. |
AW: UxTheme-Funktion "vernichtet" TRect
Ohne den Code in eine Paint-Methode geschrieben zu haben, aber ist das gewollt, das lRect := Rect(10,30,100,20); ein leeres Rechteck (Bottom < Top) erzeugt?
|
AW: UxTheme-Funktion "vernichtet" TRect
Hallo zusammen,
Zitat:
Aber das würde das 2. Rect betreffen und nicht das 1. Und trotz des Fehlers zeigt er nur den Text im 2. Rect an. EDIT: Hab den Code oben berichtigt. |
AW: UxTheme-Funktion "vernichtet" TRect
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich "uxTheme" in die uses aufnehme und das als OnPaint-Ereignis einfüge (ist doch richtig, oder?) erhalte ich das Bild im Anhang.
Ich habe zwar keine Ahnung was vor sich geht, aber ich hoffe das konnte dir weiterhelfen :P XE7 auf Win8.1 |
AW: UxTheme-Funktion "vernichtet" TRect
Hallo zusammen,
Zitat:
Vielleicht ist noch jemand mit Win XP und D2007 hier, welcher das testen könnte. Zitat:
Wenn ich den Code wie Du in den OnPaint-Event einfüge, dann bekomme ich bei mir eine Fehlermeldung: "Zugriffverletzung bei Adresse 00000000. Lesen von Adresse 00000000". Dein Vorgehen hat mich aber auf die Idee des folgenden Codes gebracht, welchen ich in das OnClick-Ereignis eines Button eingefügt habe:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var lRect: TRect; lLogFont: LOGFONT; lhThemeData: HTHEME; begin lhThemeData := OpenThemeData(0, 'window'); lRect := Rect(10,20,100,200); UxTheme.GetThemeSysFont(lhThemeData, TMT_CAPTIONFONT, lLogFont); ShowMessage(IntToStr(lRect.Left) + ' / ' + IntToStr(lRect.Top) + ' / ' + IntToStr(lRect.Right) + ' / ' + IntToStr(lRect.Bottom)); end; Man sollte annehmen, dass dann >10 / 20 / 100 / 200< ausgegeben würde. Bei mir kommt allerdings : 0 / 0 / 0 / 0 Hat jemand eine Idee? |
AW: UxTheme-Funktion "vernichtet" TRect
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; |
AW: UxTheme-Funktion "vernichtet" TRect
Hallo zusammen,
Zitat:
Die Lösung fünktioniert perfekt und beide Zeilen werden ausgegeben. Auch im eigentlichen Kompo-Code funktionert es jetzt perfekt. Ich glaube ich muss mir jetzt noch die anderen UxTheme-Funktionen anschauen, denn das UxTheme.DrawThemeTextEx gibt bei mir auch keinen Text aus. Ist das ein Delphi-Fehler, der immer noch exisiert, oder ab welcher Version wurde er behoben? |
AW: UxTheme-Funktion "vernichtet" TRect
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz