Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Hallo
Schon seit längerer Zeit suche ich nach einem Konzept um eine CSS Klassen Verwaltung hinzu bekommen. Ich habe einige Idee, die gefallen mir aber noch nicht 100%ig. vielleicht habt ihr ja noch Alternativen anzubieten oder könnt die Ideen etwas erweitern.
Mir geht es um eine Komponente die einfachste HTML und CSS Verarbeiten kann. Im Prinzip so wie das HTML Panel. Nur es soll mehr unterstützt werden. Ich hatte auch schon die Idee, ein Ableger vom HTML Panel zu erstellen und es selbst zu erweitern. Hatte damit sogar schon angefangen und war auch Erfolgreich. Problem: Das HTML Panel kann viele einfache HTML und CSS Sachen nicht. Ich habe ein paar Tests gemacht mit SelfHTML Beispiel Dateien.
Das Render Konzept sieht in etwa so aus: Es gibt verschiedene Klassen: Text-Element, Picture-Element, Container-Element. Wobei ein Container allgemein betrachtet wird. In einem Container können alle Möglichen Elemente da gestellt werden.
In dieser Frage geht es jetzt eigentlich nur um CSS. Ich habe verschieden Ideen bereits ausprobiert und einige warten noch, aber ich habe zweifel ob es keine besseren Ideen gibt.
Idee Nummer 1 Es gibt drei Klassen: CSSValue Besteht aus drei Feldern: Feld 1: Der Inhalt der CSS Eigenschaft(Value) Feld 2: Ein CSS Schlüsselwort(Ein Großer Aufzählungs Datentyp mit über 135 Einträgen, da kommen noch mehr hinzu) Feld 3: Die Einheit(es ist nun PX, PT?)
Dann CSSClass, die Verwaltet die CSS Value Klassen in einer Liste(TList)
Und zum Schluss ein CSClassList, die verwaltet die "CSSClass".
Einmal gibt davon für den Root-Container eine CSS Klass wo alle Eigenschaften gesetzt werden. Daran Orientieren sich jetzt alle weiteren CSS Klassen. Denn: Nun muss ja nur noch eine Änderung verwaltet werden.
Problem: Beim Rendern muss ich immer schauen, was vorliegt. Für die Weitergabe hatte ich vorgesehen: Lege ich eine Liste an(Beim Reden eins Elements, keine Globale Liste), die enthält alle Parents des Elements. Diese Liste wird im zweiten Schrittt rückwärts durchgegangen und die Eigenschaften werden im CSSCanvas entsprechend gesetzt.
Das CSS Canvas wird mit einem Normalen Canvas verbunden und erweitert dieses um CSS Typische Sachen. z.B. um eine Methode um einen Rahmen zu Zeichnen, wo alle vierseiten eingestellt werden kann. Das CSS Canvas hat ebenfalls alle CSS Eigenschaften die es gibt. Jedes Feld ist von Typ CSSValue
Diese Idee gefällt mir eigentlich ganz gut, weil sie weniger Speicher verbraucht. Aber es wird mehr Zeit beim Rendern verbraucht.
Idee Nummer 2 Ich habe wieder eine Klasse: CSSValue. Nun gibt es einige Klassen wie CSSFont, CSSText, mit entsprechenden Feldern. Nun gibt es eine allgemein CSSClasse die alle diese Klassen verwaltet: CSSFont, CSSText, CSSMargin, CSSPadding, CSSPos, CSSBackground und soweiter.
Das CSS Canvas greif ebenfalls auf diese CSS Klasse zurück. Der Root-Container ebenso. Alle Elemente haben ein Feld CSSClass mit den es einer CSSClass verbunden wird. Die Vererbung könnte direkt über das Hinzufügen der CSS Eigenschaften Passieren.
was mir hier nicht gefallt: Um nur eine Eigenschaft zu Ändern z.b. Color oder background-color muss ein Klasse Installisiert werden die Mehr Felder hat, als gebraucht werden. So ähnlich macht es da HTML Panel nach meiner Auffassung
Wenn ihr kleine HTML CSS Projekte kennt, wo ich mir den Code anschauen könnte wäre das auch eine Hilfe. Mir geht es um bessere Ideen. In CSS gibt es ja unzählige Eigenschaften. Ich befasse mich erst mal mit den ersten 50 Stück. Das ist aber nur ein Bruchteil davon, von den die es gibt..
Wenn ihr mir nicht folgen könnt, könnt ihr gerne Nachfragen... Ich habe versucht das Problem so genau wie möglich zu Beschrieben. Aber beim Schreiben ist mir aufgefallen: "Die Idee Nummer 2" hat doch mehr Vorteile als "Die Idee Nummer 1". Gerade was die Performance angeht, oder?
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Nachtrag: Auch wenn ich hier wenig Antworte, verfolge ich zwischendurch die Beiträge. Ich habe für dieses Forum viel Lob... (Bitte nicht Falsch verstehen....)
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.