AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Desktop Widget Engine (v0.72)
Thema durchsuchen
Ansicht
Themen-Optionen

Desktop Widget Engine (v0.72)

Ein Thema von littleDave · begonnen am 27. Aug 2008 · letzter Beitrag vom 14. Aug 2011
Antwort Antwort
Seite 6 von 26   « Erste     456 7816     Letzte »    
Benutzerbild von littleDave
littleDave
Registriert seit: 27. Apr 2006
Hallo

ich hab mal wieder ein Projekt, welches ich hier veröffentlichen will: Eine ...


Downloads
  • hier ist eine Übersicht über alle Versionen
  • hier (ca. 1.5 MB) kann die aktuellste Version heruntergeladen werden
  • hier könnt ihr weitere Widgets herunterladen und eure eigenen Widgets hochladen
  • hier ist jetzt der komplette ChangeLog seit Version 0.1 aufgelistet
  • hier sind jetzt die möglichen Startparameter aufgelistet

Was ist eine Widget Engine?
Widget? Was ist das denn? ... Hm, das ist nicht so schnell zu beschreiben. Kurz gesagt: Widgets sind kleine Fenster, die auf dem Desktop sitzen und unterschiedliche Aufgaben übernehmen können. Jedes Widget ist dabei nur eine Ansammlungen von Anweisungen, Bildern oder sonstigen Daten. Diese Daten werden dann von einem Hauptprogramm visualisiert und verarbeiten. Diese Widget-Engine ist dabei dieses Hauptprogramm.

Wie funktioniert das ganze?
Das ist ganz einfach. Im Hauptprogramm klickt ihr einfach auf Widgets und dann auf Add widget. In einem Dialog wählt ihr dann die Widget-Datei aus, die ihr starten wollt. Danach erscheint ein neues Fenster auf dem Bildschirm - fertig: das Widget läuft jetzt.

Screenshots (für größere Version einfach auf das Bild klicken)
Mal ein Paar Widgets auf dem Desktop
http://widgets.godlikesoft.de/progra...p001-small.jpg http://widgets.godlikesoft.de/progra...p002-small.jpg http://widgets.godlikesoft.de/progra...p006-small.jpg
Der Editor
http://widgets.godlikesoft.de/progra...p003-small.jpg http://widgets.godlikesoft.de/progra...p004-small.jpg
Die Widget-Auswahl
http://widgets.godlikesoft.de/progra...p005-small.jpg

Kann ich selbst Widgets erstellen?
Natürlich! Im Hauptprogramm ist ein Widget-Editor dabei, mit dem ihr neue Widgets erstellen und bearbeiten könnt.

Wie erstelle ich eigene Widgets?
Das ist schon nicht so einfach zu beschreiben, da ihr durch die Script-Sprache extrem viel Möglichkeiten habt.
Zuerst wählt ihr im Menü unter Edit den Punkt Create new Widget aus. Dort gibst du die ersten groben Daten zu deinem Widget ein (diese können natürlich später noch geändert werden). Unten müsst ihr noch die Zieldatei eingeben, in dem die Daten gespeichert werden sollen. Danach erscheint der Editor. Der Editor ist ungefähr so aufgebaut wie ihr es von Delphi gewohnt seid. Es gibt einen Form-Designer und einen Code-Editor. Im Formdesigner könnt ihr Komponenten hinzufügen, bearbeiten und löschen. Im Code-Editor bearbeitet ihr die Funktionalität des Widgets. Die Programmiersprache des Widgets ist Pascal, somit könnt ihr wahrscheinlich gleich loslegen. Als Scriptsprache verwende ich (wie könnte es anders sein ), meine Script-Engine. Um alle Funktionen zu beschreiben bräuchte ich jetzt sehr lange - am besten schaut ihr euch bereits mitgelieferten Widgets im Editor an.

Wie veröffentliche ich meine eigenen Widgets
Das ist ganz einfach: sobald ihr euer Widget fertig habt, klickt ihr im Editor auf Datei -> Publish-Datei erstellen.... Nachdem ihr die Publish-Datei gespeichert habt, geht ihr auf Website der Desktop Widget Engine. Dort loggt ihr euch mit eurem Account ein (wenn ihr noch keinen habt, einfach kurz registrieren) und wählt dann rechts unten den Eintrag Publish own widget. Dann wählt ihr die gerade erstellte Publish-Datei aus und wählt noch die Kategorie des Widgets - fertig.

Wichtige Sachen für den Editor
  • Events zuweisen:
    Um einer Komponente ein Event zuzuweisen solltet ihr im Object-Inspector den Tab "Events" auswählen. Dort klickst ihr doppelt auf den Namen des Events. Dann wird automatisch alles nötige erstellt. Ihr könnt die Events natürlich auch manuell eintragen, jedoch ist solltet ihr dann genau wissen, welche Parameter wann wo kommen. Wenn eine Event-Funktion falsche Parameter hat, wird das Widget zwar erfolgreich kompiliert, die Event-Funktion wird aber niemals erreicht.
  • Bilder zuweisen:
    Widgets sind meistens mit einer aufwendigeren grafischen Oberfläche ausgestattet. In dieser Widget-Engine geht das natürlich auch. Dafür fügt ihr einfach ein Image hinzu und wählt im Objekt-Inspektor den Eintrag "Graphic" aus. Dort findet ihr einen Eintrag "ImageFile", welcher einen Dialog öffnet. In diesem Dialog wählt ihr das gewünschte Bild aus. Dabei könnt ihr nur Bilder auswählen, die sich in der Wiget-Datei befinden. Um eine Datei hinzuzufügen wählt ihr links den Eintrag Add file to folder.
    ACHTUNG: Bei den Bildern werden nur PNGs, JPEGs, Bitmaps und Gifs unterstützt. Andere Bildtypen funktionieren nicht!

Was ist alles dabei?
Das Hauptpacket besteht nur aus einer analogen Uhr und einer SideBar. Wenn ihr weitere Widgets haben wollt, geht ihr auf die Website der Desktop Widget Engine. Dort könnt ihr viele weitere Widgets herunterladen.

Eigene PlugIns?
Die Funktionalität von Widgets kann man mit Hilfe von PlugIns erweitern. Die Erweiterbarkeit mit Hilfe durch PlugIns ist extrem groß. Um ein PlugIn zu erstellen, solltet ihr vorher die PlugIn-API-Reference herunterladen (der Download-Link befindet sich am Ende dieses Abschnitts). Dort findet ihr einen Pascal-Header sowie eine Hilfe, die euch anhand des mitgelieferten Beispiels erklärt, wie ihr ein PlugIn erstellen könnt und worauf ihr achten müsst. Die PlugIn-API findet ihr hier (ca. 1 MB)

Noch ein paar Hinweise
  • Getestet mit Windows XP
  • Verwende Komponenten: Sysygy Script Engine, SynEdit, Jedi Component Library, GraphicEx, GR32 (TBitmap32)
  • Aktuelle Version: 0.72
  • Programmiert mit Delphi 7
  • Das Programm erstellt folgende Ordner:
    • Den Ordner "Desktop Widget Engine" in %APPDATA%
  • Das Programm erstellt folgende Registry-Einträge:
    • "Desktop Widget Engine" in "HKCU\Software\Microsoft\Windows\CurrentVersion\Ru n\" (nur falls die Einstellung "Autostart" aktiviert wurde)
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
 
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#51
  Alt 15. Sep 2008, 01:30
Das man die MainForm nicht verschieben kann, ist auch noch absichtlich. Das Script soll nur eingeschränkte Kontrolle über das Widget haben - dazu zählt für mich auch die Positionierung des Widgets. Somit funktioniert das mainform.SetLeft nicht.

Die Eigenschaft wird an sich schon vererbt, nur halt nicht von mainform.Left aus. Sonst sollte das Positionieren an die Unterelemente schon vererbt werden.

Den Minus-Fehler hab ich gerade im Parser der Script-Engine gefunden und ich bin gerade dabei, das Problem zu beheben. An sonsten hab ich bereits eine Delay-Funktion eingebaut, so dass deine Methode auch funktionieren sollte (musst dann nur Delay() statt Sleep() schreiben).

Auch die Events OnMouseIn, OnMouseOut OnSetFocus und OnLostFocus von TwgForm funktionieren jetzt ebenfalls. Somit hab ich die Probleme, die du mir gezeigt hast, schon zum großen Teil behoben. Ein Release wird aber noch etwas dauern, da ich noch mehr reinpacken will.

Edit: Die Exception beim Minimieren/Maximieren der Events ist jetzt auch gelöst. Hab da einen Pointer nicht überprüft und somit wollte ich den Wert eines Kategorie-Headers abrufen - der natürlich NIL ist. War somit kein Problem des JvInspectors sondern ein von mir generiertes
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#52
  Alt 15. Sep 2008, 09:25
Zitat:
Das man die MainForm nicht verschieben kann, ist auch noch absichtlich. Das Script soll nur eingeschränkte Kontrolle über das Widget haben - dazu zählt für mich auch die Positionierung des Widgets. Somit funktioniert das mainform.SetLeft nicht.
warum ?


damit kann man z.b. widgets am rand verstecken (nur ein kleiner teil guckt raus) und wenn mann rüberfährt kommt es auf den desktop gefahren
oder das widget könnte der maus folgen
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#53
  Alt 15. Sep 2008, 13:05
Zitat von jokerfacehro:
warum ?
damit kann man z.b. widgets am rand verstecken (nur ein kleiner teil guckt raus) und wenn mann rüberfährt kommt es auf den desktop gefahren
oder das widget könnte der maus folgen
Naja, wenn ich genauer drüber Nachdenke weiß ich es gerade selbst nicht so genau warum. Hab mich jetzt doch überreden lassen, TwgForm.Left usw. funktionieren jetzt wie man erwartet. Die neue Version werd ich im Laufe des Tages hochladen, hab noch ein paar andere Stellen, die ich verbessern will.
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#54
  Alt 15. Sep 2008, 13:54
Ich habe gerade Version 0.32 hochgeladen.

Diesmal hab ich versucht, mir eure Vorschläge sehr zu Herzen zu nehmen. Dabei ist folgendes herausgekommen

Im Programm kann man jetzt einen Proxy-Server für Internet-Verbindungen angeben. Diese Einstellung wird dann an alle Widgets weitergegeben und automatisch in die endsprechende Komponente gespeichert. Ich hoffe, dass die Proxy-Einstellungen funktionieren - bei mir hats jedenfalls geklappt.

Jokerfacehro hat auch sehr gute Vorschläge gebraucht - natürlich hab ich versucht, so viele wie möglich umzusetzen. Folgende Liste ist daraus entstanden:
  • Fehler in Script-Engine behoben: nach dem Eingeben einer Zahl musste ein Leerzeichen hinter die Zahl geschrieben werden, wenn danach ein - folgte
  • Neue Funktion in der Script-Engine: Delay(ms: cardinal);
  • AV im Object-Inspector behoben
  • TwgForm-Events OnMouseIn, OnMouseOut, OnSetFocus und OnLostFocus werden jetzt auch aufgerufen
  • TwgForm.Left sowie TwgForm.Top haben jetzt keine Auswirkung auf die Darstellung mehr sondern die Funktionen lesen und setzen jetzt die Position der Form

Außerdem hab ich jetzt ein paar nützliche Startparameter hinzugefügt, mit denen man das Programm beim Start besser steuern kann.

Der Download sowie der komplette ChangeLog befindet sich (wie immer) im ersten Post
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#55
  Alt 15. Sep 2008, 16:34
ganz hungrig aufs testen

edit: was isn da passiert statt 2,6mb is das proggi nur noch 800kb klein !

edit 2:haha hab nen neuen fehler

das sind meine prozeduren im network traffic, die angelegt bzw verändert habe:

Delphi-Quellcode:
procedure wgImage1MouseIn(Sender: TObject);
var i:integer;
begin

for i:=1 to 31 do begin
mainform.setFormAlpha(100+i*5);
mainform.RenderForm;
mainform.setLeft(1024-25-(i-1)*4);
delay(10);

end;
end;



procedure wgImage1MouseOut(Sender: TObject);
var i:integer;
begin

for i:=1 to 31 do begin
mainform.setFormAlpha(255-i*5);
mainform.RenderForm;
mainform.setLeft(1024-147+(i-1)*4);
delay(10);

end;

procedure InitializeWidget;
begin
  Adapters := Adapters.Create;
  wgTimer1Timer(nil);
  mainform.setLeft(1024-27);
  mainform.setTop(768-97);
end;
wenn das widget rausfährt und ich beim rausfahren mit der maus das widget verlasse, wird das onmouseout event nicht ausgelöst, genauso is es auch beim onmousein, wenn das widget wieder nach rechts fährt und ich mit der maus während des fahrens auf das widget zeige, fährt es trotzdem weiter.

delay, setLeft, setTop, inspector events klappen funzt
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#56
  Alt 15. Sep 2008, 16:57
Ich hab die exe mit UPX verkleinert
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#57
  Alt 15. Sep 2008, 17:17
was isn upx ?
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#58
  Alt 15. Sep 2008, 17:20
Bei Google suchenUPX
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#59
  Alt 15. Sep 2008, 17:24
Zitat:
UPX-komprimierte Programmdateien haben zudem größere Auswirkungen auf die Systemresourcen. Das Betriebssystem kann kein dekomprimiertes Abbild direkt vom Datenträger lesen (siehe Virtuelle Speicherverwaltung), wie es das im Falle von unkomprimierten ausführbaren Dateien macht. Stattdessen reserviert der UPX-Stummel einen Speicherbereich für die entpackten Daten, der zugeordnet wird, solange die Programmdatei geladen bleibt – ob sie verwendet wird oder nicht. Dies verhindert auch das Wiederverwenden der Ressourcen, wenn mehrere Instanzen des selben UPX-komprimierten Programms geladen sind.
is ja nich so praktisch :/

ansonsten coolet ding
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#60
  Alt 15. Sep 2008, 20:20
Zitat von jokerfacehro:
edit 2:haha hab nen neuen fehler

das sind meine prozeduren im network traffic, die angelegt bzw verändert habe:
[...]
wenn das widget rausfährt und ich beim rausfahren mit der maus das widget verlasse, wird das onmouseout event nicht ausgelöst, genauso is es auch beim onmousein, wenn das widget wieder nach rechts fährt und ich mit der maus während des fahrens auf das widget zeige, fährt es trotzdem weiter.
Das Problem wird sich so nicht lösen lassen - egal was ich für eine Krücke einbaue - das liegt einfach an Windows. Das Event wird nicht ausgeführt solange das andere Event noch läuft - hier: CM_MOUSEENTER und CM_MOUSELEAVE. Du wirst das selbe Phänomen auch haben, wenn du eine normale Anwendung mit Delphi entwickelst.
Um das Problem zu behen, musst du im Programm eine Krücke verwenden: einen Timer.

Zitat von jokerfacehro:
delay, setLeft, setTop, inspector events klappen funzt
Da bin ich ja beruhigt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 26   « Erste     456 7816     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz