Skinsystem

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Skinsystem

Beitrag von Nils »

Hi,

da ich nun die Zeit habe ein Programm von mir neu zu programmieren möchte ich gleich in der Grundüberlegung möglichst plattformunabhängig bleiben. In einem alten Thread ging es um ein Bild was ausgelesen werden sollte und letzendlich mit TImages gezeichnet werden sollte. Mir ist gerade wieder mal aufgefallen wie schlecht das ist: Man ist so unflexibel und jede Aktion dauert viel zu lange. Wie könnte man ein Skinsystem programmieren ? Ich dachte daran mir die Trackbars, Buttons einfach von TCustomControl abzuleiten. Es gibt bei Buttons und Trackbars grundsätzlich Normal, Over und Down Unterschiede. Wie würdet ihr so etwas realiseren ? Denn mein eben genannter Vorschlag basiert zumindest teilweise auf Systemnachrichten, was mir stinkt.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Naja das ist nicht einfach. Ich glaube für Lazarus gibt es noch nichts in dieser Richtung... Einige Buttons lassen sich anpassen z.b. die Farbe.
Beim Speedbutton andere wiederum nicht.

Es kommt darauf an was das für eine Anwendung werden soll und in wie was bei dir Skinsystem heißt soll es komplett mit Bildern basieren ? oder nur Farbe ?

mit Bildern ist es ein Problem. Die meisten Komponenten stellen ein Canvas zuverfügung. Evlt. hilft dir das schon.

Oder du musst dir die Komponenten die du brauchst selbst schreiben.
Eigentlich braucht man für eine Anwendung nicht so viele unterschiedliche Komponenten würde ich mal behaupten oder ?

Ein Button ist sehr leicht
Eine Listbox auch, Ein Edit im Allgemeinen auch und ein Memo auch.

Es ist halt Zeitaufwendiger. Aber wenn das Wichtig für dich ist, müsstest du halt alles selbst machen auch die Komponenten die du verwendest.

Man kann es so schreiben das es CPU-Last-Arm ist in dem du nur Teile der Komponenten neu zeichnest und nicht die Liste z.b. bei einer Listbox neu zeichnest sondern das jeder Komponenten einen eigenen Buffer hat wo sie rein zeichnen. Ich habe nur Probleme mit dem Scrollen. Aber seit neusten nutzte ich die Scrollbar damit geht das Prima. Allerdings währen hier wieder eine Komponente dabei die nicht Skinbar währe.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Fast jedes Widgetset kann das von sich aus nur das Win32 Widgetset nicht jedenfalls vor XP.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Aber ist es doch schon aufwendiger z.b. habe ich unter Ubuntu noch keine Möglichkeit gefunden mit einem Tool so ein Style anzulegen.

Ich weiß wohl es gibt da Möglichkeiten und über 1000 Einstellungs Möglichkeiten, aber die müssen erst gefunden bzw. erst durch gelesen werden.

ich habe bisher noch kein Tool gefunden mit dem sowas machbare währe ich meine jetzt ein Grafisches Tool und dann noch local nur für eine Anwendung nicht für alle. Und sag jetzt nicht Google das bringt in diesen Falle auch wenig.
MFG
Michael Springwald

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Die alte Version des Programms basierte vollständig auf simplen Farbverläufen und Farbverlaufskomponenten. Da ich alles neu machen muss, will ich es diesmal besser haben: Bilder statt Farbverläufe, ähnlich wie WinAmp-Skins. Es ist ein Multimedia(Audio+Video)-Player, deshalb benötige ich Buttons, Trackbars, Listboxen die das aktuelle Lied hervorheben kann (konnte ich bis jetzt immer über OwnerDraw lösen) und Lauftexte, wobei ein Lauftext evtl. ganz einfach wäre. Die Skins sollen austauschbar sein, deshalb steht es afaik mit Widgetsets schlecht.
Die Playlist geht - wie ich gerade nachgeschaut habe - mit OwnerDraw, aber wie könnte man den Rest lösen ? OwnerDraw geht nämlich nur bei der Listbox so wie es scheint. Außerdem gibt es bei der Playlist doch ein Problem: unter Delphi habe ich mir früher eine sogenannte NoScrollListbox erstellt, sie hatte keine Scrollbar. Kann ich das hier auch so einfach machen ? Das Programm soll hauptsächlich unter Linux und Windows laufen, wenn möglich natürlich auch noch andere Systeme, aber die Audiobibliothek von Lazarus (acl oder wie hieß die) kann bis jetzt nur Windows und Lazarus.
Ich weiß es ist Arbeit, aber es lohnt sich und ich hoffe ihr könnt mir bei dem Skin ein wenig helfen. Wenn ihr wollt können wir auch gemeinsam Teilabschnitte des Aussehens basteln.
Meine Musik: spiker-music.net

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Warum keine Scrollbar bei Listboxen ? bei Winamp gibt es auch eine Scrollbar.

ich denke das was du beschrieben hast, sind sehr einfache Komponenten auch die Listbox. die könntest du alle selbst entwickeln. So schwer ist das nicht.

Buttons könnten einfache TImage Komponenten sein in den ein Bild da gestellt wird und es gibt dann halt zwei Bilder eins für gedrückte Buttons und eins für nicht gedrückte.

Trackbars genauso. Ein Rechteck(Horizontal z.b.) Was eine bestimmte höhe hat und wo mit Rectanlge und FillRect ein Rechteck gezeichnet wird.

Listbox: So lange es nicht um scrollen geht es sie einfach. Bzw. das Scrollen mit dem Balken habe ich nur mit einer TScrollbar hinbekommen aber leider noch nicht selbst

Du könntest dir diesmal ein Satzt von Komponenten schreiben und die dann auf einer Paintbox Zeichnen.

Wenn dir das zuviel arbeit ist:
ich meine bei der VST Komponente kann ein Hintergrund Bild geladen werden.
Sie ist hat zwar recht viele BUG(meiner Meinung) aber für dein vorhaben währe sie geeignet.

Das Problem sind dann die anderen Komponenten.

Am einfachsten ist eine eigene GUi zu schreiben. Ich habe hier mal eine Hochgeladen vor einigen wochen. Schau sie dir doch an:
http://www.lazarusforum.de/viewtopic.php?t=996" onclick="window.open(this.href);return false;

Ich entwickle sie nicht mehr weiter, weil ich eine 2D Engine geschrieben habe und da möchte ich eine komplet neue GUI anfangen. Aber das Prinzip wird gleich bleiben.

Evlt. ist das ja eine anregung. Wenn du lust hast könnten wir auch gemeinsam eine eigene GUI schreiben/entwickeln. Das ist mir sowieso lieber als wenn ich da alleine mache.

Ich könnte dir meine Engine geben und dann basiert darauf unsere GUI.
Die Engine ist Sprite Basiert und übernimmt nur eine Aufgabe: Das zeichnen daneben gibt es noch einige andere aufgaben aber das sind nur Nebenaufgaben.

Der Hauptzweck ist das Zeichnen. von Grafiken. Du brauchst aber Thos opBitmap weil die verwende ich um png, oder jpg Dateien zu laden....
MFG
Michael Springwald

Antworten