![]() |
Vista/Windows 7 Gadgets mit Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Wer schon mal voller Elan danach gesucht hat, wie man eigene Gadgets für die Vista-Sidebar schreibt, ist vielleicht auch schon an der Stelle "HTML mit Javascript" stecken geblieben. Nicht weil man es nicht könnte oder wöllte, sondern einfach deswegen, weil man lieber sein Delphi benutzen will.
Hier kommt nun eine kleine Anleitung, wie man seinen Delphi-Code in ein Gadget packen kann. Kurz zusammengefasst nennt sich die Lösung: ActiveX. Was man braucht
Nu aber los jetzt Als erstes brauchen wir eine neues Gadget-Verzeichnis. Das legen wir uns unter
Code:
mit folgender Nomenklatur an: DerNameMeinesGadgets.gadget
%USERPROFILE%\AppData\Local\Microsoft\Windows Sidebar\Gadgets
In diesem Verzeichnis erstellen wir eine Datei namens "gadget.xml". Sie hat grob den folgenden Aufbau (Inhalt einfach anpassen):
XML-Code:
Genaueres findet man
<?xml version="1.0" encoding="utf-8" ?>
<gadget> <name>Der Name unseres Gadgets</name> <version>1.0.0.0</version> <author name="DelphiPraxis-User"> <info url="www.DelphiPraxis.net" /> </author> <copyright>© DelphiPraxis.net</copyright> <description>Dieses Gadget macht irgendwas</description> <hosts> <host name="sidebar"> <base type="HTML" apiVersion="1.0.0" src="main.html" /> <permissions>Full</permissions> <platform minPlatformVersion="1.0" /> </host> </hosts> </gadget> ![]() Die Zeile
XML-Code:
verrät uns auch gleich, wie die nächste Datei heißen sollte, die wir im Gadget-Verzeichnis anlegen: "main.html"
<base type="HTML" apiVersion="1.0.0" src="main.html" />
Die Datei füllen wir am besten auch gleich mit ein paar Daten:
XML-Code:
Jetzt können wir die Sache schon mal ausprobieren. Minianwendung hinzufügen und gucken obs klappt.
<html >
<head> <meta http-equiv="Content-Type" content="text/html; charset=Unicode" /> <script type="text/jscript" language="jscript"> </script> </head> <body onload="init()"> <div id="content" style="text-size: xx-small">Moment noch ...</div> </body> </html> Delphi Jetzt kommt der interessante Teil. Man nehme sich ein Delphi und erzeuge ein neues Projekt vom Typ "Delphi-Projekte->ActiveX->ActiveX-Bibliothek". Als Ausgabe-Verzeichnis setzt man sinnvollerweise den Pfad auf das oben neu angelegte Gadget-Verzeichnis. Außerdem fügen wir noch ein Automatisierungsobjekt ein. "Neu->Delphi-Projekte->ActiveX->Automatisierungsobjekt". Im Dialog gibt man den Klassennamen des neuen Objektes an. Dieses Objekt binden wir dann später in unser Gadget ein. Unser Gadget soll uns die Zeit bis zum Release von Delphi 2010 anzeigen. Also nennen wir die Klasse "D2010ReleaseChecker". In der TLB-Ansicht (Ansicht->Typbibliothek) erzeugt man via Kontextmenu auf dem Interface (ID2010ReleaseChecker) eine neue Eigenschaft "TimeToRelease". Den Typ ändern wir auf "BSTR". Den Setter kann man beruhigt löschen. In der zugehörigen Unit findet man jetzt eine Funktion
Delphi-Quellcode:
Nach dem usen der Units DateUtils und SysUtils kann man sie so ausfüllen:
function TD2010ReleaseChecker_.Get_TimeToRelease: WideString;
Delphi-Quellcode:
Unsere Datei "main.html" erweitern wir noch wie folgt:
var
Diff : TDateTime; begin Diff := StrToDate('26.08.2009') - Now; Result := FormatDateTime('d "Tage" h "Stunden" n "Minuten", s "Sekunden"', Diff); end;
XML-Code:
Die ClassID bekommt aus aus den Infos in der TLB-Ansicht (Ansicht->Typbiliothek), wenn, in unserem Beispiel, "D2010ReleaseChecker" (Achtung! Nicht die GUID des Interfaces (das Ding mit dem I vor dem Namen) nehmen) ausgewählt ist.
<html >
<head> <meta http-equiv="Content-Type" content="text/html; charset=Unicode" /> <script type="text/jscript" language="jscript"> function SetNextTimeout(AInterval) { setTimeout("Update()", AInterval); } function Update() { var d = document.getElementById('content'); d.innerHTML = Checker.TimeToRelease; SetNextTimeout(1000); } </script> </head> <body style="width: 120px; height 150px" onload="Update()"> <div id="content" style="font-size: xx-small"></div> <object width="1" height="1" name="Checker" classid="clsid:A6CB4EF7-92AF-4E70-B83D-92E7F0FF410F" codebase="D2010ReleaseChecker.dll" /> </body> </html> Wenn man das Projekt so kompilert, sollte es schon funktionieren. Der Zugriff auf unser Objekt geht in diesem Fall über
Code:
weil das Objekt mit dem Parameter
document.Checker
Code:
eingebunden wurde.
name="Checker"
Eine Falle gibt es noch: Der IE speichert ActiveX-Bibliotheken zwischen ( ![]() Die DLL braucht nicht im System registriert werden, weil sie als codebase angegeben wurde. Viel Spass! |
Re: Vista/Windows 7 Gadgets mit Delphi
Danke, so ein Beispiel habe ich schon lange gesucht.
|
Re: Vista/Windows 7 Gadgets mit Delphi
Hmpf :freak:
Dein Beispiel funktioniert bei mir nicht. Auch mein Nachbau nach deiner Anleitung funktioniert nicht. Als Ergebnis erhalte ich in beiden Fällen "undefined". Im IE8 jedoch funktionierts! das ganze mit Vista Home Premium x64 SP2 Könnten die 64-Bit das Problem sein? Also wenn ich 64 Bit drin habe, dann ... :zwinker: |
Re: Vista/Windows 7 Gadgets mit Delphi
Zitat:
Zitat:
|
Re: Vista/Windows 7 Gadgets mit Delphi
Sorry!
Stimmt! Klassisch überlesen. :drunken: Prost! |
Re: Vista/Windows 7 Gadgets mit Delphi
Zitat:
was ist genau das Problem bei der 64bit Variante? Muss das ActiveX als 64bit Variante vorhanden sein? Ich habe bezüglich Gadgets und Problemen mit 64bit leider nichts ergooglen können. |
Re: Vista/Windows 7 Gadgets mit Delphi
Zitat:
Auf die 32bit Sidebar ausweichen geht in aller Regel nicht auf x64 System, weil man mit an Sicherheit grenzender Wahrscheinlichkeit schon andere x64 Gadgets drin hat (z.B. Memory-Profiler etc.). |
Re: Vista/Windows 7 Gadgets mit Delphi
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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 by Thomas Breitkreuz