// 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!
|