Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   abfragen, ob XPman eingebunden ist (https://www.delphipraxis.net/194539-abfragen-ob-xpman-eingebunden-ist.html)

MacGuyver 5. Dez 2017 08:41

abfragen, ob XPman eingebunden ist
 
Moin Leute :hi:

Ich konnte dazu leider nichts passendes finden. Wie frage ich ab, ob die Unit "XPman" eingebunden ist?
In manchen Fällen muss man dann etwas anderes machen. Beispiel: Ein Label mit anderer Hintergrundfarbe. Mit Manifest möchte ich ein Panel dahinter packen, ParentBackGround = False und mit der gewünschten Farbe. Ohne XPman brauche ich das nicht.

Bernhard Geyer 5. Dez 2017 09:05

AW: abfragen, ob XPman eingebunden ist
 
XPMan ist doch schon längst wieder hinfällig.
Du musst abfragen ob die Anwendung/das Control gethemed ist.
Vermutlich am einfachsten mit der Entsprechenden WinAPI-Methode: https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Uwe Raabe 5. Dez 2017 09:09

AW: abfragen, ob XPman eingebunden ist
 
Vielleicht hilft dir
Delphi-Quellcode:
ThemeServices.ThemesEnabled
aus der Unit Themes.pas hier weiter.

MacGuyver 5. Dez 2017 09:21

AW: abfragen, ob XPman eingebunden ist
 
Danke für die Antworten.

IsAppThemed gibt mir immer True zurück, auch wenn XPman nicht eingebunden ist. Uwes Lösung funktioniert.

mkinzler 5. Dez 2017 09:56

AW: abfragen, ob XPman eingebunden ist
 
XPMan wurde nur bei älteren Delphiversionen benötigt.

himitsu 5. Dez 2017 10:17

AW: abfragen, ob XPman eingebunden ist
 
Man könnte notfalls auch die Version der "CommonControls" prüfen, bzw. ob bestimmte Features vorhanden/aktiv sind.

PS: XP-Manifest ist nicht gleich XP-Manifest.
Es gibt mehrere Teile innerhalb der Manifest-Ressource und nur ein winziger Teil kümmtert sich im die Anzeige. (hier ob die alten oder die neuen CommonControls verwendet werden sollen, was sich nicht nur auf die Anzeige, sondern vorallem auch verfügbare Funktionalitäten und die verwendete API bezieht)

Zitat:

XPMan wurde nur bei älteren Delphiversionen benötigt.
Und die zugehörige TXPManifest-Komponente war auch voll der Fail. (war nur dafür da die Unit "automatisch" einzubinden, aber entfernen tat sie diese Unit nie nicht wieder)

Zitat:

Zitat von MacGuyver (Beitrag 1387960)
IsAppThemed gibt mir immer True zurück, auch wenn XPman nicht eingebunden ist.

Wo/Wann hast du diese Funktion aufgerufen?

Die Remarks in MSDN-Library durchsuchenIsAppThemed hast du gesehn?
Die Application kann die Funktionalitäten haben, aber sie müssen nicht aktiv sein.
Also mindestens
Delphi-Quellcode:
IsAppThemed and IsThemeActive
.
Delphi-Quellcode:
{function TThemeServices.GetThemesEnabled: Boolean;
begin
  Result := FThemesAvailable and FUseThemes and FNewComCtrls;
end;}

function TThemeServices.GetThemesEnabled: Boolean;
begin
  Result := (GetModuleHandle('uxtheme.dll') <> 0) // FThemesAvailable
    and (IsAppThemed and IsThemeActive) // FUseThemes
    and (GetFileVersion('comctl32.dll') >= {ComCtlVersionIE6}$00060000); // FNewComCtrls
end;

Bernhard Geyer 5. Dez 2017 12:27

AW: abfragen, ob XPman eingebunden ist
 
Zitat:

Zitat von MacGuyver (Beitrag 1387960)
Danke für die Antworten.

IsAppThemed gibt mir immer True zurück, auch wenn XPman nicht eingebunden ist. Uwes Lösung funktioniert.

Bei dir steht noch TurboDelphi als verwendet Version. Dort gab es das doch noch nicht.
Mit neuen Delphis ist das natürlich die zu verwendente Lösung.

MacGuyver 5. Dez 2017 12:58

AW: abfragen, ob XPman eingebunden ist
 
Bei mir ist die Funktion <IsAppThemed> in der Unit <UxTheme> deklariert. Die Unit ist bei Turbo-Delphi dabei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz