Forms - Anwendungen im WindowsXP-Stil



  • Hallo,
    Mit dem neuen Windows XP hat sich der Darstellungs Stil von Fenstern, Buttons usw. auch ein wenig geändert. Meine Anwendungen haben allerdings noch den 'alten' Grafik Stil. Wie kann ich das ändern? Habe in der Zeitschrift "Der Entwickler" einen Artikel dazu gesehen. Allerdings nur für Delphi. Dort steht das man die ComCtl32.dll Version 6 als Ressource ins Programm einbinden muss damit dies funktioniert. Beim C++ Builder muss das doch auch Funktionieren, aber wie? Ist leider noch es etwas zu schwer für mich.

    Vielen Dank im voraus.
    Thomas

    [ Dieser Beitrag wurde am 11.05.2002 um 22:40 Uhr von Jansen editiert. ]



  • Naja, dann versuch doch mal, diese DLL mit einzubinden. Vielleicht klappt's ja...



  • 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 Jansen

    name="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:

    1. Stand mal im WinAPI-Forum. Da die Suchfunktion nicht geht konnte ich aber nicht dorthin verweisen. 😉
    2. Halt Standard-XML nehme ich an, so wie zB. auch der BCB(5+) XML für seine Projektdateien benutzt.
    3. Ä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örn

    PS: 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.


Anmelden zum Antworten