Пример создания простейшего гаджета для Sidebar Windows Vista и Windows 7.
Целью данного примера является показать как можно создавать гаджеты в среде Delphi с использованием ActiveXForm, регистрацией объектов ActiveX с помощью JavaScript. Также это может быть полезно при создании ActiveX библиотек и объектов автоматизации для использования в гаджетах для выполнения "сложных или нереализуемых" функций в JavaScript.
Ну или кому просто лень изучать JavaScript.
Создадим папку проекта, к примеру c:\MyActiveFormXGadget\
В Delphi создадим новый проект:
-меню File-New-Other
-вкладка ActiveX
-Active Form
Укажем имя формы MyActiveFormXGadget, имя модуля MyActiveFormXGadgetImpl.pas и имя проекта MyActiveFormXGadgetProj.dpr:
Изменим в Object Inspector некоторые свойства формы:
AxBorderStyle := afbNone
Caption := ‘’
Width := 120
Height := 250
Добавим на форму TLabel, TEdit, пару TButton и TMemo:
Создадим обработчики событий OnClick для TButton:
Код:
procedure TMyActiveFormXGadget.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(Edit1.Text);
end;
procedure TMyActiveFormXGadget.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;
Откроем библиотеку типов:
-меню View-Type Library
Щелкнем на MyActiveFormXGadget:
Скопируем куда-нибудь значение GUID {E0DC92BD-F101-44E0-84F6-F39B7DA5A424}, которое было автоматически сгенерировано и будет всегда отличаться для каждого проекта.
Сохраним File-Save Project As проект в папку c:\MyActiveFormXGadget\
Откомпилируем проект Project-Build
Если все прошло удачно получим файл c:\MyActiveFormXGadget\MyActiveFormXGadgetProj.ocx
Он и будет выполнять функции гаджета.
Теперь приступим к файлам гаджета. Для начала создадим папки:
css/
images/
js/
В папке css/ будут лежать css-файлы каскадных таблиц стилей, в images/ файлы иконки и логотипа, в js/ файл скрипта регистрации объекта.
Файл манифеста и основной файл должны находиться в корневой папке.
Создаем в блокноте файл манифеста gadget.xml:
Код:
<?xml version="1.0" encoding="utf-8" ?>
<gadget>
<name>GadgetActiveFormX</name>
<namespace>GadgetActiveFormX</namespace>
<version>1.0</version>
<author name="Медведев Олег">
<info url="http://grafmoto.narod.ru/" />
<logo height="48" width="48" src="images/logo.png" />
</author>
<copyright>2010</copyright>
<description>GadgetActiveFormX - Example</description>
<icons>
<icon height="48" width="48" src="images/icon.png" />
</icons>
<hosts>
<host name="sidebar">
<base type="HTML" apiVersion="1.0.0" src="gadget.html" />
<permissions>Full</permissions>
<platform minPlatformVersion="0.3" />
</host>
</hosts>
</gadget>
и сохраним его в кодировке UTF-8 как c:\MyActiveFormXGadget\gadget.xml
Затем создаем основной файл гаджета gadget.html:
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="css/gadget.css" type="text/css" rel="stylesheet" />
<script language="JavaScript" src="js/gadget.js" type="text/javascript"></script>
</head>
<body>
<div id="gadget">
<object classid="clsid:{E0DC92BD-F101-44E0-84F6-F39B7DA5A424}"></object>
</div>
</body>
</html>
и сохраним его в кодировке UTF-8 как c:\MyActiveFormXGadget\gadget.html
В значение параметра classid (строка <object classid="clsid:{E0DC92BD-F101-44E0-84F6-F39B7DA5A424}"></object>) подставляем значение GUID.
Как видно используются файлы gadget.css (каскадные таблицы стилей для описания разметки документа) и gadget.js (скрипт для регистрации объекта).
Файл gadget.css выглядит следующим образом:
Код:
body {
width:130px;
height:260px;
margin:0px;
padding:0px;
color:#ffffff;
}
#gadget {
width:120px;
height:250px;
position:absolute;
top:5px;
left:5px;
overflow:hidden;
margin:0px;
padding:0px;
}
Его также создаем в блокноте и сохраняем в кодировке UTF-8 в c:\MyActiveFormXGadget\css\gadget.css
Файл скрипта gadget.js:
Код:
var Clsid = "{E0DC92BD-F101-44E0-84F6-F39B7DA5A424}";
var ClassName = "MyActiveFormXGadgetProj.MyActiveFormXGadget";
var LibPath = System.Gadget.path + "\\MyActiveFormXGadgetProj.ocx";
var oShell = new ActiveXObject("WScript.Shell");
function RegisterLibrary()
{
oShell.RegWrite("HKCU\\SOFTWARE\\Classes\\" + ClassName + "\\", ClassName, "REG_SZ");
oShell.RegWrite("HKCU\\SOFTWARE\\Classes\\" + ClassName + "\\CLSID\\", Clsid, "REG_SZ");
oShell.RegWrite("HKCU\\SOFTWARE\\Classes\\CLSID\\" + Clsid + "\\", ClassName, "REG_SZ");
oShell.RegWrite("HKCU\\SOFTWARE\\Classes\\CLSID\\" + Clsid + "\\InprocServer32\\", LibPath, "REG_SZ");
oShell.RegWrite("HKCU\\SOFTWARE\\Classes\\CLSID\\" + Clsid + "\\ProgID\\", ClassName, "REG_SZ");
}
function UnregisterLibrary()
{
oShell.RegDelete("HKCU\\SOFTWARE\\Classes\\CLSID\\" + Clsid + "\\ProgID\\");
oShell.RegDelete("HKCU\\SOFTWARE\\Classes\\CLSID\\" + Clsid + "\\InprocServer32\\");
oShell.RegDelete("HKCU\\SOFTWARE\\Classes\\CLSID\\" + Clsid + "\\");
oShell.RegDelete("HKCU\\SOFTWARE\\Classes\\" + ClassName + "\\CLSID\\");
oShell.RegDelete("HKCU\\SOFTWARE\\Classes\\" + ClassName + "\\");
}
RegisterLibrary();
window.attachEvent("onunload", UnregisterLibrary);
Переменной Clsid присваиваем значение GUID. Значение ClassName складывается как имя_проекта.имя_формы (элемента ActiveX). В LibPath указываем имя ocx-файла. Остальное оставляем без изменений.
Создаем в блокноте и сохраняем в кодировке UTF-8 в c:\MyActiveFormXGadget\js\gadget.js
Ну и напоследок в папку images/ кидаем пару png-картинок: иконку и логотип.
Теперь собираем нужные файлы в cab-архив (make.bat) командой:
cabarc -r -p n axf.gadget css\gadget.css js\gadget.js images\icon.png images\logo.png gadget.xml gadget.html MyActiveFormXGadgetProj.ocx
Имя архивного файла axf.gadget – гаджет готов.
Скачать проект:
https://yadi.sk/d/DCZc5Q9ldQzw9