Laden...

Skins

Erstellt von dr4g0n76 vor 18 Jahren Letzter Beitrag vor 15 Jahren 54.601 Views
dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren
Skins

Ich werde hier meine Skin-Komponente veröffentlichen.
Sie ist gerade einem kompletten Umbau unterworfen.

Ich habe jetzt eine Lösung, wie man eine Skinkomponente richtig Windows-Konform
entwickelt und doch nur .NET dazu benötigt.

Die Alte Komponente werde ich hier nicht mehr veröffentlichen.

[Edit]
Die aktuelle Komponente gibt's ab jetzt immer hier:

http://www.codeknights.de/download_skinlib.php

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Ich werde hier regelmäßig posten was sich neues tut.

Grundlage sind PreFilterMessage und WindowsHook um etwas neues erstellen zu können.

Ablauf:

Es werden alle Messages gefiltert und vom Programm sortiert und ausgewertet,
das macht die Skin-Komponente

Der Einbau geschieht später folgendermaßen:


[STAThread]
		static void Main() 
		{
			Skin skin = new Skin(); //diese Zeile einfügen
			skin.InstallSkin(); //diese Zeile einfügen
			Application.Run(new Form1());
			skin.UninstallSkin(); //diese Zeile einfügen
		}

skin.InstallSkin() installiert einen MessageFilter, der die Controls zur Laufzeit umändert.

skin.Uninstallskin()
löscht diesen wieder.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

So, das Programm benötigt im Release/Debug eine Grafik namens Titlebar.jpg, diese wird in die Titlebar geladen...

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

So, hab jetzt eine Komponente daraus gemacht...

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Einbau folgendermassen:


using SkinLib;

		[STAThread]
		static void Main() 
		{
			Form1 form = new Form1();
			SkinSingleton.SKINSINGLETON.Form = form;
			SkinSingleton.SKINSINGLETON.InstallSkin();

			Application.Run(form); //normalerweise steht ja nur new Form1()
//alles andere muss hinzugefügt werden.
			SkinSingleton.SKINSINGLETON.UninstallSkin();
		}

Ausserdem eine Referenz auf SkinLib in das Projekt

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Da sich somit aber nur selbst programmierte Forms (und nicht z.B. OpenFileDialog usw. ändern lassen, werde ich wohl trotzdem das ganze später noch einmal umschreiben müssen...)

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Flackern beseitigt.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

So jetzt werden auch runde Buttons unterstützt...

Bekannte Bugs: Controls werden erst nach erstem hovering korrekt dargestellt...

Neu:

Viele neue properties können gesetzt werden.

Hintergrundbild, ForeColor, BackColor (je für Hovered und Leave-Event)

Regions

Regions/Drawings werden jetzt der Größe angepasst, wenn im sizeChanged-Event

SkinSingleton.SKINSINGLETON.UpdateControls() aufgerufen wird.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.549 Beiträge seit 2004
vor 18 Jahren

Ich habe noch einen Bug du setzt in der Datei Skin.cs
ctrl.Text = "Blub";
damit überschreibst du jeden Text der für ein Control gesetzt wird

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Ja so gesehen ist das ein Bug, hab ich vergessen, rauszumachen, damit wollte ich testen, welche Controls wirklich korrekt gesetzt werden.

Danke für den Hinweis. 😉

Ich nehme immer blub, dann muss ich später nur nach "blub" suchen, um die Dinger wieder rauszumachen. Dumme Angewohnheit. 😉

Es sind bisher noch vielmehr Bugs drin.

Und? Meinung sonst bisher?

Ich will auf jeden Fall auf den Level von meiner C++ Anwendung kommen.

Glaubs ich schaffes?

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.549 Beiträge seit 2004
vor 18 Jahren

Wenn du so weiter machst wie bisher dann kannst du es locker schlafen.
Wenn ich noch mehr Bugs finde melde ich mich
P.s dann habe ich noch eine frage für was ist die Class1.cs

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

1.549 Beiträge seit 2004
vor 18 Jahren

Und noch ein Bug:
Du Setzt in der Klasse SkinSingleton in den EventHandlern für MouseEnter und MouseLeave
ctrl.Font = new Font("Arial",8,FontStyle.Regular);

damit überschreibst du wieder die gemachten Einstellungen

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Danke wird korrigiert. 🙂

Ich schätze da sind noch ca. 50 weitere zu finden.

Und hier hab ich schon wieder eine Version die bestimmt neue hat:

Screenshot:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

und Testprojekt dazu (vom Screenshot 😉:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Class1 ist ein Überbleibsel vom Erstellen der Lib. Nennt VisualCS dann immer Class1, aber ich hatte ja schon alle Elemente programmiert. 😉 also hab ich die hinzugefügt ud Class1 noch nicht rausgeworfen. geschieht wohl im nächsten Release. bis dann!!!!

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Neuester Screenshot:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren
neue Skinlib

neue SkinLib:

Achtung: der Hintergrund und die Farbe auf dem Form sind (noch) direkt auf dem Form eingestellt. Die nächste Version die ich anbiete kann das dann schon als Skin.

Aber immerhin wird doch, oder?

Ach ja jetzt werden auch die Skins gleich richtig beim Start angezeigt.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.549 Beiträge seit 2004
vor 18 Jahren

Wirklich wird echt nicht schlecht und ich warte schon gestand auf die nächste Version

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Ja ich bin momentan am rumdoktern an der Caption area und den Window Frame borders. Das muss jetzt erst mal laufen. Da ich mich jetzt komplett mit den Windows-WM-Messages usw. mal wieder auseinandersetzen muss, kann es eine Weile dauern.

Ach ja, ich entwickele auch gerade nebenbei ein Skin-Format (XML)

Später wird es dann mal einen Skin-Editor geben.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.549 Beiträge seit 2004
vor 18 Jahren

Nicht schlecht da kann man dann ja auf einiges hoffen

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Nächster Screenshot:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Skins können jetzt geladen werden, die Properties pro Klasse bleiben erhalten, die interne Struktur wurde refaktoriert.

Der Skinloader funktioniert schon rudimentär

Alle Ordner im Exe-Verzeichnis werden automatisch durchgescannt und dann nach skindef.xml gesucht.

Wenn gewünscht kann ich ein zwischenrelease posten, sonst kommt das nächst erst, wenn die Borders fertig sind, aber wie angekündigt: das KANN DAUERN.

Wird es wahrscheinlich auch...

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.549 Beiträge seit 2004
vor 18 Jahren

Ich würde mich schon für eine zwischenrelease interessieren (dann können wir dir ja auch beim Bug suchen helfen)

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

ok, erstes Zwischenrelease gibt's morgen.

Wäre dann auch evtl. für ein paar Tipps bezügl. Code-Struktur dankbar.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

So die Sucharbeiten (für weiteres skinning) in dotnet sind abgeschlossen.

Hier noch einmal das Ziel:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Und noch mal etwas größer:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

zwar spät, aber noch heute hier:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

achtung: zu diesen beiden dateien ist anzumerken,
dass gerade ein riesenumbau stattgefunden hat, ausserdem wird das laden per skins in dieser version momentan nicht funktionieren.

momentan findet ein umbau an den borders (frameborder sowie titleborder) und an den allgemeinen zeichenroutinen statt. Ausserdem müssen noch verschiedene Stellen mit Iterator pattern belegt werden. Sonst gefällt mir das (Klassen-)Design nicht...

Eingesetzt werden bisher:

Factory pattern, zum Zeichnen der Objekte müssen geskinnte Objekte erstellt werden.
Proxy pattern, pro Objekt-Art (z.B. Button) können momentan skins festgelegt werden.
Singletonpattern, z.B. für die Proxycontrolklasse und die Skin-Klasse...

es werden noch mehr kommen...

evtl. Hookproc für gleiches Aussehen bei File-Requestern (kann leider nur mit Api-Einfluss gemacht werden...)

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

neuester Screenshot:

Transparenz eingefügt:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Das Projekt ist ab jetzt hier zu finden:

SkinLibProject

Wird einfach zu gross mit der Zeit...

Achtung: ist zwar schon viel neuer Code drin, der macht aber noch fast rein gar nix.

(zum. nix was man sieht. 😉

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Bitte jetzt diese URL für den Download benutzen

http://www.codeknights.de/DSL-In-Seitingen/download.php

Es erscheint dann dieser Text:

erfolgreich!

Bitte warten, der Download beginnt in ca. 3 Sekunden...

Bisherige Anzahl versuchter downloads: 2

Dann wird weitergeleitet.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

So ich habe jetzt die ersten Vorarbeiten für die Toolbar abgeschlossen. Jetzt muss es nur noch tun...

Das kann aber auch noch dauern. Diese Version ist noch nicht online...

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Bin am vorbereiten von Hooks...

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Erweiterungen am Interface vorgenommen.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

gute nachrichten:

ab morgen werden die hooks laufen und eventuell auch die toolbar neu gezeichnet...
per WM_NCPAINT.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

hooks laufen,
sobald die Toolbar richtig gezeichnet wird, ist sie die neue Version hier.

Dann kommt der komplette Fensterrahmen dran.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Habe mal einen neuen Zwischen-Release hochgeladen.

Hier können die Hooks und die Transparenz zur Laufzeit eingestellt werden.
Mehr eigentlich nicht...

Aber nicht enttäuscht sein, denn ansonsten sieht bisher noch alles gleich aus.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren
DropShadow für Forms

Habe heute einen Tipp gesehen für Schatten, habe diesen mit eingebaut.

Drop-Shadows für Forms jetzt also auch verfügbar.

Achtung: Download ist noch nicht online

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Download ist jetzt Online

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Habe jetzt auf

http://www.forumromanum.de/member/forum/forum.php?USER=user_333493

ein Forum für die Skin.NET-Komponeten erstellt.

Bitte berichtet mir eure Erfahrungen dort. Würde mich über Wünsche/Anregungen sowie Bugmeldungen freuen.

Der Source-Code steht noch nicht zur Beurteilung, da noch ziemlich experimentell. 😉

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

tja, wie programmierhans schon in einem anderen Thread berichtete: überwältigendes Echo. Die Skinlib wird jetzt mit dem Webtv1 Player zusammengelegt und darüber weiterentwickelt.

s. dazu ab hier:

WebTV1: Web-TV-Player, TV-Streams im Web

bzw.

http://forum-gratis.com/board/index16686728nx7614.html

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

49.485 Beiträge seit 2005
vor 18 Jahren

Wo? 🙂

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 18 Jahren

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 17 Jahren

Die Skin-Komponente hat mal wieder einige Updates erfahren (seit langem).
Ich werde aber das Release erst in einigen Tagen/Wochen posten.

Hier schon mal ein Vorgeschmack:

und endlich ist die Titlebar wirklich ownerdrawn, aber so wie das ganze jetzt ist, kann es noch kaum eingebaut werden. Der Aufwand darf nicht größer sein als vorher.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 17 Jahren
Skindefinitions-Datei XML

Hallo alle, auch wenn das kein C-Sharp-Code ist, habe ich es trotzdem mal eingebettet:

Dies stellt einen Vorschlag für die SkinLibrary-Definition dar, um eigene SKins per XML machen zu können.

Ich hätte gerne noch Vorschläge, was noch rein könnte, was geändert werden sollte usw.

Zum Aufbau: Der Info-Abschnitt enthält grundlegende Informationen, die z.B später in einem SkinBrowser angezeigt werden könnte.
Für Button habe ich z.B. exemplarisch einmal die Font-Definition angegeben.

Ich bin mir auch noch nicht so ganz einig, was liber als Attribute und was lieber als Tags definiert werden sollte...

weitere Definitionen würden dann ebenfalls in das Button-Tag eingebettet werden.
z.B.


<Button>
  <BackgroundImage = ...>
</Button>

Danach folgt ein Abschnitt Skin-Controls, der festlegt, welche Controls überhaupt und wie geskinnt werden sollen.

Wie hättet ihr's denn gerne?

Ich finde es sollte mind. die Möglichkeit gegeben sein, zu sagen, welche Controls überhaupt geskinnt werden (z.B. alle Labels oder nur ein konkreter Label?) und vor allem wie (BackgroundImage, HOverevent usw.)


<?xml version="1.0" encoding="iso-8859-1" ?>
<skin>
	<info>
		<name>Test skin</name>
		<author>Author name</author>
		<email>some@some.com</email>
		<homepage>[URL]http://www.myhomepage.com[/URL]</homepage>
		<thumbnail>thumb.gif</thumbnail>
		<screenshot>scrnshot.gif</screenshot>
		<comment>A sample skin</comment>
	</info>
	<SkinControls>
		<Control>
			<Font/>
		</Control>

		<Button>
			<Font Name="Times" Size="12" Bold="False" Italic="False" Color="#A96332"/>
		</Button>
		<LargeHeaderFont Name="Times" Size="18" Bold="True" Italic="True" Color="#A96332"/>
		<LargeHeaderTextPosition X="6" Y="8"/>
		<SmallHeaderFont Name="Times" Size="12" Bold="True" Italic="True" Color="#A96332"/>
		<SmallHeaderTextPosition X="2" Y="1"/>
		
		<TextBox>
			<Font Name="Times" Size="12" Bold="False" Italic="False" Color="#A93893"/>
		</TexBox>

		<ListBox>
			<Font/>
		</ListBox>

		<Label/>
			<Font/>
		</Label>

		<ComboBox>
			<Font/>
		</ComboBox>

		<CheckBox>
			<Font/>
		</CheckBox>

		<GroupBox>
			<Font/>
		</GroupBox>

		<MenuItem>
			<Font/>
		</MenuItem>

		<OptionButton>
			<Font/>
		</OptionButton>
	</SkinControls>
</skin>

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 17 Jahren
SkinLibrary

Die neueste Version ist ab jetzt immer im ersten Beitrag zu diesem Thread zu finden.

Skins

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

643 Beiträge seit 2006
vor 17 Jahren

Dein Programm sieht ganz nett aus. Klasse Arbeit aber wie kann ich jetzt ein skin setzen ohne das Fehler enstehen. Auserdem gibt es keine FrameTop left und right unter FrameTop. Und wie kann ich jetzt z.b für den Dynamischen FrameTop bereich eine Grafik ein fügen die sich beim vergrössern des Fensters verdopplt.

SkinSingleton.SKINSINGLETON.ImageTitlebar = System.Drawing.Image.FromFile(HeadPath);

Damit wird es nur verzerrt oder sowas ?