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 18 von 27   « Erste     8161718 1920     Letzte »    
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.811 Beiträge
 
Delphi 12 Athens
 
#1

Re: Desktop Widget Engine (v0.65)

  Alt 3. Nov 2008, 13:12
Fade-in funktioniert und sieht schön aus.
SideBar nimmt die Widgets ebenfalls mit, perfekt.

Weiter so!

Ich hab gestern mal probiert ein Widget für den RSS-Feed von heise online zu basteln, aber leider erfolglos. Mein ambitionierteres Projekt, nämlich eine Börsenticker scheint damit in weite Ferne zu rücken
Aber ich probiers heute Abend nochmal, XML ist halt für mich noch relativ neu.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#2

Re: Desktop Widget Engine (v0.65)

  Alt 3. Nov 2008, 13:39
Zitat von Sherlock:
Fade-in funktioniert und sieht schön aus.
SideBar nimmt die Widgets ebenfalls mit, perfekt.
Danke fürs Testen, hatte schon Angst, dass die SideBar mal wieder nicht funktioniert

Zitat von Sherlock:
Weiter so!
Mach ich

Zitat von Sherlock:
Ich hab gestern mal probiert ein Widget für den RSS-Feed von heise online zu basteln, aber leider erfolglos. Mein ambitionierteres Projekt, nämlich eine Börsenticker scheint damit in weite Ferne zu rücken
Aber ich probiers heute Abend nochmal, XML ist halt für mich noch relativ neu.
Also ich kann dir ja mal kurz Anhand des "Spiegel Online" - Widgets erklären, wie ich es mache.

Also als erstes Frage ich natürlich den RSS-Feed mit einer wgHTTP-Komponente ab:
wgHTTP1.GetURL('http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml'); Im OnDone-Ereigniss lese ich dann den Inhalt aus und lassen ihn mit dem JvSimpleXML parsen:
Delphi-Quellcode:
procedure wgHTTP1Done(Sender: TObject; Content: string; ResponseCode: integer);
var pXML : TJclSimpleXML;
begin
  pXML := pXML.Create;
  try
    pXML.LoadFromString(Content);
    ParseContent(pXML);
  finally
    pXML.Free;
  end;
end;
So, jetzt ist die Funktion "ParseContent" nicht der XML-Parser, sondern ich füge den relevanten Inhalt in ein neues XML-Element ein. Zusätzlich berechne ich noch die Texthöhe von jedem Eintrag in der Funktion.

Dafür gehe ich in der "ParseContent" - Routine durch alle Einträge durch:
Delphi-Quellcode:
for i:=0 to Root.Items.Count-1 do
begin
  // Unterelement Nummer "i" abrufen
  Item := Root.Items.Item(i);
  // das sollte eigendlich nie passieren, aber sicher ist sicher
  if Item = nil then
     continue;
  // in dem RSS-Feed werden zuerst ein paar Zusatzinformationen
  // mitgesendet. Diese haben alle einen anderen Namen als "item"
  // Da diese für den Inhalt des Feeds erstmal nicht relevant sind
  // überspringen wir diese Einträge
  if Item.Name <> 'itemthen
     continue;
So, wenn jetzt "Item.Name = 'item'" ist, füge ich einen neuen Eintrag in das interne XML-File ein:
Delphi-Quellcode:
newItem := XML.Root.Items.Add('data'); // ein neuer Eintrag
newItem.Items.AddS('msg', Item.Items.ItemNamed('title').Value); // die Überschrift des Feed-Items
newItem.Items.AddS('url', Item.Items.ItemNamed('link').Value); // der Link des Feed-Items
Jetzt berechne ich die Höhe des zukünftigen Eintrags und füge diesen ebenfalls zu "newItem" hinzu.
Delphi-Quellcode:
Rec := Rect(0, 0, tmpBMP.Width - 11, tmpBMP.Height);
                           
tmpBMP.Font.SetName('MS Sans Serif');
tmpBMP.Font.SetSize(8);
// imgLogo, da dies eine "Graphic" - Komponente enthällt.
// für die "Graphic" - Komponente hab ich die DrawText-Methode
// verbessert
imgLogo.Graphic.DrawText(tmpBMP, newItem.Items.Value('msg', ''), Rec,
                         DT_LEFT or DT_CALCRECT or DT_WORDBREAK or DT_NOPREFIX,
                         0, 0);
// jetzt hab ich die Höhe des eintrags und speichere sie in das interne XML-File
height := Rec.Bottom + 7; // noch etwas Pufferabstand: 7 pixel
newItem.Items.AddI('height', height);
So, nun stehen im internen XML-File die Daten, die wirklich wichtig sind. Um genau zu sehen, wie die Sachen gespeichert werden, kannst du am Ende der "ParseContent"-Methode vor dem finally folgendes Einfügen:
ShowMessage(XML.SaveToString); (ACHTUNG: die MessageBox wird sehr lang, zum schließen dann einfach "Enter" drücken)

Jetzt ist noch die OnMeasureItem-Methode der ListBox interessant. Da ich ja in der ParseContent-Methode die Höhe eines Eintrags berechnet habe, kann ich diesen einfach aus dem internen XML-File auslesen:
Delphi-Quellcode:
procedure wgListBox1MeasureItem(Sender: TObject; Target: TBitmap32; Index: integer; var Height: integer);
var Item: TJclSimpleXMLElem;
begin
  // Eintrag Nummer "index" auslesen
  Item := XML.Root.Items.Item(index);
  // Falls dieser Vorhanden ist
  if Item <> nil then
     // Die Höhe aus dem Eintrag "height" zurückgeben
     // 13 ist dabei der Default-Wert, falls "height" nicht vorhanden ist
     Height := Item.Items.IntValue('height', 13);
end;
Du solltest dir noch das OnDraw-Event anschauen, jedoch ist da nicht viel neues dabei.

Ich hoffe, ich konnte dir etwas helfen.
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
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#3

Re: Desktop Widget Engine (v0.66)

  Alt 6. Nov 2008, 12:10
Version 0.66 ist online!

Neue Website: hier

Die erste Version der Website ist jetzt online. Auf der Website könnt ihr eure Widgets und eure PlugIns hochladen und diese natürlich auch Downloaden. Durch die Website hab ich das Download-Prozedere komplett geändert. Im Download-Paket sind jetzt nur noch 2 Widgets vorhanden. Somit muss man sich jetzt nicht mehr Widgets herunterladen, die man garnicht haben will.

Sonst gibt es nicht viele Änderungen, ein paar Probleme mit dem Ausfaden hab ich noch behoben.

Ach ja, noch was: ich hab im SideBar-Code noch ein Fehler mit [Win]+[D] behoben - falls bei euch die SideBar wieder nicht mehr angezeigt wird - sofort sagen, dann mach ich das wieder rückgängig.

Grüße
Dave
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Desktop Widget Engine (v0.66)

  Alt 6. Nov 2008, 13:33
Zitat von littleDave:
Ach ja, noch was: ich hab im SideBar-Code noch ein Fehler mit [Win]+[D] behoben - falls bei euch die SideBar wieder nicht mehr angezeigt wird - sofort sagen, dann mach ich das wieder rückgängig.
Ist bei mir leider der Fall (wenn ich den FormType auf "Desktop Icon" stelle, was ja Standard ist). Ich benutze Vista Home Premium mit Service Pack 1.

Ansonsten alles super (nach wie vor )!

Schön, dass du die Vorschläge zu den Icons berücksichtigt hast.
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#5

Re: Desktop Widget Engine (v0.66)

  Alt 6. Nov 2008, 14:00
Zitat von NamenLozer:
Zitat von littleDave:
Ach ja, noch was: ich hab im SideBar-Code noch ein Fehler mit [Win]+[D] behoben - falls bei euch die SideBar wieder nicht mehr angezeigt wird - sofort sagen, dann mach ich das wieder rückgängig.
Ist bei mir leider der Fall (wenn ich den FormType auf "Desktop Icon" stelle, was ja Standard ist). Ich benutze Vista Home Premium mit Service Pack 1.
Ok, ich habs wieder rückgängig gemacht

Zitat von littleDave:
Schön, dass du die Vorschläge zu den Icons berücksichtigt hast.
Na klar
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
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.811 Beiträge
 
Delphi 12 Athens
 
#6

Re: Desktop Widget Engine (v0.66)

  Alt 6. Nov 2008, 14:03
Gratz zur Website und danke für das heise-widget...muss ichs nimmer machen, ich seh auch gleich was ich falsch gemacht habe, Du hast einfach das Root gleich gelassen und nicht ein anderes genommen.

Am Wochenende schau ich mal nach Börsentickern...mal sehen ob ich das hinbekomme.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Henning der zweite

Registriert seit: 10. Mär 2008
Ort: Braunschweig
21 Beiträge
 
Delphi 5 Standard
 
#7

Re: Desktop Widget Engine (v0.66)

  Alt 8. Nov 2008, 17:21
Also erstmal, ich bin henni aus dem Delphi-Forum.
Zur Thoosje Sidebar: Könnte es sein, das du das Uhrenskin davon abkopiert hast?
Henning D.
  Mit Zitat antworten Zitat
Alt 8. Nov 2008, 21:31     Erstellt von EWeiss
Dieser Beitrag wurde von fkerber gelöscht. - Grund: Inhalt von Autor entfernt
Alt 8. Nov 2008, 21:41     Erstellt von EWeiss
Dieser Beitrag wurde von fkerber gelöscht. - Grund: Inhalt von Autor entfernt
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#10

Re: Desktop Widget Engine (v0.66)

  Alt 9. Nov 2008, 22:48
Zitat von Henning der zweite:
Also erstmal, ich bin henni aus dem Delphi-Forum.
Zur Thoosje Sidebar: Könnte es sein, das du das Uhrenskin davon abkopiert hast?
Ne, ich kannte die Thoosje SideBar da noch nicht, daher nein.

Zitat von EWeiss:
Zitat:
Aber ich hab schon einen Punkt von der Liste mit eingebaut: Wenn man jetzt die SideBar woanders positioniert, werden die angedockten Widgets (jetzt endlich) mit verschoben. Das wollt ich eigendlich schon viel früher einbauen, jedoch hab ich mich erst jetzt dazu überwinden können.
Was hast verwendet meine Magnetic.pas hehehee
Auch nicht, hatte das Andocken an sich ja schon länger drinnen. Das mit den Fenster-An-Fenster-Andocken hab ich später gemacht, jedoch hab ich dafür einfach nur die bisherige Funktion erweitert. Das war noch bevor du die Magnetic.pas veröffentlicht hast - und das "Mit-Verschieben" könnte zwar vom Datum her stimmen, jedoch hab ich das ebenfalls selber eingebaut. Ich will ja nicht, dass sich mehrere Fenster "gleichzeitig" verschieben, sondern bei mir musst ich ja einfach nur die relative Position der Fenster zur SideBar wiederherstellen.

Zitat von EWeiss:
Zitat:
Das erste, was beim Start auffallen sollte ist, dass die Widgets beim Start jetzt einfaden und nicht einfach aufpoppen.
Von meiner SkinEngine ? Ach ne du verwendest ja kein GDI32 oder doch ?
Meine WidgetEngine benutzt die GDI+ nicht. Auch von deiner SkinEngine wird nichts benutzt. Ich arbeite mit TBitmap32 und MSDN-Library durchsuchenUpdateLayeredWindow
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 18 von 27   « Erste     8161718 1920     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 03:09 Uhr.
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