- function CreateLayer(Image: TImage32; ObjectID : integer) : TBitmapLayer;
- (Es wird mit Image das TImage32 der Hauptanwendung übergeben auf dem die Bitmap Ebene erzeugt werden soll. Zurück gibt die Funktion die erzeuge Bitmap Ebene.)
DGL https://delphigl.com/forum/ |
|
SharpDesk https://delphigl.com/forum/viewtopic.php?f=13&t=2681 |
Seite 1 von 2 |
Autor: | Billi Berserker [ Do Mär 25, 2004 17:56 ] |
Betreff des Beitrags: | SharpDesk |
Einleitung - Was ist SharpE? SharpE ist ein Shell Replacement System für WinXP/2k. Genauer gesagt werden der normale Windows Desktop sowie die Taskleiste komplett deaktiviert und durch eigene Komponenten ersetzt. Dabei ist das gesammte SharpE Projekt sehr Modular aufgebaut. Jede einzelne Komponente (Taskleise,Desktop,Trayleiste,Toolleiste,Core Anwendung,Fenster Manager) ist dabei eine extra Anwendung. Toolleiste, Core Anwendung und der Desktop bauen zusätzlich dazu auf einem Plugin System auf was das ganze sehr dynamisch macht. Ich bin jetzt seit Dezember 2003 mit der Entwicklung der komplett neuen Desktop Komponenten beschäftigt. Insgesammt sind an SharpE ca. 10 Entwickler in allen Bereichen beteiligt. Was ist SharpDesk? SharpDesk ist die Desktop Komponente welche dafür sorgt das der Windows Desktop durch eine brauchebare Anwendung ersetzt wird. Insgesammt sind an der Entwicklung von SharpDesk noch zwei weitere Entwickler beteiligt. Ein Entwickler für das komplette Menü(SharpMenu) und ein weiterer der als Ünterstützung ein paar Grafikfunktionen(Schattenwurf, Blend funktionen, ... ) geschrieben hat. Bevor ich jetzt zur genauen funktionsweise komme kann sich ja mal jeder selbst die frage stellen wie man am besten einen Desktop programmiert ![]() Frühere SharpDesk Versionen waren sehr eingeschränkt da alle Desktop Objekte durch Kombination von VCL Komponenten (TLabel,TImage,TPanel,...) erzeugt wurden, was wohl der einfachste weg ist. Damit wurde zwar schon ein recht guter Desktop ersatzt programmiert. Jedoch waren damit nur schwer Verbesserungen und Erweiterungen möglich. Mit dem neuen SharpDesk habe ich mir zum Ziel gesetzt das ganze komplett dynamisch aufzubauen. Jedes einzelne Desktop Objekt soll also in eine externe .dll Datei ausgelagert werden. (Einige erinnern sich vielleicht daran das ich vor ein paar Monaten gehäuft fragen zum laden von Formularen aus dll Dateien gestellt hatte ![]() Nachdem ich dann insgesammt drei verschiedene Plugin Systeme (TForm in .dll, Delphi Packages und .dll mit TForm und interner Fenster Verwaltung) ausprobiert hatte, mich jedoch keins der Verfahren zufriedenstellen konnte, mußte ich einen komplett anderen weg gehen. (Anmerkung : Normale Formulare bringen nur Probleme im Bezug auf Transparenz,AlphaBlending und Bedienung der einzelnen Objekte.) Das TBitmapLayer System Nach langen Diskusionen und einer sehr langen suche nach einem guten Plugin System bin ich dann irgendwann auf die kostenlose graphics32(http://g32.org/graphics32/index.html) Biblothek gestoßen. Diese Biblothek bietet eine ganze menge von Grafischen funktionen und Komponenten. Aber eigentlich interessant ist dabei die VCL Komponente TImage32. Das besondere hierbei ist das TBitmapLayer System. Für die Komponente TImage32 kann man beliebig viele Bitmap Ebenen erzeugen und diese wie in modernen Grafikprogrammen (Photoshop,Gimp,...) unabhängig voneinander bearbeiten. Vorteil davon ist das mit diesen einzelnen Bitmap Ebenen nahezu perfekte AlphaBlend und Transparenz Effekte erzeugt werden können. Also wurde das komplette Plugin System dahingehend geändert das jedes Desktop Objekt nun eine Bitmap Ebene exportiert. Das ganze kombiniert mit einem Objekt dll internen "Fenster" Manager der die einzelnen Bitmap Ebenen eines Objekts verwaltet ergibt dann in Grundzügen das Plugin System. Das Desktop Objekt/Plugin System Jedem einzelen Objekt welches auf dem Desktop geladen ist wird eine einzigartige Objekt ID zugewiesen. Diese Objekt ID wird beim erzeugen oder laden eines Desktop Objekts an die Objekt.dll Datei weitergeben. Code:
Anhand der Objekt ID werden die einzelnen Bitmap Layer dann Objekt Intern in einer einfachen Pointer Liste Abgelegt. Somit kann dann über die Objekt ID auf den einzelnen Bitmap Layer zugegriffen werden. (Um änderungen durchzuführen). Ein Problem an diesen Bitmap Ebenen besteht darin das sie nicht selbständig auf Ereignisse wie OnClick,OnMouseMove oder OnMouseEnter reagieren können. Das heißt es gibt keine möglichkeit einfache Notify Events zu benutzen um dem Objekt mitzuteilen das der User eine aktion mit einer bestimmten Bitmap Ebene durchführt. Die Hauptanwendung auf der letztendlich alle Bitmap Ebenen zusammengeführt werden übernimmt deshalb komplett die Kontrolle über alle OnMouseMove,OnClick,OnMouseEnter,... Events. Die Anwendung ermittelt also die zutreffenden Events für die einzelnen Bitmap Ebenen. Die Events werden dann über eine eigene SharpDesk Message funktion an die Objekte übermittelt. Dabei wird wieder die Objekt ID der Bitmap Ebene übermittelt welche den Event empfängt. Das Desktop Objekt sucht die die Entsprechende Bitmap Ebene anhand der Objekt ID aus der internen Pointer Liste herraus und reagiert entsprechend auf die SharpDesk Message. SharpDesk Nachrichten sind z.B. : SDM_REPAINT_LAYER, SDM_MOUSE_ENTER, SDM_MOUSE_LEAVE, SDM_CLOSE_LAYER, SDM_DOUBLE_CLICK,... (insgesammt bis jetzt 10). Das Objekt muß dann nur noch in der SharpDeskMessage funktion entsprechend auf die einzelnen Nachrichten reagieren. Der Inhalt der Bitmap Ebene, also das was letztendlich dargestellt werden soll, wird über die TBitmap32 Eigenschaft der Bitmap Ebene gesteuert. TBitmap32 ist eine erweiterte TBitmap Klasse die diverse zusätzliche funktionen bietet(mehr dazu kann bei der graphics32 Biblothek nachgelesen werden). Es ist also grob gesagt einfaches Zeichnen auf eine Zeichenfläche. (Das beschränkt sich bei den meisten Objekten auf das Laden eines Icons und das Zeichnen eines Textes) Über die SharpDesk Message funktion kann das Objekt dann auf Aktionen reagieren indem das Bitmap gegebenenfalls neu gezeichnet wird. Grob zusammgefaßt exportieren die Objekte also ein Bitmap welches dann durch das TBitmap Layer System in der Hauptanwendung geladen wird. Zur Konfiguration der einzelnen Objekte und der individuellen Objekt Eigenschaften wird ein einzelnes TForm exportiert welches von der Hauptanwendung geladen wird. Diesem Konfigurationsfenster wieder dann über die Objekt ID mitgeteilt welche Einstellungen zu laden sind. Das sieht dann vereinfacht so aus das die Hauptanwendung einfach die funktion : StartSettingsWnd(Objekt ID : integer) aufruft. Darauf möchte ich jetzt aber nicht weiter eingehen da hier halt einfach nur ein TForm erzeugt und das handle des Formulars an die Hauptanwendung übergeben wird ... Jetzt mal genauer zu den besonderes Features... Hintergrundwissen - SharpE Schemes Für SharpE gibts es im vergleich zu anderen Shell Replacements keine Skins sonder nur Schemes. Das bedeutet das das Design der SharpE Komponenten immer gleich ist und sich nur in der Farbgebung unterscheidet. Dazu werden 6 Farben Definiert.(WorkAreaLight,WorkAreaBack,WorkAreaDark,ThrobberLight,ThrobberBack,ThrobberDark). Die WorkArea Farben definieren die Farben der Arbeitsflächen. Die drei Throbber Farben definieren Farben für besondere Buttons und Elemente. Ein SharpE Scheme sieht z.B. so aus : ![]() Ich erwähne das ganze hier weil alle SharpE Core Komponenten in diesem Style erscheinen und auch das gesammte SharpDesk Formular Design sowie einzelne Effekte darauf abgestimmt sind. Themes SharpDesk bietet eine umfangreiche Unterstützung dafür das jeder User das Erscheinungsbild individuell anpassen kann. Über die SharpDesk Themes können Wallpaper, Wallpaper Effekte, Schrift (Farbe,Größe,...), Farb Schema undText Schatten (Farbe und Transparenz) miteinander Verbunden werden. Als besonderes Feature unterstützt SharpDesk das dynamischen überblenden des Hintergrundbildes in die Throbber oder WorkArea Farbe des aktuellen Schemes. Damit können dann sehr einfach wirklich tolle effekte erziehlt werden ohne das der User das Wallpaper per Hand bearbeiten muß. Die Wallpaper Effekte werden jeweils beim start oder ändern des Themes auf das Wallpaper angewendet.(Das Original bleibt immer unverändert) Außerdem gibt es die möglichkeit ein einzelnes Desktop Objekt Set, also die aktuelle Konfiguration und Anordnung der Desktop Objekte, mit dem Theme zu verbinden. So kann ein User indem er ein anderes Theme lädt in wenigen Sekunden einen komplett anderen Desktop mit einem anderen Erscheinungsbild laden. Hier jetzt ein paar Screenshots des Theme Manager : ![]() ![]() ![]() ![]() ![]() Die Screenshots zeigen den Vorgang wie man ein neues Theme erstellt. Dabei können am Vorschau Bild gut die Text Schatten und Wallpaper Blending Effekte verfolgt werden (Im ersten Bild ist beides deaktiviert). SharpMenu Für den Rechtsklick wird ein extra Entwickeltes Menu System eingesetzt. Da SharpMenu aber von einem anderen Entwickler programmiert wird will ich hier nicht viel dazu sagen. Ich belasse es einfach bei einem Screenshot : ![]() (Fragen SharpMenu betreffend können trotzdem gestellt werden) Objekt Popup Menü Zum bearbeiten und ändern der Objekt Eigenschaften gibt es ein seperates Popup Menü welches angezeigt wird sobald ein Rechtsklick auf einem Desktop Objekt ausgeführt wird. Über dieses Popup Menü können diverse Einstellungen verändert werden. Der Screenshot ist da denke ich größtenteils selbsterklärend : ![]() Hierbei sieht man bei genauerem hinsehen das das Icon unter dem Popup Menü etwas hell leuchtet. Dies ist ein OnMouseOver Highlight welches vom Objekt aufgrund der SharpDesk Messages SDM_MOUSE_ENTER und SDM_MOUSE_LEAVE erzeugt wird. Hinzufügen eines Desktop Objekts Der Auswahl Dialog : ![]() Das Design dieser Auswahl Liste wird über eine TScrollBox erzeugt. In der ScrollBox wird für jeden Eintrag ein Panel als Hintergrund erstellt welches dann auf OnClick Ereignisse reagiert. Auf diesem Panel werden dann einfach drei TLabel erzeugt. Das ganze ist finde ich ein gutes Beispiel für alternative ListBoxen. (Wer mehr Informationen darüber möchte kann einfach fragen) Nachdem der User nun ein Desktop Objekt ausgewählt hat wird der Konfigurationsdialog geladen : ![]() Der hier rot eingerahmte Bereich ist das eigentlich Konfigurationsformular welches vom Desktop Objekt exportiert wird. Dieses wird einfach auf ein Panel geladen wodurch es in das von der Hauptanwendung erzeugte "Object Settings" Formular integriert wird. Beim klick auf "Ok" oder "Cancel" wird die vom Objekt Exportierte CloseSettingsWnd funktion aufgerufen. Je nach bedarf wird hier dann als Parameter übergeben ob das Konfigurationsformular die Einstellungen speichern oder verwerfen soll. So bleiben sämtliche Einstellungen für die einzelnen Objekte im Konfigurationsformular des Objekts. Die Hauptanwendung kann aber trotzdem noch bestimmen ob die Einstellungen gespeichert werden sollen. Damit sind die Konfigurationsformulare der Objekte nicht komplett unabhängig und unterliegen immer noch einer gewissen Kontrolle durch die Hauptanwendung. Speicherung aller Einstellungen Die Einstellungen der Objekte und Themes werden komplett in XML gespeichert. Dazu benutze ich die TJvSimpleXML Komponente der Jedi VCL Sammlung. Aufgeteilt sind die Einstellungen dabei in drei Dateien (SharpDesk.xml, Themes.xml und Objects.xml). Mehr muß ich dazu eigentlich auch gar nicht sagen. Außer vielleicht noch das ebenfalls über xml Dateien die Einstellungen für die Drag & Drop Konfiguration geladen werden. Jedes Objekt welches mit einer bestimmten Dateiendung verknüpft werden soll kann im Settings\SharpDesk\Drag And Drop\ Verzeichniss eine .xml mit entsprechenden Informationen ablegen. Die Hauptandwendung wird dann diese Dateiendung mit dem gewünschten Desktop Objekt verknüpfen... Damit ist zum eigentlichen Hauptprogramm erstmal das wichtigste gesagt. Hier noch eine kleine Übersicht über bisher fertiggestellte Desktop Objekte : File Object ![]() -zum erstellen von Verknüpfungen zu Anwendungen -Icons können aus der .exe Datei extrahiert werden -falls kein Icon in der .exe Datei vorhanden ist wird das entsprechende shell Icon benutzt -das Icon kann ebenfalls zur Throbber Farbe überblendet werden -individuelle Transparenz Einstellungen sind möglich -Icons aus .ico Dateien können in allen größen geladen werden -das Anzeigen des Titels kann deaktiviert werden -das Objekt zeigt bei bedarf Text Schatten an Folder Object ![]() -zum erstellen von Verknüpfungen zu Verzeichnissen(inklusive Shell Verzeichnissen) -bietet die selben Features wie das File Object nur das hier noch standard Icons für die verschiedenen Shell Folders definiert sind.s Drive Object ![]() -zum erstellen von Verknüpfungen zu Laufwerken -bietet auch die selben Features wie die das File Object. Zusätzlich kann jedoch noch die Anzeige eines Statusbalkens, welcher den freien Festplattenplatz anzeigt, aktiviert werden. Hier sind wieder diverse standard Icons für die einzelnen Laufwerkstypen definiert. Recycle Bin Object ![]() -bietet auch wieder die selben Features wie das File Object nur das diesmal der genaue Status des Papierkorbs angezeigt wird. Bei einem Doppelklick wird der Papierkorb im Explorer geöffnet. Dazu gibt es bis jetzt noch ein Desktop Objekt welches eine einfache Uhr anzeigt sowie ein Objekt mit dem einfach nur Bilder geladen werden können. Mehr Objekte sind noch in Arbeit ![]() Bevor ich zu den kompletten Screenshots komme hier noch ein Screenshots welcher die XP Icon Unterstützung zeigt. Das folgende Icon wurde einfach mehrfach und in unterschiedlichen Größen aus ein und der selben .ico Datei geladen : ![]() (Zusätzlich wurde das Icon noch zur aktuellen Throbber Farbe überblendet. Die Transparenz sollte außerdem gut zu erkennen sein) Hier nochmal eine (noch unvollständige) Projekt Übersicht : ![]() Zum Aschluß noch zwei Screenshots welche den selben Desktop mit zwei verschiedenen Themes zeigen : (Nur der reine Desktop ist Teil von SharpDesk. Die Task-,Tray- und Toolbar sind die anderen Komponenten des SharpE Shell Replacement Systems) ![]() ![]() Bis vor kurzem war der komplette Quellcode auf einem SharpE cvs Server verfügbar. Der Server ist zur Zeit leider down. Es wird gerade versucht das SourceForge cvs System zu nutzen. Ich werde hier sofort eine Nachricht posten wenn der cvs Server wieder verfügbar ist. Links zum Thema : http://www.lowdimension.net - SharpE Webseite (aktuell leider down und durch ein Notfall Forum ersetzt) Aktuelle SharpDesk Beta Versionen funktionieren nur in Verbindung mit einem installierten SharpE System. Deshalb bringt es wenig wenn ich hier den Link zur aktuellen Beta poste. Sollte wirklich großes interesse bestehen so werde ich dieses Wochenende versuchen eine von SharpE unabhängige Test Version zu erstellen. So, ich hoffe doch mal das ihr mich auch ohne eine Beta Version mit Fragen,Anregungen und Verbesserungsvorschlägen überschüttet ![]() |
Autor: | Billi Berserker [ Sa Mär 27, 2004 23:12 ] |
Betreff des Beitrags: | |
Heute habe ich wieder mal Stunden damit zugebracht um diverse Bugs ausfindig zu machen. Dabei ist es mir u.a. gelungen zwei Schutzverletzungen beim editieren eines Schemes zu verhindern. Außerdem habe ich diverse Sicherheitsüberprüfungen für den Fall eingefügt das der User sich an den XML Dateien vergreift und diese unbrauchbar werden. Falls die XML Dateien mit den Einstellungen aus irgendeinem Grund gelöscht wurden wird SharpDesk sie mit Standard Einstellungen komplett neu erstellen. Desweiteren habe ich viel Arbeit in das Formular Design investiert. Die ListBox welche im Theme Manager die verfübaren Themes anzeigt ist nun durch eine TScollBox ersetzt. So habe ich noch mehr Kontrolle darüber wie der Inhalt gezeichnet wird. Damit bin ich nun auch das verdammte FocusRect losgewurden welches bei der TListBox immer mitgezeichnet wurde. Eine weitere Verbesserung ist die Tatsache das nun auch das Windows Hintergrundbild an den Hintergrund von SharpDesk angepaßt wird. Es werden neben dem eigentlich Hintergrund auch noch Hintergrundfarbe und die Ausrichtung des Hintergrundbildes passend zum SharpDesk Hintergrund angpaßt. Damit werden Anzeigefehler bei anderen Desktop Programmen welche die PaintDesktop() funktion benutzen verhindert. Mir ist es außerdem gelungen eine von SharpE unabhängige SharpDesk version zu erzeugen. Die Beta werde ich vorraussichtlich nächste Woche zum Download bereit stellen. |
Autor: | Billi Berserker [ So Mär 28, 2004 00:46 ] |
Betreff des Beitrags: | |
Fiji-Fighter war so nett eine zwar einen Tag alte aber immer noch recht aktuelle SharpDesk Version zu hosten. ![]() http://www.raen.de/files/sharpdesk.zip Diese Version sollte unabhängig von SharpE funktionieren. Dauerhaft benutzt werden kann sie jedoch nicht da die Taskleiste von der Anwendung verdeckt wird. Zum ausprobieren und rein schauen reicht es aber denke ich aus. Die vorhin erwähnten Änderungen sind zum großen Teil in dieser Version noch nicht integriert. Deshalb muß bei der benutzung auf folgendes geachtett werden : -Namen von Themes dürfen keine Leerzeichen oder andere Sonderzeichen enthalten. -Beim editieren von Schemes kommt es zu einer Schutzverletzung(Anwendung läuft trotzdem weiter und die Änderung wird beim nächsten neu laden der Scheme Liste anzeigt) -Windows Hintergrund wird noch nicht der Theme Hintergrundfarbe und Hintergrundbild Ausrichung angepaßt. Änderungen in der SharpMenu.xml sollten außerdem vorerst unterlassen werden da sich das SharpMenu noch in einer relativ frühen Entwicklungsphase befindet. Der Inhalt des Menüs kann jedoch über die test.rc editiert werden(SharpMenü Pfade,...) Viel Spaß beim ausprobieren ![]() |
Autor: | Billi Berserker [ Di Mai 04, 2004 13:25 ] |
Betreff des Beitrags: | |
Auch wenn ich aktuell voll im Abi Streß bin gibts jetzt mal etwas neues. Am Hauptprogramm hat sich in den letzten Wochen recht wenig verändert. Aktuell bin ich gerade dabei ein wenig das ganze Design zu überarbeiten. Geändert hat sich dafür eine Menge bei den ganzen Desktop Objekten. Die meisten Desktop Objekte besitzen jetzt ein komplett neues Einstellungs Fenster. Außerdem hab ich bei den meisten Objekten hier und da noch kleinere Funktionen hinzugefügt. Die wichtigste Neuerung ist wahrscheinlich das neue VertPanel Desktop Objekt. Dabei handelt es sich um ein komplett Skinbares (wie übersetzt man 'Skinable' am beste? ![]() Aussehen tut das ganze dann in etwa so : ![]() Und das beste kommt zum Schluß... Der cvs Server auf dem der komplette SharpE Source Code lagert ist jetzt online. Zugriff darauf gibts über die SharpE Seite bei SourceForge.net http://sourceforge.net/projects/sharpe Hier nochmal die Original News dazu : Zitat: The CVS is now ready for public consumption, please remember all software on the CVS is currently very beta and does no way represent what quality product PB5 will be...
The files are hosted under the LGPL license, and we will start to use SourceForge a lot more from now on. So feel free to post requests, bugs and comments. PB4 plugins will be added in the next couple of days, and you can find information of how to view the CVS in the "CVS section". There will be a binary release in the future weeks, for those who are unable to compile the cvs source code. If you have issues compiling source, post a bug report and we will try to fix the issue pronto (Delphi6+7). Wer fragen bezülich des cvs Servers oder des Quellcodes hat kann einfach in den Meinungs Thread posten. ![]() |
Autor: | Billi Berserker [ Mo Mai 17, 2004 10:01 ] |
Betreff des Beitrags: | |
So, um diesen Thread hier mal wieder auf den neusten Stand zu bringen gibts ein kleines Update. Am Desktop selbst hat sich mal wieder nicht viel getan. Aktuell bin ich dabei alle Konfigurationsdialoge komplett zu überarbeiten und ins normale win32 Design umzuwandeln. Letzte Woche habe ich mit den arbeiten an einer SharpDeskApi.dll begonnen. Diese .dll beinhaltet diverse funktion wie das laden von Png,Jpeg,Bitmap,... Bildern. Die SharpDeskApi.dll macht es dann für andere Entwickler wesentlich leichter Desktop Objekte zu programmieren da sämtliche wichtigen funktionen bereits mit der .dll Datei zur Verfügung gestellt werden. Außerdem ist in die .dll eine Klasse integriert welche die Einstellungen eines SharpE Themes liest. Die Benutzung dieser Klasse sieht so aus : Code:
Da der SharpMenu (das Desktop Menü von SharpDesk) Entwickler gerade recht viel an der Uni zu tun hat habe ich auch hier angefangen ein paar Verbesserungen zu Programmieren. Das ganze Beschränkt sich zwar nur auf ein paar Design Verbesserungen, dafür kann sich das neue Design wirklich sehen lassen. Hier ein Screenshot : ![]() Auf der SharpE SourceForge Seite wurde letzte Woche außerdem das erste binary build des aktuellen Codes vom cvs Server zum Download bereit gestellt. Dabei handelt es sich nicht um die finale Version, aber zum rein schauen reicht es aus. Wer die alte PB4 Version nicht installiert hat muß jedoch auf SharpBar Plugins verzichten(Aber hier geht es ja um SharpDesk ![]() Hier zu den Downloads : SourceForge Seite : http://sourceforge.net/projects/sharpe Delphi 6 runtime packages : (einfach ins SharpE/SharpDesk Verzeichniss kopieren) http://people.freenet.de/BilliBerserker/Upload/rtl60.bpl http://people.freenet.de/BilliBerserker/Upload/vcl60.bpl so, jetzt müßte eigentlich jeder in der Lage sein das ganze mal auszuprobieren ![]() Hier nochmal ein Screenshot von meinem aktuellen Desktop : ![]() |
Autor: | Billi Berserker [ Sa Jun 12, 2004 00:23 ] |
Betreff des Beitrags: | |
Wie bereits angekündigt wurde heute Abend/Nacht das nächste cvs build Veröffentlicht. Da ich im vorherigen Post schon alles zu den wichtigsten Neuerungen gesagt habe spare ich mir jetzt große Erklärungen. Zum etwa 6 MB großen Download gehts hier : http://sourceforge.net/projects/sharpe/ Diesmal handelt es sich um ein Stand Alone Release. Das ganze sollte jetzt bei jedem ohne große Probleme lauffähig sein. Die benötigten Delphi 6 Biblotheken sind diesmal auch direkt beim Download dabei. Nach dem entpacken erstmal nicht Wild irgendwelche Programme starten. Erstmal die Readme lesen... Wer nur SharpDesk (worum es hier eigentlich geht) ausprobieren möchte der startet bitte nur die SharpDesk.exe Wer sich SharpE mal komplett ansehen möchte der startet einfach SharpCore und beantwortet die Frage mit nein(es sei denn ihr wollte es dauerhaft benutzen, aber zum erstmal anschauen einfach nein drücken. Dann wird am System nix geändert und alles ist spätestens nach einem Neustart so wie früher). |
Autor: | Billi Berserker [ Fr Jul 09, 2004 11:13 ] |
Betreff des Beitrags: | |
Es ist denke ich mal wieder Zeit für ein kleines Update. So richtig viel sichtbares hat sich seit der letzten News noch nicht verändert. Ich habe mal genauer überprüft woran es liegt das SharpDesk stellenweise so verdammt langsam ist. Anfangs habe ich es immer auf die TBitmap32 Layers geschoben. Dies ist jedoch wie ich nun festgestellt habe nicht der einzige Grund. Wenn man sich mit der Zeit ein paar unterschiedliche Themes mit unterschiedlichen Desktop Objekten erstellt hat dann kann es durchaus passieren das die XML Dateien recht groß werden. Die größe liegt zwar meistens immer noch unter 100kb, jedoch muß halt bedacht werden das TJvSimpleXML die Dateien jedesmal laden, parsen und interpretieren muß. Bisher hatte ich den kompletten Zugriff auf die XML Dateien so gestaltet das ich immer bei bedarf ein TJvSimpleXML objekt erstellt und benutzt habe. Logischerweise braucht das bei XML Dateien die größer als 10kb sind dementsprechend lange wenn immer und immer wieder die XML Datei geladen werden muß. Deshalb habe ich die letzten Wochen damit zugebracht den kompletten Code zu überarbeiten und sämtliche Einstellungen in Klassen auszulagern. Somit werden alle 3 XML Dateien (Themes, Objekte, SharpDesk Setting) einmal beim start der Anwendung geladen. Für Themes und SharpDesk settings habe ich die Klasse gleich so angelegt das die ganzen Einstellungen direkt in Variablen geladen werden. Um vielleicht nochmal die Dimension der Themes zu verdeutlichen, die TSharpETheme Klasse hat über 50 variablen/Einstellungen. Da die Einstellungen der Desktop Objekte ja dynamisch sind habe ich es hier dabei belassen eine TJvSimplXML variable zu nutzen welche beim start der Anwendung initialisiert wird. Damit auch alle Desktop Objekte (dll Dateien) auf die Settings Klassen zugreifen können habe ich eine optionale funktion hinzugefügt mit der sich ein Desktop Objekt die 3 Klassen hohlen kann. Optional heißt hier das SharpDesk die Settings sendet falls die entsprechende funktion vom Desktop Objekt exportiert wird. Das ganze umsteigen auf settings Klassen hat wie sich sicherlich jeder denken kann eine ganze Weile gedauert da ich den kompletten Source Code übarbeiten mußte. Im Zuge der kompletten überarbeitung muß ich jetzt noch alle Desktop Objekte auf das neue Klassen system umstellen. Und wenn ich schon einmal dabei bin werde ich auch die Einstellungs Fenster aller Desktop Objekte überarbeiten und auf ein einheitliches Design bringen. Das neue Design aller Desktop Objekte wird dann ungefähr so sein wie bei dem Screenshot aus dem vorherigen Beitrag. Beim letzten Desktop Objekt welches ich übararbeitet habe hatte ich mal ein wenig auf die Uhr geschaut, insgesammt hat das komplette überarbeiten des Einstellungs Fensters und das umstellen auf die Settings Klassen ungefähr 3 Stunden gedauert. 2 Desktop Objekte sind inzwichen fertig und die nächsten muß ich dann am Wochenende machen. Weiterhin habe ich im Zuge der Umstellung auf die Settings Klassen gleich noch ein wenig an der Strucktur der XML Datei für die Themes gearbeitet. Nun sind auch Theme Namen mit Sonderzeichen möglich. Außerdem ist es mir endlich gelungen das Clonen und nach vorne/hinten bewegen von Desktop Objekten wieder zum laufen zu bringen. Mit der Umstellung auf die Settings Klassen und dem damit verbundenem einmaligen laden der XML Dateien konnte ich einen gigantischen Geschwindigkeitszuwachs erreichen. Wo das Laden eines Themes vorher ab und zu auch mal 10 sekunden dauern konte (zumindest bei mir), so geht das ganze jetzt in 2 sekunden ![]() Wann es eine neue Version zum Download gibt kann ich jetzt noch nicht sagen, jedoch arbeite ich aktuell an einem SharpE Preview für Shell Shocked Issue 9(News und Artikel aus der Shell Scene, erscheint aller paar Monate) welches in den nächsten 2 Wochen veröffentlich wird. Mein Ziel ist es die nächste SharpDesk Version bis dahin fertig zu bekommen. |
Autor: | Billi Berserker [ Mo Jul 19, 2004 17:27 ] |
Betreff des Beitrags: | |
Heute ist das Shell Shocked Issue #9 erschienen. Das ist so eine Art zusammenfassung von dem was in den letzten Monaten so in der Shell Scene passiert ist. Für diese Ausgabe habe ich jedoch ein SharpE PB5 Preview geschrieben. Darin gibts neben Infos zu SharpDesk auch ne Zusammenfassung über SharpE. Shell Shocked Issue #9 : http://shell-shocked.org/9.php SharpE PB5 Preview : http://shell-shocked.org/article.php?id=292 Leider haben wir das nächste cvs release von PB5 noch nicht ganz fertig. Mit PB5 0.0.0.3 darf jedoch in den nächsten Tagen gerechnett werden ![]() |
Autor: | Billi Berserker [ Mi Aug 04, 2004 16:25 ] |
Betreff des Beitrags: | |
Wird mal wieder Zeit für ein paar News, richtig viel geändert hat sich in der letzten Zeit eigentlich nichts. Die überarbeitung der meisten Desktop Objekte ist abgeschlossen und hier und da wurde ne ganze menge Bugs gefixt. Ich hab die letzten Tage auch mehr an ein paar Core services gecoded als an SharpDesk selbst ![]() Aber eine News wäre ja ziemlich sinnlos wenns nicht wenigstens etwas brauchbares zu berichten gäbe. Gestern Nacht wurde die nächste SharpE 0.0.0.3 preview Version released. Zu finde wie immer auf unserer Source Forge Projekt Seite. http://sourceforge.net/projects/sharpe/ Der Thread dazu im Lowdimension.net Forum : http://www.lowdimension.net/phpBB2/viewtopic.php?t=177 Der Source Code auf dem cvs server sollte nun auch wieder ganz ganz aktuell sein ![]() Damit hier aber auch ein wenig zum Release im Forum steht hier mal das Changelog mit den wichtigsten Änderungen : Zitat: SharpDesk
Multiple selection of objects, including cloning and deleting Redesign of all interfaces using old SharpE style Desktop layering fully implemented Many bugs fixed Speed improvement by over 300% Icon sets + default icons useable with all objects Many improvements and optimizations for the whole theme engine The settings windows of all desktop objects are completely rewritten SharpCore Dynamic Actions (Bang functionality) Interface redesign Hotkeys service with implemented Action functionality Prism service, 1st release, and very beta Ability to set shell back to Explorer, and change config options E-Mail monitoring service SharpVWM Converted to XML Settings Minor visual changes Source now available SharpTask Converted to XML Settings Minor visual changes SharpConsole First release of the new SharpConsole, which displays all debugging information for SharpE components! |
Autor: | Billi Berserker [ Mi Aug 25, 2004 17:45 ] |
Betreff des Beitrags: | |
Nach ner ganzen Weile gibts von mir auch mal wieder ein kleines Update. Sehr viel sichtbares hat sich bis jetzt noch nicht geändert. Aktuell bastel ich an Icon Shatten und themebare standard Einstellungen für alle Objekte. Das soll heißen das Einstellungen wie Color und Alpha Blending direkt im Theme definiert werden und der User dann die Wahl hat ob ein desktop Objekt diese Standard Einstellungen benutzen soll. Wenn die Objekte diese Theme Einstellungen benutzen dann können ziemlich leicht die ganzen Einstellungen(Alpha und Color Blending) auf alle Objekte angewendet werden indem einfach die Einstellungen im Theme editiert werden. Die Icon Schatten stellen sich als ein ziemlich harter Brocken da. Es ist nicht gerade einfach einen neuen Schatten mit dem festen Schatten vieler XP Icons zu komibinieren. Inzwischen hab ich es soweit gelöst das zuerst sämtlicher Schatten aus den Icons extrahiert wird. Dann wird der neue Schatten gezeichnett und mit dem Original Schatten kominiert. Das resultat sollte bei 99% aller Icons ein gutes Ergebniss erziehlen. Hier ein Screenshot wie es im Theme Editor aussieht : ![]() Da das Projekt inzwischen ziemlich umfangreich geworden ist will ich jetzt einfach einen Überblick über den Code Umfang geben. Die eigentliche Hauptanwendung (SharpDesk.exe - ohne SharpMenu) besteht aus 11 Formularen und 5 weiteren Units für diverse Klassen und Funktionen. Insgesammt macht das nur für die Hauptanwendung rund 8000 Zeilen Quellcode. Wobei hier wieder wirklich klassisch ist das das Design des User Iterfaces mit auf aufwändigsten ist. Allein das Formular zum erstellen und editieren der Themes umfaßt 3000 Zeilen Quellcode. Dazu kommen dann nochmal durchschnittliche 250 Zeilen Basiscode für jedes desktop objekt (interne verwaltung und Kommunikation mit SharpDesk) sowie rund 800 Zeilen Code für das erstellen und anpassen des Desktop Layers(zeichnen, etc.). Und auch die Einstellungsfenster von jedem Desktop Objekt schlucken im Durchschnitt 1000 Zeilen Quellcode. Das macht dann grob gerundet 2000 Zeilen Quellcode pro Desktop Objekt (Und dabei gibt es schon eine zentrale Api dll Datei mit Grafik funktionen welche von allen desktop objekten genutzt werden). Bei 5 Desktop Objekten sind das dann 10000 Zeilen Quellcode. Also insgesammt grob rerundet 18000 bis 20000 Zeilen Quellcode. Die Programmierdauer liegt jetzt bei 8 Monaten (hab Ende Dezember 2003 angefangen) Um vielleicht noch die Dimension allein der Themes zu verdeutlichen, hier einfach die Klasse welche die Theme Informationen speichert : Code:
Das ganze muß jeweils irgendwie im User Interface vorhanden sein so das alles vom User bequem eingestellt werden kann. Da versteht dann sicherlich jeder wie die 3000 Zeilen Quellcode für den Theme Manager zu stande kommen. So, das sollte jetzt einfach mal ein kleiner Einblick in die Dimension des Projekts sein ![]() |
Autor: | Billi Berserker [ Fr Sep 10, 2004 20:19 ] |
Betreff des Beitrags: | |
Und mal wieder was neues von mir ![]() In den letzten Tagen war ich damit beschäftigt das Menü und die Theme Verwaltung in externe Anwendungen auszulagern. Ab jetzt gibt es eine SharpTheme und SharpMenu Anwendung. Kommunizieren tuen die Anwendungen komplett über Window Messages. Die Konvertierung des kompletten Theme systems in eine eigene Anwendung war kein Problem. An SharpMenu bin ich jedoch fast verzweifelt. Das Menü sollte also nun eine externe Anwendunge sein. Sendet man eine bestimmte WM an die Anwendung so wird das Menü bei den über lparam und wparam angegebenen Parametern angezeigt. Das war auch soweit kein Problem. Nun wollte ich es natürlich so machen das das Menü zugeklappt wird sobald die SharpMenu Anwendung den Focus verliert. Also "einfach" in OnDeactivate. Dazu muß gesagt werden das die SharpMenu Anwendung permanent im Hintergrund mitläuft (auch wenn nichts angezeigt wird) damit nicht bei jedem Menü aufruf das ganze Menü neu aufgebaut werden muß. Mit normalen Methoden war es jedoch nicht möglich das Menü dazu zu bringen das OnDeactivate wirklich gut funktioniert hat. Problem war das die Anwendung deaktiviert bliebt sobald sie einmal deaktiviert wurde. Sollte das Menü ein weiteres mal angezeigt werden so wurde zwar das Formular angezeigt, aber die Anwendung erhielt nicht den Focus bzw. wurde nicht aktiviert. Das hatte zur Folge das OnDeactivate nicht mehr aufgerufen wurde. Nachdem ich mich mehrere Stunden mit diversen WinAPI funktionen probiert hatte um die Anwendung beim aufpoppen des Menüs in den Vordergrund zu bringen (siehe SetForegroudWindow(), ShowWindow(), etc. ) war ich schon fast am Verzweifeln. Mit keiner Delphi oder WinAPI funktion ist es möglich einer anderen Anwendung den Focus zu geben. Hierbei rede ich noch von einem Fenster, sondern von der Anwendung selbst. Ich mußte also irgendwie den Status herstellen wie es wäre wenn der User in ein Formular rein klickt. Dies ist jedoch ein Windows internes Problem, es wird nämlich verhindert das man den Focus einfach so auf eine andere Anwendung übertragen kann wenn eine andere Anwendung bereits den Eingabe Focus besitzt. Vom Prinzip eine Sperre in windows selbst. Und nun komme ich mit diesem Post gleich mal zu einer funktion die vielleicht für den ein oder anderen sehr interessant sein könnte. Nachdem ich eine ganze Weile im Netz gesucht habe bin ich auf eine funktion gefunden welche diese blockade von windows umgeht. Das wirklich krasse daran ist das die Anwendung den absoluten Focus erhählt und ganze nach vorne gebracht wird. Das hat sogar zur Folge das die Anwendung über dem Task Manager postiert wird. Eine solche funktion ist sicherlich für die ein oder anderen Programm ziemlich sinnvoll. Hier der Code (habe ich auf www.delphi-forum.de gefunden) Code:
Wie jeder sicherlich sieht ist das etwas komplexer als ein einfacher API aufruf ![]() Außerdem habe ich mich mit dem alseitz bekannten Problem der Speicher Verwaltung von Delphi befaßt. Wie allgemein bekannt ist gibt Delphi Formulare erst wirklich frei wenn die Anwendung beendet wird. Ansonsten bleiben selbst nach dem aufruf von TForm.Free noch reste im Speicher(die bei bedarf wieder verwendet werden). Mein Problem war nun das bei SharpMenu im dynamischen Startmenü ständig neue Formulare erzeugt wurden und beim neu laden des Menüs sogar nochmal alle Formulare neu geladen wurde. Die alten wurden zwar schön freigegeben, reste blieben aber lustig im Speicher und wurden nicht wiederverwendet da die neuen Menüs alle komplett neu erzeugt wurde (MenuForm := TForm.Create...); So entstand ein richtig häßliches memory leak ... Zuerst hatte ich nach möglichkeiten gesucht um den Speicher eines Formulars komplett freizugeben. Diese möglichkeit besteht jedoch nur wenn man einen anderen Speichermanager verwendet oder wenn man den VCL Code editiert. Da mir dies jedoch zu umständlich ist habe ich einen einfacheren weg gewählt. Jetzt werden alle Menü Formulare in ein dynamisches array geladen. Werden mehr menüs gebraucht als geladen sind wird das array einfach erweitert. Vorteil ist nun das die ganzen Menüs im array als benutzt und unbenutzt markiert sind. Wird ein neues menü benötigt wird erstmal das array durchgegangen und das nächstbeste unbenutzt Menü wird benutzt. So wird zwar eine recht hohe Anzahl an Formularen erstellt, jedoch werden diese immer wieder verwendet. Damit ist das mem leak größtenteils eingeschränkt ![]() |
Seite 1 von 2 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |