![]() |
Re: Desktop Widget Engine (v0.64)
Zitat:
Werd mir das für die nächste Version aber vornehmen. |
Re: Desktop Widget Engine (v0.64)
Ich finde dein Programm echt wunderbar und nutze es auch. Nun kam ich gestern auf ein ähnliches Programm und war davon sinnlich begeistert. Dieses Programm nennt sich
![]() |
Re: Desktop Widget Engine (v0.64)
Du weisst ja schon was die andere Sidebar kann...sags doch bitte. Ich komme bei den unübersichtlichen Seiten nicht so ganz zu Potte.
Sherlock |
Re: Desktop Widget Engine (v0.64)
Liste der Anhänge anzeigen (Anzahl: 2)
Na schön, also:
Soll jetzt keine Werbung sein, nur zum Vergleich :-D |
Re: Desktop Widget Engine (v0.64)
Achso ja bei den Icons ist eine License.txt dabei wo drin steht dass du sie frei verwenden darfst ABER ein Verweis auf den Entwickler geben musst. Hast du das?
|
Re: Desktop Widget Engine (v0.64)
Zitat:
Diese "Thoosje Sidebar" ist speziell als Vista-Sidebar-Ersatz gedacht. Wenn ich mich nicht irre ist die sogar beim Vistamizer mit drin. MFG |
Re: Desktop Widget Engine (v0.64)
Zitat:
Aber ich möchte mich mal kurz verteidigen: das Programm heißt ja explizit Thoosje Sidebar :zwinker:. Naja, ist aber keine Ausrede - ich werd mal schauen, was ich von der Liste alles einbauen kann. Vorallem die Punkte "die Gadgets ziehen mit" (ich hab mich immer noch nicht überwinden können, das einzubauen :oops:) und "Ein- und Ausblenden" der SideBar mit Gadgets" find ich sehr gut. Die Schatten find ich persönlich noch nicht so wichtig - und zu den Uhrenskins: man kann ja die bereits vorhandene Uhr leicht erweitern ;-). Zitat:
|
Re: Desktop Widget Engine (v0.65)
Version 0.65 online!
Diesmal hab ich kaum Changes drinnen, es ist also eher eine 0.64a, aber ein paar Sachen sind doch neu: Ich hab ein paar kleine Fehlerchen in der deutschen Sprachdatei behoben. Außerdem hab ich ein paar kleine Übersetzungen verändert. Zudem war in den Optionen die Einträge in Tab "Themes" zu kurz, die hab ich nun länger gemacht. Das erste, was beim Start auffallen sollte ist, dass die Widgets beim Start jetzt einfaden und nicht einfach aufpoppen. Ich hoffe, dass das Fading funktioniert - falls nicht bzw. falls ihr es blöd findet, könnt ihr es auch in den Optionen deaktivieren. Außerdem hab ich mir mal die Thoosje Sidebar angeschaut und muss ehrlich sagen: die ist extrem eingeschränkt: man kann keine neuen Widgets erstellen bzw. bereits vorhandene bearbeiten. Das ist wirklich eine extreme Einschränkung. 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. (Download sowie ChangeLog im ersten Post) Grüße Dave |
Re: Desktop Widget Engine (v0.65)
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 |
Re: Desktop Widget Engine (v0.65)
Zitat:
Zitat:
Zitat:
Also als erstes Frage ich natürlich den RSS-Feed mit einer wgHTTP-Komponente ab:
Delphi-Quellcode:
Im OnDone-Ereigniss lese ich dann den Inhalt aus und lassen ihn mit dem JvSimpleXML parsen:
wgHTTP1.GetURL('http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml');
Delphi-Quellcode:
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.
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; Dafür gehe ich in der "ParseContent" - Routine durch alle Einträge durch:
Delphi-Quellcode:
So, wenn jetzt "Item.Name = 'item'" ist, füge ich einen neuen Eintrag in das interne XML-File ein:
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 <> 'item' then continue;
Delphi-Quellcode:
Jetzt berechne ich die Höhe des zukünftigen Eintrags und füge diesen ebenfalls zu "newItem" hinzu.
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
Delphi-Quellcode:
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:
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);
Delphi-Quellcode:
(ACHTUNG: die MessageBox wird sehr lang, zum schließen dann einfach "Enter" drücken)
ShowMessage(XML.SaveToString);
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:
Du solltest dir noch das OnDraw-Event anschauen, jedoch ist da nicht viel neues dabei.
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; Ich hoffe, ich konnte dir etwas helfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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