home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / TOTREE.ZIP / INT / INPLACE.INT next >
Encoding:
Text File  |  1998-12-26  |  13.1 KB  |  329 lines

  1. unit inplace;
  2. {/*****************************************************************/
  3.  /  Copyright (c) 1998 IMCA SYSTEMS                                /
  4.  /  All Rights Reserved.                                           /
  5.  /  Creation Date: 06.08.98                                        /
  6.  /  Version                                                        /
  7.  /  MODULE: Inplace Editor Control - real Plug for Controls        /
  8.  /*****************************************************************/}
  9. {$I DFS.inc}
  10.  
  11. {Define Registered}
  12. interface
  13. uses Windows, Classes, CommCtrl, Controls, DsgnIntf, ExtCtrls,stdctrls,dialogs,
  14.      Forms, Graphics, Messages, SysUtils, Menus, ComCtrls,Consts,Grids,Mask;
  15.  
  16. const
  17.   ISCopyright = 'IMCA SYSTEMS (c) Copyright 1996-98';
  18.   ISOutInplace = 'TOutInplaceEdit';
  19.   ISMail = 'victorov@spb.cityline.ru';
  20.   ISHomePage = 'http://www.spb.cityline.ru/u/victorov';
  21.  
  22. type
  23.   TSelection = record
  24.     StartPos, EndPos: Integer;
  25.   end;
  26.  
  27.  
  28. TCheckListBox = class(TCustomListBox)
  29.   private
  30.     FAllowGrayed: Boolean;
  31.     FFlat: Boolean;
  32.     FStandardItemHeight: Integer;
  33.     FOnClickCheck: TNotifyEvent;
  34.     FSaveStates: TList;
  35.     procedure ResetItemHeight;
  36.     procedure DrawCheck(R: TRect; AState: TCheckBoxState);
  37.     procedure SetChecked(Index: Integer; Checked: Boolean);
  38.     function GetChecked(Index: Integer): Boolean;
  39.     procedure SetState(Index: Integer; AState: TCheckBoxState);
  40.     function GetState(Index: Integer): TCheckBoxState;
  41.     procedure ToggleClickCheck(Index: Integer);
  42.     procedure InvalidateCheck(Index: Integer);
  43.     function CreateWrapper(Index: Integer): TObject;
  44.     function ExtractWrapper(Index: Integer): TObject;
  45.     function GetWrapper(Index: Integer): TObject;
  46.     function HaveWrapper(Index: Integer): Boolean;
  47.     procedure SetFlat(Value: Boolean);
  48.     procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
  49.     procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
  50.     procedure WMDestroy(var Msg : TWMDestroy);message WM_DESTROY;
  51.   protected
  52.     procedure DrawItem(Index: Integer; Rect: TRect;
  53.       State: TOwnerDrawState); override;
  54.     procedure SetItemData(Index: Integer; AData: LongInt); {$ifdef DFS_DELPHI_4_UP} override;{$endif}
  55.     function GetItemData(Index: Integer): LongInt; {$ifdef DFS_DELPHI_4_UP} override;{$endif}
  56.     procedure ResetContent; {$ifdef DFS_DELPHI_4_UP} override;{$endif}
  57.     procedure DeleteString(Index: Integer); {$ifdef DFS_DELPHI_4_UP} override;{$endif}
  58.  
  59.     procedure KeyPress(var Key: Char); override;
  60.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  61.       X, Y: Integer); override;
  62.  
  63.     procedure ClickCheck; dynamic;
  64.     procedure CreateParams(var Params: TCreateParams); override;
  65.     procedure CreateWnd; override;
  66.     procedure DestroyWnd; override;
  67.     function GetCheckWidth: Integer;
  68.   public
  69.     constructor Create(AOwner: TComponent); override;
  70.     destructor Destroy; override;
  71.     property Checked[Index: Integer]: Boolean read GetChecked write SetChecked;
  72.     property State[Index: Integer]: TCheckBoxState read GetState write SetState;
  73.   published
  74.     property OnClickCheck: TNotifyEvent read FOnClickCheck write FOnClickCheck;
  75.     property Align;
  76.     property AllowGrayed: Boolean read FAllowGrayed write FAllowGrayed default False;
  77.     {$ifdef DFS_DELPHI_4_UP}
  78.     property Anchors;
  79.     property BiDiMode;
  80.     property Constraints;
  81.     property BorderStyle;
  82.     property DragKind;
  83.     property DragMode;
  84.     property ImeMode;
  85.     property ImeName;
  86.     property ParentBiDiMode;
  87.     property OnEndDock;
  88.     property OnEndDrag;
  89.     property OnStartDock;
  90.     property OnStartDrag;
  91.     {$endif}
  92.     property Flat: Boolean read FFlat write SetFlat default True;
  93.     property Color;
  94.     property Columns;
  95.  
  96.     property Ctl3D;
  97.     property DragCursor;
  98.     property Enabled;
  99.     property Font;
  100.     property IntegralHeight;
  101.     property ItemHeight;
  102.     property Items;
  103.  
  104.     property ParentColor;
  105.     property ParentCtl3D;
  106.     property ParentFont;
  107.     property ParentShowHint;
  108.     property PopupMenu;
  109.     property ShowHint;
  110.     property Sorted;
  111.     property Style;
  112.     property TabOrder;
  113.     property TabStop;
  114.     property TabWidth;
  115.     property Visible;
  116.     property OnClick;
  117.     property OnDblClick;
  118.     property OnDragDrop;
  119.     property OnDragOver;
  120.     property OnDrawItem;
  121.  
  122.     property OnEnter;
  123.     property OnExit;
  124.     property OnKeyDown;
  125.     property OnKeyPress;
  126.     property OnKeyUp;
  127.     property OnMeasureItem;
  128.     property OnMouseDown;
  129.     property OnMouseMove;
  130.     property OnMouseUp;
  131.   end;
  132.  
  133.   { TPopupListbox }
  134.   TPopupListbox = class(TCustomListbox)
  135.   private
  136.     FSearchText: String;
  137.     FSearchTickCount: Longint;
  138.   protected
  139.     procedure CreateParams(var Params: TCreateParams); override;
  140.     procedure CreateWnd; override;
  141.     procedure KeyPress(var Key: Char); override;
  142.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  143.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
  144.  
  145.   end;
  146.  
  147.   TPopupCheckListbox = class(TCheckListBox)
  148.   private
  149.     FSearchText: String;
  150.     FSearchTickCount: Longint;
  151.   protected
  152.     procedure CreateParams(var Params: TCreateParams); override;
  153.     procedure CreateWnd; override;
  154.     procedure KeyPress(var Key: Char); override;
  155.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  156.     function GetStrValue : string;
  157.     procedure SetStrValue(Value : string);
  158.   public
  159.     property StrValue : string read GetStrValue write SetStrValue;
  160.   end;
  161.  
  162. type
  163. TCustomInplaceEdit=class;
  164. TEditStyle = (etsSimple, etsEllipsis, etsPickList, etsCheckList, etsAuto);
  165. TEditOption =(eosAlwaysShowEditor);
  166. TeditOptions = set Of TEditOption;
  167. //for future use
  168. TIEDataType = (iedBoolean,iedInteger,iedCurrency,iedPicklist,iedChecklist);
  169. TIEGetEditDataEvent = procedure(Sender: TCustomInplaceEdit;  var AData : String; var Pwd : boolean) of object;
  170. TIEValidateDataEvent = procedure(Sender: TCustomInplaceEdit; AData : String; var aCancel : boolean) of object;
  171. TIEGetEditstyleEvent = procedure(Sender: TCustomInplaceEdit; var aEditstyle : TEditStyle) of object;
  172. TIEGetPickListEvent = procedure(Sender: TCustomInplaceEdit; var aPickList : Tstrings) of object;
  173. TIEGetReadOnlyEvent = procedure(Sender: TCustomInplaceEdit; var aReadOnly : boolean) of object;
  174.  
  175. TIEEditButtonClickEvent = procedure(Sender: TCustomInplaceEdit) of object;
  176. TIEHideEditorEvent = procedure(Sender: TCustomInplaceEdit) of object;
  177. TIEUpdateDataEvent= procedure(Sender: TCustomInplaceEdit) of object;
  178. TIEGetClickKeyEvent=procedure(Sender: TCustomInplaceEdit; var aKey : Word; var aShift : TShiftState) of object;
  179. TIEUpdateEditEvent =procedure(Sender: TCustomInplaceEdit) of object;
  180.  
  181.  
  182. TCustomInplaceEdit = class(TCustomEdit)//TMaskEdit)//
  183.   private
  184.     FControl: TWinControl;
  185.     FEditOptions : TEditOptions;
  186.     //callback from FControl events
  187.     FOnGetEditData : TIEGetEditDataEvent;
  188.     FOnValidateData : TIEValidateDataEvent;
  189.     FOnGetEditStyle : TIEGetEditstyleEvent;
  190.     FonGetPickList : TIEGetPickListEvent;
  191.     FonGetReadOnly : TIEGetReadOnlyEvent;
  192.  
  193.     FonEditButtonClick:TIEEditButtonClickEvent;
  194.     FOnHideEditor : TIEHideEditorEvent;
  195.     FOnUpdateData : TIEUpdateDataEvent;
  196.     FonGetClickKey : TIEGetClickKeyEvent;
  197.     FonUpdateEdit : TIEUpdateEditEvent;
  198.     FonKeyUpParent : TKeyEvent;
  199.     FonKeydownParent : TKeyEvent;
  200.     FonKeyPressParent : TKeyPressEvent;
  201.     FonDblClickParent :  TNotifyEvent;
  202.  
  203.     FClickTime: Longint;
  204.     FCancelData:boolean;
  205.  
  206.     procedure InternalMove(const Loc: TRect; Redraw: Boolean);
  207.     procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
  208.     procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
  209.     procedure WMPaste(var Message); message WM_PASTE;
  210.     procedure WMCut(var Message); message WM_CUT;
  211.     procedure WMClear(var Message); message WM_CLEAR;
  212.   protected
  213.     procedure CreateParams(var Params: TCreateParams); override;
  214.     procedure DblClick; override;
  215.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  216.     procedure KeyPress(var Key: Char); override;
  217.     procedure KeyUp(var Key: Word; Shift: TShiftState); override;
  218.     procedure BoundsChanged; virtual;
  219.     procedure UpdateContents; virtual;
  220.     procedure WndProc(var Message: TMessage); override;
  221.     procedure CreateWnd; override;
  222.      //virtual engine
  223.     procedure GetEditData( var AData : String; var Pwd : boolean);
  224.     procedure ValidateData(AData : String; var aCancel : boolean);
  225.     procedure GetEditstyle(var aEditstyle : TEditStyle);
  226.     procedure GetPickList(var aPickList : Tstrings);
  227.     procedure GetReadOnly(var aReadOnly : boolean);
  228.  
  229.     procedure EditButtonClick;
  230.     procedure HideEditor;
  231.     procedure UpdateData;
  232.     procedure UpdateEdit;//update location and data of editor
  233.     procedure GetClickKey(var aKey : Word; var aShift : TShiftState);
  234.     procedure KeyUpParent(var Key: Word; Shift: TShiftState);
  235.     procedure KeydownParent(var Key: Word; Shift: TShiftState);
  236.     procedure KeyPressParent(var Key: Char);
  237.     procedure DblClickParent;
  238.  
  239.   public
  240.     procedure Hide;
  241.     constructor Create(AOwner: TComponent); override;
  242.     procedure Deselect;
  243.     procedure Invalidate;
  244.     procedure Move(const Loc: TRect);
  245.     function PosEqual(const Rect: TRect): Boolean;
  246.     procedure SetFocus; //reintroduce;
  247.     procedure UpdateLoc(const Loc: TRect);
  248.     function Visible: Boolean;
  249.     property EditOptions : TEditOptions read FeditOptions write FeditOptions;
  250.     property CancelData : boolean read FcancelData write FcancelData;//cancelling update data
  251.     property ClickTime : Longint read FClickTime write FClickTime;
  252.     property  Control: TWinControl read FControl write Fcontrol;
  253.     property  OnGetEditData : TIEGetEditDataEvent read FOnGetEditData write FOnGetEditData;
  254.     property  OnValidateData : TIEValidateDataEvent read FOnValidateData write FOnValidateData;
  255.     property  OnGetEditStyle : TIEGetEditstyleEvent read FOnGetEditStyle write FOnGetEditStyle;
  256.     property  OnGetPickList : TIEGetPickListEvent read FonGetPickList write FonGetPickList;
  257.     property  OnGetReadOnly : TIEGetReadOnlyEvent read FonGetReadOnly write FonGetReadOnly;
  258.  
  259.     property  OnEditButtonClick : TIEEditButtonClickEvent read FonEditButtonClick write FonEditButtonClick;
  260.     property  OnHideEditor : TIEHideEditorEvent read FonHideEditor write FonHideEditor;
  261.     property  OnUpdateData : TIEUpdateDataEvent read FonUpdateData write FonUpdateData;
  262.     property  OnGetClickKey : TIEGetClickKeyEvent read FonGetClickKey write FonGetClickKey;
  263.     property  OnUpdateEdit : TIEUpdateEditEvent read FonUpdateEdit write FonUpdateEdit;
  264.     property  OnKeyUpParent : TKeyEvent read FonKeyUpParent write FonKeyUpParent;
  265.     property  OnKeydownParent : TKeyEvent read FonKeydownParent write FonKeydownParent;
  266.     property  OnKeyPressParent : TKeyPressEvent read FonKeyPressParent write FonKeyPressParent;
  267.     property  OnDblClickParent :  TNotifyEvent read FonDblClickParent write FonDblClickParent;
  268.  
  269.   end;
  270.  
  271. // TOutInplaceEdit
  272.  
  273.   TOutInplaceEdit = class(TCustomInplaceEdit)
  274.   private
  275.  
  276.     FButtonWidth: Integer;
  277.     FPickList: TCustomListbox;//TPopupListbox;
  278.     FActiveList: TWinControl;
  279.  
  280.     FEditStyle: TEditStyle;
  281.     FListVisible: Boolean;
  282.     FTracking: Boolean;
  283.     FPressed: Boolean;
  284.     procedure ListMouseUp(Sender: TObject; Button: TMouseButton;
  285.       Shift: TShiftState; X, Y: Integer);
  286.     procedure SetEditStyle(Value: TEditStyle);
  287.     procedure StopTracking;
  288.     procedure TrackButton(X,Y: Integer);
  289.  
  290.     procedure CMCancelMode(var Message: TCMCancelMode); message CM_CancelMode;
  291.     procedure WMCancelMode(var Message: TMessage); message WM_CancelMode;
  292.     procedure WMKillFocus(var Message: TMessage); message WM_KillFocus;
  293.  
  294.     procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message wm_LButtonDblClk;
  295.     procedure WMPaint(var Message: TWMPaint); message wm_Paint;
  296.     procedure WMSetCursor(var Message: TWMSetCursor); message WM_SetCursor;
  297.     function OverButton(const P: TPoint): Boolean;
  298.     function ButtonRect: TRect;
  299.  
  300.   protected
  301.     procedure BoundsChanged; override;
  302.     procedure CloseUp(Accept: Boolean);
  303.     procedure DoDropDownKeys(var Key: Word; Shift: TShiftState);
  304.  
  305.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  306.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  307.       X, Y: Integer); override;
  308.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  309.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  310.       X, Y: Integer); override;
  311.     procedure PaintWindow(DC: HDC); override;
  312.     procedure WndProc(var Message: TMessage); override;
  313.  
  314.     property  ActiveList: TWinControl read FActiveList write FActiveList;
  315.     procedure CreateWnd; override;
  316.     property  PickList: TCustomListbox read FPickList;
  317.   public
  318.     procedure CancelMode(Sender : Tobject);
  319.     procedure UpdateContents; override;
  320.     procedure DropDown;
  321.     constructor Create(Owner: TComponent); override;
  322.     property  EditStyle: TEditStyle read FEditStyle write SetEditStyle;
  323.   end;
  324.  
  325. implementation
  326.  
  327.  
  328. end.
  329.