Delphi 7에서 TEdit 마우스 진입 종료 이벤트 처리

28425 단어 Delphi
상자 포럼에서 Delpher가 마우스가 TEdit 컨트롤에 들어갈 때 메시지 상자를 팝업하는 것을 보았습니다. 저는 TEdit 기능을 확장하여 구성 요소로 봉했습니다. 코드는 다음과 같습니다.
 
 

  
    
1 unit MyEdit;
2
3   interface
4
5   uses
6 SysUtils, Classes, Controls, StdCtrls,Messages,Dialogs,Forms,Windows;
7
8   type
9 TMsgDlgMode = (Yes_No,YES_NO_CANCEL,OK,OK_CANCEL,RETRY_CANCEL,ABORT_RETRY_IGNORE);
10 TShowDialogEvent = procedure (Sender: TObject;Result:integer) of object ;
11
12 TMyEdit = class (TEdit)
13 private
14 { Private declarations }
15 FAutoShowMsgOnMouseEnter:Boolean ;
16 FAutoShowMsgOnMouseLeave:Boolean ;
17 FMsgMsEnter:String;
18 FMsgMsLeave:String;
19 FMsgDlgModeEnter:TMsgDlgMode;
20 FMsgDlgModeLeave:TMsgDlgMode;
21 FMsgResultEnter:Integer;
22 FMsgResultLeave:Integer;
23 FOnMouseEnter: TNotifyEvent;
24 FOnMouseLeave: TNotifyEvent;
25 FAfterMsgDlgEnter:TShowDialogEvent;
26 FAfterMsgDlgLeave:TShowDialogEvent;
27 procedure CMMouseEnter( var Message: TMessage); message CM_MOUSEENTER;
28 procedure CMMouseLeave( var Message: TMessage); message CM_MOUSELEAVE;
29 protected
30 { Protected declarations }
31 public
32 { Public declarations }
33 property MsgResultEnter:Integer read FMsgResultEnter write FMsgResultEnter;
34 property MsgResultLeave:Integer read FMsgResultLeave write FMsgResultLeave;
35 published
36 { Published declarations }
37 property AutoShowMsgOnMouseEnter:Boolean read FAutoShowMsgOnMouseEnter write FAutoShowMsgOnMouseEnter;
38 property AutoShowMsgOnMouseLeave:Boolean read FAutoShowMsgOnMouseLeave write FAutoShowMsgOnMouseLeave;
39 property MsgMsEnter:String read FMsgMsEnter write FMsgMsEnter;
40 property MsgMsLeave:String read FMsgMsLeave write FMsgMsLeave;
41 property MsgDlgModeEnter:TMsgDlgMode read FMsgDlgModeEnter write FMsgDlgModeEnter;
42 property MsgDlgModeLeave:TMsgDlgMode read FMsgDlgModeLeave write FMsgDlgModeLeave;
43 property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
44 property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
45 property AfterMsgDlgEnter:TShowDialogEvent read FAfterMsgDlgEnter write FAfterMsgDlgEnter;
46 property AfterMsgDlgLeave:TShowDialogEvent read FAfterMsgDlgLeave write FAfterMsgDlgLeave;
47 end ;
48
49 procedure Register;
50
51 implementation
52
53 procedure Register;
54 begin
55 RegisterComponents( ' Samples ' , [TMyEdit]);
56 end ;
57
58 procedure TMyEdit.CMMouseEnter( var Message: TMessage);
59 var
60 DlgMode:Integer ;
61 begin
62 if csDesigning in ComponentState then Exit;
63 if Assigned(FOnMouseEnter) then
64 FOnMouseEnter(Self);
65 if FAutoShowMsgOnMouseEnter then
66 begin
67 case FMsgDlgModeEnter of
68 Yes_No:DlgMode: = MB_YESNO;
69 YES_NO_CANCEL:DlgMode: = MB_YESNOCANCEL;
70 OK:DlgMode: = MB_OK;
71 OK_CANCEL:DlgMode: = MB_OKCANCEL;
72 RETRY_CANCEL:DlgMode: = MB_RETRYCANCEL;
73 ABORT_RETRY_IGNORE:DlgMode: = MB_ABORTRETRYIGNORE;
74 end ;
75 if FMsgMsEnter = '' then
76 FMsgMsEnter: = ' Mouse Enter ' ;
77 FMsgResultEnter: = Application.MessageBox(PChar(FMsgMsEnter),
78 PChar(Application.Title),
79 DlgMode);
80 if Assigned(FAfterMsgDlgEnter) then
81 FAfterMsgDlgEnter(Self,FMsgResultEnter);
82 end ;
83 end ;
84
85 procedure TMyEdit.CMMouseLeave( var Message: TMessage);
86 var
87 DlgMode:Integer ;
88 begin
89 if csDesigning in ComponentState then Exit;
90 if Assigned(FOnMouseLeave) then
91 FOnMouseLeave(Self);
92 if FAutoShowMsgOnMouseLeave then
93 begin
94 case FMsgDlgModeLeave of
95 Yes_No:DlgMode: = MB_YESNO;
96 YES_NO_CANCEL:DlgMode: = MB_YESNOCANCEL;
97 OK:DlgMode: = MB_OK;
98 OK_CANCEL:DlgMode: = MB_OKCANCEL;
99 RETRY_CANCEL:DlgMode: = MB_RETRYCANCEL;
100 ABORT_RETRY_IGNORE:DlgMode: = MB_ABORTRETRYIGNORE;
101 end ;
102 if FMsgMsLeave = '' then
103 FMsgMsLeave: = ' Mouse Leave ' ;
104 FMsgResultLeave: = Application.MessageBox(PChar(FMsgMsLeave),
105 PChar(Application.Title),
106 DlgMode);
107 if Assigned(FAfterMsgDlgLeave) then
108 FAfterMsgDlgLeave(Self,FMsgResultLeave);
109 end ;
110 end ;
111
112 end .
113

구성 요소 다운로드:http://files.cnblogs.com/uws2056/TMyEdit.rar

좋은 웹페이지 즐겨찾기