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

📄 unit1.cpp

📁 TRichView/RichView 是一套地道的Delphi/C++Builder控件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    CloseOleContainer();
}
//---------------------------------------------------------------------------
// Edit|Delete
void __fastcall TForm1::mitDeleteClick(TObject *Sender)
{
  // Shortcut to this item is Ctrl+Del
  // If you make it Del, you will be unable to use del key in editor
  RichViewEdit1->DeleteSelection();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::mitSelectAllClick(TObject *Sender)
{
  // warning: SelectAll moves caret to the end of the text
  RichViewEdit1->SelectAll();
  RichViewEdit1->SetFocus();
  RichViewEdit1->Invalidate();
}
//---------------------------------------------------------------------------
// Another clipboard-related action
void __fastcall TForm1::RichViewEdit1Select(TObject *Sender)
{
  mitCopy->Enabled   = RichViewEdit1->SelectionExists();
  mitCut->Enabled    = mitCopy->Enabled;
  mitDelete->Enabled = mitCopy->Enabled;
}
//---------------------------------------------------------------------------
// Edit| Insert Page Break
void __fastcall TForm1::mitInsertPageBreakClick(TObject *Sender)
{
  RichViewEdit1->InsertPageBreak();    
}
//---------------------------------------------------------------------------
// Edit| Remove Page Break
void __fastcall TForm1::mitRemovePageBreakClick(TObject *Sender)
{
  RichViewEdit1->RemoveCurrentPageBreak();    
}
//---------------------------------------------------------------------------
// Edit|Checkpoint...
void __fastcall TForm1::mitEditCheckpointClick(TObject *Sender)
{
  int CpNo, Tag;
  AnsiString Name;
  bool RaiseEvent;
  TCheckpointData CheckpointData = RichViewEdit1->GetCurrentCheckpoint();
  if (CheckpointData)
  {
    RichViewEdit1->GetCheckpointInfo(CheckpointData,Tag,Name,RaiseEvent);
    CpNo = RichViewEdit1->GetCheckpointNo(CheckpointData);
    frmCP->lblStatus->Caption = "Editing checkpoint #"+IntToStr(CpNo);
    frmCP->txtName->Text = Name;
    frmCP->txtTag->Text = GetTagStr(Tag);
    frmCP->btnOk->Caption = "OK";
    frmCP->btnDelete->Enabled = true;
  }
  else
  {
    frmCP->lblStatus->Caption = "Checkpoint does not exist";
    frmCP->txtName->Text = "";
    frmCP->txtTag->Text = GetTagStr(0);
    frmCP->btnOk->Caption = "Add";
    frmCP->btnDelete->Enabled = false;
  }
  switch (frmCP->ShowModal())
  {
    case mrOk: // add new checkpoint or modify existed one
      RichViewEdit1->SetCurrentCheckpointInfo(MakeTag(frmCP->txtTag->Text),
                                             frmCP->txtName->Text,false);
      break;
    case mrYes: // delete checkpoint
      RichViewEdit1->RemoveCurrentCheckpoint();
      break;
  }
}
//---------------------------------------------------------------------------
// Edit|Search... 
void __fastcall TForm1::mitSearchClick(TObject *Sender)
{
  FindDialog1->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FindDialog1Find(TObject *Sender)
{
  TRVESearchOptions Options = GetRVESearchOptions(FindDialog1->Options);
  if (!RichViewEdit1->SearchText(FindDialog1->FindText,
                           Options))
   Application->MessageBox("Can't find", "Search complete", MB_OK | MB_ICONEXCLAMATION);
}
//---------------------------------------------------------------------------
// Edit|Select Current Word
void __fastcall TForm1::mitSelectCurrentWordClick(TObject *Sender)
{
  RichViewEdit1->SelectCurrentWord();
  // now you can do something with current word:
  // translate or spell check, for example...
}
//---------------------------------------------------------------------------
#if __BORLANDC__ == 0x0540
// workaround for C++Builder 4 problem
namespace Rvuni
{
 extern PACKAGE AnsiString __fastcall RVU_UnicodeToAnsi(int CodePage, const AnsiString
	s);
}
#endif
// Edit|Current Item Properties...
void __fastcall TForm1::mitEditPropsClick(TObject *Sender)
{
  AnsiString s;
  int Tag, ImageIndex;
  TCustomImageList * ImageList;
  TRVVAlign VAlign;
  TControl* ctrl;
  TGraphic* gr;
  TColor BreakColor;
  TRVBreakStyle BreakStyle;
  unsigned char BreakWidth;

  frmProp->PageControl1->Visible   = true;
  frmProp->tsBullet->TabVisible    = false;
  frmProp->tsHotspot->TabVisible   = false;
  frmProp->tsPicture->TabVisible   = false;
  frmProp->tsText->TabVisible      = false;
  frmProp->tsComponent->TabVisible = false;
  frmProp->tsBreak->TabVisible     = false;
  frmProp->txtName->Enabled        = true;
  switch (RichViewEdit1->CurItemStyle)
  {
    case rvsBullet:
    {
      RichViewEdit1->GetCurrentBulletInfo(s, ImageIndex, ImageList, Tag);
      frmProp->tsBullet->TabVisible = true;
      frmProp->rgBullet->ItemIndex  = ImageIndex;
      frmProp->txtName->Text        = s;
      frmProp->txtTag->Text         = GetTagStr(Tag);
      break;
    }
    case rvsHotspot:
    {
      // you can use GetCurrentBulletInfo or GetCurrentHotspotInfo
      // to receive info about hotspot in caret position->
      // in this demo we need not HotImageIndex, because here
      // HotImageIndex = ImageIndex+2
      // and so we can use GetCurrentBulletInfo
      RichViewEdit1->GetCurrentBulletInfo(s, ImageIndex, ImageList, Tag);
      frmProp->tsHotspot->TabVisible = true;
      frmProp->rgHotspot->ItemIndex  = ImageIndex-3;
      frmProp->txtName->Text         = s;
      frmProp->txtTag->Text          = GetTagStr(Tag);
      break;
    }
    case rvsPicture:
    case rvsHotPicture:
    {
      RichViewEdit1->GetCurrentPictureInfo(s, gr, VAlign, Tag);
      frmProp->tsPicture->TabVisible    = true;
      frmProp->Image1->Picture->Graphic = gr;
      frmProp->txtName->Text            = s;
      frmProp->txtTag->Text             = GetTagStr(Tag);
      frmProp->rgPicVAlign->ItemIndex   = VAlign;
      break;
    }
    case rvsComponent:
    {
      RichViewEdit1->GetCurrentControlInfo(s, ctrl, VAlign, Tag);
      frmProp->tsComponent->TabVisible = true;
      frmProp->txtWidth->Text          = IntToStr(ctrl->Width);
      frmProp->txtHeight->Text         = IntToStr(ctrl->Height);
      frmProp->txtName->Text           = s;
      frmProp->lblComponent->Caption   = ctrl->ClassName();
      frmProp->txtTag->Text            = GetTagStr(Tag);
      frmProp->rgCtrlVAlign->ItemIndex = Integer(VAlign);
      break;
    }
    case rvsBreak:
    {
      RichViewEdit1->GetCurrentBreakInfo(BreakWidth, BreakStyle, BreakColor, Tag);
      frmProp->tsBreak->TabVisible = true;
      frmProp->txtBreakWidth->Text = IntToStr(BreakWidth);
      switch (BreakColor)
      {
      case clNone:
        frmProp->rgBreakColor->ItemIndex = 0;
        break;
      case clRed:
        frmProp->rgBreakColor->ItemIndex = 1;
        break;
      case clGreen:
        frmProp->rgBreakColor->ItemIndex = 2;
        break;
      case clBlue:
        frmProp->rgBreakColor->ItemIndex = 3;
        break;
      }
      frmProp->txtName->Text = "(not available for breaks)";
      frmProp->txtName->Enabled = false;
      frmProp->txtTag->Text = GetTagStr(Tag);
      break;
    }
    case rvsTable:
    {
      frmProp->txtName->Text = RichViewEdit1->GetCurrentItemText();
      frmProp->txtTag->Text = GetTagStr(RichViewEdit1->GetCurrentTag());
      frmProp->PageControl1->Visible = false;
      break;
    }
    default: // text
    {
      frmProp->tsText->TabVisible = true;
      frmProp->txtName->Text = "(not available for text)";
      frmProp->txtName->Enabled = false;
      frmProp->lblText->Caption = RichViewEdit1->GetCurrentItemTextA();
      frmProp->txtTag->Text = GetTagStr(RichViewEdit1->GetCurrentTag());
    }
  }
  if (frmProp->ShowModal()==mrOk)
  {
    switch (RichViewEdit1->CurItemStyle)
    {
      case rvsBullet:
      {
        RichViewEdit1->SetCurrentBulletInfo(
          frmProp->txtName->Text,
          frmProp->rgBullet->ItemIndex,
          NULL,
          MakeTag(frmProp->txtTag->Text));
        break;
      }
      case rvsHotspot:
      {
        RichViewEdit1->SetCurrentHotspotInfo(
          frmProp->txtName->Text,
          frmProp->rgHotspot->ItemIndex+3,
          frmProp->rgHotspot->ItemIndex+3+2,
          NULL,
          MakeTag(frmProp->txtTag->Text));
        break;
      }
      case rvsPicture:
      case rvsHotPicture:
      {
        // first we need to create a copy of image ...
        // RV_CreateGraphics is a global function pointer, defined in RVItem unit,
        // it creates graphic object by its class
        gr = RV_CreateGraphics(frmProp->Image1->Picture->Graphic->ClassType());
        gr->Assign(frmProp->Image1->Picture->Graphic);
        RichViewEdit1->SetCurrentPictureInfo(
          frmProp->txtName->Text,
          gr,
          TRVVAlign(frmProp->rgPicVAlign->ItemIndex),
          MakeTag(frmProp->txtTag->Text));
        break;
      }
      case rvsComponent:
      {
        // we wish these setting to be undone as one action,
        // so we use BeginUndoGroup, SetUndoGroupMode(true), settings, SetUndoGroupMode(false)
        RichViewEdit1->BeginUndoGroup(rvutModifyItem);
        // you can use BeginUndoCustomGroup instead of BeginUndoGroup
        // example:
        // RichViewEdit1->BeginUndoCustomGroup('modifying control');
        // In this case undo type will be rvutCustom
        // (look at TForm1->UpdateUndoMenu in this file)
        RichViewEdit1->SetUndoGroupMode(true);
        RichViewEdit1->SetCurrentControlInfo(
          frmProp->txtName->Text,
          TRVVAlign(frmProp->rgCtrlVAlign->ItemIndex),
          MakeTag(frmProp->txtTag->Text));
        RichViewEdit1->ResizeCurrentControl(
          StrToIntDef(frmProp->txtWidth->Text, ctrl->Width),
          StrToIntDef(frmProp->txtHeight->Text, ctrl->Height));
        RichViewEdit1->SetUndoGroupMode(false);
        break;
      }
      case rvsBreak:
      {
        switch (frmProp->rgBreakColor->ItemIndex)
        {
          case -1:
          case 0:
            BreakColor = clNone;
            break;
          case 1:
            BreakColor = clRed;
            break;
          case 2:
            BreakColor = clGreen;
            break;
          case 3:
            BreakColor = clBlue;
            break;
        }
        BreakWidth = (unsigned char)StrToIntDef(frmProp->txtBreakWidth->Text,1);
        RichViewEdit1->SetCurrentBreakInfo(BreakWidth,BreakStyle,BreakColor,
                                           MakeTag(frmProp->txtTag->Text));
        break;
      }
      case rvsTable:
      {
        RichViewEdit1->BeginUndoGroup(rvutModifyItem);
        RichViewEdit1->SetUndoGroupMode(true);
        RichViewEdit1->SetCurrentItemText(frmProp->txtName->Text);
        RichViewEdit1->SetCurrentTag(MakeTag(frmProp->txtTag->Text));
        RichViewEdit1->SetUndoGroupMode(false);
        break;
      }
      default:
      {
        RichViewEdit1->SetCurrentTag(MakeTag(frmProp->txtTag->Text));
      }
    }
  }
}
//======================================================================
// Main menu : "Misc"
//======================================================================
// Misc | Go to checkpoint ...
void __fastcall TForm1::mitCheckpointListClick(TObject *Sender)
{
  frmList->lst->Items->Clear();
  TCheckpointData CheckpointData = RichViewEdit1->GetFirstCheckpoint();
  while (CheckpointData)
  {
    int X,Y,Tag;
    AnsiString Name, s;
    bool RaiseEvent;
    RichViewEdit1->GetCheckpointInfo(CheckpointData,Tag,Name,RaiseEvent);
    RichViewEdit1->GetCheckpointXY(CheckpointData,X,Y);
    s = "(X:"+IntToStr(X)+",Y:"+IntToStr(Y)+") Name:'"+Name+"' Tag:'"+GetTagStr(Tag)+"'";
    frmList->lst->Items->Add(s);
    CheckpointData = RichViewEdit1->GetNextCheckpoint(CheckpointData);
  }
  if (frmList->ShowModal()==mrOk)
    RichViewEdit1->ScrollTo(RichViewEdit1->GetCheckpointY(frmList->lst->ItemIndex));
}
//---------------------------------------------------------------------------
// Misc | Background submenu popups
void __fastcall TForm1::mpdBackgroundClick(TObject *Sender)
{
  // Displaying RichViewEdit1->BackgroundStyle as checkmark in submenu...
  mitBackNoBitmap->Checked         = RichViewEdit1->BackgroundStyle==bsNoBitmap;
  mitBackStretched->Checked        = RichViewEdit1->BackgroundStyle==bsStretched;
  mitBackTiledandScrolled->Checked = RichViewEdit1->BackgroundStyle==bsTiledAndScrolled;
  mitBackTiled->Checked            = RichViewEdit1->BackgroundStyle==bsTiled;
  mitBackCentered->Checked         = RichViewEdit1->BackgroundStyle==bsCentered;
  mitBackTopLeft->Checked          = RichViewEdit1->BackgroundStyle==bsTopLeft;
  mitBackTopRight->Checked         = RichViewEdit1->BackgroundStyle==bsTopRight;
  mitBackBottomLeft->Checked       = RichViewEdit1->BackgroundStyle==bsBottomLeft;
  mitBackBottomRight->Checked      = RichViewEdit1->BackgroundStyle==bsBottomRight;
}
//---------------------------------------------------------------------------
// Misc | Background options
void __fastcall TForm1::mitBackClick(TObject *Sender)
{
  RichViewEdit1->BackgroundStyle = (TBackgroundStyle)(((TMenuItem*)Sender)->Tag);
}
//---------------------------------------------------------------------------
// Misc | Read only
void __fastcall TForm1::mitReadOnlyClick(TObject *Sender)
{
  RichViewEdit1->ReadOnly = ! RichViewEdit1->ReadOnly;
  mitReadOnly->Checked = RichViewEdit1->ReadOnly;
}
//======================================================================
// On Popup
void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
{
  mitEditProp1->Enabled = !RichViewEdit1->SelectionExists();
}
//---------------------------------------------------------------------------
// OnChange event handler.
void __fastcall TForm1::RichViewEdit1Change(TObject *Sender)
{
  UpdateUndoMenu();

⌨️ 快捷键说明

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