📄 rvtinplace.pas
字号:
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 + -