Theme-Support für VB
 Info  
Von : Wolfgang Kluge
 Zusatz  
Printfreundliche Ansicht
 
 Theme-Support für einzelne Elemente
 Manifest File Schema
in der MSDN
Ich werde oft gefragt, wie man es denn hinbekommt, dass die Elemente auf einer VB-Form (und nicht nur die Form selbst) im XP-Look & Feel erscheinen.
Nun, nichts leichter als das, hatte ich mir gedacht, aber falsch gedacht ;)

Alle Standardelemente wie Buttons, TextBoxen usw. sind nun wirklich nicht das Problem. Dafür brauchts lediglich den Verweis zu den CommonControls und eine Manifest-Datei, die den VB.Net-Erkundern vielleicht schon bekannt ist.
Eine Manifest-Datei ist (trotz ungewöhnlichem Namen*g*) nichts weiter als eine XML-Datei (Schema siehe Zusatz), die auch nichts weiter tut, als den Inhalt eines Assemblies(auch dieser Begriff aus .Net) zu Beschreiben. Ein Assembly wiederum ist eine Baugruppe oder Einheit(und bei VB6 ist diese Einheit eben die fertige .exe)
Das ein solches Manifest durchaus auch mal etwas größer und komplexer werden kann, ist gar keine Frage, allerdings soll uns der Inhalt jetzt gerade nicht so beschäftigen. Für unseren Zweck reicht folgende, von Microsoft vorgestellte Datei aus.

 Manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="x86"
    name="YourCompanyName.YourDivision.YourApp"
    type="win32"
  />
  <description>Your app description here</description>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="X86"
        publicKeyToken="6595b64144ccf1df"
        language="*"
      />
    </dependentAssembly>
  </dependency>
</assembly>
Anzupassen sind die fettgeschriebenen Teile der Datei.
Diese Datei müsst Ihr nun im Anwendungsverzeichnis mit dem Dateinamen YourApp.exe.manifest abspeichern(es gibt auch eine Möglichkeit ohne externe Datei..), wobei "YourApp.exe" natürlich durch den richtigen Dateinamen zu ersetzen ist.

Ist dies getan, und Ihr startet die exe (Wie es auch in der IDE schon richtig erscheint, beschreibe ich weiter unten), dann tuts auch schon.


      

Problem 1:
Das einzigste Steuerelement(bei dem ich es weiß), welches nicht wie vorgeschrieben tut, ist der OptionButton. Dieser erscheint Tiefschwarz, sobald er innerhalb eines Frames plaziert wurde. Abstellen kann man das leider nicht, nur umgehen.

Problem 2:
Ein weiteres Problem ergibt sich unverständlicherweise mit den CommonControls. Ob das nun nur auf meinem Entwicklungsrechner so ist, oder ein genereller Bug, kann ich nicht sagen(vielleicht klärt mich ja mal jemand auf). Auf jedenfall ist das Problem existent.
Diese werden nur teilweise im neuen Stil gezeichnet, falls man die CommonControls 6(SP4) benutzt. Mit den CommonControls 5(SP2) funktionierts wunderbar.
Eigentlich ist das ein Wiederspruch, denn im Manifest verlangen wir Version 6, aber irgendwie ist wohl immer alles anders als man denkt. Mit den CommonControls 6 (SP5) funktionierts auch wieder...
Naja,.. wenn man dran denkt, dann ists ja kein großes Problem.

Problem 3:
Was passiert, wenn man die CommonControls gar nicht braucht...
Nunja, dann gehts nicht. Das Programm lässt sich einfach nicht starten :(
Abhilfe schafft in einem solchen Fall der Aufruf InitCommonControls in der Prozedur Form_Initialize der Start-Form oder in der Prozedur Sub Main.

 Deklaration:
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()


Private Sub Form_Initialize()
  InitCommonControls
End Sub


Visual Styles in der IDE
Nun haben wir eine Ausführbare Datei, die anders angezeigt wird, als man in der Entwicklungsumgebung gesehen hat.
Wie man nun schon in der Entwicklungsumgebung an die Visual Styles(Themes ist eigentlich der falsche Begriff..aber schneller geschrieben*g*) kommt, ist fast schon logisch.
Man kopiere die oben genannte Datei ins VB98-Verzeichnis und benenne sie um in "VB6.exe.manifest".
Aber wie immer, auch hier ein Nachteil. Die Farbauswahl im Eigenschaftenfenster funktioniert nicht mehr 100%ig(Palette fehlt). Mehr ist mir noch nicht aufgefallen...
Das funktioniert auch wunderbar mit C++ 6 (im Bin-Verzeichnis MSDEV.exe.manifest).


Auch Homesite, Photoshop und viele andere Programme lassen sich mit einem Manifest zum XP-Stil überreden..Einzigste Vorraussetzung ist eigentlich das vorhandensein der CommonControls..