Cryogen2003
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Unit DevExpressCEB; Interface Uses SysUtils, Classes, Controls, cxControls, cxContainer, cxEdit, cxTextEdit, cxClasses, Types, cxMRUEdit, cxGridCustomView, cxGridCustomTableView, cxGridBandedTableView, cxMemo; Type TcxMemoCEB = Class(TcxMemo) Private Procedure EditPopupMenuClick(Sender: TObject); Protected Function DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; Override; Procedure DoContextPopup(MousePos: TPoint; Var Handled: Boolean); Override; Procedure UpdateEditPopupMenuItems(APopupMenu: TComponent); Virtual; Function GetEditPopupMenuInstance: TComponent; Virtual; Procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Override; End; TcxTextEditCEB = Class(TcxTextEdit) Private Procedure EditPopupMenuClick(Sender: TObject); Protected Function DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; Override; Procedure DoContextPopup(MousePos: TPoint; Var Handled: Boolean); Override; Procedure UpdateEditPopupMenuItems(APopupMenu: TComponent); Virtual; Function GetEditPopupMenuInstance: TComponent; Virtual; Procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Override; End; TcxMRUEditCEB = Class(TcxMRUEdit) Private Procedure EditPopupMenuClick(Sender: TObject); Protected Function DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; Override; Procedure DoContextPopup(MousePos: TPoint; Var Handled: Boolean); Override; Procedure UpdateEditPopupMenuItems(APopupMenu: TComponent); Virtual; Function GetEditPopupMenuInstance: TComponent; Virtual; Procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Override; End; Procedure Register; Implementation Uses Menus; Procedure Register; Begin RegisterComponents('CEB', [TcxMemoCEB, TcxTextEditCEB, TcxMRUEditCEB]); End; { TcxMemoCEB } Procedure TcxMemoCEB.DoContextPopup(MousePos: TPoint; Var Handled: Boolean); Var P: TPoint; Begin Inherited; If Not Handled Then Begin If (MousePos.X = -1) And (MousePos.Y = -1) Then P := ClientToScreen(Point(0, 0)) Else P := ClientToScreen(MousePos); Handled := (Assigned(dxISpellChecker) And dxISpellChecker.QueryPopup(PopupMenu, MousePos)) Or DoShowPopupMenu(PopupMenu, P.X, P.Y); End; End; Function TcxMemoCEB.DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; Begin If Assigned(AMenu) Then Result := Inherited DoShowPopupMenu(AMenu, X, Y) Else Begin UpdateEditPopupMenuItems(GetEditPopupMenuInstance); Result := Inherited DoShowPopupMenu(GetEditPopupMenuInstance, X, Y); EditingChanged; End; End; Procedure TcxMemoCEB.EditPopupMenuClick(Sender: TObject); Begin // End; Function TcxMemoCEB.GetEditPopupMenuInstance: TComponent; Function NewItem(Const ACaption: String; ATag: Integer): TMenuItem; Begin Result := TMenuItem.Create(Self); With Result Do Begin Caption := ACaption; Tag := ATag; OnClick := EditPopupMenuClick; End; End; Var APopupMenu: TPopupMenu; Begin If Assigned(PopupMenu) Then Begin Result := PopupMenu; Exit; End; APopupMenu := TPopupMenu.Create(Self); PopupMenu := APopupMenu; Result := APopupMenu; End; Procedure TcxMemoCEB.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var Handled: Boolean; Begin If Button <> mbRight Then Inherited MouseDown(Button, Shift, X, Y) Else DoContextPopup(Point(X, Y), Handled); End; Procedure TcxMemoCEB.UpdateEditPopupMenuItems(APopupMenu: TComponent); Begin If Not (APopupMenu Is TPopupMenu) Then Exit; InnerMemo.ReadOnly := Not DataBinding.CanModify Or ActiveProperties.ReadOnly; InnerMemo.ReadOnly := RealReadOnly; End; { TcxTextEditCEB } Procedure TcxTextEditCEB.DoContextPopup(MousePos: TPoint; Var Handled: Boolean); Var P: TPoint; Begin Inherited; If Not Handled Then Begin If (MousePos.X = -1) And (MousePos.Y = -1) Then P := ClientToScreen(Point(0, 0)) Else P := ClientToScreen(MousePos); Handled := (Assigned(dxISpellChecker) And dxISpellChecker.QueryPopup(PopupMenu, MousePos)) Or DoShowPopupMenu(PopupMenu, P.X, P.Y); End; End; Function TcxTextEditCEB.DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; Begin If Assigned(AMenu) Then Result := Inherited DoShowPopupMenu(AMenu, X, Y) Else Begin UpdateEditPopupMenuItems(GetEditPopupMenuInstance); Result := Inherited DoShowPopupMenu(GetEditPopupMenuInstance, X, Y); EditingChanged; End; End; Procedure TcxTextEditCEB.EditPopupMenuClick(Sender: TObject); Begin // End; Function TcxTextEditCEB.GetEditPopupMenuInstance: TComponent; Function NewItem(Const ACaption: String; ATag: Integer): TMenuItem; Begin Result := TMenuItem.Create(Self); With Result Do Begin Caption := ACaption; Tag := ATag; OnClick := EditPopupMenuClick; End; End; Var APopupMenu: TPopupMenu; Begin If Assigned(PopupMenu) Then Begin Result := PopupMenu; Exit; End; APopupMenu := TPopupMenu.Create(Self); PopupMenu := APopupMenu; Result := APopupMenu; End; Procedure TcxTextEditCEB.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var Handled: Boolean; Begin If Button <> mbRight Then Inherited MouseDown(Button, Shift, X, Y) Else DoContextPopup(Point(X, Y), Handled); End; Procedure TcxTextEditCEB.UpdateEditPopupMenuItems(APopupMenu: TComponent); Begin If Not (APopupMenu Is TPopupMenu) Then Exit; InnerTextEdit.ReadOnly := Not DataBinding.CanModify Or ActiveProperties.ReadOnly; InnerTextEdit.ReadOnly := RealReadOnly; End; { TcxMRUEditCEB } Procedure TcxMRUEditCEB.DoContextPopup(MousePos: TPoint; Var Handled: Boolean); Var P: TPoint; Begin Inherited; If Not Handled Then Begin If (MousePos.X = -1) And (MousePos.Y = -1) Then P := ClientToScreen(Point(0, 0)) Else P := ClientToScreen(MousePos); Handled := (Assigned(dxISpellChecker) And dxISpellChecker.QueryPopup(PopupMenu, MousePos)) Or DoShowPopupMenu(PopupMenu, P.X, P.Y); End; End; Function TcxMRUEditCEB.DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; Begin If Assigned(AMenu) Then Result := Inherited DoShowPopupMenu(AMenu, X, Y) Else Begin UpdateEditPopupMenuItems(GetEditPopupMenuInstance); Result := Inherited DoShowPopupMenu(GetEditPopupMenuInstance, X, Y); EditingChanged; End; End; Procedure TcxMRUEditCEB.EditPopupMenuClick(Sender: TObject); Begin // End; Function TcxMRUEditCEB.GetEditPopupMenuInstance: TComponent; Function NewItem(Const ACaption: String; ATag: Integer): TMenuItem; Begin Result := TMenuItem.Create(Self); With Result Do Begin Caption := ACaption; Tag := ATag; OnClick := EditPopupMenuClick; End; End; Var APopupMenu: TPopupMenu; Begin If Assigned(PopupMenu) Then Begin Result := PopupMenu; Exit; End; APopupMenu := TPopupMenu.Create(Self); PopupMenu := APopupMenu; Result := APopupMenu; End; Procedure TcxMRUEditCEB.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var Handled: Boolean; Begin If Button <> mbRight Then Inherited MouseDown(Button, Shift, X, Y) Else DoContextPopup(Point(X, Y), Handled); End; Procedure TcxMRUEditCEB.UpdateEditPopupMenuItems(APopupMenu: TComponent); Begin If Not (APopupMenu Is TPopupMenu) Then Exit; InnerTextEdit.ReadOnly := Not DataBinding.CanModify Or ActiveProperties.ReadOnly; InnerTextEdit.ReadOnly := RealReadOnly; End; End. |