Forms - Anwendungen im WindowsXP-Stil
-
Der einfachste Weg ist, eine Textdatei namens NameDesProgramms.exe.manifest im Programmverzeichnis anzulegen. Der Inhalt der Textdatei sieht aus wie folgt:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="Jansen.ist.der.Beste" processorArchitecture="x86" version="5.1.0.0" type="win32"/> <description>Windows Shell</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
Et voilá, beim nächsten Start kommt das Programm im XP-Gewand daher.
Anmerkung:
Die Manifest-Dateien wirkt sich nur auf Controls aus, die unverändert aus der WinAPI übernommen wurden. Für die VCL erweiterte Controls zeichnen sich in der Regel selbst und behalten deshalb ihr Aussehen bei (z.B. TGroupBox). Abhilfe schaffen da Komponenten von Drittanbietern, die speziell in Hinsicht auf XP erstellt wurden.
-
Muss ich dafür XP besitzen oder geht das auch mit Win98?
-
Nein, um die manifest-Datei zu erstellen brauchst du kein Windows XP. images/smiles/icon_wink.gif
Das Programm selbst wird natürlich nur unter XP im XP-Style angezeigt, unter den anderen Betriebs-
systemen wird die manifest-Datei ignoriert. Das wäre ja wohl auch zu einfach, oder nicht? images/smiles/icon_rolleyes.gif
-
1. Woher weißt du das alles?
2. Was ist eigentlich dieses XML?
3. "Zitat" von Jansenname="Jansen.ist.der.Beste"
*LOL*Ein wenig selbstverliebt, was?
-
Die Datei läd das Programm dann selbst oder was. Nur die Textdatei namens NameDesProgramms.exe.manifest dabeilegen?
-
WebFritzi:
- Stand mal im WinAPI-Forum. Da die Suchfunktion nicht geht konnte ich aber nicht dorthin verweisen.
- Halt Standard-XML nehme ich an, so wie zB. auch der BCB(5+) XML für seine Projektdateien benutzt.
- Ähm, wie ist das denn da reingeraten ...
Den name-String kann man frei wählen, nur drin stehen muss irgend etwas.
XP:
WindowsXP sieht bei jedem Start eines Programmes nach, ob eine entsprechende manifest-Datei vorliegt und wertet diese dann aus.
-
Funktioniert wunderbar. Vielen Dank nochmal.
Aber ist es möglich die Manifestdatei in die Compilierte exe mit einzubinden?. Die Datei immer dabei ist nicht das Gelbe vom Ei. Würde mir besser gefallen wenn das auch noch möglich wäre.Thomas
-
Nichts leichter als das.
- erstelle in einem beliebigen Verzeichnis eine neue Textdatei mit dem oben angeführten Inhalt
- benenne diese Datei zB. WindowsXP.manifest
- erstelle im selben Verzeichnis eine weitere Textdatei mit folgendem Inhalt:
1 24 "WindowsXP.manifest"
- benenne diese Datei zB. WindowsXP.rc
- füge die Datei WindowsXP.rc über das Projekt-Menü zu deinem Projekt hinzu
- kompiliere bzw. erzeuge das Programm
- starte das neu kompilierte Programm unter WindowsXP
- erfreue dich am XP-Style deines Programmes [img]images/smiles/icon_smile.gif[/img]
Alternativ bzw. in Zukunft kann man statt der RC-Datei natürlich auch die beim ersten Kompilieren
entstandene WindowsXP.res in seine Projekte einbinden. Welche sich selbstverständlich auch
separat, mit dem Kommandozeilen-Resourcecompiler brcc32.exe erstellen lässt.
-
Hallo an alle !
Ich habe die vorgeschlagene Vorgehensweise nicht ausprobiert, aber eine Datei gefunden, die man einfach in sein BCB Projekt mit einbezieht und die es dann ermöglicht, die entsprechende Anwendung unter XP im XP-Style anzuzeigen. Finden könnt Ihr die XPTheme.pas unter www.jrsoftware.org/misc.php . Einfach zum Projekt hinzufügen und die Anwendung sieht unter XP genauso aus, wie jede andere XP-Andwendung !
MfG
BjörnPS: Ich hab's auch unter Windows 2000 probiert, darin sieht die Anwendung aus, wie immer -> also Win 9x/2000 spezifisch !
-
Wobei festzuhalten bleibt, dass diese .pas-Datei auch nichts weiter macht, als die entsprechende
in dem Paket enthaltene Ressource in das Programm einzubinden. Na ja, wenn man unbedingt noch
eine zusätzliche Datei verwenden will ...Interessant sind allerdings die Informationen der beiliegenden Readme, die ich hier mal zitieren darf:
- If you use TListView in vsReport mode, you will need to make a change to your VCL sources, or else you'll get access violations. Copy ComCtrls.pas to your project's directory (or some other directory in your Search Path that has precedence over delphi\source\vcl) and change these two lines: if FImageIndex <> -1 then fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES; to: if FImageIndex <> -1 then fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES else mask := mask and not LVCF_IMAGE; - If you use TStatusBar, the size grip part may get corrupted when you resize the form at run-time. You can work around this by creating an OnResize event handler on the TStatusBar with this code: procedure TForm1.StatusBar1Resize(Sender: TObject); begin if StatusBar1.HandleAllocated then InvalidateRect(StatusBar1.Handle, nil, True); end; - For more information, see: http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/userex/overvie w/cookbook.asp
Was das Ändern der Sourcen angeht, Besitzer der (älteren) Standardversionen des BCB bleiben dabei
leider aussen vor, da dort der Sourcecode nur vorkompiliert mitgeliefert wird. Im BCB6 ist diese Änderung
bereits integriert.Die Probleme können übrigens auch bei Verwendung der externen manifest-Datei auftreten. Bei der
Benutzung dieses "Tricks" mit fremder, älterer Software ist also eine gewisse Vorsicht geboten.