Программу на Today панел ? WinCE
Модератор: Модераторы
Программу на Today панел ? WinCE
Привет всем.
Тут тренеруюсь по маленьку, и возник вопрос а как положить программу на тодай панель КПК. Что то нужно както с реестром работать или что ? Подскажите плиз.
Тут тренеруюсь по маленьку, и возник вопрос а как положить программу на тодай панель КПК. Что то нужно както с реестром работать или что ? Подскажите плиз.
И мне бы тоже хотелось узнать как это сделать. В MSDN это описано здесь http://msdn.microsoft.com/en-us/library/aa458855.aspx. Есть также примеры на C++. Вот один из них:
Здесь используется модуль todaycmn.h, причем подобный есть в Lazarus lazarus\fpc\2.2.3\source\packages\winceunits\src\todaycmn.pp
Может найдется тот, кто переделает код C++ для Lazarus?
Код: Выделить всё
//
// Пример компонента Плагина для Тудей
// Рисует черный прямоугольник :)
//
// Взято с msdn.microsoft.com
// Автор - Джон Кеннеди (John Kennedy)
//
// Перевел и доработал DarkClaus для 4da
#include "windows.h"
#include <todaycmn.h> // есть в инклюдах к SDK PPC2003
#include <Aygshell.h> //__/
const TCHAR k_szWindowClass[] = TEXT("TodayTest");
HINSTANCE g_hInst = NULL;
// Высота нашего модуля в пикселях
#define MODULE_HEIGHT 42
/*************************************************************************/
/* WndProc для окна */
/*************************************************************************/
LRESULT WINAPI CustomItemWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
PAINTSTRUCT ps;
HDC hdc=NULL;
// Структура для хранения
// различной внутренней информации
// о компоненте Today.
TODAYLISTITEM *ptli2;
switch(msg)
{
// Поменялись данные и..
case: (WM_TODAYCUSTOM_CLEARCACHE):
break;
// Это событие происходит примерно каждые 2 секунды
case (WM_TODAYCUSTOM_QUERYREFRESHCACHE):
ptli2=(struct _TODAYLISTITEM *)wp;
// Обратите внимание!
if (0 == ptli2->cyp)
{
// ТРУ возвращается однажды
// после установки высоты
ptli2->cyp = MODULE_HEIGHT;
return TRUE;
}
else
{
// Обычно обрабатывается именно эта ветка
return FALSE;
}
break;
// Стандартное событие рисования
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
// Быстрый и "грубый" пример рисования
// Рисуется черный квадрат
BitBlt(hdc,0,0,240,MODULE_HEIGHT,NULL,0,0,BLACKNESS);
EndPaint(hwnd, &ps);
break;
// Обработка события Тыканья стилусом
case WM_LBUTTON:
// тут нечто :)
break;
default:
break;
}
return DefWindowProc(hwnd, msg, wp, lp);
}
/*************************************************************************/
/* Инициализация класса */
/*************************************************************************/
void InitilizeClass(HINSTANCE hinst)
{
WNDCLASS wc;
memset(&wc, 0, sizeof(wc));
wc.style = 0;
wc.lpfnWndProc = (WNDPROC)CustomItemWndProc;
wc.hInstance = hinst;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (struct HBRUSH__*)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = k_szWindowClass;
UnregisterClass(k_szWindowClass, hinst);
RegisterClass(&wc);
}
/*************************************************************************/
/* Инициализируем всё, что может потребоваться ДЛЛке */
/*************************************************************************/
BOOL WINAPI DllMain(HANDLE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
g_hInst = (struct HINSTANCE__ *)hDLLInst;
DEBUGREGISTER((HINSTANCE)hDLLInst);
InitilizeClass((HINSTANCE)hDLLInst);
break;
case DLL_PROCESS_DETACH:
UnregisterClass(k_szWindowClass, (struct HINSTANCE__ *)hDLLInst);
break;
}
return TRUE;
}
// Вход в ДЛ:
HWND InitializeCustomItem(TODAYLISTITEM *ptli, HWND hwndParent)
{
HWND hWnd;
if (!ptli->fEnabled)
return NULL;
hWnd = CreateWindow (k_szWindowClass, k_szWindowClass, WS_VISIBLE|WS_CHILD, 0, 0, 0, MODULE_HEIGHT,
hwndParent, NULL, g_hInst, NULL);
ShowWindow (hWnd, SW_SHOWNORMAL);
return hWnd;
}Здесь используется модуль todaycmn.h, причем подобный есть в Lazarus lazarus\fpc\2.2.3\source\packages\winceunits\src\todaycmn.pp
Может найдется тот, кто переделает код C++ для Lazarus?
-
ekoulpin
- незнакомец
- Сообщения: 3
- Зарегистрирован: 18.12.2008 09:40:55
- Откуда: Ростов
- Контактная информация:
Перевел код TodayPlugina с C++ на FreePascal. Выглядит это так
Полная версия здесь http://represento.ru/?p=14#more-14.
И все вроде бы хорошо, и в реестре записи нужные, и плагин вроде загружается, но вот косячок - процедура обработки событий не срабатывает. Может кто подскажет, это fpc глючит, или у меня руки из… корявые, в-общем?
Код: Выделить всё
library MyFistTodayPlugin;
{$mode delphi}{$H+}
uses
Classes, Windows, todaycmn, aygshell
var
g_hWnd: HWND;
g_hInst: HModule;
Const
IDS_CUSTOM_ITEM_APPNAME='MyFistTodayPlugin';
function MyWndProc(hwnd: hwnd; uimessage: UINT; wParam: WPARAM; lParam: LPARAM) : LResult; cdecl;
var ps: PAINTSTRUCT;
ahdc: HDC=0;
ptli2: _TODAYLISTITEM;
begin
case uimessage of
WM_LBUTTONUP:
begin
MessageBox(hwnd,String('WM_TODAYCUSTOM_QUE'),String('mess'), MB_OK);
end;
WM_TODAYCUSTOM_QUERYREFRESHCACHE:
begin
ptli2 := LPTODAYLISTITEM(wParam)^;
if (ptli2.cyp=0) then
begin
ptli2.cyp := 42;
Result:= 1;
end else
begin
Result:= 0;
End;
exit;
end;
Полная версия здесь http://represento.ru/?p=14#more-14.
И все вроде бы хорошо, и в реестре записи нужные, и плагин вроде загружается, но вот косячок - процедура обработки событий не срабатывает. Может кто подскажет, это fpc глючит, или у меня руки из… корявые, в-общем?
Почему-то у меня после исправления ошибки с недостающей точки с запятой компилируется exe файл, а не dll. Так и должно быть? И, если можно, укажите, что в реестр прописывали, чтобы не было разночтений.
Скорее всего dll. Если компилиш в Лазарусе зайди в свойства проэкта и поменяй имя исполняемого файла на любое с расширением длл. А насчёт реестра на сайте майкрософта вроде пишут что надо сюда прописывать (сверху линк давали):yurc писал(а):Почему-то у меня после исправления ошибки с недостающей точки с запятой компилируется exe файл, а не dll. Так и должно быть?
HKLM,Software\Microsoft\Today\Items\My Today Item,Type,0x00010001,4
HKLM,Software\Microsoft\Today\Items\My Today Item,Enabled,0x00010001,1
HKLM,Software\Microsoft\Today\Items\My Today Item,Options,0x00010001,1
HKLM,Software\Microsoft\Today\Items\My Today Item,DLL,0x00000000,"\Windows\Sample.DLL"
Только толку мало - у меня на девайсе напримар нет такой ветки : HKLM,Software\Microsoft\Today . Видно производитель девайса сменил её местоположение.
-
ekoulpin
- незнакомец
- Сообщения: 3
- Зарегистрирован: 18.12.2008 09:40:55
- Откуда: Ростов
- Контактная информация:
В реестре пишем так:
[Registry.All]
; DWORD, Custom Items must always have Type = 4
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,Type,0x00010001,4
; DWORD
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,Enabled,0x00010001,1
; DWORD
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,Options,0x00010001,0
; STRING
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,DLL,0x00000000,
"MyFistTodayPlugin.dll"
; DWORD
HKLM,Software\Microsoft\Today\Items\CustomItem,Selectability,
0x00010001,2
Файл MyFistTodayPlugin.dll копируем в директорию Windows
[Registry.All]
; DWORD, Custom Items must always have Type = 4
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,Type,0x00010001,4
; DWORD
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,Enabled,0x00010001,1
; DWORD
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,Options,0x00010001,0
; STRING
HKLM,Software\Microsoft\Today\Items\MyFistTodayPlugin,DLL,0x00000000,
"MyFistTodayPlugin.dll"
; DWORD
HKLM,Software\Microsoft\Today\Items\CustomItem,Selectability,
0x00010001,2
Файл MyFistTodayPlugin.dll копируем в директорию Windows
Скомпилировал dll, скопировал в \windows\ , в реестре все прописал, виснет Today на девайсе напрочь.
-
AnarchyMob
- новенький
- Сообщения: 13
- Зарегистрирован: 16.11.2008 22:44:36
Чтобы ЕХЕ не появлялся, выкинь из проекта модуль Classes, зачем он там ума не приложу, только размер файла увиличивает килобайт на ~40.
-
ekoulpin
- незнакомец
- Сообщения: 3
- Зарегистрирован: 18.12.2008 09:40:55
- Откуда: Ростов
- Контактная информация:
Полностью работающий пример здесь: http://represento.ru
А какой функцией можно вывести текст?
