TLama

Untitled

Feb 20th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.80 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, ComCtrls, RichEdit;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     RichEdit1: TRichEdit;
  12.     procedure FormCreate(Sender: TObject);
  13.   private
  14.     procedure WMNotify(var AMessage: TWMNotify); message WM_NOTIFY;
  15.   public
  16.     { Public declarations }
  17.   end;
  18.  
  19. var
  20.   Form1: TForm1;
  21.  
  22. implementation
  23.  
  24. {$R *.dfm}
  25.  
  26. type
  27.   PNMMsgFilter = ^TNMMsgFilter;
  28.   TNMMsgFilter = packed record
  29.     nmhdr: TNMHdr;
  30.     msg: UINT;
  31.     wParam: WPARAM;
  32.     lParam: LPARAM;
  33.   end;
  34.  
  35. procedure TForm1.WMNotify(var AMessage: TWMNotify);
  36. var
  37.   KeyMessage: TWMKey;
  38.   ShiftState: TShiftState;
  39. begin
  40.   if AMessage.NMHdr^.code = EN_MSGFILTER then
  41.   begin
  42.     AMessage.Result := 0;
  43.  
  44.     if PNMMsgFilter(AMessage.NMHdr)^.msg = WM_KEYDOWN then
  45.     begin
  46.       TMessage(KeyMessage).Msg := PNMMsgFilter(AMessage.NMHdr)^.msg;
  47.       TMessage(KeyMessage).WParam := PNMMsgFilter(AMessage.NMHdr)^.wParam;
  48.       TMessage(KeyMessage).LParam := PNMMsgFilter(AMessage.NMHdr)^.lParam;
  49.       ShiftState := KeyDataToShiftState(KeyMessage.KeyData);
  50.  
  51.       if ShiftState = [ssCtrl] then
  52.       begin
  53.         if (KeyMessage.CharCode = VK_TAB) or (KeyMessage.CharCode = $45 {E}) or
  54.           (KeyMessage.CharCode = $4C {L}) // etc.
  55.         then
  56.           AMessage.Result := 1;
  57.       end
  58.       else
  59.       if ShiftState = [ssShift] then
  60.       begin
  61.         // the similar do for SHIFT shortcuts
  62.       end
  63.       else
  64.         // etc.
  65.     end;
  66.   end
  67.   else
  68.     inherited;
  69. end;
  70.  
  71. procedure TForm1.FormCreate(Sender: TObject);
  72. var
  73.   EventMask: LRESULT;
  74. begin
  75.   EventMask := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0);
  76.   SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, EventMask or ENM_KEYEVENTS);
  77. end;
  78.  
  79. end.
Advertisement
Add Comment
Please, Sign In to add comment