Программу на Today панел ? WinCE

Модератор: Модераторы

Программу на Today панел ? WinCE

Сообщение mdm » 04.03.2008 13:09:45

Привет всем.
Тут тренеруюсь по маленьку, и возник вопрос а как положить программу на тодай панель КПК. Что то нужно както с реестром работать или что ? Подскажите плиз.
mdm
незнакомец
 
Сообщения: 3
Зарегистрирован: 21.02.2008 11:17:22

Re: Программу на Today панел ? WinCE

Сообщение yurc » 13.12.2008 14:40:01

И мне бы тоже хотелось узнать как это сделать. В MSDN это описано здесь http://msdn.microsoft.com/en-us/library/aa458855.aspx. Есть также примеры на C++. Вот один из них:

Код: Выделить всё
//
// Пример компонента Плагина для Тудей
// Рисует черный прямоугольник :)
//
// Взято с 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?
yurc
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.12.2008 14:29:02

Re: Программу на Today панел ? WinCE

Сообщение ekoulpin » 18.12.2008 11:05:34

Перевел код TodayPlugina с C++ на FreePascal. Выглядит это так
Код: Выделить всё
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 глючит, или у меня руки из… корявые, в-общем?
ekoulpin
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.12.2008 10:40:55
Откуда: Ростов

Re: Программу на Today панел ? WinCE

Сообщение yurc » 18.12.2008 23:16:09

Почему-то у меня после исправления ошибки с недостающей точки с запятой компилируется exe файл, а не dll. Так и должно быть? И, если можно, укажите, что в реестр прописывали, чтобы не было разночтений.
yurc
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.12.2008 14:29:02

Re: Программу на Today панел ? WinCE

Сообщение FedeX » 19.12.2008 00:09:57

yurc писал(а):Почему-то у меня после исправления ошибки с недостающей точки с запятой компилируется exe файл, а не dll. Так и должно быть?
Скорее всего 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 . Видно производитель девайса сменил её местоположение. :|
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Программу на Today панел ? WinCE

Сообщение ekoulpin » 19.12.2008 00:45:17

В реестре пишем так:
[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
ekoulpin
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.12.2008 10:40:55
Откуда: Ростов

Re: Программу на Today панел ? WinCE

Сообщение yurc » 19.12.2008 17:19:17

Скомпилировал dll, скопировал в \windows\ , в реестре все прописал, виснет Today на девайсе напрочь.
yurc
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.12.2008 14:29:02

Re: Программу на Today панел ? WinCE

Сообщение AnarchyMob » 20.12.2008 04:19:52

Чтобы ЕХЕ не появлялся, выкинь из проекта модуль Classes, зачем он там ума не приложу, только размер файла увиличивает килобайт на ~40.
AnarchyMob
новенький
 
Сообщения: 13
Зарегистрирован: 16.11.2008 23:44:36

Re: Программу на Today панел ? WinCE

Сообщение ekoulpin » 27.12.2008 20:31:28

Полностью работающий пример здесь: http://represento.ru
ekoulpin
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.12.2008 10:40:55
Откуда: Ростов

Re: Программу на Today панел ? WinCE

Сообщение Пабло » 08.02.2009 18:37:51

А какой функцией можно вывести текст?
Пабло
незнакомец
 
Сообщения: 4
Зарегистрирован: 27.06.2008 18:16:46


Вернуться в WinCE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru