Delphi-PRAXiS
Seite 2 von 7     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Desktop Widget Engine (v0.72) (https://www.delphipraxis.net/119493-desktop-widget-engine-v0-72-a.html)

littleDave 11. Sep 2008 20:08

Re: Desktop Widget Engine (v0.31)
 
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. :zwinker:

jokerfacehro 12. Sep 2008 11:13

Re: Desktop Widget Engine (v0.31)
 
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

littleDave 12. Sep 2008 15:28

Re: Desktop Widget Engine (v0.31)
 
Zitat:

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:

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 :zwinker: :
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:

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.

jokerfacehro 12. Sep 2008 17:14

Re: Desktop Widget Engine (v0.31)
 
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 :shock:


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 :wink:

littleDave 12. Sep 2008 17:21

Re: Desktop Widget Engine (v0.31)
 
Zitat:

Zitat von jokerfacehro
naja, ganz schön umständlich, warum reagiert denn das onmousein der mainform nicht :shock:

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:

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 :wink:

Werd ich noch machen, hab bisher noch nicht daran gedacht.

jokerfacehro 12. Sep 2008 17:24

Re: Desktop Widget Engine (v0.31)
 
so hab grad was ausprobiert:

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

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

littleDave 12. Sep 2008 17:40

Re: Desktop Widget Engine (v0.31)
 
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:

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

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.

jokerfacehro 12. Sep 2008 17:54

Re: Desktop Widget Engine (v0.31)
 
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

littleDave 12. Sep 2008 18:10

Re: Desktop Widget Engine (v0.31)
 
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.

jokerfacehro 14. Sep 2008 21:17

Re: Desktop Widget Engine (v0.31)
 
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

littleDave 15. Sep 2008 00:30

Re: Desktop Widget Engine (v0.31)
 
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 :oops:

jokerfacehro 15. Sep 2008 08:25

Re: Desktop Widget Engine (v0.31)
 
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

littleDave 15. Sep 2008 12:05

Re: Desktop Widget Engine (v0.31)
 
Zitat:

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.

littleDave 15. Sep 2008 12:54

Re: Desktop Widget Engine (v0.32)
 
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

jokerfacehro 15. Sep 2008 15:34

Re: Desktop Widget Engine (v0.32)
 
ganz hungrig aufs testen :mrgreen:

edit: :o 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 :thumb:

littleDave 15. Sep 2008 15:57

Re: Desktop Widget Engine (v0.32)
 
Ich hab die exe mit UPX verkleinert

jokerfacehro 15. Sep 2008 16:17

Re: Desktop Widget Engine (v0.32)
 
was isn upx ? :shock:

littleDave 15. Sep 2008 16:20

Re: Desktop Widget Engine (v0.32)
 
Bei Google suchenUPX :zwinker:

jokerfacehro 15. Sep 2008 16:24

Re: Desktop Widget Engine (v0.32)
 
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

littleDave 15. Sep 2008 19:20

Re: Desktop Widget Engine (v0.32)
 
Zitat:

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:

Zitat von jokerfacehro
delay, setLeft, setTop, inspector events klappen funzt :thumb:

Da bin ich ja beruhigt.

jokerfacehro 15. Sep 2008 19:34

Re: Desktop Widget Engine (v0.32)
 
alles klar, werds morgen mal nachtesten obs mit delphi klappt ;)

mit dem timer funzt es, aber sehr krückig.
ich wollte grad die
Delphi-Quellcode:
wgTimer2Timer(Sender);
von hand aufrufen, da meint er, existiert nicht :shock:

littleDave 16. Sep 2008 14:55

Re: Desktop Widget Engine (v0.32)
 
Die Timer-Funktion kann natürlich nur aufgerufen werden, wenn sie vorher bereits deklariert wurde. Ich versuche gerade die ScriptEngine zu erweitern, so dass man Funktionen zuerst auch als "Forward" deklarieren kann. Wie lange das dauert, weiß ich noch nicht.

jokerfacehro 16. Sep 2008 18:41

Re: Desktop Widget Engine (v0.32)
 
hast ja noch en bischen was zu basteln ;)

littleDave 17. Sep 2008 01:37

Re: Desktop Widget Engine (v0.32)
 
Zitat:

Zitat von jokerfacehro
hast ja noch en bischen was zu basteln ;)

Auch deswegen ist es ja erst Version 0.32 :zwinker:

littleDave 19. Sep 2008 15:15

Re: Desktop Widget Engine (v0.4)
 
Sodala, Version 0.4 ist jetzt online. Seit dem letzen Release hat sich intern einiges getan.

Zum einen Besitzt jedes Widget einen Security-Layer. Über diesen Layer kann jedem Widget individuell bestimmte Aktionen verboten werden. Z.b. kann man jetzt einzelnen Widgets den Zugang zum Internet verbieten. Per Standard kann jedes Widget grundsätzlich eine Verbindung zum Internet/Netzwerk aufbauen, jedoch wird vor jeder Verbindung ein Dialog angezeigt, ob man das wirklich möchte.

Die Sicherheitseinstellungen können über das Popup-Menü des jeweiligen Widgets eingesehen und bearbeitet werden. Es sind zwar noch nicht all zu viele Einstellungen, aber vielleicht kommen die ja noch ;-)

Zusätzlich kann man jetzt global Einstellen, ob überhaupt Zugriff zum Netzwerk/Internet erlaubt sein soll. Zudem kann man jedem Widget individuell sagen, welche Rechte es auf dem Dateisystem hat. Der Zugriff auf das Dateisystem kann auch global deaktiviert werden.

Bisher sind ja noch alle Widgets von mir und enthalten keinen Schad-Code. Jedoch ist das zukünftig bei externen Programmen nicht mehr so sicher - somit hab ich jetzt schon mal diesen Layer eingebaut.

Der Download sowie den ChangeLog findet ihr, wie immer :zwinker:, im ersten Post

Grüße
Dave

PS: @jokerfacehro:
ich hab es noch nicht geschafft, dass man Funktionen als "forward" deklarieren kann. Dauert daher noch etwas

toms 19. Sep 2008 16:51

Re: Desktop Widget Engine (v0.4)
 
Hallo Dave

Du hast eine tolle Arbeit geleistet :thumb:

Anbei noch einige Bemerkungen & Vorschläge, vor allem was das GUI & Standards betrifft.
  • PopUp Menu der Widgets:
    Neben dem "Close Widget" sollte es vielleicht zusätzlich noch ein Menu "Hide Widget" geben.
    Manchmal möchte man ein Widget nur temporär ausblenden aber nicht ganz entfernen.
  • Fenster "Desktop Widget Engine":
    • Schaue mal z.B in Delphi wie die Menübezeichnungen aussehen.
      -> Wann steht hiner einem Menuitem ein "..." und wann nicht?
      -> Ich würde wie Delphi und die meisten Anwendungen Nomen mit Großbuchstaben anfangen
      (auch im Englischen) Also z.B anstatt "Program settings" -> "Program Settings"
    • Die Bezeichnung "Close Widget" schließt ein Widget nicht nur sondern entfernt es.
      Ich würde darum die Bezeichnung in "Remove Widget" umbenennen.
    • Unter dem Menü "Editor" könntest du noch ein Menüitem "Edit Selected Widget" hinzufügen.
    • Menü "Widgets": Anstatt "Form type" würde ich "Form Style" schreiben. (so wie Delphi)
    • Receive Mouse ist nicht unbedingt verständlich was damit gemeint ist.
      Vielleicht könnte man "Enable Mouse Events" schreiben.
    • Öffnen Dialog Titel: Anstatt "Öffnen" könntest du "Load Theme" als Titel nehmen.
      Analog beim Speichern Dialog.
  • Settings Dialog: "Ok" Button in "OK" Button umbenennen.
  • Widget Editor:
    • Für die Menübezeichnungen gilt gleiches wie schon oben beschrieben.
    • Menü Edit: "UnDo" in die übliche Schreibweise "Undo" umbenennen. Auch "ReDo" -> "Redo"
    • Menü Search: "Search..." in "Find..." umbenennen.
      "Search Next" in "Search Again" umbenennen.
  • Tray Icon PopupMenü: "Show Main Window" resp. "Hide Main Window" sind nicht immer synchron mit
    dem tatsächlichen Status (sichtbar / unsichtbar) des Fensters.

jokerfacehro 19. Sep 2008 18:18

Re: Desktop Widget Engine (v0.4)
 
Zitat:

Tray Icon PopupMenü: "Show Main Window" resp. "Hide Main Window" sind nicht immer synchron mit
dem tatsächlichen Status (sichtbar / unsichtbar) des Fensters.
jop


hab aber noch nicht weiter getestet, hab grad kein bock wegn meiner verletzung muss ich mich schonen :/

littleDave 19. Sep 2008 19:37

Re: Desktop Widget Engine (v0.4)
 
Zitat:

Zitat von toms
Hallo Dave

Du hast eine tolle Arbeit geleistet :thumb:

Danke für dein Feedback, sowas hört man gerne :)

Zitat:

Zitat von toms
Anbei noch einige Bemerkungen & Vorschläge, vor allem was das GUI & Standards betrifft.

Die werd ich mir auf jeden Fall zu Herzen nehmen.

Zitat:

Zitat von toms
PopUp Menu der Widgets:
Neben dem "Close Widget" sollte es vielleicht zusätzlich noch ein Menu "Hide Widget" geben.
Manchmal möchte man ein Widget nur temporär ausblenden aber nicht ganz entfernen.

Das werd ich auf jeden Fall einbauen, mal schauen, wie ich das am beste löse.

Zitat:

Zitat von toms
Fenster "Desktop Widget Engine":
Schaue mal z.B in Delphi wie die Menübezeichnungen aussehen.
-> Wann steht hiner einem Menuitem ein "..." und wann nicht?
-> Ich würde wie Delphi und die meisten Anwendungen Nomen mit Großbuchstaben anfangen
(auch im Englischen) Also z.B anstatt "Program settings" -> "Program Settings"

Danke für den Hinweis :thumb:, daran hab ich bisher noch nicht gedacht. Werd die Menüs auf jeden Fall anpassen.

Zitat:

Zitat von toms
  • Fenster "Desktop Widget Engine":
    • Die Bezeichnung "Close Widget" schließt ein Widget nicht nur sondern entfernt es. Ich würde darum die Bezeichnung in "Remove Widget" umbenennen.
    • Unter dem Menü "Editor" könntest du noch ein Menüitem "Edit Selected Widget" hinzufügen.
    • Menü "Widgets": Anstatt "Form type" würde ich "Form Style" schreiben. (so wie Delphi)
    • Receive Mouse ist nicht unbedingt verständlich was damit gemeint ist.
      Vielleicht könnte man "Enable Mouse Events" schreiben.
    • Öffnen Dialog Titel: Anstatt "Öffnen" könntest du "Load Theme" als Titel nehmen.
      Analog beim Speichern Dialog.
  • Settings Dialog: "Ok" Button in "OK" Button umbenennen.
  • Widget Editor:
    • Für die Menübezeichnungen gilt gleiches wie schon oben beschrieben.
    • Menü Edit: "UnDo" in die übliche Schreibweise "Undo" umbenennen. Auch "ReDo" -> "Redo"
    • Menü Search: "Search..." in "Find..." umbenennen.
      "Search Next" in "Search Again" umbenennen.

Sind alles wunderbare Vorschläge - jetzt hab ich mal ne Liste, die ich abarbeiten kann. :thumb: Danke dir für deine Mühe - das ist mal wirklich ein extrem konstruktives Feedback. Sorry dass ich nicht auf jeden Punkt eingehe, aber ich denke, es ist so etwas übersichtlicher.

Zitat:

Zitat von toms
Tray Icon PopupMenü: "Show Main Window" resp. "Hide Main Window" sind nicht immer synchron mit

Das hab ich auch schon beobachtet - jedoch noch nicht behoben :oops: - werds aber noch verbessern.
dem tatsächlichen Status (sichtbar / unsichtbar) des Fensters.

littleDave 23. Sep 2008 19:16

Re: Desktop Widget Engine (v0.41)
 
Ich mal wieder, Version 0.41 ist jetzt online.

Ich hab die vielen Vorschläge von toms bereits angepasst - fertig bin ich noch nicht, jedoch hab ich bereits fast alles umgesetzt. Warum ich jetzt schon eine neue Version hochlade hat den Grund, dass ich einen Memory-Leak in der Script-Sprache behoben habe. Dieser Memory-Leak betrifft viele Operationen mit Records. Da diese Sachen relativ häuftig aufgerufen werden können, würden die Systemresourcen schnell in den Keller gehen können. Daher der vorzeitige Release.

Ich hab jetzt auch noch ein neues Widget hinzugefügt: nen Goldfisch - EWeiss' Project fand ich total super - natürlich hab ich vorher per PM um Erlaubniss gefragt.

Da das Packet jetzt jedoch selbst mit 7zip mehr als 3 MB hat, hab ich das Packet aufgesplittet. Das Hauptprogramm gibts jetzt mit 6 Widgets. Zusätzlich gibt es jetzt noch ein weiteres Download-Packet, in dem nur weitere Widgets untergebracht sind. Beide Packete befinden sich im ersten Post (genauso wie der ChangeLog)

Grüße
Dave

Namenloser 23. Sep 2008 19:31

Re: Desktop Widget Engine (v0.41)
 
Hi,

hab ja heir schon länger nichts mehr geschrieben. IMO hat sich das Programm schön entwickelt - Die Widgets und das Haupfenster sehen jetzt noch besser aus, und der Ressourcenverbrauch hat sich auch verbessert (in den letzten Versionen war mir ja noch aufgefallen, wie der Speicherverbracuh mit der Zeit erheblich anstieg).

Leider konnte ich das netzwerktrafficwidget und die überarbeiteten Wetter- und Shputbox-widgets nicht testen, weil sich dein "Firewall"-Dialogfeld nicht wegklicken lässt. Ich klicke auf Allow, aber nichts passiert... (bei Not Allow passiert auch nichts).

Edit: was mir grade noch auffällt: Der Rand des Textes im Firewall-Fenster ist teilweise Transparent. Wird wohl an den verwendeten Graphics32 liegen, weil ich mich an dieses Problem noch von einem eigenen Projekt erinnere.

Edit2: das Programm ließ sich leider nur über den taskmanager beenden. Lag wahrscheinlich an den noch geöffneten "Firewall"-Fenstern (?)

littleDave 23. Sep 2008 19:59

Re: Desktop Widget Engine (v0.41)
 
Zitat:

Zitat von NamenLozer
hab ja heir schon länger nichts mehr geschrieben. IMO hat sich das Programm schön entwickelt - Die Widgets und das Haupfenster sehen jetzt noch besser aus, und der Ressourcenverbrauch hat sich auch verbessert (in den letzten Versionen war mir ja noch aufgefallen, wie der Speicherverbracuh mit der Zeit erheblich anstieg).

Das ist wirklich gut zu hören :)

Zitat:

Zitat von NamenLozer
Leider konnte ich das netzwerktrafficwidget und die überarbeiteten Wetter- und Shputbox-widgets nicht testen, weil sich dein "Firewall"-Dialogfeld nicht wegklicken lässt. Ich klicke auf Allow, aber nichts passiert... (bei Not Allow passiert auch nichts).

Ich habs gerade bei mir Reproduzieren können. Irgendwie funktioniert der Dialog nur im Debugger :?. Ich hab eben eine neue Version hochgeladen, die den Fehler nicht mehr drinnen hat. Hab jetzt einfach einen simplen MessageDlg benutzt - der funktioniert jedenfalls. Um den Dialog werd ich mich auch noch kümmern. Danke für den Hinweis.

littleDave 24. Sep 2008 13:48

Re: Desktop Widget Engine (v0.41)
 
Ich hab gerade ein Update hochgeladen, mit dem das Problem mit den Mausevents behoben ist. Das Problem hat betrifft alle Widgets, daher ist ein komplettes Update empfehlenswert. Das Problem äußert sich so, dass man das jeweilige Widget zwar verschieben kann, es aber auf keine Maustasten reagiert. Das Problem dabei war die Methode, mit der ich die Widgets verschiebe.

Das Problem trat bei mir nur auf, wenn ich mehrere Widgets gleichzeitig offen habe, eine genau Zahl konnt ich dabei nicht festlegen. Das Problem ist, dass Windows anscheindend das MouseMove-Event sendet, obwohl die Maus nicht verschoben wurde.

Ich hab jedenfalls das Problem jetzt behoben.
Grüße
Dave :hi:

Larsi 24. Sep 2008 14:04

Re: Desktop Widget Engine (v0.41)
 
Also ich finde das Programm echt super :thumb:

Ich finde nur, das es einfach zu wenig Komponenten gibt zum Beispiel eine Progressbar fehlt mir! Kansnt du mir eventuell den code für diese "Firewall" geben wenn ein Widget Zugang zum Internet braucht? Ich versuch mich schon so lange an einer Firewall aber irgendwie krieg ich das nicht hin. Ist die Firewall überhaupt von dir, ja oder?

littleDave 24. Sep 2008 14:28

Re: Desktop Widget Engine (v0.41)
 
Zitat:

Zitat von Larsi
Also ich finde das Programm echt super :thumb:

Danke für die Blumen :thumb: *freu* :)

Zitat:

Zitat von Larsi
Ich finde nur, das es einfach zu wenig Komponenten gibt zum Beispiel eine Progressbar fehlt mir! Kansnt du mir eventuell den code für diese "Firewall" geben wenn ein Widget Zugang zum Internet braucht? Ich versuch mich schon so lange an einer Firewall aber irgendwie krieg ich das nicht hin. Ist die Firewall überhaupt von dir, ja oder?

Naja, die "Firewall" ist nur für das Programm und keine wirkliche Firewall.

Der Zugriff zum Internet ist so geregelt:
Das Programm an sich bietet jedem Widget die Möglichkeit an, bestimmte Anfragen anfragen ins Internet/Netzwerk zu senden und zu empfangen. Diese Methoden werden von der ScriptEngine nicht direkt aufgerufen - stattdessen wird eine vorgeschaltete Dummy-Methode aufgerufen, die ungefähr so aussieht (mal für IdHTTP):
Delphi-Quellcode:
function TIdHTTP_Get(Sender: TidHTTP; Url: string): string;
begin
  // hier der Security-Layer bzw. die "Firewall"
  if AllowInternetConnection(Url) then
     result := Sender.Get(Url)
  else
     result := '';
end;
Das ganze ist natürlich noch etwas erweitert, aber der Grundaufbau ist so relativ einfach zu beschreiben. Die Funktion AllowInternetConnection schaut dabei ungefähr so aus:
Delphi-Quellcode:
function AllowInternetConnection(Url: string): boolean;
begin
  // Grundlegende Abfrage, ob das Widget überhaupt ins Internet darf
  result := CurrentWidget.Security.NetworkAllowed;
  if result then
  begin
    // Wenn ich hier angekommen bin, darf das Widget ins Internet.
    // Nun muss ich noch überprüfen, ob das Widget ohne Nachrage beim
    // Benutzer ins Internet darf
    if not CurrentWidget.Security.NetworkWithoutUserConfirmation then
    begin
      // Jetzt frag ich den Benutzer ob er das auch erlaubt
      case MessageDlg('Das Widget blablabla will sich zu '+URL+' verbinden.', mtWarning,
                      [mbYes, mbNo], 0) of
      // Benutzer sagt ja
      ID_YES : result := True;
      ID_NO : result := False;
      end;
    end else
    begin
      // Wenn ich hier her komme, dann darf das Widget immer ins Internet
      // - auch ohne den Benutzer zu fragen.
      // Dieser Teil ist zwar nicht im eigendlichen Quelltext und dient hier
      // nur als Verdeutlichung, da result ja schon True ist
      result := True;
    end;
  end;
end;
Wenn du wirklich mal eine in Delphi geschriebene Firewall die anschauen willst (sammt Quelltext), solltest du mal bei SourceForge.net vorbeischauen. Das Ding ist jedoch realtiv komplex und wirklich nicht einfach zu verstehen. Das Programm auf SourceForge benutzt übrigens MadCodeHook (glaub so heißt das), was NICHT OpenSource ist und kostet mit Quelltext ca. 900 USD - ohne Quelltext ca. 200 USD. Wenn du wirklich mal ne Firewall programmieren willst, solltest du dich entweder sehr viel mit CodeInjection oder gleich mit Treiberprogrammierung (zusammen mit einem C/C++ Lehrgang) beschäftigen. Ich denke nicht, dass du das eben innerhalb von 2 Wochen oder gar Monaten schaffen wirst.

Larsi 24. Sep 2008 18:41

Re: Desktop Widget Engine (v0.41)
 
Vielen Dank für deinen ausführlichen Post! Deine Methode, funkitoniert die nur bei Plugins von deine, Programm oder schlägt diese Methode so bei jeder Anwendung "alarm"?

Neutral General 24. Sep 2008 18:52

Re: Desktop Widget Engine (v0.41)
 
Wie soll diese Methode denn bei anderen Programmen Alarm schlagen?

toms 24. Sep 2008 18:54

Re: Desktop Widget Engine (v0.41)
 
Zitat:

Zitat von Larsi
Deine Methode, funkitoniert die nur bei Plugins von deine, Programm oder schlägt diese Methode so bei jeder Anwendung "alarm"?

Zitat:

Zitat von littleDave
Naja, die "Firewall" ist nur für das Programm und keine wirkliche Firewall.

:gruebel: :gruebel: :gruebel:

littleDave 24. Sep 2008 19:05

Re: Desktop Widget Engine (v0.41)
 
Natürlich funktioniert diese Methode nur bei den Widgets :zwinker:. Hab ja keinen Hook - außerdem, warum sollte meine Widget Engine eine Firewall sein ;-)

Zitat:

Zitat von toms
:gruebel: :gruebel: :gruebel:

Fragst du dich gerade, worum es geht? Es geht gerade um den Security-Layer, den ich eingebaut habe. Ich hab da so eine Art Firewall eingebaut, jedoch nur für die Widgets ;-)

littleDave 27. Sep 2008 00:10

Re: Desktop Widget Engine (v0.5)
 
Schon wieder ich :stupid: Version 0.5 ist jetzt online.

Ich hab mal wieder die Widget-Möglichkeiten etwas erweitert. Jetzt ist es möglich, Edit-Felder, CheckBox-Felder sowie Fortschrittsanzeigen hinzuzufügen. Dadurch kann man jetzt schon bessere und interaktivere Widgets erstellen. Was zwar noch fehlt ist die Möglichkeit, mehrere Forms in einem Widget zu benutzen, jedoch bin ich mir noch nicht sicher, wie ich das genau machen will.

Außerdem hab ich mich mal an die Optimierung gesetzt und hab sehr viel rausholen können. Ich habe mal 10 Widgets auf einmal geladen - zusammen mit 6 Fischen. Vorher hatte ich eine CPU-Auslastung von ca. 35-40%, jetzt habe ich eine Auslastung von ca. 2-10%. Zwar habe ich auch eine schnelle CPU (AMD X2 4800+), aber der Performanceschub ist schon gewaltig.

Da ja letztes mal das Problem mit den Maustasten aufkam, hab ich mich mal hingesetzt und eine Lösung gefunden. Nun sollte das Problem nicht mehr auftreten.

Da ich neue Komponenten hinzugefügt habe, hab ich auch gleich zwei neue Widgets erstellt: eine Suche für Google.com und eine Suche für die DelphiPraxis. Dabei muss man einfach nur die Suchbegriffe in das Edit-Feld der Widgets eingeben und der Browser öffnet sich mit der gewünschten Suche. Diesmal ist auch eine ProgressBar für Larsi mit dabei ;-)

Der Download sowie der ChangeLog ist im ersten Post zu finden.
Grüße
Dave

Namenloser 27. Sep 2008 00:24

Re: Desktop Widget Engine (v0.5)
 
Ui, das geht ja echt flott bei dir. Ich wpnschte, ich köme mit meinen Projekten auch so schnell voran...

Also die CPU-Auslastung ist wirklich deutlich gesunken durch das Update. Ich kam mit meinen 6 Widgets (Clock, Shoutbox, 2 Suchfelder, Fisch, Network Traffic) nie über 1% Auslastung (2,4Ghz Quad).

Das Networktraffic-Widget funktioniert bei mir aber nicht, was wahrscheinlich daran liegt, dass ich W-LAN habe.

Ich mag es, wie der Fisch in der neuen Version wegschwimmt, wenn man versucht, ihn zu fangen. Ich hab ihn aber trotzdem erwischt :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.
Seite 2 von 7     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz