Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  135

•  TDictionary Custom Sort  3 317

•  Fast Watermark Sources  3 065

•  3D Designer  4 825

•  Sik Screen Capture  3 320

•  Patch Maker  3 535

•  Айболит (remote control)  3 637

•  ListBox Drag & Drop  2 996

•  Доска для игры Реверси  81 563

•  Графические эффекты  3 927

•  Рисование по маске  3 231

•  Перетаскивание изображений  2 613

•  Canvas Drawing  2 735

•  Рисование Луны  2 561

•  Поворот изображения  2 166

•  Рисование стержней  2 161

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 226

•  Головоломка Paletto  1 764

•  Теорема Монжа об окружностях  2 215

•  Пазл Numbrix  1 682

•  Заборы и коммивояжеры  2 052

•  Игра HIP  1 279

•  Игра Go (Го)  1 225

•  Симулятор лифта  1 471

•  Программа укладки плитки  1 214

•  Генератор лабиринта  1 542

•  Проверка числового ввода  1 352

•  HEX View  1 490

•  Физический маятник  1 355

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Перехватить WM_CONTEXTMENU в TWebBrowser


Звонок в офис провайдера интернет:
- Алло! Это интернет?
- Да, слушаем Вас!
- Соедините с www.yahoo.com.

Перехват меню (ТОЛЬКО БЛОКИРОВКА):


var
 HookID: THandle;

function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall; 
var 
 szClassName: array[0..255] of Char; 
const 
 ie_name = 'Internet Explorer_Server'; 
begin 
 case nCode < 0 of 
   True: 
     Result := CallNextHookEx(HookID, nCode, wParam, lParam) 
     else 
       case wParam of 
         WM_RBUTTONDOWN, 
         WM_RBUTTONUP: 
           begin 
             GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND, szClassName, SizeOf(szClassName)); 
             if lstrcmp(@szClassName[0], @ie_name[1]) = 0 then 
               Result := HC_SKIP 
             else 
               Result := CallNextHookEx(HookID, nCode, wParam, lParam); 
           end 
           else 
             Result := CallNextHookEx(HookID, nCode, wParam, lParam); 
       end; 
 end; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
 HookID := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId()); 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
 if HookID <> 0 then 
   UnHookWindowsHookEx(HookID); 
end; 

Здесь по замыслу автора меню подменяется своим, но у меня не сработало (почему, не  разбирался):

// Для преобразования кликов правой кнопкой в клики левой,  раскомментировать

// {$DEFINE __R_TO_L}

implementation

uses Windows,Controls,Messages,ShDocVw;

var
 HMouseHook:THandle;

function MouseProc(
   nCode: Integer;     // hook code
   WP: wParam; // message identifier
   LP: lParam  // mouse coordinates
  ):Integer;stdcall;
var MHS:TMOUSEHOOKSTRUCT;
   WC:TWinControl;
{$ifdef __R_TO_L}
   P:TPoint;
{$endif}
begin
 Result:=CallNextHookEx(HMouseHook,nCode,WP,LP);
 if nCode=HC_ACTION then
  begin
    MHS:=PMOUSEHOOKSTRUCT(LP)^;
    if ((WP=WM_RBUTTONDOWN) or (WP=WM_RBUTTONUP)) then
     begin
       WC:=FindVCLWindow(MHS.pt);
       if (WC is TWebBrowser) then
       begin
         Result:=1;
{$ifdef __R_TO_L}
         P:=WC.ScreenToClient(MHS.pt);
         if WP=WM_RBUTTONDOWN 
         then PostMessage(MHS.hwnd,WM_LBUTTONDOWN,0,P.x + P.y shl 16);
         
         if WP=WM_RBUTTONUP 
         then PostMessage(MHS.hwnd,WM_LBUTTONUP,0,P.x + P.y shl 16);
{$endif}
         if (TWebBrowser(WC).PopupMenu<>nil) and  (WP=WM_RBUTTONUP) then
          begin
           TWebBrowser(WC).PopupMenu.PopupComponent:=WC;
           TWebBrowser(WC).PopupMenu.Popup(MHS.pt.x,MHS.pt.y);
          end;
       end;
     end;
  end;
end;

initialization


HMouseHook:=SetWindowsHookEx(WH_MOUSE,@MouseProc,HInstance,GetCurrentThreadID);

finalization

 CloseHandle(HMouseHook);

end.

Предлагаю свой вариант, взято с Королевства, но немного переделано из-за глюкавости. Для использования достаточно подключить юнит в Uses и все (Исправлены глюки, которые досаждали)!


unit WbPopup;

interface

implementation

uses Windows,Controls,Messages,ShDocVw, Forms, frmMain;

var
 HMouseHook:THandle;
 Pop: Boolean;

function MouseProc(
   nCode: Integer;     // hook code
   WP: wParam; // message identifier
   LP: lParam  // mouse coordinates
  ):Integer;stdcall;
var MHS:TMOUSEHOOKSTRUCT;
   WC:TWinControl;
begin
 Result:=CallNextHookEx(HMouseHook,nCode,WP,LP);
 if nCode=HC_ACTION then
  begin
    MHS:=PMOUSEHOOKSTRUCT(LP)^;
    if ((WP=WM_RBUTTONDOWN) or (WP=WM_RBUTTONUP)) then
     begin
       WC:=FindVCLWindow(MHS.pt);
       if (WC is TWebBrowser) then
       begin
         Result:=1;
         if (TWebBrowser(WC).PopupMenu<>nil) and (WP=WM_RBUTTONUP) then
          begin
           if Pop then Exit;
           Pop := True;
           TWebBrowser(WC).PopupMenu.Popup(MHS.pt.x,MHS.pt.y);
           Pop := False;
          end;
       end;
     end;
  end;
end;

initialization


HMouseHook:=SetWindowsHookEx(WH_MOUSE,@MouseProc,HInstance,GetCurrentThreadID);

finalization
try
 UnhookWindowsHookEx(HMouseHook);
 Sleep(100);
 CloseHandle(HMouseHook);
except

end;
end.








Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте