Einzelnen Beitrag anzeigen

Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#16

AW: Fremdes PopupMenu erweitern

  Alt 4. Jul 2011, 23:50
Es wird erst erzeugt, wenn es aufgerufen wird.
Genau das war bei mir auch der Fall.

Hier mal das Wichtigste aus meiner hook.dll:
Delphi-Quellcode:
mmfData^.hHookWndProc := SetWindowsHookEx(WH_CALLWNDPROC, @HookWndProc, hInstance, TID);

function HookWndProc(Code: Integer; wParam: wParam; lParam: lParam): Integer;
  stdcall;
var
  cwp: PCWPSTRUCT;
begin
  Result := CallNextHookEx(mmfData^.hHookWndProc, Code, wParam, lParam);
  if Code >= 0 then
  begin
    cwp := PCWPSTRUCT(lParam);
    case cwp.message of
      WM_INITMENU:
        AddPopupItem(cwp.wParam);
    end;
  end;
end;

// - fügt dem PopupMenu mit Handle hPopup einen Eintrag "&Advanced" an zweiter Stelle ein
// - es handelt sich um das richtige PopupMenu, wenn die Anzahl der MenuItems = 8 und der Text des ersten MenuItems = "&Open" ist
procedure AddPopupItem(hPopup: Cardinal);
var
  mii: TMENUITEMINFO;
  s: string;
  len: Integer;
begin
  if GetMenuItemCount(hPopup) = 8 then
  begin
    len := GetMenuString(hPopup, 0, nil, 0, MF_BYPOSITION);
    if (len > 0) then
    begin
      SetLength(s, len + 1);
      GetMenuString(hPopup, 0, PChar(s), len + 1, MF_BYPOSITION);
      if Pos('&Open', s) > 0 then
      begin
        s := '&Advanced';
        ZeroMemory(@mii, sizeof(TMENUITEMINFO));
        mii.cbSize := sizeof(TMENUITEMINFO);
        mii.fMask := MIIM_TYPE;
        mii.dwTypeData := PChar(s);
        mii.cch := Length(s);
        InsertMenuItem(hPopup, 1, true, mii);
      end;
    end;
  end;
end;
Falls du noch etwas brauchst, sag Bescheid.
  Mit Zitat antworten Zitat