Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ComCtrls, RichEdit;
- type
- TForm1 = class(TForm)
- RichEdit1: TRichEdit;
- procedure FormCreate(Sender: TObject);
- private
- procedure WMNotify(var AMessage: TWMNotify); message WM_NOTIFY;
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- type
- PNMMsgFilter = ^TNMMsgFilter;
- TNMMsgFilter = packed record
- nmhdr: TNMHdr;
- msg: UINT;
- wParam: WPARAM;
- lParam: LPARAM;
- end;
- procedure TForm1.WMNotify(var AMessage: TWMNotify);
- var
- KeyMessage: TWMKey;
- ShiftState: TShiftState;
- begin
- if AMessage.NMHdr^.code = EN_MSGFILTER then
- begin
- AMessage.Result := 0;
- if PNMMsgFilter(AMessage.NMHdr)^.msg = WM_KEYDOWN then
- begin
- TMessage(KeyMessage).Msg := PNMMsgFilter(AMessage.NMHdr)^.msg;
- TMessage(KeyMessage).WParam := PNMMsgFilter(AMessage.NMHdr)^.wParam;
- TMessage(KeyMessage).LParam := PNMMsgFilter(AMessage.NMHdr)^.lParam;
- ShiftState := KeyDataToShiftState(KeyMessage.KeyData);
- if ShiftState = [ssCtrl] then
- begin
- if (KeyMessage.CharCode = VK_TAB) or (KeyMessage.CharCode = $45 {E}) or
- (KeyMessage.CharCode = $4C {L}) // etc.
- then
- AMessage.Result := 1;
- end
- else
- if ShiftState = [ssShift] then
- begin
- // the similar do for SHIFT shortcuts
- end
- else
- // etc.
- end;
- end
- else
- inherited;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- var
- EventMask: LRESULT;
- begin
- EventMask := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0);
- SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, EventMask or ENM_KEYEVENTS);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment