Skinsystem
4. Apr 2008, 16:52
Hi,
es gibt zu dem Thema genügend Threads. Meine Frage bietet euch zwar denke ich ein breites Spektrum an Antwortmöglichkeiten, allerdings ist es spezifischer als in den ganzen anderen Themen. Ich möchte ein Skinsystem programmieren welches aus zwei Dateien besteht: Auseinandernehmen der Skindatei, Zeichnen des Skins für alle Fenster. Das System soll möglichst performant gehalten werden. Eine Skindatei ist ein Archivformat. Sie enthält alle Grafiken und eine Index-Datei in der restliche Informationen wie z.B. Schriftfarbe stehen. Diese Dateien werden in ein temporäres Verzeichnis extrahiert und von dort aus einmalig in den Speicher geladen und bei Schließen des Programms wieder vom Speicher genommen. Es gibt daher ein Array voll mit kleinen Bildern welches natürlich genutzt werden kann. Es ist allerdings fraglich ob man diese überhaupt im Speicher lassen muss, sie kurz nachzuladen kostet sicherlich nicht viel Zeit, sie im Speicher zu lassen allerdings auch nicht viel Platz, solange der Macher der Skins ordentlich arbeitet (bin bisher bei 5KB). Das ganze System soll dynamisch aufgebaut sein. Es soll dabei möglichst keine TSkin-Klasse enstehen, sondern viel mehr ein DrawSkin(frm : TForm). Diese Prozedur hätte den Vorteil, dass jede Form damit problemlos gezeichnet werden kann. Wie würdet ihr die ganzen Komponenten dynamisch mit Canvas erzeugen ? Das mag merkwürdig klingen. Ich meine damit, dass man mit Canvas alle Komponenten zeichnet und Sachen wie MouseOver usw. dabei beachtet werden.
Zusammengefasst gibt es also eine Datei welche den Skin zeichnet. Diese soll keine Klasse enthalten und soll jede Form ohne weiteres zeichnen können.
Wie könnte man allerdings die nicht auf dem Formular existierenden Komponenten performant an die Skinzeichenunit weiterleiten ?
Am Anfang sagte ich, dass es ein breites Spektrum an Antworten gäbe. So habe ich euch extrem eingeschränkt. Aber das bezieht sich nur auf meinen aktuellen Stand. Meine Frage lautet also: Wie würdet ihr aufgrund des Archivformats ein Skinsystem performant programmieren ?
Meine Lösung hat nämlich zu viele Macken und ist daher unperformant, deshalb möchte ich mal andere Vorschläge hören.
|