📄 rvedit.pas
字号:
end;
{$ENDIF}
TRVEditRVData(RVData).PrepareForEdit;
Result := GetItemTextA(CurItemNo);
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.SetItemTextEdA(ItemNo: Integer;
const s: String);
begin
SetItemTextEd(ItemNo, RVData.GetTextInItemFormatA(ItemNo, s));
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.SetCurrentItemTextA(const s: String);
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).SetCurrentItemTextA(s);
exit;
end;
{$ENDIF}
TRVEditRVData(RVData).PrepareForEdit;
SetItemTextEdA(CurItemNo, s);
end;
{------------------------------------------------------------------------------}
{$IFDEF RICHVIEWCBDEF3}
function TCustomRichViewEdit.GetCurrentItemTextW: WideString;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
Result := TCustomRichViewEdit(InplaceEditor).GetCurrentItemTextW;
exit;
end;
{$ENDIF}
TRVEditRVData(RVData).PrepareForEdit;
Result := GetItemTextW(CurItemNo);
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.SetItemTextEdW(ItemNo: Integer;
const s: WideString);
begin
SetItemTextEd(ItemNo, RVData.GetTextInItemFormatW(ItemNo, s));
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.SetCurrentItemTextW(const s: WideString);
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).SetCurrentItemTextW(s);
exit;
end;
{$ENDIF}
TRVEditRVData(RVData).PrepareForEdit;
SetItemTextEdW(CurItemNo, s);
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.InsertTextW(const text: WideString; CaretBefore: Boolean {$IFDEF RICHVIEWDEF4}=False{$ENDIF});
var s: String;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).InsertTextW(text, CaretBefore);
exit;
end;
{$ENDIF}
if not BeforeInserting then exit;
try
BeforeUnicode;
s := RVU_GetRawUnicode(text);
TRVEditRVData(RVData).InsertTextW_(s,True, CaretBefore);
finally
SetUndoGroupMode(False);
Change;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.InsertStringWTag(const s: WideString; Tag: Integer);
var info: TRVTextItemInfo;
s2: String;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).InsertStringTag(s, Tag);
exit;
end;
{$ENDIF}
if not BeforeInserting then exit;
try
BeforeUnicode;
info := RichViewTextItemClass.Create(RVData);
info.StyleNo := CurTextStyleNo;
info.Tag := Tag;
info.ItemOptions := info.ItemOptions+[rvioUnicode];
s2 := RVU_GetRawUnicode(s);
s2 := RV_ReplaceTabsW(s2, Style.SpacesInTab);
{$IFNDEF RVDONOTUSEUNICODE}
if not Style.TextStyles[info.StyleNo].Unicode then begin
s2 := RVU_UnicodeToAnsi(RVData.GetStyleCodePage(info.StyleNo), s2);
info.ItemOptions := info.ItemOptions-[rvioUnicode];
end;
{$ENDIF}
TRVEditRVData(RVData).InsertSomething(info, s2, False, False);
finally
AfterInserting;
end;
end;
{$ENDIF}
{$ENDIF}
{------------------------------------------------------------------------------}
function TCustomRichViewEdit.InsertOEMTextFromFile(const FileName: String):Boolean;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
Result := TCustomRichViewEdit(InplaceEditor).InsertOEMTextFromFile(FileName);
exit;
end;
{$ENDIF}
Result := True;
if not BeforeInserting then exit;
try
Result := TRVEditRVData(RVData).InsertTextFromFile(FileName, True, True);
finally
SetUndoGroupMode(False);
Change;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.InsertStringTag(const s: String; Tag: Integer);
var info: TRVTextItemInfo;
s2: String;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).InsertStringTag(s, Tag);
exit;
end;
{$ENDIF}
if not BeforeInserting then exit;
try
info := RichViewTextItemClass.Create(RVData);
info.StyleNo := CurTextStyleNo;
info.Tag := Tag;
s2 := RV_ReplaceTabsA(s, Style.SpacesInTab);
{$IFNDEF RVDONOTUSEUNICODE}
if Style.TextStyles[info.StyleNo].Unicode then begin
s2 := RVU_AnsiToUnicode(RVData.GetStyleCodePage(info.StyleNo), s);
info.ItemOptions := info.ItemOptions+[rvioUnicode];
end;
{$ENDIF}
TRVEditRVData(RVData).InsertSomething(info, s2, False, False);
finally
AfterInserting;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.InsertControl(const Name: String; ctrl: TControl; VAlign: TRVVAlign);
var info: TRVControlItemInfo;
s: String;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).InsertControl(Name, ctrl, VAlign);
exit;
end;
{$ENDIF}
if not BeforeInserting then exit;
try
info := TRVControlItemInfo.CreateEx(RVData, ctrl, VAlign);
ctrl.Visible := False;
ctrl.Parent := Self;
s := Name;
TRVEditRVData(RVData).InsertSomething(info, s, False, False);
finally
AfterInserting;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.InsertHotspot(ImageIndex, HotImageIndex: Integer; ImageList: TCustomImageList);
var info: TRVHotspotItemInfo;
s: String;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).InsertHotspot(ImageIndex, HotImageIndex, ImageList);
exit;
end;
{$ENDIF}
if not BeforeInserting then exit;
try
info := TRVHotspotItemInfo.CreateEx(RVData, ImageIndex, HotImageIndex, ImageList, rvvaBaseline);
s := '';
TRVEditRVData(RVData).InsertSomething(info, s, False, False);
finally
AfterInserting;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.InsertPicture(const Name: String; gr: TGraphic; VAlign: TRVVAlign);
var info: TRVGraphicItemInfo;
s: String;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).InsertPicture(Name, gr, VAlign);
exit;
end;
{$ENDIF}
if not BeforeInserting then exit;
try
info := TRVGraphicItemInfo.CreateEx(RVData, gr, VAlign);
info.UpdatePaletteInfo(DoInPaletteMode, False, RVPalette, PRVLogPalette);
s := Name;
TRVEditRVData(RVData).InsertSomething(info, s, False, False);
finally
AfterInserting;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.InsertHotPicture(const Name: String; gr: TGraphic; VAlign: TRVVAlign);
var info: TRVHotGraphicItemInfo;
s: String;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).InsertHotPicture(Name, gr, VAlign);
exit;
end;
{$ENDIF}
if not BeforeInserting then exit;
try
info := TRVHotGraphicItemInfo.CreateEx(RVData, gr, VAlign);
info.UpdatePaletteInfo(DoInPaletteMode, False, RVPalette, PRVLogPalette);
s := Name;
TRVEditRVData(RVData).InsertSomething(info, s, False, False);
finally
AfterInserting;
end;
end;
{------------------------------------------------------------------------------}
function TCustomRichViewEdit.CanDelete: Boolean;
begin
Result := TRVEditRVData(GetTopLevelEditor.RVData).CanDelete;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.DeleteSelection;
var Selected: Boolean;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
TCustomRichViewEdit(InplaceEditor).DeleteSelection;
exit;
end;
{$ENDIF}
if not BeforeChange(False) then exit;
Selected := RVData.SelectionExists(False, True);
TRVEditRVData(RVData).DeleteSelection_;
if Selected then
Invalidate;
end;
{------------------------------------------------------------------------------}
function TCustomRichViewEdit.GetCurItemNo: Integer;
begin
Result := TRVEditRVData(RVData).GetCurItemNo;
end;
{------------------------------------------------------------------------------}
function TCustomRichViewEdit.GetOffsetInCurItem: Integer;
begin
Result := TRVEditRVData(RVData).GetOffsetInCurItem;
end;
{------------------------------------------------------------------------------}
function TCustomRichViewEdit.GetCurItemStyle: Integer;
begin
{$IFNDEF RVDONOTUSEINPLACE}
if (InplaceEditor<>nil) and (InplaceEditor is TCustomRichViewEdit) then begin
Result := TCustomRichViewEdit(InplaceEditor).GetCurItemStyle;
exit;
end;
{$ENDIF}
TRVEditRVData(RVData).PrepareForEdit;
Result := GetItemStyle(GetCurItemNo);
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.WMKillFocus(var Message: TWMKillFocus);
var PRVData: TCustomRVData;
begin
inherited;
if (csDestroying in ComponentState) or (rvstNoKillFocusEvents in RVData.GetAbsoluteRootData.State) then exit;
TRVEditRVData(RVData).ClearJumpsCoords;
if not ReadOnly then begin
PRVData := RVData.GetAbsoluteParentData;
if (PRVData<>nil) and (PRVData is TRVEditRVData) then begin
TRVEditRVData(PRVData).ClearJumps;
TRVEditRVData(PRVData).Flags := TRVEditRVData(PRVData).Flags - [rvflUseJumps];
TRVEditRVData(PRVData).State := TRVEditRVData(PRVData).State - [rvstDrawHover];
end;
end;
GenerateMouseMove;
if (Style<>nil) and (not TRVEditRVData(RVData).NotFormatted) then begin
HideCaret(Handle);
DestroyCaret;
// Invalidate;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.WMInputLangChange(var Message: TMessage);
{$IFDEF RICHVIEWCBDEF3}
var NewStyleNo : integer;
{$ENDIF}
begin
{$IFDEF RICHVIEWCBDEF3}
if (Style=nil) or (ItemCount=0) or
not (rvoAutoSwitchLang in EditorOptions)
{$IFNDEF RVDONOTUSEUNICODE}
or Style.TextStyles[CurTextStyleNo].Unicode
{$ENDIF}
then
exit;
NewStyleNo := Style.TextStyles.FindStyleWithCharset(CurTextStyleNo, Message.WParam);
if NewStyleNo=-1 then begin
Style.TextStyles.Add;
NewStyleNo := Style.TextStyles.Count-1;
Style.TextStyles[NewStyleNo].Assign(Style.TextStyles[CurTextStyleNo]);
Style.TextStyles[NewStyleNo].Standard := False;
Style.TextStyles[NewStyleNo].Charset := Message.WParam;
end;
CurTextStyleNo:=NewStyleNo;
Message.Result := 1;
{$ENDIF}
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.WMSetFocus(var Message: TWMSetFocus);
begin
inherited;
if {TRVEditRVData(RVData).NotFormatted} True then begin
TRVEditRVData(RVData).PrepareForEdit;
if (Style<>nil) and (not TRVEditRVData(RVData).NotFormatted) then begin
TRVEditRVData(RVData).ChangeCaret(True,False,True,False);
Invalidate;
end;
end;
end;
{------------------------------------------------------------------------------}
procedure TCustomRichViewEdit.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
Message.Result := DLGC_WANTARROWS or DLGC_WANTCHARS;
if not (rvoDoNotWantReturns in EditorOptions) then
Message.Result := Message.Result or DLGC_WANTALLKEYS;
if rvoWantTabs in EditorOptions then
Message.Result := Message.Result or DLGC_WANTTAB;
end;
{------------------------------------------------------------------------------}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -