Wiem o co chodzi, ale i tak napisałeś bardzo chaotycznie. Piszesz że chcesz zrobić
aplikację w WinApi, a przeczysz sam sobie bo w kodzie widzę tworzenie klasy, no
to jak WinApi ma być w koncu czy obiektowo? A OnClick Tobie nie zadziała, bo o
ile się nie mylę OnClick musi być zadeklarowane w klasie, a w WinApi nie używa
się przecież klas typu TForm czy TPopUpMenu. Celem pisania w WinApi jest o ile
znowu się nie mylę - tworzenie jak najmniejszego pliku wykonywalnego albo dll,
a nie "spuchniętego" przez użycie klas exeka. A do programowania WinApi - pod
Delphi powinno się używać ze standardowych tylko modułu Windows, no czasem
ewentualnie ActiveX trzeba, ale po co innych. Zobacz sobie na mój kod źródłowy
pod poniższym adresem. Jest to plugin do WinAmpia ktory po naciśnięciu Ctrl+V
skleja ze sobą okno głowne WinAmpa oraz okno Playlisty i Equalizera, o ile te są
widoczne. Zobacz jak tam w dll_main.pas jest dodawana do menu WinAmpa, ta
nowa pozycja "Stick Windows together". Ja nie jestem specem w WinApi - także
wiele Tobie nie pomogę więcej, ale powinieneś tworzyć Menu Inaczej bez użycia
klasy, poniżej masz wycinki kodu dodawania pozycji do istniejącego menu i pod
spodbem przykład na obsługę kliknięcia. Więcej tutaj, może doradzą Tobie inni.
http://www.speedyshare.com/files/22101139/stick_win_plugin.rar
Dodawanie pozycji do Menu:
case Msg of
WM_INITMENUPOPUP :
begin
if GetMenuItemID(HMENU(wParam), 0) = WINAMP_HELP_ABOUT then
begin
MyMenuItemInfo.cbSize := SizeOf(MENUITEMINFO);
MyMenuItemInfo.fMask := MIIM_ID or MIIM_TYPE or MIIM_DATA;
MyMenuItemInfo.wID := MENU_ID - 1;
MyMenuItemInfo.fType := MFT_SEPARATOR;
InsertMenuItem(HMENU(wParam), 127, False, MyMenuItemInfo);
MyMenuItemInfo.wID := MENU_ID;
MyMenuItemInfo.fType := MFT_STRING;
MyMenuItemInfo.dwTypeData := MenuItemText;
MyMenuItemInfo.cch := SizeOf(MenuItemText);
InsertMenuItem(HMENU(wParam), 128, True, MyMenuItemInfo);
end;
end;
Obsluga kliknięcia w Menu - Ty w swojej aplikacji zamiast tej procedury masz
pewnie coś w stylu innej funkcji WndProc - gdzie przechwytujesz komunikaty:
function HookWinampWnd(Handle : HWND; Msg : Integer;
wParam, lParam : Longint) : LRESULT;
// ...
// Obsluga kliknięcia
case Msg of
WM_COMMAND : begin
if LoWord(wParam) = MENU_ID then
begin
StickWindows;
end;
end;
// Usuwanie pozycji z menu po zniknięciu menu:
WM_INITMENUPOPUP : begin
if GetMenuItemID(HMENU(wParam), 0) = WINAMP_HELP_ABOUT then
begin
DeleteMenu(HMENU(wParam), MENU_ID - 1, MF_BYCOMMAND);
DeleteMenu(HMENU(wParam), MENU_ID, MF_BYCOMMAND);
end;
end;
end;
// Dodawanie pozycji menu przy rozwinięciu
case Msg of
WM_INITMENUPOPUP :
begin
if GetMenuItemID(HMENU(wParam), 0) = WINAMP_HELP_ABOUT then
begin
MyMenuItemInfo.cbSize := SizeOf(MENUITEMINFO);
MyMenuItemInfo.fMask := MIIM_ID or MIIM_TYPE or MIIM_DATA;
MyMenuItemInfo.wID := MENU_ID - 1;
MyMenuItemInfo.fType := MFT_SEPARATOR;
InsertMenuItem(HMENU(wParam), 127, False, MyMenuItemInfo);
MyMenuItemInfo.wID := MENU_ID;
MyMenuItemInfo.fType := MFT_STRING;
MyMenuItemInfo.dwTypeData := MenuItemText;
MyMenuItemInfo.cch := SizeOf(MenuItemText);
InsertMenuItem(HMENU(wParam), 128, True, MyMenuItemInfo);
end;
end;
end;
//...
Mam nadzieję, że cześciowo Ciebie to naprowadzi, a więcej dopowie ktoś jeszcze.