system theme

Für allgemeine Fragen zur Programmierung mit PureBasic.
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

system theme

Beitrag 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..
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: system theme

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

Re: system theme

Beitrag 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 :-)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: system theme

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: system theme

Beitrag 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.
Antworten