Laden...

UtilitiesLib: Global Skinning, Widgets, DockingControler, Hooks

Erstellt von Andreas.May vor 15 Jahren Letzter Beitrag vor 15 Jahren 10.764 Views
Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 15 Jahren
UtilitiesLib: Global Skinning, Widgets, DockingControler, Hooks

Hallo Community,

da ich die Idee von Thorsten1983 interessant fand eine Open source UtilitiesLib zu schreiben (siehe Eure Meinung zu : UtilitiesLib), möchte ich an dieser Idee weiter mitwirken.

Hierzu möchte ich im ersten Schritt folgende Punkte realisieren:
*Global Skinning Komponente für Controls
Eine Windowskomponente die sich auf bestehende Controls einklinkt und deren Nonclient wie Clientbereich anpasst. Das ganze wird dann über ein im Designer integriertes Tool zu steuern sein.

*Widgets
Windows Forms ähnliche Fenster die sich anhand eines DockingControls auf einer Form wie MDI's ausrichten und einrastern.

*DockingControler
Die Controler Componente für die Darstellung des Einrasterns der Widgets.

*Hooks -> darunter Fallen Mouse und keyboardevents wie Hotkeys
Globale Maus und Tastaturabfragen werden als Events anhand von Komponenten dem Programmierer zur Verfügung gestellt um z.B. auch über den Designer Events zu binden.

Stand: 13.05.08

So, zwar bin ich noch lange nicht fertig und den ein oder anderen Fehler gibt es noch aber ich denke aus dem Projekt wird klar wohin die Reise gehen soll.

Für was ist dieses Projekt da?
Prinzipiell geht es weniger bei dem Projekt darum „eine absolut fertige" Lösung anzubieten, als den Weg aufzuzeigen wie man die verschiedensten Controls und Designermethoden verwenden oder umgestalltet kann anhand der Windows API.

Was ist bisher drinnen?

  • Skinning von Forms
  • Systemweiter Mouse Hook
  • Systemweiter Keyboard Hook
  • Systemweiter HotKey Hook
  • Widgets

Hinweise:

  • Zuerst das Projekt einmal Kompalieren oder neu erstellen.
  • Im Designermode wird nicht immer das Repaint erfolgreich ausgeführt
  • Es werden derzeit noch keine Controls unterstützt ausser Forms
  • Es werden nur Forms in die Liste vom skinning aufgenommen die unter der Kategorie "Skin" den Wert "UseSkin = true" haben.

Designerunterstützung

  • Es gibt eine Designerunterstützung fürs global Skinning
    Hierfür einfach auf die SkinForms Komponente klicken und dort unter der Kategorie "Sonstiges" und auf dien ComboBox Button bei "Skin" klicken.

  • Es gibt eine Designerunterstützung für jedes einzelne Form
    Hierfür einfach das Formular anklicken unter der Kategorie "Skin" und auf den ComboBox Button bei "Border" klicken. Man kann dort aber auch manuell die Properties ändern. Das ändern von global Skins erfolgt auf allen Formularen.

Was bedeutet global Skinning?
Hierfür wird an jedes Formular (später auch Controls) ein Event gesendet das die aktuelle Ansicht zur Designerlaufzeit überschreibt, das geht allerdings nur wenn dafür die Designerunterstützung benutzt wird. Sinn und Zweck des ganzen ist das wenn jedes Formular diesen Skin als Information selbst speichert, man für vielleicht ein Form das anders aussehen soll als alle anderen man dieses wiederum verändern kann durch die Designerunterstützung für nur dieses Form - vielleicht ändere ich hier das ganze auch noch über Resourcen.

Was für Skins gibt es bisher?
Leider bin ich kein großer Pinsler und Maler, somit gibt es nur einen Skin namens Blue von mir. Wer möchte kann aber gerne über das Skin Blue Beispiel eigene Skins hinzufügen. Allerdings, wird das ganze nochmals bearbeitet.

Warum Border Top und Border Teaser?
Border Teaser erlaubt es ein Bild zusätzlich als "Titelbild" zu implementieren und wird grundsätzlich vor BorderTop gezeichnet. Somit kann man links mittig oder rechtsbündig zusätzlich ein Bild in der Titelleiste anzeigen, z.B. ein Wasserzeichen mit den Firmenlogo darauf.

Warum Border Hittest?
Der Borderhittest gibt das Verhalten der Border zurück. Man kann somit das Sizen an jeder Beliebigen Border verhindern oder anstattdessen andere aktionen auslösen. Ebenso kann man den Offset beinflussen inwieweit man mit der Maus den Rand anklicken kann.

Warum UseWindowTheme?
Möchte man das aktuelle Windows Theme aktiviert lassen, so kann man dies pro Windows Form einstellen. Kanten können somit auch bei Varbverläufen abgeflacht werden, allerdings muss man hierbei die Größenporportionen manuell beachten.

Was ist MouseHook?
Eine Komponente mit Designerunterstützung die folgende Mausnachrichten Systemweit abfängt und in einem MouseEvent wiedergibt:

  • MouseDown
  • MouseUp
  • MouseWheel
  • MouseMove

Was ist KeboardHook?
Im Prinzip das selbe wie Mousehook nur für Tastatureingaben:

  • KeyDown
  • KeyUp

Was ist HotKey?
HotKey ist eine Komponente welche es erlaubt Tastenkombinationen auf Controls zu legen, welche beim auslösen ein Event schmeißt.

Hierzu ein kleiner Hinweis: Leider habe ich es noch nicht geschafft den Designersupport dafür umzusetzen. Wer also die Komponente nutzen möchte, zieht sie ganz normal auf das Form und spricht die Komponente im Code noch manuell an. Es bringt daher noch nichts in der Auflistung auf dem Propertygrid HotKeys hinzuzufügen. Dieser Fehler wird allerdings noch behoben.

Was ist ein Widget?
Ein Windows Widget ist ein Fenster im Fenster, das sich an dem Parentfenster orientiert. Das bedeutet im Klartext, das anhand der Position des Fensters ermessen wird ob das Fenster in eine gewisse logische Richtung verschoben werden darf. Ein Widget kann wiederum Widget's beinhalten usw.

Gibt es das Widget auch in bunt?
Man kann es genauso wie die SkinForms selbst bemalen wie man Lust und Laune hat und so ziemlich sämtliche Eigenschaften beeinflussen. Und man kann es mit SkinForms sogar mit den globalen Skinning bemalen.

Kann ich auf mein Widget Controls adden?
Ähnlich wie auf ein Panel positioniert man seine Elemente darauf und kann diese bearbeiten.

Wie siehts mit der Positionierung zur Laufzeit aus?
Wenn die Eigenschaft AutoIntelligence auf true gesetzt ist so passt sich das Widget an seinem Dockingverhallten an. Wenn diese Eigenschaft auf false gestellt ist, kann man das Widget wie im MDI hin und her bewegen – der Effekt tritt auch dann auf wenn das Widget auf DockingStyle.None gestellt ist.

Was fehlt den Widget's noch?
Für das Docking verhallten erstelle ich noch ein DockingControl das bei AutoIntelligence false dafür verantwortlich ist, dass Widget beim ziehen automatisch an der gewünschten Possition zur Laufzeit einzurasten.

Ansonsten, wünsche ich viel Spaß beim rumprobieren 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

K
165 Beiträge seit 2007
vor 15 Jahren

Hallo Andreas May,

sehr, sehr cooles Projekt 🙂.
Was würdest Du denn von einem Public SVN halten? Im jetzigen status wird es denke ich noch nicht so schwer sein mit einzusteigen, und jeder der lust hätte mitzuwirken, hätte ruckzuck den Code bei der Hand 🙂.

Im moment stecke ich leider noch meinem aktuellen Projekt fest, aber so eine skin komponente wollte ich schon immer mal machen.

Gruß Kalleberlin 🙂

If u want to finish first, u have to finish first.
Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 15 Jahren

Hätte absolut nichts dagegen, muss mal schauen ob ich nicht irgendwoher nen Server dafür organisieren könnte und eben SVN 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

K
165 Beiträge seit 2007
vor 15 Jahren

Hallo Andreas.May,

nichts leichter als das 🙂.
Assembla benutze ich für meine SVN projekte. Performance ist gut, eigentlich immer erreichbar, kostenlos (nicht! umsonst 😄) und hat eine menge Funktionen 😉.

Gruß
Kalleberlin

If u want to finish first, u have to finish first.
Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 15 Jahren

Das klingt nichtmal schlecht, die Kostenlose variante mit 500 MB reicht mehr als gut aus 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

F
10.010 Beiträge seit 2004
vor 15 Jahren

DotNet Projekte sind auch gut auf www.codeplex.com aufgehoben.

Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 15 Jahren

Hrm, brauche wohl doch noch nen weilchen 🙂

Aber soviel vorweg, der Designer ist erstmal wieder draussen - wird aber später wieder eingebaut. Was neu dazu kam ist eine Optimierung der NonclientBorder und ein möglicher Farbverlauf pro Border. Alternativ kann pro Border ein Bild verwendet werden das man verschiedenartig sizen kann. Die jeweilige die Größenanordnug funktioniert automatisch. Ebenso reingekommen ist eine Trennung zwischen Forms und Controls, dafür gibt es nun zwei Komponenten. Die Formkomponente kann mehrere Forms fassen die auf der aktuellen Ansicht liegen, daher die Trennung. Ebenso reinkamen Buttons die man ebenso wie die Borders designen kann und mit Befehlen oder Komandos versehen kann.

Derzeit bin ich am implementieren von Standardskins die man durch implementieren eines Interfaces erwweitern kann. Das erweitern funktioniert auf basis einer assembly die das Interface beinhaltet und in einen seperaten Ordner des Ausführungsverzeichnisses hinterlegt wird.

Tut mir leid das es so lange dauert aber ich denke in ein paar Tagen sollte es soweit sein, die anbindung in ein gemeinsammes SVN projekt erfolgt dann ein paar Tage darauf.

Also, etwas Geduld noch 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

K
165 Beiträge seit 2007
vor 15 Jahren

Rom war auch nicht an einem Tag erbaut 😁

If u want to finish first, u have to finish first.
Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 15 Jahren

Was kommt als nächstes?
Das nächste was folgt ist der DockingControler.

Wichtiger Hinweis:
Der Code ist noch etwas unsauber, wird aber sobald alle Komponenten drinnen sind gesäubert und dokumentiert.

/PS
Leider dauert es noch etwas bis es wieder weiter geht 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

K
165 Beiträge seit 2007
vor 15 Jahren

Hallo Andreas.May,

wie schauts aus? 🙂

Ich werde demnächst wieder mehr Zeit haben, gibt es inzwischen schon SVN Zugriff?

Gruß Kalleberlin

If u want to finish first, u have to finish first.
Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 15 Jahren

Leider verzögert sich das ganze auf unbestimmte Zeit, derzeit ist einfach das Wetter zu gut um den Tag vor dem Rechner zu verbringen 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

D
54 Beiträge seit 2008
vor 15 Jahren

Hi Andreas!

Danke, dass du mich auf dieses großartige Projekt aufmerksam gemacht hast.
Gibt es eigentlich etwas, was ich beachten muss wenn ich die Farben ändere? Denn in der Vorschau von VS sind diese bei mir sichtbar, sobald ich aber kompiliere und starte sind diese im gestarteten Projekt nicht mehr sichtbar bzw. wieder so, wie du sie am Anfang eingestellt hattest.

Lg,
Manuel

Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 15 Jahren

Hallo Manuel,
danke dir erst einmal.

Leider ist mir der Fehler wegen der Farbe nicht aufgefallen dennoch lässt dieser sich umgehen.
Ändere hierzu die Farbe über den Designer anhand des UI Tool's (siehe Bild). Anschließend zerre etwas an der Größe des Fensters herum und schon wird sich das Layout gemerkt.

Ich habe diese Komponente noch nicht komplett sauber integriert, aber ich hoffe das es ca. den Weg aufzeigt wie man eigene Styles auf Controls anwenden kann. Hierzu gibt es im Forum noch andere interessante Ansätze 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(