Seite 1 von 1

system theme

Verfasst: 22.05.2019 19:57
von 5mware
hi leute, ich hätte da eine frage:

beim erstellen eigener Steuerelemente ist es mir wichtig, dass die systemspezifische Design bei Möglichkeit genau so übernommen wird. Zum Beispiel für Buttons, Scrollbars etc.

unter Windows, im klassischem Stil, kann man das ja wunderbar per Code nachahmen und die Systemfarben direkt von API abholen. Da bietet PureBasic ja genug.

Wie sieht es aber mit dem Design aus mit Windows XP, Vista, 7 aus? Ab Windows 8 denke ich, dass die Systemfarben wieder weitesgehend reichen, da der Stil halt flach und einfach nachahmbar ist. Aber bei XP, Vista und 7 müsste man ja irgendwie an die Theme-Abbilder über die API rankommen. Ich hatte mal sowas irgendwo im Forum mal früher gesehen, aber finde den Post einfach nicht mehr.

Dann müsste man das auch für den OS-X irgendwie machen. Für die älteren Versionen < Yosemite gab es irgendwie eine Resource-Datei. Die finde ich nicht mehr. Hat jemand eine Idee (snow leopard und mountain lion und virueller maschine)? Ab Yosemite könnten wieder denke ich Systemfarben ausreichen, oder?

Unter Linux wäre da ein großer Wunsch, zumindest irgendwie die GNOME Theme-Kram durchzuparsen, aber da kann ich auch mit einer vordefinierten Stil leben. Der Aufwand ist zu groß. Es sei denn, jemand hat eine gute Idee, um es zu meistern?

Mich würde es auch ehrlich gesagt interessieren, wie Fred und Co. das Thema in PureBasic technisch gelöst haben..

Re: system theme

Verfasst: 22.05.2019 20:26
von RSBasic
Ich rede hier nur über Windows. Mit anderen Betriebssystemen kenne ich mich nicht so gut aus.
5mware hat geschrieben:beim erstellen eigener Steuerelemente ist es mir wichtig, dass die systemspezifische Design bei Möglichkeit genau so übernommen wird. Zum Beispiel für Buttons, Scrollbars etc.
Es besteht die Möglichkeit, mit Hilfe der DLL-Dateien themeui.dll, Uxtheme.dll die Theme-Grafiken zu laden und manuell zu setzen.
Außerdem kannst du einzelne Systemfarben mit folgender Funktion ermitteln: GetSysColor_()
Beispiel: GetSysColor_(#COLOR_3DFACE) für den Fensterhintergrund.
Weitere Systemfarben zum Ermitteln findest du hier: https://docs.microsoft.com/en-us/window ... etsyscolor
OpenThemeData_() ist auch eine nützliche Funktion. Einfach nach dieser Funktion im Forum suchen. Dann findest du ein paar Beispiele.
5mware hat geschrieben:Mich würde es auch ehrlich gesagt interessieren, wie Fred und Co. das Thema in PureBasic technisch gelöst haben..
Gar nicht. Das übernimmt das Betriebssystem. Windows stellt dem Programmierer und der Programmiersprache die API-Schnittstelle (WinAPI) bereit. Das sind u.a. Fenster (OpenWindow) und Controls (z.B. ButtonGadget).
PureBasic ist größtenteils (nicht alles) nur eine Art Wrapper.

Re: system theme

Verfasst: 22.05.2019 23:43
von 5mware
hi RSBasic,

danke für deinen Tipp
Gar nicht. Das übernimmt das Betriebssystem. Windows stellt dem Programmierer und der Programmiersprache die API-Schnittstelle (WinAPI) bereit. Das sind u.a. Fenster (OpenWindow) und Controls (z.B. ButtonGadget).
PureBasic ist größtenteils (nicht alles) nur eine Art Wrapper.
hatte ich schon befürchtet, aber gehoft, dass es vielleicht nicht durchgehend so wäre, weil die gadgets teilweise sich anders verhalten, als sie sollten. da habe ich angenommen, das diese selbst erstellte lösungen sind. zum beispiel der scrollbargadget. naja, was solls :-)

Re: system theme

Verfasst: 23.05.2019 09:02
von RSBasic
5mware hat geschrieben:da habe ich angenommen, das diese selbst erstellte lösungen sind. zum beispiel der scrollbargadget. naja, was solls :-)
ScrollBarGadget() ist auch nur ein WinAPI-Control und wurde nicht neu erfunden. So sieht es in WinAPI aus:

Code: Alles auswählen

EnableExplicit

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  CreateWindowEx_(0, "Scrollbar", "", #WS_CHILD | #WS_VISIBLE, 10, 10, 480, 20, WindowID(0), 0, 0, 0)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Im PB-Blog gibt es eine schöne Liste der verwendeten API-Controls je Betriebssystem: https://www.purebasic.fr/blog/?p=336

Re: system theme

Verfasst: 23.05.2019 13:19
von Shardik
RSBasic hat geschrieben:Im PB-Blog gibt es eine schöne Liste der verwendeten API-Controls je Betriebssystem: https://www.purebasic.fr/blog/?p=336
Leider ist diese Liste für MacOS nicht mehr aktuell, weil in PureBasic 5.00 die in der Liste aufgeführten Controls des Carbon-Frameworks durch Controls vom Cocoa-Framework ersetzt wurden. Ich habe daher in diesem Posting die Tabelle von freak um eine Spalte mit den zu Grunde liegenden Cocoa Controls ergänzt. Leider ist der Originalbeitrag von freak nie durch meine modifizierte Tabelle ersetzt, ergänzt oder auf den neuesten Stand gebracht worden.