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

📄 rvedit.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  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 + -