Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Рабочий стол
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.09.2010, 11:06
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию Создание Gadget на Delphi с использованием ActiveFormX

Пример создания простейшего гаджета для 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

Последний раз редактировалось NumLock, 16.12.2014 в 18:05.
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Tech N9ne (29.01.2019)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter