Ich weiß, dass es möglich ist, benutzerdefinierte Stile für Komponenten zu deaktivieren, aber wie kann ich Stile für nur eine Komponente Klasse aktivieren? Lassen Sie zum Beispiel das gesamte Formular und alle darin enthaltenen Komponenten ohne Häute und task nur TButton. Wie auf diesem Bild.Anreden nur einer VCL-Komponente in Delphi
Antwort
Die meisten der VCL intern steuert verwendet die StyleServices
globale Funktion die Methoden zu erhalten, die Kontrolle zu zeichnen. Wenn Sie also die Vcl-Styles nicht verwenden, gibt StyleServices
eine Instanz an die Windows-API-Funktionen zurück, um thematische Steuerelemente (UxTheme-APIs) zu zeichnen. weil es keine Möglichkeit gibt, die Vcl-Stile zu skins (nur für ein einzelnes Klassensteuerelement) (zumindest das, was Sie das Steuerelement selbst zeichnen).
Also die einzige Alternative ist eine Vcl Styles anwenden und dann für alle Steuerelemente deaktivieren mit Ausnahme der einen Art, die Sie suchen.
Sie können so etwas wie dieses
procedure DisableVclStyles(Control : TControl;const ClassToIgnore:string);
var
i : Integer;
begin
if Control=nil then
Exit;
if not Control.ClassNameIs(ClassToIgnore) then
Control.StyleElements:=[];
if Control is TWinControl then
for i := 0 to TWinControl(Control).ControlCount-1 do
DisableVclStyles(TWinControl(Control).Controls[i], ClassToIgnore);
end;
Überprüfen Sie dieses Formular mit einem Vcl Stil
Und jetzt, nachdem der Aufruf der obigen Methode verwenden
DisableVclStyles(Self,'TButton');
Hinweis: Um die StyleElements Eigenschaft mit o Deaktivieren Sie die vcl Arten zu ermöglichen, nicht mit einigen Komponenten wie (TStringGrid, TBitBtn, TSpeedButton usw.) arbeiten
Ich versuche dies in XE2 und 'TControl' hat keine Eigenschaft' StyleElements' –
Nevermind Ich habe gerade eine andere Antwort von Ihnen gefunden: http://stackoverflow.com/questions/16538890/how-to-color-the -background-of-tcombobox-mit-vcl-styles-enabled –
Was passiert, wenn meine Komponente in einem DataModule erstellt wird? , wenn ich "DisableVclStyles (Self, 'TButton');" im DataModule die IDE gibt mir diesen Fehler zurück: Inkompatible Typen: 'TControl' und 'TDMRotinas' –
- 1. ExtJS: Anreden einer Zeilenspalte in einem Rasterfeld
- 2. Anreden eines benutzerdefinierten Elements in Polymer
- 3. Anreden des unbestimmten Status eines WPF-Kontrollkästchens
- 4. Zugriffsverletzung in einer delphi Klasse
- 5. Herunterladen einer Datei in Delphi
- 6. Soziale Netzwerke in einer Delphi win32-Anwendung
- 7. "Delphi Fundamentals" in Delphi 2009
- 8. Anreden eines Tabellenlayouts mit fester und fester Breite Spalten + Colspan
- 9. Delphi TList in Multithreading
- 10. Ersetzen einer Komponente Klasse in Delphi
- 11. Anreden eines WPF-Layout-Raster-Hintergrunds (jeder Zelle, Zeile, Spalte)
- 12. GDI Zeilenabstand in Delphi?
- 13. Namespaces in Delphi XE2
- 14. Überprüfen, ob Ressource in einer anderen Anwendung in Delphi existiert
- 15. Namespaces in Delphi
- 16. HMAC-SHA256 in Delphi
- 17. Messcodeabdeckung in Delphi
- 18. Delphi - Formular in Form
- 19. Erstellen einer gif animierten Datei in Delphi 2009?
- 20. Delphi .dpr und .dproj - Folgen einer Nichtübereinstimmung
- 21. FindClose in Delphi
- 22. Operator Überladung in Delphi
- 23. Bedingte Kompilierung basierend auf einer Compiler-Direktive in Delphi 2009
- 24. Schriftart Glättung in Delphi
- 25. Vista Spracherkennung in Delphi
- 26. Delphi XE4, wParam für TControl.Perform() akzeptiert nur unsigned int?
- 27. Delphi-Benachrichtigung beim Aktualisieren einer Datei
- 28. Mit einer Java-Klasse aus Delphi
- 29. Wert einer globalen Variablen zugewiesen wird (Delphi)
- 30. Delphi: Legit Status einer kompilierten App?
wenn Sie nur gestylt Schaltfläche müssen - versuchen gestylt zu finden Button - 'TButton' Nachkomme Komponente, die nicht wie üblich aussieht' TButton'. Das Hinzufügen von VCL-Styles-Funktionen zum Projekt und das anschließende Deaktivieren für ein ganzes Projekt, mit Ausnahme von TButton, ist keine gute Möglichkeit, nur eine Schaltfläche im Projekt zu überdecken. – teran
Es sieht einfach komisch aus, in Delphi Styling-Funktionalität zu haben und nicht in der Lage zu sein, es ohne Anwendung für die ganze Anwendung zu verwenden. – Zelenov
@Zelenov Ich finde es nicht seltsam - es wurde für diesen Zweck entwickelt. Solange Sie ein Design anwenden, wird davon ausgegangen, dass Sie die gesamte Anwendung häuten. Persönlich finde ich es seltsam, diese Stile zu verwenden, um nur bestimmte Steuerelemente zu skinsieren - angesichts des Mechanismus, wie es funktioniert. Für Ihren Zweck würde ich meine eigene benutzerdefinierte Schaltflächensteuerung erstellen, die eher trivial ist. –