![]() |
XP-Style in DLL
Hallo DP'ler,
mein Problem ist folgendes: Ein fremdes Programm lädt meine DLL, welche dann eine VCL-Form anzeigt. Das Problem dabei ist, dass dieses fremde Programm kein XP-Style-Manifest enthält, und somit meine Form auch ohne XP-Style angezeigt wird. Dies ist aber nicht in meinem Sinne, und daher suche ich nach einer Möglichkeit dies zu ändern, zumindest für meine Form. Da ein XP-Style-Manifest in meiner DLL relativ sinnlos ist, und InitCommonControls(Ex) den Trick auch nicht fertigbringt, bin ich nun relativ am Ende mit meinem Latein ... Ich hoffe, ihr könnt mir helfen, ciao & thx, Philipp |
Re: XP-Style in DLL
Na hat keiner ne Idee? *push*
|
Re: XP-Style in DLL
Da die DLL ja im Kontext des Programms läuft, das keine XP-Themes unterstützt, bekommst du auch keine XP Styles in deine DLL. Jedoch kannst du ja eine *.manifest Datei erstellen, die den Namen der Hostanwendung trägt, und schon sollte es gehen.
(Der Inhalt einer solche Datei sollte ja bekannt sein :gruebel: ) |
Re: XP-Style in DLL
Was hat das XP-Style mit einer DLL zu tun?
Eine DLL ist im Prinzip nur eine externe Funktionssammlung, und wenn du da nicht eine Funktion aufrusfst, die das Style deines Programmes ändert, sollte es das keine Probleme geben. :? Grüße Faux |
Re: XP-Style in DLL
Zitat:
Und in meine DLL's kann ich ja auch VCL Forms klatschen, ich weiss nicht wie es bei dir ist :wink: . |
Re: XP-Style in DLL
Zitat:
Außerdem musst du trotzdem alles in Funktionen packen, wenn du eine Form in eine DLL geben willst. Klassen kannst du da IMHO nicht verwenden. Grüße Faux |
Re: XP-Style in DLL
Zitat:
Programm lädt DLL -> Programm ruft Funktion aus der Dll auf -> DLL zeigt VCL-Form an -> ... VCL Form hat *kein* XP-Style ... -> Problem Das mit dem Manifest wäre soweit kein problem, doch leider ist das "fremde" Programm dass meine dll lädt rundll32.exe, und dieses liegt bekanntlicherweise im system-verzeichnis, auf welches leider nicht jeder zugriffsrechte hat. Und mein Programm sollte möglichst nicht nur mit Admin-Rechten laufen ... Aber es wird doch wohl ne andere möglichkeit geben, oder? Hoffe ich zumindest ... ideen? ciao, Philipp |
Re: XP-Style in DLL
Zitat:
DLL instantiizert Objekt das ein Interface implementiert. Anwendung die das Objekt benutzen möchte, verwendet das Interface direkt (überschreibt die Referenz natürlich mit der aus der DLL). So funktionniert übrigens auch DirectX: dem Porgrammierer stehen nur Interfaces zur Verfügung die von den DX DLL's implementiert und instatiiert werden. @c113plpbr: Hm, da weiss ich leider auch nicht mehr weiter... |
Re: XP-Style in DLL
@md_mse:
Schon klar, aber ich wollte ja nur sagen, dass du in DLLs nur Funktionen unterbringenkannst. Du hast dann gesagt, dass man auch Forms reinpacken kann, und ich dann wiederum, dass auch diese in Funktionen sind. ;) Ist die DLL von dir, also hast du den Code? md_mse hat bereits vorgeschlagen, dass du mal mit manifest probieren kannst. ;) |
Re: XP-Style in DLL
@faux: Ja gut, sind das Programme nicht auch? :thumb:
@c113plpbr: Hast du eigentlich mal versucht diese manifest XML in die Ressourcen hinzuzufügen? |
Re: XP-Style in DLL
Zitat:
Zitat:
Zitat:
Zitat:
ciao, Philipp |
Re: XP-Style in DLL
Zitat:
Ich hab mal Gegooglet und das hier gefunden: ![]() Grüße Faux |
Re: XP-Style in DLL
Zitat:
Zitat:
Zitat:
Zitat:
ciao, Philipp |
Re: XP-Style in DLL
Zitat:
Und was ist mit der Manifest? |
Re: XP-Style in DLL
Zitat:
Zitat:
Aber es muss doch da irgendeine "Software-Lösung" geben, irgendeinen API-Befehl, oder was auch immer ... ciao, Philipp |
Re: XP-Style in DLL
Hab da vielleicht was gefunden...
Guck dir mal die UxTheme.pas an, die bei Delphi mit dabei sein sollte... Zumindest ab 2005 (?). An sonsten findest du sie auf ![]() Da gibt es interessante Methoden, vielleicht bringts ja was. |
Re: XP-Style in DLL
Zitat:
Delphi-Quellcode:
passiert garnix ... ich hab schon ziemlich viel rumprobiert, aber ich werd daraus einfach ned schlau ... kennt sich damit jemand aus?
SetWindowTheme(btn.Handle, nil, 'button');
ciao, Philipp |
Re: XP-Style in DLL
Vergiss aber nicht, das das XML File in den Ressourcen sein muss!
|
Re: XP-Style in DLL
Ich hab' gerade mal ein bisschen nachgeforscht und versucht, UxTheme.IsAppThemed und UxTheme.IsThemeActive zu überschreiben. Das Problem ist, dass der Aufruf (Themes.pas):
Delphi-Quellcode:
je nach vorhandenem Manifest eine andere Version zurückliefert (ohne: 5.irgendwas, mit: 6.irgendwas) und danach entschieden wird, ob theming benutzt werden kann.
FNewComCtrls := GetFileVersion(comctl32) >= ComCtlVersionIE6;
Auf meinem Rechner (MCE 2005): C:\Windows\system32\comctl32.dll: 5.82.2900.2649 C:\Windows\WinSxS\x86_Microsoft.Windows.Common-Controls_...\comctl32.dll: 6.0.2600.0, 6.0.2900.2180 und 6.0.2900.2649 Ich hab' noch keine Möglichkeit gefunden das zu umgehen... |
Re: XP-Style in DLL
Hallo,
Zitat:
Gruß xaromz |
Re: XP-Style in DLL
Zitat:
|
Re: XP-Style in DLL
Hallo,
Zitat:
Gruß xaromz |
Re: XP-Style in DLL
Liste der Anhänge anzeigen (Anzahl: 1)
... *lach* :lol: :mrgreen: ...
oh man ... lang hats gedauert, aber ihr habt mich auf ne idee gebracht ... und ich hab mich mal ein wenig besser über manifeste informiert ... zumindest hab ichs versucht, bis ich dann auf diese seite gestoßen bin: ![]() klang ganz interessant, habs mir durchgelesen, und fast diesen einen kleinen zusatz überlesen: Zitat:
Im Anhang hab ich euch mal das neue Resourcefile für dll's angehängt ... ^^, einfach per {$R WindowsXP_DLL.res} einbinden. ciao und DANKE AN ALLE, Philipp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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