GUI System (bitte ausführliche Diskussion)
GUI System (bitte ausführliche Diskussion)
Nach langer langer Recherche kam ich zu dem Punkt: es gibt keine kostenlose Skin DLL die im besten Fall *.msstyles der Anwendung zuweißt.
USkin scheint freeware zu sein, was aber laut angaben der seltsamen chinesischen Website die zur hälfte down ist doch nicht so wäre. Seis wie es sei, es funktioniert mit Windows7 nicht.
Eigenes GUI System
Leider fand ich bisher auch keine Hilfe dazu wie *.msstyles angewendet werden könnten, auch die UxTheme.dll scheint mit der SetWindowTheme_ Funktion nicht ohne weiteres etwas zu ändern. (abgesehn vom deaktivieren des Styles)
Lösung 1
Wie eben genannt eine eigene "AppFace", "SkinFeature", "USkin" Library und wie sie alle heißen zu schreiben. Die Frage ist nur: wo setzt man hierzu an?
Lösung 2
Ein grundlegenes eigenes Framework. Die Idee wäre durch ein Canvas und Bitmaps als Zeichenbuffer alle Steuerelemente mit einem Themen-freundlichen System zu rekonstruieren. Die Frage hierbei ist natürlich ob es denn performant wäre, denn ein "Container" der sich maximiert über das Fenster erstrecken würde wäre (z.B) ein 1024x768 Bitmap. Eine andere Struktur wäre es durch einzelne Fensterklassen zu konstruieren wodruch das einsetzen fremder Komponenten wie Scintilla problemlos möglich ist.
Diese 2.Lösung wäre zwar am auwendigsten, doch würde einige Vorteile bieten:
- Flackerfreie Dimensionierung
- Neue Komponenten
- Optionale Fade-/Animationseffekte
- Platformunabhängigkeit
- Volle Kontrolle und Anpassungsmöglichkeiten
Nachteile:
- Platzieren fremder Komponenten wie Scintilla ist fragwürdig
- Natürliche die Frage wie performant das wäre
USkin scheint freeware zu sein, was aber laut angaben der seltsamen chinesischen Website die zur hälfte down ist doch nicht so wäre. Seis wie es sei, es funktioniert mit Windows7 nicht.
Eigenes GUI System
Leider fand ich bisher auch keine Hilfe dazu wie *.msstyles angewendet werden könnten, auch die UxTheme.dll scheint mit der SetWindowTheme_ Funktion nicht ohne weiteres etwas zu ändern. (abgesehn vom deaktivieren des Styles)
Lösung 1
Wie eben genannt eine eigene "AppFace", "SkinFeature", "USkin" Library und wie sie alle heißen zu schreiben. Die Frage ist nur: wo setzt man hierzu an?
Lösung 2
Ein grundlegenes eigenes Framework. Die Idee wäre durch ein Canvas und Bitmaps als Zeichenbuffer alle Steuerelemente mit einem Themen-freundlichen System zu rekonstruieren. Die Frage hierbei ist natürlich ob es denn performant wäre, denn ein "Container" der sich maximiert über das Fenster erstrecken würde wäre (z.B) ein 1024x768 Bitmap. Eine andere Struktur wäre es durch einzelne Fensterklassen zu konstruieren wodruch das einsetzen fremder Komponenten wie Scintilla problemlos möglich ist.
Diese 2.Lösung wäre zwar am auwendigsten, doch würde einige Vorteile bieten:
- Flackerfreie Dimensionierung
- Neue Komponenten
- Optionale Fade-/Animationseffekte
- Platformunabhängigkeit
- Volle Kontrolle und Anpassungsmöglichkeiten
Nachteile:
- Platzieren fremder Komponenten wie Scintilla ist fragwürdig
- Natürliche die Frage wie performant das wäre
Re: GUI System (bitte ausführliche Diskussion)
Wenn ich dich richtig verstanden habe, wäre Lösung 2:
ALLE Gadgets durch selbstgezeichnete (Canvas- oder Image) Gadgets ersetzen.
Da kannst du dir selbst ausmalen, wie performant das wäre, bei einem Fenster
das mehr als 20-30 Gadgets beinhaltet...
Bestes Beispiel momentan der FormDesigner von Polo. Von Performant ist das
(noch) ziemlich weit weg.
Aber nun frag ich dich, was dir das bringt, das "geskinne" ?
Du zwingst dem Nutzer deinen Geschmack auf, oder er muss sich erst etwas ihm
angenehmes erstellen. Da wären die meisten Kunden nicht sehr erfreut.
"Es sieht anders aus, das kostet Einarbeitung". Auch wenns nett aussehen mag...
Nutzenfaktor = 0 in meinen Augen.
Ja Einheitsbrei willst du schreien
Klar, aber die Masse hat sich das so angewöhnt,
und es ist Fakt, das man sich etwas angewöhntes schwer bis garnicht mehr abgewöhnen
kann...
Viele würden das Programm dann nur einmal starten... O-Ton : "Hä ? Was das denn?"
und das wars (falls sie nicht sogar schon beim Screenshot mit dem Kopf geschüttelt hätten.)
Mag für bestimmte Zielgruppen interessant sein (mp3 player vielleicht)... aber die
Masse verschreckt man mit sowas eher nur.
ALLE Gadgets durch selbstgezeichnete (Canvas- oder Image) Gadgets ersetzen.
Da kannst du dir selbst ausmalen, wie performant das wäre, bei einem Fenster
das mehr als 20-30 Gadgets beinhaltet...
Bestes Beispiel momentan der FormDesigner von Polo. Von Performant ist das
(noch) ziemlich weit weg.
Aber nun frag ich dich, was dir das bringt, das "geskinne" ?
Du zwingst dem Nutzer deinen Geschmack auf, oder er muss sich erst etwas ihm
angenehmes erstellen. Da wären die meisten Kunden nicht sehr erfreut.
"Es sieht anders aus, das kostet Einarbeitung". Auch wenns nett aussehen mag...
Nutzenfaktor = 0 in meinen Augen.
Ja Einheitsbrei willst du schreien
und es ist Fakt, das man sich etwas angewöhntes schwer bis garnicht mehr abgewöhnen
kann...
Viele würden das Programm dann nur einmal starten... O-Ton : "Hä ? Was das denn?"
und das wars (falls sie nicht sogar schon beim Screenshot mit dem Kopf geschüttelt hätten.)
Mag für bestimmte Zielgruppen interessant sein (mp3 player vielleicht)... aber die
Masse verschreckt man mit sowas eher nur.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: GUI System (bitte ausführliche Diskussion)
Danke, genau solch eine Meinung brauche ich als Referenz.
Denn es ist falsch. Siehe große Anwendungen wie Cinema4D, FLStudio etc. Selbst Adobe hat, wie du sicher bemerkt hast ein eigenes GUI. Es mag für kleine Anwendungen ausreichen, wird es aber komplexer kommen die PB Gadgets nichtmehr in Frage, da sie dann mal abgesehen vom grauen "Einheitsbrei" ein einziges geflacker und geruckel erzeugen.
Der erste Gedanke (den z.B du sicher hast) wäre "es geht um klicki-bunti"-Oberflächen, was völlig falsch ist. Es geht um schlichtes, übersichtliches, strukturiertes, funktionelles und benutzerfreundliches Design das schlicht gehalten ist aber dennoch sichtbare Kontraste hervorbringt und zudem neue wichtige Komponenten. Etwas wie ein MP3-Player (z.B Winamp) wäre schon deutlich übertrieben und dient eher der "coolnes".
Zu Lösung 2:
Im kleineren Ausmaß hab ich daran schon experimentiert und muss sagen dass es lediglich in den Speicher geht, was deshalb mit einem uneffizientem System dann wirklich nicht performant wäre. Aber deshalb dieser Thread, bitte um Lösungsvorschläge. ^^
Denn es ist falsch. Siehe große Anwendungen wie Cinema4D, FLStudio etc. Selbst Adobe hat, wie du sicher bemerkt hast ein eigenes GUI. Es mag für kleine Anwendungen ausreichen, wird es aber komplexer kommen die PB Gadgets nichtmehr in Frage, da sie dann mal abgesehen vom grauen "Einheitsbrei" ein einziges geflacker und geruckel erzeugen.
Der erste Gedanke (den z.B du sicher hast) wäre "es geht um klicki-bunti"-Oberflächen, was völlig falsch ist. Es geht um schlichtes, übersichtliches, strukturiertes, funktionelles und benutzerfreundliches Design das schlicht gehalten ist aber dennoch sichtbare Kontraste hervorbringt und zudem neue wichtige Komponenten. Etwas wie ein MP3-Player (z.B Winamp) wäre schon deutlich übertrieben und dient eher der "coolnes".
Zu Lösung 2:
Im kleineren Ausmaß hab ich daran schon experimentiert und muss sagen dass es lediglich in den Speicher geht, was deshalb mit einem uneffizientem System dann wirklich nicht performant wäre. Aber deshalb dieser Thread, bitte um Lösungsvorschläge. ^^
Re: GUI System (bitte ausführliche Diskussion)
Für Anwendungen:
Du solltest beim schreiben eines eigenen GUI-System beachten, dass (anders als bei Spielen oder so) nicht in jedem Frame die ganze oberfläche gerändert werden muss.
Zu einer Änderung der kompletten Oberfläche wird es also nie kommen, stattdessen werden immer nur genau die Bereiche verändert, wo auch eine Aktion statt fand: Hovereffekt auf einem Button usw.
Von daher ist die Performance des CanvasGadgets vollkommen ausreichend (es wird nur häufig falsch genutzt).
Selbst wenn das Fenster vergrößert wird, muss nicht das ganze Fenster gezeichnet werden, sondern nru der Teil der neu ist und ggf. der alte Rand übermalt werden.
Für Spiele:
Spiele laufen meist in einem Screen, wo der Buffer jedesmal komplett neu gezeichnet wird. Hier eignen sich Drawing-Befehle überhaut nicht. Hier muss die GUI also mit schnelleren Befehlen wie Sprite3D gerendert werden. eines meiner Kernelemente ist dabei das DisplayBoxedSprite3D, bei der ein Sprite3D so gezoomt wird, dass ein definierter Rand fest bleibt.
Du solltest beim schreiben eines eigenen GUI-System beachten, dass (anders als bei Spielen oder so) nicht in jedem Frame die ganze oberfläche gerändert werden muss.
Zu einer Änderung der kompletten Oberfläche wird es also nie kommen, stattdessen werden immer nur genau die Bereiche verändert, wo auch eine Aktion statt fand: Hovereffekt auf einem Button usw.
Von daher ist die Performance des CanvasGadgets vollkommen ausreichend (es wird nur häufig falsch genutzt).
Selbst wenn das Fenster vergrößert wird, muss nicht das ganze Fenster gezeichnet werden, sondern nru der Teil der neu ist und ggf. der alte Rand übermalt werden.
Für Spiele:
Spiele laufen meist in einem Screen, wo der Buffer jedesmal komplett neu gezeichnet wird. Hier eignen sich Drawing-Befehle überhaut nicht. Hier muss die GUI also mit schnelleren Befehlen wie Sprite3D gerendert werden. eines meiner Kernelemente ist dabei das DisplayBoxedSprite3D, bei der ein Sprite3D so gezoomt wird, dass ein definierter Rand fest bleibt.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: GUI System (bitte ausführliche Diskussion)
Ich hab mir die Demo vom Adobe Lightroom mal angesehen... Nette Effekte und Spielereien, aber wenn man das Fenster vergrössert/verkleinert sieht es genauso "flackernd" wie eine mit Gadgets zugestopfte PB-Anwendung aus. Wo ist das "performant" ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: GUI System (bitte ausführliche Diskussion)
Adobe wäre evlt. auch das eher schlechtere Beispiel für Performance.
Mal spontan als Beispiel Unity3D
Würde man das exakt mit PB Gadgets umsetzen (was von den Komponenten nichtmal gegeben ist) wäre es recht grausig optisch zu verarbeiten.
@STARGÅTE
Genau das hatte ich angesprochen: nur aktive Elemente zu verarbeiten, und einige Komponenten auch auf Bitmaps zu buffern.
Mal spontan als Beispiel Unity3D
Würde man das exakt mit PB Gadgets umsetzen (was von den Komponenten nichtmal gegeben ist) wäre es recht grausig optisch zu verarbeiten.
@STARGÅTE
Genau das hatte ich angesprochen: nur aktive Elemente zu verarbeiten, und einige Komponenten auch auf Bitmaps zu buffern.
Re: GUI System (bitte ausführliche Diskussion)
@cOoki3druqs: Wären modernere Technologien wie beispielsweise WPF
nicht die bessere Wahl für Dich? (Das würde allerdings auch den Umstieg
auf eine andere Programmiersprache bedeuten.)
Grüße ... Kiffi
nicht die bessere Wahl für Dich? (Das würde allerdings auch den Umstieg
auf eine andere Programmiersprache bedeuten.)
Grüße ... Kiffi
a²+b²=mc²
Re: GUI System (bitte ausführliche Diskussion)
Umsteigen? Wer möchte sich schon von PB scheiden lassen, ich sicher nicht.
Kennt jemand denn eine kostenlose alternative zu AppFace/SkinFeature/SkinMagic/USkin etc. ? So könnte ich zumindest die Windows-Reste korrigieren, da ich soweit alle für ein aktuelles Projekt benötigten Elemente selbst geschrieben habe.
Hier sieht man mein Problem (in diesem Fall Scrollbars)
Ownerdrawn Menu+"Ribbon"+DockBar+PropertyGadget etc.. alles schön und gut, allerdings funkt immernoch das Windows-Skin dazwischen was es gleich etwas "minderwertiger" wirken lässt und zudem ein Dorn im Auge ist. Es mag für reine Programmierer pingelich und bedeutungslos erscheinen, doch wer sich auch auf das Image/Optik etc. konzentriert fühlt sich da etwas verlassen.
Edit: Ribbon jetzt geändert, zugegeben: Der Hotlight-Glass Effekt ist etwas stark, doch der Trick dabei ist das kaschieren der Divider-Linie des Menüs.
Kennt jemand denn eine kostenlose alternative zu AppFace/SkinFeature/SkinMagic/USkin etc. ? So könnte ich zumindest die Windows-Reste korrigieren, da ich soweit alle für ein aktuelles Projekt benötigten Elemente selbst geschrieben habe.
Hier sieht man mein Problem (in diesem Fall Scrollbars)
Ownerdrawn Menu+"Ribbon"+DockBar+PropertyGadget etc.. alles schön und gut, allerdings funkt immernoch das Windows-Skin dazwischen was es gleich etwas "minderwertiger" wirken lässt und zudem ein Dorn im Auge ist. Es mag für reine Programmierer pingelich und bedeutungslos erscheinen, doch wer sich auch auf das Image/Optik etc. konzentriert fühlt sich da etwas verlassen.
Edit: Ribbon jetzt geändert, zugegeben: Der Hotlight-Glass Effekt ist etwas stark, doch der Trick dabei ist das kaschieren der Divider-Linie des Menüs.
Zuletzt geändert von Lambda am 05.09.2012 20:17, insgesamt 1-mal geändert.
Re: GUI System (bitte ausführliche Diskussion)
Clutter mit Mx.cOoki3druqs hat geschrieben:Kennt jemand denn eine kostenlose alternative zu AppFace/SkinFeature/SkinMagic/USkin etc. ?

Re: GUI System (bitte ausführliche Diskussion)
Von Clutter hab ich nix für Mac oder Windows gefunden... also nix mit crossplatform 
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom