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 5 von 26   « Erste     345 6715     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
 
#41
  Alt 11. Sep 2008, 20:08
Ich bin früher auch immer nur über ein Proxy reingekommen und ich weiß wie blöd es ist, wenn man ein Programm hat, das ohne Internet extrem eingeschrängt ist. Von daher weiß ich wie blöd sowas ist und leider hab ich das Proxy-Problem bisher verdrängt.
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#42
  Alt 12. Sep 2008, 11:13
meine prozedur:

Delphi-Quellcode:
procedure MouseEnter(Sender: TObject);
begin

mainform.setFormAlpha(88);
mainform.RenderForm;

end;
das ganze hab ich mit OnMouseIn und OnSetFocus verbunden, funzt nich
ich hab die prozedur einfach in den quelltext geschrieben ohne deklaration, die ja anscheinend nicht notwendig ist bei deinem widget-system


ich will die alphawerte dynam. setzen, wenn ich rüberfahre soll sich der alphawert ändern.

bezüglich objektinspektor, wär geil wenn ereignissprozeduren wie bei delphi bei doppelclick auf das ereignis einfach hinzugefügt werden

und acha das mit dem minimieren bei deinem proggi funzt auch noch nicht richtig, nervt auch dass das immer im tna startet. wäre geil wenn du das programm in 2 proggis aufteilst, eines zum hinzufügen und bearbeiten von widgets und eines das die widgets anzeigt, damit spart man auch paar ressourcen
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#43
  Alt 12. Sep 2008, 15:28
Zitat von jokerfacehro:
meine prozedur:
[...]
das ganze hab ich mit OnMouseIn und OnSetFocus verbunden, funzt nich
ich hab die prozedur einfach in den quelltext geschrieben ohne deklaration, die ja anscheinend nicht notwendig ist bei deinem widget-system
Das stimmt schon bisher. Jedoch hab ich gerade gesehen, dass es noch ein Problem gibt: dass OnSetFocus und das OnLostFocus der WidgetForm wird nicht ausgeführt. Um ein Ziel doch noch relativ einfach zu erreichen, kannst du folgendes machen:

Öffne das Widget im Editor und setze bei jedem UNTER-Element von wgImage1 die Eigenschaft "MouseTransparent" auf True. Dann wählst du wgImage1 aus (dort muss "MouseTransparent" auf False stehen) und weist dann die Events OnMouseIn und OnMouseOut zu. In die Events schreibst du dann ein SetFormAlpha und das RenderForm von oben - FERTIG!

Zitat von jokerfacehro:
bezüglich objektinspektor, wär geil wenn ereignissprozeduren wie bei delphi bei doppelclick auf das ereignis einfach hinzugefügt werden
Das gibts schon. Hier mal ein Zitat aus dem ersten Post :
Zitat:
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.
Zitat von jokerfacehro:
und acha das mit dem minimieren bei deinem proggi funzt auch noch nicht richtig, nervt auch dass das immer im tna startet. wäre geil wenn du das programm in 2 proggis aufteilst, eines zum hinzufügen und bearbeiten von widgets und eines das die widgets anzeigt, damit spart man auch paar ressourcen
Wenn du das Programm mit dem Parameter -normal startest, wird es nicht im TNA gestartet. Dafür kannst du am besten eine Verknüpfung anlegen und dort den Parameter eintragen. Später wird es dann eine Einstellung dafür geben.
Dass mit einem seperaten Editor ist doch nicht resourcenschonender - da der Editor nur bei Bedarf geladen wird und somit normalerweise nicht im Speicher ist.
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#44
  Alt 12. Sep 2008, 17:14
Zitat:
Öffne das Widget im Editor und setze bei jedem UNTER-Element von wgImage1 die Eigenschaft "MouseTransparent" auf True. Dann wählst du wgImage1 aus (dort muss "MouseTransparent" auf False stehen) und weist dann die Events OnMouseIn und OnMouseOut zu. In die Events schreibst du dann ein SetFormAlpha und das RenderForm von oben - FERTIG!
naja, ganz schön umständlich, warum reagiert denn das onmousein der mainform nicht


und cool wäre auch ein rechtemaus menü für den quelltexteditor z.b. zum kopieren einfügen.
ich hab nen gebrochenes schlüsselbein und nutze vorzugsweise die maus, das ständige umgreifen auf die tastatur zu strg+v dauert da ewig
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#45
  Alt 12. Sep 2008, 17:21
Zitat von jokerfacehro:
naja, ganz schön umständlich, warum reagiert denn das onmousein der mainform nicht
Naja, die MainForm ist nur eine Art Dummy-Componente, die nur den maximalen Zeichenbereich eingrenzt. Ich hab es noch nicht geschafft, gewisse Events auch in MainForm auslösen zu lassen - wird aber noch kommen.

Zitat von jokerfacehro:
und cool wäre auch ein rechtemaus menü für den quelltexteditor z.b. zum kopieren einfügen. ich hab nen gebrochenes schlüsselbein und nutze vorzugsweise die maus, das ständige umgreifen auf die tastatur zu strg+v dauert da ewig
Werd ich noch machen, hab bisher noch nicht daran gedacht.
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#46
  Alt 12. Sep 2008, 17:24
so hab grad was ausprobiert:

wenn ich mit dem minus zeichnen ( - ) rechnen will, müssen immer leerzeichen darum sein, ansonsten kommt nen fehler

ich hab jetz ne fade funktion gemacht:

Delphi-Quellcode:
procedure wgImage1MouseIn(Sender: TObject);
var i,k:integer;
begin
for i:=1 to 31 do begin
mainform.setFormAlpha(100+(i*5));
mainform.RenderForm;
sleep(10);
end;
end;
funktioniert wunderbar, nur wird das onmouseout event garnicht ausgeführt, wenn das onmousein event gerade noch ausgeführt wird:

Delphi-Quellcode:
procedure wgImage1MouseOut(Sender: TObject);
begin
sleep(700);
mainform.setFormAlpha(100);
mainform.RenderForm;
end;

edit: also zuerst onmouseout und dann onmousein funktioniert, aber erst onmousein und dann onmouseout funktioniert nicht
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#47
  Alt 12. Sep 2008, 17:40
Also wenn du Sleep() benutzt, wird das normale Windows.Sleep ausgeführt. Daher wird die komplette Anwendung (auch die anderen Widgets) für die Zeit stillgelegt. Somit wird bei dir auch kein Application.ProcessMessage aufgerufen, um auf neue Events zu regieren. Ich würd dir wirklich empfehlen, eher einen Timer zu verwenden. Das Objekt "Application" hab ich absichtlich nicht freigegeben, daher gibt es auch kein Application.ProcessMessages, von daher wird eine Delay-Funktion im Moment noch schwierig. Aber ich werd eine Delay-Funktion im nächsten Release mit einbauen, damit sowas nicht mehr so problemtisch wird.
Im Moment kann ich dir leider nur zu einem Timer raten.

Zitat von jokerfacehro:
wenn ich mit dem minus zeichnen ( - ) rechnen will, müssen immer leerzeichen darum sein, ansonsten kommt nen fehler
Kannst du mir den Abschnitt aufschreiben, damit ich das so bald wie möglich verbessern kann? Normalerweise braucht man kein Leerzeichen vor und/oder nach einem Minus.
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#48
  Alt 12. Sep 2008, 17:54
z.b.

Delphi-Quellcode:
var i,k:integer;
begin
for k:=0 to 8769876 do begin
i:=800-700; //kommt fehler

i:=800 - 700; //funktioniert
end;
end;

edit: wie kann ich nen timer hinzufügen ???


edit 2: das mit dem minuszeichen passiert innerhalb von schleifen
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#49
  Alt 12. Sep 2008, 18:10
Timer: in der Palette die Kategorie "Additional" auswählen, den TwgTimer auswählen und dann einfach auf die Form im Designer klicken. So wie in Delphi

Minuszeichen: Danke für den Hinsweis! Werd mir das anschauen, sobald ich wieder daheim bin, so in ca. 2-3 Tagen.
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#50
  Alt 14. Sep 2008, 21:17
sooo wollte gerade mal mit mainform.setLeft(100); die position verändern, dann wird aber der inhalt des mainform nicht mitverschoben, heißt: es ist nur noch ein teil des widgets zu sehen

edit: es wird die eigenschaft nicht vererbt, ich müsste für jedes objekt des programmes die position extra setzen

Gruß Jokerface
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 26   « Erste     345 6715     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 09:18 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