RVTInplace.pas
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:27k
源码类别:

RichEdit

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {       RichView                                        }
  4. {       TRVTableInplaceEdit: table cell editor.         }
  5. {                                                       }
  6. {       Copyright (c) Sergey Tkachenko                  }
  7. {       svt@trichview.com                               }
  8. {       http://www.trichview.com                        }
  9. {                                                       }
  10. {*******************************************************}
  11. unit RVTInplace;
  12. interface
  13. {$I RV_Defs.inc}
  14. uses
  15.     Windows, Messages, SysUtils, Classes, Graphics,
  16.     Controls, Forms,
  17.     RVStyle, RVFuncs, RVItem,
  18.     CRVData, CRVFData, RVRVData, RVERVData,
  19.     RVScroll, RichView, RVEdit,
  20.     RVRTFProps, RichEdit,
  21.     RVTable, RVBack;
  22. const WM_RVMOVEEDITOR = WM_USER+10;
  23.       WM_RVINPLACEUNDO = WM_USER+11;
  24.       WM_RVINPLACEREDO = WM_USER+12;
  25. type
  26.   TRVTableInplaceRVData = class (TRVEditRVData)
  27.     private
  28.       resized: Boolean;
  29.     protected
  30.       procedure Formatted(FirstItemNo, LastItemNo: Integer;Partial: Boolean); override;
  31.     public
  32.       function GetBackground: TRVBackground; override;
  33.       procedure DrawBackground(Canvas: TCanvas; r: TRect); override; 
  34.       procedure GetParentInfo(var ParentItemNo: Integer;
  35.                             var Location: TRVStoreSubRVData); override;
  36.       function CanLoadLayout: Boolean; override;
  37.       function GetSourceRVData: TCustomRVData; override;
  38.       procedure ShowRectangle(Left, Top, Width, Height: Integer); override;
  39.       procedure SetDocumentAreaSize(Width,Height: Integer; UpdateH: Boolean); override;
  40.       function BuildJumpsCoords(IgnoreReadOnly: Boolean): Integer; override;
  41.       function ReallyBuildJumpsCoords: Integer;
  42.       procedure ClearJumpsCoords; override;
  43.       procedure GetOriginEx(var ALeft, ATop: Integer); override;
  44.       function GetAbsoluteParentData: TCustomRVData; override;
  45.       function GetAbsoluteRootData: TCustomRVData; override;
  46.       procedure DoRVDblClick(const ClickedWord: String; StyleNo: Integer); override;
  47.       procedure DoJump(id: Integer); override;
  48.       procedure GetItemBackground(ItemNo: Integer; r: TRect; MakeImageRect: Boolean;
  49.         var Color: TColor;
  50.         var bmp: TBitmap; var UseBitmap: Boolean); override;
  51.       {$IFNDEF RVDONOTUSEITEMHINTS}
  52.       function GetItemHint(RVData: TCustomRVData; ItemNo: Integer;
  53.         const UpperRVDataHint: String): String; override;
  54.       {$ENDIF}
  55.   end;
  56.   TRVTableInplaceChangeEvent = procedure (Sender: TCustomRichViewEdit; ClearRedo: Boolean) of object;
  57.   TRVTableInplaceEdit = class (TRichViewEdit)
  58.     private
  59.       FRVData: TCustomRVFormattedData;
  60.       FTable: TRVTableItemInfo;
  61.       FClearing: Boolean;
  62.       FOnFormat: TNotifyEvent;
  63.       FColor: TColor;
  64.       FBusy: Boolean;
  65.       FOnChangeEx: TRVTableInplaceChangeEvent;
  66.       FTransparent: Boolean;
  67.       procedure CMRelease(var Message: TMessage); message CM_RELEASE;
  68.       procedure WMMoveEditor(var Message: TMessage); message WM_RVMOVEEDITOR;
  69.       procedure WMInplaceUndo(var Message: TMessage); message WM_RVINPLACEUNDO;
  70.       procedure WMInplaceRedo(var Message: TMessage); message WM_RVINPLACEREDO;
  71.       procedure WMUndo(var Message: TMessage); message WM_UNDO;    
  72.       procedure EMUndo(var Message: TMessage); message EM_UNDO;
  73.       procedure EMRedo(var Message: TMessage); message EM_REDO;
  74.       procedure EMCanUndo(var Message: TMessage); message EM_CANUNDO;
  75.       procedure EMCanRedo(var Message: TMessage); message EM_CANREDO;
  76.     protected
  77.       function GetDataClass: TRichViewRVDataClass; override;
  78.       procedure KeyPress(var Key: Char); override;
  79.       procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  80.       function GetRTFReadProperties: TRVRTFReaderProperties; override;
  81.       procedure WndProc(var Message: TMessage); override;
  82.       procedure SetReadOnly(const Value: Boolean); override;
  83.       function GetReadOnly: Boolean; override;
  84.       procedure InplaceRedrawing(AllowRedrawItself: Boolean); override;
  85.     public
  86.       FClickTime: Longint;
  87.       FTableItemNo: Integer;
  88.       FCell: TRVTableCellData;
  89.       FRow, FCol: Integer;
  90.       NormalScrolling: Boolean;
  91.       constructor Create(AOwner: TComponent); override;
  92.       destructor Destroy; override;
  93.       function RTFReaderAssigned: Boolean; override;
  94.       procedure DoChange(ClearRedo: Boolean); override;
  95.       procedure SetParentRVData(RVData: TCustomRVFormattedData);
  96.       procedure SetCell(Row, Col: Integer; Table: TRVTableItemInfo; CellPadding: Integer);
  97.       procedure SetVPos(p: Integer; Redraw: Boolean);override;
  98.       procedure SetHPos(p: Integer);override;
  99.       procedure SetClearingState;
  100.       procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
  101.       procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  102.       procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
  103.       procedure SelectCompletely(Select: Boolean);
  104.       function BeforeChange(FromOutside: Boolean): Boolean; override;
  105.       function Resized: Boolean;
  106.       procedure Undo; override;
  107.       procedure Redo; override;
  108.       procedure Click; override;
  109.       procedure DragDrop(Source: TObject; X, Y: Integer); override;
  110.       procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
  111.       //procedure DblClick; override;
  112.       property OnFormat: TNotifyEvent read FOnFormat write FOnFormat;
  113.       property Busy: Boolean read FBusy;
  114.       property OnChangeEx: TRVTableInplaceChangeEvent read FOnChangeEx write FOnChangeEx;
  115.       property ReadOnly: Boolean read GetReadOnly write SetReadOnly;
  116.       property Transparent: Boolean read FTransparent write FTransparent;
  117.   end;
  118. implementation
  119. uses RVUndo;
  120. {=============================== TRVTableInplaceEdit ==========================}
  121. constructor TRVTableInplaceEdit.Create(AOwner: TComponent);
  122. begin
  123.   inherited Create(AOwner);
  124.   BorderStyle := bsNone;
  125.   Visible := False;
  126.   Flags            := Flags - [rvflRootEditor,rvflRoot];
  127.   {$IFDEF RICHVIEWDEF4}
  128.   WheelStep := 0;
  129.   {$ENDIF}
  130. end;
  131. {------------------------------------------------------------------------------}
  132. function TRVTableInplaceEdit.GetDataClass: TRichViewRVDataClass;
  133. begin
  134.   Result := TRVTableInplaceRVData;
  135. end;
  136. {------------------------------------------------------------------------------}
  137. destructor TRVTableInplaceEdit.Destroy;
  138. begin
  139.   Destroying;
  140.   if FClearing and (InplaceEditor<>nil) and (InplaceEditor is TRVTableInplaceEdit) then
  141.     TRVTableInplaceEdit(InplaceEditor).SetClearingState;
  142.   DestroyInplace;
  143.   FRVData.UnAssignChosenRVData(FCell);
  144.   FTable.InplaceDeleted(FClearing);
  145.   if not FClearing and (Parent<>nil) and (Parent is TCustomRichView) then
  146.    TCustomRichView(Parent).SetFocusSilent;
  147.   inherited Destroy;
  148. end;
  149. {------------------------------------------------------------------------------}
  150. procedure TRVTableInplaceEdit.SetCell(Row, Col: Integer;
  151.                                       Table: TRVTableItemInfo;
  152.                                       CellPadding: Integer);
  153. begin
  154.   FRow  := Row;
  155.   FCol  := Col;
  156.   FCell  := Table.Cells[Row,Col];
  157.   FTable := Table;
  158.   FTableItemNo := FRVData.GetItemNo(FTable);
  159.   LeftMargin   := CellPadding;
  160.   TopMargin    := CellPadding;
  161.   RightMargin  := CellPadding;
  162.   BottomMargin := CellPadding;
  163.   TRVEditRVData(RVData).UndoList.FRVData := TCustomRVFormattedData(RVData.GetAbsoluteRootData);
  164.   TRVEditRVData(RVData).RedoList.FRVData := TCustomRVFormattedData(RVData.GetAbsoluteRootData);  
  165. end;
  166. {------------------------------------------------------------------------------}
  167. procedure TRVTableInplaceEdit.SetParentRVData(RVData: TCustomRVFormattedData);
  168. begin
  169.   FRVData    := RVData;
  170.   Options    := RVData.Options;
  171.   RVFOptions := RVData.RVFOptions;
  172.   RTFOptions := RVData.RTFOptions;
  173.   Style      := RVData.GetRVStyle;
  174.   VSmallStep := 1;
  175. end;
  176. {------------------------------------------------------------------------------}
  177. procedure TRVTableInplaceEdit.SetVPos(p: Integer; Redraw: Boolean);
  178. begin
  179.   if NormalScrolling then
  180.     inherited;
  181.   // else no scroll
  182. end;
  183. {------------------------------------------------------------------------------}
  184. procedure TRVTableInplaceEdit.SetHPos(p: Integer);
  185. begin
  186.   // no scroll
  187. end;
  188. {------------------------------------------------------------------------------}
  189. procedure TRVTableInplaceEdit.SetClearingState;
  190. begin
  191.   FClearing := True;
  192. end;
  193. {------------------------------------------------------------------------------}
  194. function TRVTableInplaceEdit.Resized: Boolean;
  195. begin
  196.   Result := TRVTableInplaceRVData(RVData).Resized;
  197.   TRVTableInplaceRVData(RVData).Resized := False;
  198. end;
  199. {------------------------------------------------------------------------------}
  200. procedure TRVTableInplaceEdit.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  201. begin
  202.   inherited;
  203.   if (Button=mbLeft) and not (rvstStartingDragDrop in RVData.GetAbsoluteRootData.State) and
  204.     FTable.StartSelecting(FRow,FCol) then begin
  205.     if (FRVData is TRichViewRVData)  then
  206.       TCustomRichView(TRichViewRVData(FRVData).RichView).ActivateScrollTimer(False);
  207.     FBusy := True;
  208.   end;
  209. end;
  210. {------------------------------------------------------------------------------}
  211. function TRVTableInplaceEdit.BeforeChange(FromOutside: Boolean): Boolean;
  212. begin
  213.   if (FRVData is TRVEditRVData)  then
  214.     Result := TCustomRichViewEdit(TRichViewRVData(FRVData).RichView).BeforeChange(True)
  215.   else
  216.     Result := False;
  217. end;
  218. {------------------------------------------------------------------------------}
  219. procedure TRVTableInplaceEdit.MouseMove(Shift: TShiftState; X, Y: Integer);
  220. // var data: TRVMouseMoveMessageData;
  221. //    p: TPoint;
  222. begin
  223.   if not (ssLeft in Shift) and (rvstMakingSelection in RVData.State) then
  224.     MouseUp(mbLeft, Shift, X, Y);
  225.   if (ssLeft in Shift) and
  226.      (rvstMakingSelection in RVData.State) and
  227.     (FRVData is TRichViewRVData) then
  228.     TCustomRichView(TRichViewRVData(FRVData).RichView).MouseMove(Shift, X+Left, Y+Top);
  229.   inherited;
  230.   {
  231.   data := TRVMouseMoveMessageData.Create;
  232.   data.Event := rvetMouseMove;
  233.   p := ClientToScreen(Point(X,Y));
  234.   p := RVData.GetAbsoluteRootData.GetParentControl.ScreenToClient(p);
  235.   data.X := p.X;
  236.   data.Y := p.Y;
  237.   data.Shift := Shift;
  238.   PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
  239.   }
  240. end;
  241. {------------------------------------------------------------------------------}
  242. procedure TRVTableInplaceEdit.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  243. var OnMUp: TRVMouseEvent;
  244.     ParentRichView: TCustomRichView;
  245. begin
  246.   if (Button in [mbLeft,mbRight]) and (GetCaptureControl=Self) then
  247.     ReleaseCapture;
  248.   inherited;
  249.   if (Button=mbLeft) then begin
  250.     FBusy := False;
  251.     if FTable.FMakingSelection and
  252.        (FRVData is TRichViewRVData) then begin
  253.       ParentRichView := TCustomRichView(TRichViewRVData(FRVData).RichView);
  254.       OnMUp := ParentRichView.OnRVMouseUp;
  255.       ParentRichView.OnRVMouseUp := nil;
  256.       try
  257.         ParentRichView.MouseUp(Button, Shift, X+Left, Y+Top);
  258.       finally
  259.         ParentRichView.OnRVMouseUp := OnMUp;
  260.       end;
  261.       if (rvstCompletelySelected in RVData.State) then
  262.         PostMessage(Handle, CM_RELEASE, 0, 0)
  263.       else
  264.         SelectCompletely(False);
  265.     end;
  266.   end;
  267. end;
  268. {------------------------------------------------------------------------------}
  269. procedure TRVTableInplaceEdit.SelectCompletely(Select: Boolean);
  270. begin
  271.   if Select = (rvstCompletelySelected in  RVData.State) then
  272.     exit;
  273.   if Select then begin
  274.     RVData.State := RVData.State + [rvstCompletelySelected];
  275.     FColor := Color;
  276.     Color := Style.SelColor;
  277.     end
  278.   else begin
  279.     RVData.State := RVData.State - [rvstCompletelySelected];
  280.     Color := FColor;
  281.   end;
  282.   TRVEditRVData(RVData).ChangeCaret(True, False, True, True);
  283. end;
  284. {------------------------------------------------------------------------------}
  285. procedure TRVTableInplaceEdit.CMRelease(var Message: TMessage);
  286. var AParent: TWinControl;
  287. begin
  288.   AParent := Parent;
  289.   Free;
  290.   if (AParent<>nil) and (AParent.Visible) then
  291.     AParent.SetFocus;
  292. end;
  293. {------------------------------------------------------------------------------}
  294. procedure TRVTableInplaceEdit.WMMoveEditor(var Message: TMessage);
  295. var NewRow, NewCol: Integer;
  296.     dir: TRVCellDirection;
  297.     AParent: TWinControl;
  298.     idx, offs: Integer;
  299. begin
  300.   AParent := Parent;
  301.   dir := TRVCellDirection(Message.WParam);
  302.   case dir of
  303.     rvcdDocTop:
  304.       begin
  305.         idx := 0;
  306.         offs := FRVData.GetRootData.GetOffsBeforeItem(idx);
  307.         TCustomRVFormattedData(FRVData.GetRootData).SetSelectionBounds(idx,offs,idx,offs);
  308.         AParent.SetFocus;
  309.         exit;
  310.       end;
  311.     rvcdDocBottom:
  312.       begin
  313.         idx := FRVData.GetRootData.Items.Count-1;
  314.         offs := FRVData.GetRootData.GetOffsAfterItem(idx);
  315.         TCustomRVFormattedData(FRVData.GetRootData).SetSelectionBounds(idx,offs,idx,offs);
  316.         AParent.SetFocus;
  317.         exit;
  318.       end;
  319.   end;
  320.   if FTable.GetCellTo(FRow,FCol, dir, NewRow,NewCol, False) then
  321.     FTable.CreateInplace(FTableItemNo, NewRow, NewCol, False,
  322.            dir in [rvcdRight, rvcdDown, rvcdNext],
  323.            dir in [rvcdLeft, rvcdUp, rvcdPrev], False, False)
  324.   else begin
  325.     if ((FCol=0) and (dir = rvcdLeft)) or
  326.        ((FRow=0) and (dir = rvcdUp)) then begin
  327.       FRVData.SetSelectionBounds(FTableItemNo,0,FTableItemNo,0);
  328.       AParent.SetFocus;
  329.       end
  330.     else if ((FCol+FCell.ColSpan=FTable.Rows[FRow].Count) and (dir = rvcdRight)) or
  331.        ((FRow+FCell.RowSpan=FTable.Rows.Count) and (dir = rvcdDown)) then begin
  332.       FRVData.SetSelectionBounds(FTableItemNo,1,FTableItemNo,1);
  333.       AParent.SetFocus;
  334.     end;
  335.   end;
  336. end;
  337. {------------------------------------------------------------------------------}
  338. procedure TRVTableInplaceEdit.KeyDown(var Key: Word; Shift: TShiftState);
  339. begin
  340.   if Key=VK_TAB then begin
  341.     if ssCtrl in Shift then
  342.       inherited
  343.     else if ssShift in Shift then
  344.       PostMessage(Handle, WM_RVMOVEEDITOR, ord(rvcdPrev),  0)
  345.     else
  346.       PostMessage(Handle, WM_RVMOVEEDITOR, ord(rvcdNext),  0);
  347.     Key := 0;
  348.     end
  349.   else
  350.     inherited;
  351. end;
  352. {------------------------------------------------------------------------------}
  353. procedure TRVTableInplaceEdit.KeyPress(var Key: Char);
  354. begin
  355.   if (Key=Chr(VK_TAB)) and (GetAsyncKeyState(VK_CONTROL)and $8000=0) then
  356.     Key := #0
  357.   else
  358.     inherited;
  359. end;
  360. {------------------------------------------------------------------------------}
  361. procedure TRVTableInplaceEdit.DoChange(ClearRedo: Boolean);
  362. begin
  363.   inherited DoChange(ClearRedo);
  364.   if (RootEditor.LockCount<=0) and Assigned(FOnChangeEx) then
  365.     FOnChangeEx(Self,ClearRedo);
  366. end;
  367. {------------------------------------------------------------------------------}
  368. procedure TRVTableInplaceEdit.Redo;
  369. begin
  370.   if RedoAction<>rvutNone then
  371.     inherited Redo
  372.   else
  373.     TCustomRichViewEdit((FRVData as TRVEditRVData).RichView).Redo;
  374. end;
  375. {------------------------------------------------------------------------------}
  376. procedure TRVTableInplaceEdit.Undo;
  377. begin
  378.   if UndoAction<>rvutNone then
  379.     inherited Undo
  380.   else
  381.     TCustomRichViewEdit((FRVData as TRVEditRVData).RichView).Undo;
  382. end;
  383. {------------------------------------------------------------------------------}
  384. procedure TRVTableInplaceEdit.WMInplaceRedo(var Message: TMessage);
  385. begin
  386.   ReadOnly := False;
  387.   Redo;
  388. end;
  389. {------------------------------------------------------------------------------}
  390. procedure TRVTableInplaceEdit.WMInplaceUndo(var Message: TMessage);
  391. begin
  392.   ReadOnly := False;
  393.   Undo;
  394. end;
  395. {------------------------------------------------------------------------------}
  396. function TRVTableInplaceEdit.GetRTFReadProperties: TRVRTFReaderProperties;
  397. begin
  398.   Result := TCustomRichView(TRichViewRVData(FRVData).RichView).RTFReadProperties;
  399. end;
  400. {------------------------------------------------------------------------------}
  401. function TRVTableInplaceEdit.RTFReaderAssigned: Boolean;
  402. begin
  403.   Result := TCustomRichView(TRichViewRVData(FRVData).RichView).RTFReaderAssigned;
  404. end;
  405. {------------------------------------------------------------------------------}
  406. procedure TRVTableInplaceEdit.WndProc(var Message: TMessage);
  407. begin
  408.   case Message.Msg of
  409.     WM_LBUTTONDOWN:
  410.       begin
  411.         if UINT(GetMessageTime - FClickTime) < GetDoubleClickTime then
  412.           Message.Msg := WM_LBUTTONDBLCLK;
  413.         FClickTime := 0;
  414.       end;
  415.   end;
  416.   inherited WndProc(Message);
  417. end;
  418. {------------------------------------------------------------------------------}
  419. function TRVTableInplaceEdit.GetReadOnly: Boolean;
  420. begin
  421.   if (FRVData is TRVEditRVData)  then
  422.     Result := TCustomRichViewEdit(TRichViewRVData(FRVData).RichView).ReadOnly
  423.   else
  424.     Result := False;
  425. end;
  426. {------------------------------------------------------------------------------}
  427. procedure TRVTableInplaceEdit.SetReadOnly(const Value: Boolean);
  428. begin
  429.   if (FRVData is TRVEditRVData) then
  430.     TCustomRichViewEdit(TRichViewRVData(FRVData).RichView).ReadOnly := Value;
  431. end;
  432. {------------------------------------------------------------------------------}
  433. procedure TRVTableInplaceEdit.EMRedo(var Message: TMessage);
  434. begin
  435.   Message.Result := SendMessage(Parent.Handle,EM_REDO,Message.WParam,Message.LParam);
  436. end;
  437. {------------------------------------------------------------------------------}
  438. procedure TRVTableInplaceEdit.EMUndo(var Message: TMessage);
  439. begin
  440.   Message.Result := SendMessage(Parent.Handle,EM_UNDO,Message.WParam,Message.LParam);
  441. end;
  442. {------------------------------------------------------------------------------}
  443. procedure TRVTableInplaceEdit.WMUndo(var Message: TMessage);
  444. begin
  445.   Message.Result := SendMessage(Parent.Handle,WM_UNDO,Message.WParam,Message.LParam);
  446. end;
  447. {------------------------------------------------------------------------------}
  448. procedure TRVTableInplaceEdit.EMCanRedo(var Message: TMessage);
  449. begin
  450.   Message.Result := SendMessage(Parent.Handle,EM_CANREDO,Message.WParam,Message.LParam);
  451. end;
  452. {------------------------------------------------------------------------------}
  453. procedure TRVTableInplaceEdit.EMCanUndo(var Message: TMessage);
  454. begin
  455.   Message.Result := SendMessage(Parent.Handle,EM_CANUNDO,Message.WParam,Message.LParam);
  456. end;
  457. {------------------------------------------------------------------------------}
  458. procedure TRVTableInplaceEdit.Click;
  459. var data: TRVClickMessageData;
  460. begin
  461.   data := TRVClickMessageData.Create;
  462.   data.Event := rvetClick;
  463.   PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
  464. end;
  465. {------------------------------------------------------------------------------}
  466. {
  467. procedure TRVTableInplaceEdit.DblClick;
  468. var data: TRVStdDblClickMessageData;
  469. begin
  470.   data := TRVStdDblClickMessageData.Create;
  471.   data.Event := rvetDblClick;
  472.   PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
  473. end;
  474. }
  475. {------------------------------------------------------------------------------}
  476. procedure TRVTableInplaceEdit.DoEndDrag(Target: TObject; X, Y: Integer);
  477. var data: TRVDNDMessageData;
  478.     p: TPoint;
  479. begin
  480.   data := TRVDNDMessageData.Create;
  481.   data.Event := rvetEndDrag;
  482.   p := ClientToScreen(Point(X,Y));
  483.   p := RVData.GetAbsoluteRootData.GetParentControl.ScreenToClient(p);
  484.   data.X := p.X;
  485.   data.Y := p.Y;
  486.   data.Obj := Target;
  487.   PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
  488. end;
  489. {------------------------------------------------------------------------------}
  490. procedure TRVTableInplaceEdit.DragDrop(Source: TObject; X, Y: Integer);
  491. var data: TRVDNDMessageData;
  492.     p: TPoint;
  493. begin
  494.   data := TRVDNDMessageData.Create;
  495.   data.Event := rvetDragDrop;
  496.   p := ClientToScreen(Point(X,Y));
  497.   p := RVData.GetAbsoluteRootData.GetParentControl.ScreenToClient(p);
  498.   data.X := p.X;
  499.   data.Y := p.Y;
  500.   data.Obj := Source;
  501.   PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
  502. end;
  503. {------------------------------------------------------------------------------}
  504. procedure TRVTableInplaceEdit.InplaceRedrawing(AllowRedrawItself: Boolean);
  505. begin
  506.   if not Transparent then
  507.     exit;
  508.   inherited;
  509. end;
  510. {========================= TRVTableInplaceRVData ==============================}
  511. function TRVTableInplaceRVData.BuildJumpsCoords(IgnoreReadOnly: Boolean): Integer;
  512. begin
  513.   TRVEditRVData(TRVTableInplaceEdit(RichView).FRVData).BuildJumpsCoords(IgnoreReadOnly);
  514.   Result := -100;
  515. end;
  516. {------------------------------------------------------------------------------}
  517. function TRVTableInplaceRVData.ReallyBuildJumpsCoords: Integer;
  518. begin
  519.   Result := inherited BuildJumpsCoords(True);
  520. end;
  521. {------------------------------------------------------------------------------}
  522. procedure TRVTableInplaceRVData.ClearJumpsCoords;
  523. begin
  524.   TRVEditRVData(TRVTableInplaceEdit(RichView).FRVData).ClearJumpsCoords;
  525.   inherited ClearJumpsCoords;
  526. end;
  527. {------------------------------------------------------------------------------}
  528. procedure TRVTableInplaceRVData.Formatted(FirstItemNo, LastItemNo: Integer;Partial: Boolean);
  529. begin
  530.   if Assigned(TRVTableInplaceEdit(FRichView).OnFormat) then
  531.     TRVTableInplaceEdit(FRichView).OnFormat(FRichView);
  532. end;
  533. {------------------------------------------------------------------------------}
  534. procedure TRVTableInplaceRVData.SetDocumentAreaSize(Width, Height: Integer; UpdateH: Boolean);
  535. begin
  536.   inherited;
  537.   Resized := True;
  538. end;
  539. {------------------------------------------------------------------------------}
  540. procedure TRVTableInplaceRVData.ShowRectangle(Left, Top, Width, Height: Integer);
  541. var ParentRVData: TCustomRVFormattedData;
  542. begin
  543.   if TRVTableInplaceEdit(FRichView).NormalScrolling then
  544.     inherited
  545.   else begin
  546.     ParentRVData := TRVTableInplaceEdit(FRichView).FRVData;
  547.     ParentRVData.ShowRectangle(
  548.       ParentRVData.GetHOffs+FRichView.Left+Left,
  549.       ParentRVData.GetVOffs+FRichView.Top+Top,
  550.       Width, Height);
  551.   end;
  552. end;
  553. {------------------------------------------------------------------------------}
  554. procedure TRVTableInplaceRVData.GetOriginEx(var ALeft, ATop: Integer);
  555. begin
  556.   TRVTableInplaceEdit(FRichView).FCell.GetOriginEx(ALeft, ATop);
  557.   dec(ALeft, TRVTableInplaceEdit(FRichView).FTable.CellPadding);
  558.   dec(ATop, TRVTableInplaceEdit(FRichView).FTable.CellPadding);
  559. end;
  560. {------------------------------------------------------------------------------}
  561. function TRVTableInplaceRVData.GetSourceRVData: TCustomRVData;
  562. begin
  563.   Result := TRVTableInplaceEdit(FRichView).FCell;
  564. end;
  565. {------------------------------------------------------------------------------}
  566. function TRVTableInplaceRVData.CanLoadLayout: Boolean;
  567. begin
  568.   Result := False;
  569. end;
  570. {------------------------------------------------------------------------------}
  571. function TRVTableInplaceRVData.GetAbsoluteParentData: TCustomRVData;
  572. begin
  573.   if GetSourceRVData<>nil then
  574.     Result := GetSourceRVData.GetAbsoluteParentData
  575.   else
  576.     Result := nil;
  577. end;
  578. {------------------------------------------------------------------------------}
  579. function TRVTableInplaceRVData.GetAbsoluteRootData: TCustomRVData;
  580. begin
  581.   if GetSourceRVData<>nil then
  582.     Result := GetSourceRVData.GetAbsoluteRootData
  583.   else
  584.     Result := nil;
  585. end;
  586. {------------------------------------------------------------------------------}
  587. procedure TRVTableInplaceRVData.GetParentInfo(var ParentItemNo: Integer;
  588.   var Location: TRVStoreSubRVData);
  589. begin
  590.   GetSourceRVData.GetParentInfo(ParentItemNo,Location);
  591. end;
  592. {------------------------------------------------------------------------------}
  593. procedure TRVTableInplaceRVData.DoRVDblClick(const ClickedWord: String;
  594.   StyleNo: Integer);
  595. var data: TRVDblClickMessageData;
  596. begin
  597.   data := TRVDblClickMessageData.Create;
  598.   data.Event := rvetRVDblClick;
  599.   data.ClickedWord := ClickedWord;
  600.   data.StyleNo := StyleNo;
  601.   PostMessage(GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
  602. end;
  603. {------------------------------------------------------------------------------}
  604. procedure TRVTableInplaceRVData.DoJump(id: Integer);
  605. var data: TRVJumpMessageData;
  606. begin
  607.   data := TRVJumpMessageData.Create;
  608.   data.Event := rvetJump;
  609.   data.id := id;
  610.   PostMessage(GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
  611. end;
  612. {------------------------------------------------------------------------------}
  613. procedure TRVTableInplaceRVData.DrawBackground(Canvas: TCanvas; r: TRect);
  614. var ParentEditor: TCustomRichView;
  615.     r2: TRect;
  616.     Cell: TRVTableCellData;
  617.     //stb: Boolean;
  618. begin
  619.   Cell := TRVTableCellData(GetSourceRVData);
  620.   if not Cell.IsTransparent or (rvstCompletelySelected in GetSourceRVData.State) then begin
  621.     GetBackground.Draw(Canvas, r, GetHOffs, GetVOffs, 0, -Cell.GetExtraVOffs, GetWidth, GetHeight+Cell.GetExtraVOffs,
  622.       GetColor, False);
  623.     exit;
  624.   end;
  625.   //stb := Cell.GetTable.IsSemiTransparentBackground;
  626.   if TRVTableInplaceEdit(RichView).Transparent then begin
  627.     ParentEditor := TCustomRichView(TRVTableInplaceEdit(FRichView).Parent);
  628.     r2 := r;
  629.     OffsetRect(r2, FRichView.Left, FRichView.Top);
  630.     ParentEditor.RVData.DrawBackground(Canvas, r2);
  631.   end;
  632.   Cell.GetTable.DrawBackgroundUnderCell(Canvas, Cell, r);
  633.   if (Cell.GetBackground<>nil) and (Cell.Color=clNone) then
  634.     GetBackground.Draw(Canvas, r, GetHOffs, GetVOffs, 0, -Cell.GetExtraVOffs,
  635.       GetWidth, GetHeight+Cell.GetExtraVOffs, Cell.Color, False);
  636. end;
  637. {------------------------------------------------------------------------------}
  638. function TRVTableInplaceRVData.GetBackground: TRVBackground;
  639. begin
  640.   if (rvstCompletelySelected in GetSourceRVData.State) or
  641.      (TCustomRVFormattedData(GetSourceRVData).GetBackground=nil) then
  642.     Result := TCustomRichView(RichView).Background
  643.   else
  644.     Result := TCustomRVFormattedData(GetSourceRVData).GetBackground;
  645. end;
  646. {------------------------------------------------------------------------------}
  647. procedure TRVTableInplaceRVData.GetItemBackground(ItemNo: Integer;
  648.   r: TRect; MakeImageRect: Boolean; var Color: TColor; var bmp: TBitmap;
  649.   var UseBitmap: Boolean);
  650. begin
  651.   TCustomRVFormattedData(GetSourceRVData).GetItemBackground(ItemNo,
  652.   r, MakeImageRect, Color, bmp, UseBitmap);
  653. end;
  654. {------------------------------------------------------------------------------}
  655. {$IFNDEF RVDONOTUSEITEMHINTS}
  656. function TRVTableInplaceRVData.GetItemHint(RVData: TCustomRVData; ItemNo: Integer;
  657.   const UpperRVDataHint: String): String;
  658. begin
  659.   Result := TCustomRVFormattedData(GetSourceRVData).GetItemHint(RVData, ItemNo,
  660.     UpperRVDataHint);
  661. end;
  662. {$ENDIF}
  663. end.