Modern Theme Style
Modern Theme Style Moderne Themes
Über Modern Theme Style lässt sich die Darstellung der graphischen Benutzerschnittstelle anpassen. Farben, Farbverläufe, Schriften und Metriken von Oberflächen-Objekten lassen sich individuell konfigurieren, so dass ein Design nach eigenen Vorstellungen erstellt werden kann. Das System bietet darüber hinaus auch eine einfache Möglichkeit, die Darstellung an das Erscheinungsbild von Windows 10 anzupassen.
Themes
In der bisherigen Verfahrensweise wird die Darstellung von Oberflächen-Objekten über Eigenschaften gelöst. Die Schriftfarbe einer Schaltfläche etwa, kann über die Eigenschaft ColFg beeinflusst werden. Wenn eine einheitliche Farbgebung erreicht werden soll, müssen die Eigenschaften aller betroffenen Objekte entsprechend verändert werden. Ein weiterer Nachteil ist, dass für viele Objekte keine Darstellung erreicht werden kann, die unter allen Betriebssystemen identisch ist. Schaltflächen unter Windows 7 haben z. B. eine anderes Aussehen als unter Windows 10.
Modern Theme Style hingegen arbeitet auf der Basis von Themes. Ein Theme stellt das Design für die Darstellung der graphischen Benutzeroberfläche aller unterstützten Oberflächenobjekte bereit. Um die Darstellung einer Anwendung zu ändern reicht somit die Aktivierung des gewünschten Themes.
Theme-Objekt
Ein Theme wird unter CONZEPT 16 durch das Theme-Objekt repräsentiert. Hierbei handelt es sich um ein Storage-Objekt, dass analog zu Dialogen, PrintForms, etc. anhand eines Namens in der Datenbank gespeichert und von dort wieder geladen werden kann.
CONZEPT 16 stellt darüber hinaus vorgefertige Themes bereit:
_OfficeBlue: - Theme, das sich am Aussehen von Microsoft Office 2016 (blaue Farbgebung) orientiert._OfficeDark: - Theme, das sich am Aussehen von Microsoft Office 2016 (dunkle Farbgebung) orientiert._WindowsColor: - Theme, das die Systemfarben von Windows verwendet. Dies ist insbesondere dann von Vorteil, wenn unter Windows die Einstellung "Hoher Kontrast" in der Systemsteuerung aktiviert ist. Hier können Anwender mit eingeschränkter Sehfähigkeit, die Farbgebung unter Windows auf ihre Bedürfnisse einstellen.
Vordefinierte Themes beginnen immer mit einem Unterstrich (_) vor dem eigentlichen Name und werden nicht in der Datenbank abgelegt.
Erstellung eines Theme
Ein Theme kann sowohl im Theme-Editor als auch prozedural über den Befehl WinThemeOpen () erstellt werden und besteht aus einer Liste von Theme-Elementen. Die Liste umfasst alle über Modern Theme Style beeinflussbaren Oberflächenobjekte. Über entsprechende Eigenschaften lässt sich das Design eines Objekttyps anpassen.
Beispiel
sub CreateMyTheme()
local
{
tTheme : handle;
}
{
// Theme erstellen.
tTheme # WinThemeOpen('_OfficeBlue');
// Farbschema für Schaltflächen ändern.
tTheme->wpCustom # 'My Theme Description';
tTheme->wpThemeColFillNormal(_WinTypeButton) # _WinColLightBlue;
tTheme->wpThemeColTextNormal(_WinTypeButton) # _WinColWhite;
tTheme->wpThemeColFillHighlight(_WinTypeButton) # _WinColLightRed;
tTheme->wpThemeColTextHighlight(_WinTypeButton) # _WinColWhite;
tTheme->wpThemeColFillPressed(_WinTypeButton) # _WinColBlue;
tTheme->wpThemeColTextPressed(_WinTypeButton) # _WinColWhite;
// Theme in der Datenbank speichern und schließen.
tTheme->WinThemeClose(_WinThemeCloseSave, 'MyBlueTheme');
}
Das Beispiel erstellt ausgehend vom vordefinierten Theme _OfficeBlue ein neues Theme. Hierzu wird der Befehl WinThemeOpen () aufgerufen. Der ermittelte Deskriptor bezeichnet das neu erstellte Theme -Objekt. Anschließend werden einige Farben für Button-Objekte (_WinTypeButton) gesetzt. Zum Schluss wird das Theme unter dem Name MyBlueTheme in der Datenbank gespeichert.
Unterstützte Objekte
Die folgende Liste zeigt alle Objekte, die aktuell Modern Theme Style unterstützen und im Theme-Editor bzw. prozedural angepasst werden können.
AnimationAppFrameAxisBigIntEditButtonCheckboxCodeEditColorButtonColorEditColumnCheckboxColumnRadiobuttonDataListDataListPopupDataListPopupColumnDateEditDecimalEditDividerDocViewEditFloatEditFontNameEditFontSizeEditFrameGanttGraphGroupBoxGroupSplitGroupTileHyperLinkIconIntEditLabelMdiFrameMenuButtonMenuItemMetaPictureNotebookNotebookPagePicturePopupColorPopupListProgressPrtPreviewDlgRadiobuttonRecListRecListPopupRecListPopupColumnRtfEditScrollboxSliderStatusbarStatusbar-ButtonStoListStoListPopupStoListPopupColumnTextEditTimeEditToolbarToolbar-ButtonToolbarDockToolbarMenuTreeNodeTreeViewWebNavigatorWindowbar
Theme-Aktivierung
Aktiviert wird der Modern Theme Style, indem die Eigenschaft StyleTheme auf _WinStyleThemeModern gesetzt wird. Diese Einstellung bezieht alle Unterobjekte, deren Eigenschaft StyleTheme auf _WinStyleThemeParent gesetzt ist, mit ein. Der Name für das zu verwendende Theme wird über die Eigenschaft ThemeName spezifiziert. Ist diese Eigenschaft beim Objekt nicht vorhanden, wird die Eigenschaft ThemeName des _App-Objektes herangezogen.
Anwendungsobjekt
Die Eigenschaft ThemeName ist im _App-Objekt enthalten und wirkt sich auf folgende Objekte aus:
- Objekte ohne
ThemeName-Eigenschaft Diese Objekte verwenden das in_Appeingetragene Theme, wenn die EigenschaftStyleThemedes Objektes auf_WinStyleThemeModerngesetzt ist. - Objekte mit
ThemeName-Eigenschaft Diese Objekte verwenden das in_Appeingetragene Theme, wenn die EigenschaftStyleThemedes Objektes auf_WinStyleThemeModerngesetzt ist und die EigenschaftThemeNamebeim Objekt leer ist.
Die Eigenschaft StyleTheme kann beim _App -Objekt nicht auf _WinStyleThemeModern gesetzt werden.
Frame-Aktivierung
Zur Aktivierung des Modern Theme Style für einen bestimmten Frame wird der Deskriptor des gewünschten Frame-Objektes verwendet.
$Frame->wpThemeName # 'MyBlueTheme';
$Frame->wpStyleTheme # _WinStyleThemeModern;
Aktivierung für Container-Objekte
Container-Objekte (wie GroupBox , NotebookPage , etc.) verfügen über die Eigenschaft ThemeName, so dass pro Container ein separates Theme aktiviert werden kann.
Ausschluss untergeordneter Objekte
Standardmäßig wirkt sich das Setzen der Eigenschaft StyleTheme auch auf untergeordnete Objekte des angegebenen Oberflächenobjektes aus, da StyleTheme bei allen Objekten auf _WinStyleThemeParent initialisiert ist. Um einzelne Objekte auszunehmen genügt es den Wert der Eigenschaft entsprechend zu setzen.
$Button->wpStyleTheme # _WinStyleThemeSystem;
Hierdurch wird die systemabhängie Darstellung für die Schaltfläche aktiviert (und somit Modern Theme Style deaktiviert).
Layer-Modus
Die Aktivierung eines Theme kann je nach Umfang der betroffenen Objekte dazu führen, dass ein sichtbarer Aufbau der Objekte am Bildschirm erfolgt. Durch den Befehl WinLayer () kann das verhindert werden.
// Während des Theme-Wechsels, Hinweis für 1 Sekunde aktivieren.
WinLayer(_WinLayerStart, $Frame, 1000, 'Theme wird erstellt', _WinLayerDarken);
// Theme wechseln.
$Frame->wpThemeName # 'MyBlueTheme';
$Frame->wpStyleTheme # _WinStyleThemeModern;
// Layer-Modus vor Ablauf der Zeitspanne beenden.
WinLayer(_WinLayerEnd);
Menü-Darstellung bei aktiviertem Modern Theme Style
Wenn Modern Theme Style für ein Frame -Objekt aktiviert ist, kann systembedingt kein Hauptmenü (Eigenschaft MenuName) angezeigt werden. Als Ersatz bietet CONZEPT 16 das ToolbarMenu -Objekt an. Hierbei handelt es sich um ein spezielles Toolbar -Objekt, welches vollautomatisch das über MenuName gesetzte Menü emuliert.
Theme-Mixing / ThemeSets
Unter Umständen ist es notwendig ein Theme für einzelne Unterobjekte zu modifizieren, jedoch nicht für alle Objekte des gleichen Typs. Um in diesen Fällen nicht das Theme kopieren zu müssen, besteht die Möglichkeit ThemeSets mittels WinThemeSetOpen () oder des Theme-Editors anzulegen. Das ThemeSet enthält die gleichen Theme-Elemente und Eigenschaften, wie ein Theme , erlaubt jedoch abweichende Werte für einzelne Eigenschaften einzelner Objekte. Eigenschaften, die im ThemeSet nicht definiert sind, erben den Wert, den diese Eigenschaft im Theme besitzt. Ein Theme kann beliebig viele ThemeSets enthalten. Das jeweilige ThemeSet des Objekts wird über die Eigenschaft ThemeSetId in Verbindung mit den Eigenschaften StyleTheme und ThemeName ausgewählt.