// Getestet mit D4 unter XP

// Wenn Ihr Programm unter XP läuft und Buttons auch im XP-Style dargestellt
// werden sollen, erstellen Sie zunächst eine Textdatei mit dem Inhalt:

<?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="XPSTYLE"
    type="win32"
/>
<description>XPSTYLE</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

// (Die Farben sind hier nur der Übersicht halber so gewählt worden)
// Diese Datei wird unter dem Namen
XPSTYLE.XML abgespeichert. Dann erstellen
// Sie eine zweite Textdatei, die folgende Zeile enthält:

1 24 XPSTYLE.XML

// Diese Datei wird unter
XPSTYLE.RC gespeichert und anschließend mit dem
// Programm
BRCC32.EXE (..\Borland\Delphi\Bin) übersetzt (als Parameter
//
übergeben). Es entsteht die Datei XPSTYLE.RES, welche in Ihr Projekt-
// verzeichnis kopiert wird. Diese Ressource muß in Ihr Programm
// eingebunden werden:

{$R XPSTYLE.RES}

// Allerdings funktioniert damit noch nicht alles. Wenn Sie TListView einsetzen,
// müssen Sie noch die Unit
CommCtrl in die Uses-Klausel aufnehmen und beim Start
// des Programms
InitCommonControls ausführen. Doch nicht genug; wenn Sie eine
//
TStatusBar einsetzen, müssen Sie auch noch SimplePanels und Resize bearbeiten.
 

implementation 
 
{$R *.DFM} 
{$R XPSTYLE.RES} 
 
uses 
  CommCtrl; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  StatusBar1.SimplePanel := StatusBar1.Panels.count = 0; 
end; 
 
procedure TForm1.StatusBar1Resize(Sender: TObject); 
begin 
  if StatusBar1.HandleAllocated then 
    InvalidateRect(StatusBar1.Handle, nil, True); 
end; 
 
initialization 
  InitCommonControls; 
end.

// Wenn Sie jetzt die Komponente TListView mit ViewStyle = vsReport einsetzen,
// und der Mauspfeil berührt diese, stürzt das Programm ab. Um das zu beheben,
// suchen Sie alle Dateien mit dem Namen
CommCtrl.dcu (meistens finden Sie zwei
// davon). Diese Dateien werden umbenannt oder gelöscht. Dann binden Sie die
// Datei
CommCtrl.pas (..\Borland\Delphi\Source\Vcl) in Ihr Projekt ein
//
(Shift+F11), und suchen in dieser Datei die Zeilen:

if FImageIndex <> -1 then 
  fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES; 

// Diese ändern Sie in:
if FImageIndex <> -1 then 
  fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES 
else 
  mask := mask and not LVCF_IMAGE; 


// Danach kompilieren Sie das Programm komplett neu
(Strg+F9). Jetzt
// entfernen Sie die
CommCtrl.pas wieder aus Ihrem Projekt (Projekt/Aus dem
// Projekt entfernen...). Nun müssen Sie nur noch die neu enstandene Datei
//
CommCtrl.dcu (..\Borland\Delphi\Source\Vcl) in das Lib-Verzeichnis von Delphi
// verschieben
(..\Borland\Delphi\Lib). Zum Schluß wird Ihr Projekt nochmals
// kompiliert.
// Probleme bleiben aber immer noch. Sie können zur Laufzeit keine Änderung an
//
ColumnClick vornehmen, ansonsten gibt es doch einen Crash, und Comboboxen können
// bei Umstellung der Anzeige ihre Items verlieren, wenn diese im Objektinspektor
// festgelegt wurden. Man sollte also Combobox-Items immer zur Laufzeit festlegen.
 

// Je nach Version und/oder Einspielen diverser Servicepacks kann es sein,
// dass Sie nicht CommCtrl sondern ComCtrls bearbeiten müssen!


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke