⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvtinplace.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      begin
        idx := FRVData.GetRootData.Items.Count-1;
        offs := FRVData.GetRootData.GetOffsAfterItem(idx);
        TCustomRVFormattedData(FRVData.GetRootData).SetSelectionBounds(idx,offs,idx,offs);
        AParent.SetFocus;
        exit;
      end;
  end;
  if FTable.GetCellTo(FRow,FCol, dir, NewRow,NewCol, False) then
    FTable.CreateInplace(FTableItemNo, NewRow, NewCol, False,
           dir in [rvcdRight, rvcdDown, rvcdNext],
           dir in [rvcdLeft, rvcdUp, rvcdPrev], False, False)
  else begin
    if ((FCol=0) and (dir = rvcdLeft)) or
       ((FRow=0) and (dir = rvcdUp)) then begin
      FRVData.SetSelectionBounds(FTableItemNo,0,FTableItemNo,0);
      AParent.SetFocus;
      end
    else if ((FCol+FCell.ColSpan=FTable.Rows[FRow].Count) and (dir = rvcdRight)) or
       ((FRow+FCell.RowSpan=FTable.Rows.Count) and (dir = rvcdDown)) then begin
      FRVData.SetSelectionBounds(FTableItemNo,1,FTableItemNo,1);
      AParent.SetFocus;
    end;
  end;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
  if Key=VK_TAB then begin
    if ssCtrl in Shift then
      inherited
    else if ssShift in Shift then
      PostMessage(Handle, WM_RVMOVEEDITOR, ord(rvcdPrev),  0)
    else
      PostMessage(Handle, WM_RVMOVEEDITOR, ord(rvcdNext),  0);
    Key := 0;
    end
  else
    inherited;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.KeyPress(var Key: Char);
begin

  if (Key=Chr(VK_TAB)) and (GetAsyncKeyState(VK_CONTROL)and $8000=0) then
    Key := #0
  else
    inherited;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.DoChange(ClearRedo: Boolean);
begin
  inherited DoChange(ClearRedo);
  if (LockCount<=0) and Assigned(FOnChangeEx) then
    FOnChangeEx(Self,ClearRedo);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.Redo;
begin
  if RedoAction<>rvutNone then
    inherited Redo
  else
    TCustomRichViewEdit((FRVData as TRVEditRVData).RichView).Redo;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.Undo;
begin
  if UndoAction<>rvutNone then
    inherited Undo
  else
    TCustomRichViewEdit((FRVData as TRVEditRVData).RichView).Undo;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.WMInplaceRedo(var Message: TMessage);
begin
  ReadOnly := False;
  Redo;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.WMInplaceUndo(var Message: TMessage);
begin
  ReadOnly := False;
  Undo;
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceEdit.GetRTFReadProperties: TRVRTFReaderProperties;
begin
  Result := TCustomRichView(TRichViewRVData(FRVData).RichView).RTFReadProperties;
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceEdit.RTFReaderAssigned: Boolean;
begin
  Result := TCustomRichView(TRichViewRVData(FRVData).RichView).RTFReaderAssigned;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_LBUTTONDOWN:
      begin
        if UINT(GetMessageTime - FClickTime) < GetDoubleClickTime then
          Message.Msg := WM_LBUTTONDBLCLK;
        FClickTime := 0;
      end;
  end;
  inherited WndProc(Message);
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceEdit.GetReadOnly: Boolean;
begin
  if (FRVData is TRVEditRVData)  then
    Result := TCustomRichViewEdit(TRichViewRVData(FRVData).RichView).ReadOnly
  else
    Result := False;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.SetReadOnly(const Value: Boolean);
begin
  if (FRVData is TRVEditRVData) then
    TCustomRichViewEdit(TRichViewRVData(FRVData).RichView).ReadOnly := Value;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.EMRedo(var Message: TMessage);
begin
  Message.Result := SendMessage(Parent.Handle,EM_REDO,Message.WParam,Message.LParam);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.EMUndo(var Message: TMessage);
begin
  Message.Result := SendMessage(Parent.Handle,EM_UNDO,Message.WParam,Message.LParam);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.WMUndo(var Message: TMessage);
begin
  Message.Result := SendMessage(Parent.Handle,WM_UNDO,Message.WParam,Message.LParam);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.EMCanRedo(var Message: TMessage);
begin
  Message.Result := SendMessage(Parent.Handle,EM_CANREDO,Message.WParam,Message.LParam);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.EMCanUndo(var Message: TMessage);
begin
  Message.Result := SendMessage(Parent.Handle,EM_CANUNDO,Message.WParam,Message.LParam);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.Click;
var data: TRVClickMessageData;
begin
  data := TRVClickMessageData.Create;
  data.Event := rvetClick;
  PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
end;
{------------------------------------------------------------------------------}
{
procedure TRVTableInplaceEdit.DblClick;
var data: TRVStdDblClickMessageData;
begin
  data := TRVStdDblClickMessageData.Create;
  data.Event := rvetDblClick;
  PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
end;
}
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.DoEndDrag(Target: TObject; X, Y: Integer);
var data: TRVDNDMessageData;
    p: TPoint;
begin
  data := TRVDNDMessageData.Create;
  data.Event := rvetEndDrag;
  p := ClientToScreen(Point(X,Y));
  p := RVData.GetAbsoluteRootData.GetParentControl.ScreenToClient(p);
  data.X := p.X;
  data.Y := p.Y;
  data.Obj := Target;
  PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceEdit.DragDrop(Source: TObject; X, Y: Integer);
var data: TRVDNDMessageData;
    p: TPoint;
begin
  data := TRVDNDMessageData.Create;
  data.Event := rvetDragDrop;
  p := ClientToScreen(Point(X,Y));
  p := RVData.GetAbsoluteRootData.GetParentControl.ScreenToClient(p);
  data.X := p.X;
  data.Y := p.Y;
  data.Obj := Source;
  PostMessage(RVData.GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
end;
{========================= TRVTableInplaceRVData ==============================}
function TRVTableInplaceRVData.BuildJumpsCoords(IgnoreReadOnly: Boolean): Integer;
begin
  TRVEditRVData(TRVTableInplaceEdit(RichView).FRVData).BuildJumpsCoords(IgnoreReadOnly);
  Result := -100;
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceRVData.ReallyBuildJumpsCoords: Integer;
begin
  Result := inherited BuildJumpsCoords(True);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceRVData.ClearJumpsCoords;
begin
  TRVEditRVData(TRVTableInplaceEdit(RichView).FRVData).ClearJumpsCoords;
  inherited ClearJumpsCoords;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceRVData.Formatted(FirstItemNo, LastItemNo: Integer;Partial: Boolean);
begin
  if Assigned(TRVTableInplaceEdit(FRichView).OnFormat) then
    TRVTableInplaceEdit(FRichView).OnFormat(FRichView);
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceRVData.SetDocumentAreaSize(Width, Height: Integer; UpdateH: Boolean);
begin
  inherited;
  Resized := True;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceRVData.ShowRectangle(Left, Top, Width, Height: Integer);
var ParentRVData: TCustomRVFormattedData;
begin
  if TRVTableInplaceEdit(FRichView).NormalScrolling then
    inherited
  else begin
    ParentRVData := TRVTableInplaceEdit(FRichView).FRVData;
    ParentRVData.ShowRectangle(
      ParentRVData.GetHOffs+FRichView.Left+Left,
      ParentRVData.GetVOffs+FRichView.Top+Top,
      Width, Height);
  end;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceRVData.GetOriginEx(var ALeft, ATop: Integer);
begin
  TRVTableInplaceEdit(FRichView).FCell.GetOriginEx(ALeft, ATop);
  dec(ALeft, TRVTableInplaceEdit(FRichView).FTable.CellPadding);
  dec(ATop, TRVTableInplaceEdit(FRichView).FTable.CellPadding);
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceRVData.GetSourceRVData: TCustomRVData;
begin
  Result := TRVTableInplaceEdit(FRichView).FCell;
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceRVData.CanLoadLayout: Boolean;
begin
  Result := False;
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceRVData.GetAbsoluteParentData: TCustomRVData;
begin
  if GetSourceRVData<>nil then
    Result := GetSourceRVData.GetAbsoluteParentData
  else
    Result := nil;
end;
{------------------------------------------------------------------------------}
function TRVTableInplaceRVData.GetAbsoluteRootData: TCustomRVData;
begin
  if GetSourceRVData<>nil then
    Result := GetSourceRVData.GetAbsoluteRootData
  else
    Result := nil;
end;
{------------------------------------------------------------------------------}
procedure TRVTableInplaceRVData.GetParentInfo(var ParentItemNo: Integer;
  var Location: TRVStoreSubRVData);
begin
  GetSourceRVData.GetParentInfo(ParentItemNo,Location);
end;

procedure TRVTableInplaceRVData.DoRVDblClick(const ClickedWord: String;
  StyleNo: Integer);
var data: TRVDblClickMessageData;
begin
  data := TRVDblClickMessageData.Create;
  data.Event := rvetRVDblClick;
  data.ClickedWord := ClickedWord;
  data.StyleNo := StyleNo;
  PostMessage(GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
end;

procedure TRVTableInplaceRVData.DoJump(id: Integer);
var data: TRVJumpMessageData;
begin
  data := TRVJumpMessageData.Create;
  data.Event := rvetJump;
  data.id := id;
  PostMessage(GetAbsoluteRootData.GetParentControl.Handle, WM_RVEVENT, Integer(Data), 0);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -