📄 edit1f.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "Edit1f.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
const float RulerAdj = 4.0/3.0;
const int GutterWid = 6;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AboutClick(TObject *Sender)
{
MessageBox(Form1->Handle, "文本编辑器 1.0 版本", "关于 Edit...",
MB_OK | MB_ICONINFORMATION); // MB_ICONINFORMATION:显示信息提示图标
// MB_ICONWARNING:显示警告图标
// MB_ICONERROR:显示错误图标
// MB_OK:显示“确定”按钮
// 关于其它参数祥见“Win32 用户手册”
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ExitClick(TObject *Sender)
{
Close(); // 等价于:form1->Close();
// 不要使用 exit() 函数,
// 因为该将直接结束程序运行(不处理任何事件)。
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose = CheckFileSave(); // 检查文本是否需要保存
// 当使用 Close 方法关闭窗体时,触发该事件
// 如果设置 CanClose 参数(用引用传递)为“false”
// 将阻止窗体关闭(放弃 Close 方法的操作)。
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichEdit1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button == mbRight)
{ // 弹出菜单
PopupMenu1->Popup(X + RichEdit1->ClientOrigin.x, Y + RichEdit1->ClientOrigin.y);
// 参数 X 和 Y 是相对坐标(相对RichEdit1内的位置)
// 而 Popup 方法中使用的参数是屏幕坐标
// 需要将 X、Y 参数转换为屏幕坐标。
// 也可以使用 ClinetToScreen 方法直接转换 X、Y 参数。
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewClick(TObject *Sender)
{
RichEdit1->Lines->Clear(); // 清空文本
ReadOnly = false;
RichEdit1->Modified = false;
FileName = "Untitled"; // 设置缺省文件名
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenClick(TObject *Sender)
{
if(!CheckFileSave())
{ // 放弃打开文件操作
return;
}
if(OpenDialog1->Execute())
{ // 打开文件,修改标志位
RichEdit1->ReadOnly = OpenDialog1->Options.Contains(ofReadOnly);
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
RichEdit1->SetFocus();
RichEdit1->Modified = False;
FileName = OpenDialog1->FileName; // 保存文件名
FilterIndex = OpenDialog1->FilterIndex; // 保存文件类型索引
}
}
//---------------------------------------------------------------------------
bool TForm1::CheckFileSave()
{
if(RichEdit1->Modified)
{ // 需要保存文本
switch(MessageBox(Form1->Handle, "是否保存修改?", "提示...",
MB_YESNOCANCEL | MB_ICONQUESTION))
{
case ID_YES: // 选择保存文件
SaveDialog1->FileName = FileName; // 设置文件名
SaveDialog1->FilterIndex = FilterIndex; // 设置文件类型
if(SaveDialog1->Execute()); // 打开“保存”对话框保存文件
{ // 并判断保存情况
RichEdit1->Modified = false;
}
break;
case ID_CANCEL: // 取消操作
return(false); // 放弃操作
}
}
return(true); // 继续
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnHint = &DisplayHint; // 设置Hint事件响应程序
// Application对象为缺省定义对象,
// Hint为Application对象事件
// DisplayHint为自定义函数
FilterIndex = 1; // 初始化文件类型索引
FileName = "Untitled"; // 设置缺省文件名
GetFontNames();
}
void __fastcall TForm1::DisplayHint(TObject* Owner)
{
StatusBar1->SimpleText = Application->Hint;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveClick(TObject *Sender)
{
SaveDialog1->FileName = FileName; // 设置文件名
SaveDialog1->FilterIndex = FilterIndex; // 设置文件类型
if(SaveDialog1->Execute()) // 打开“保存”对话框保存文件
{ // 用户选择“保存”按钮。
if(SaveDialog1->FilterIndex == 1)
{
RichEdit1->PlainText = false;
FileName = SaveDialog1->FileName + ".rtf";
}
else if(SaveDialog1->FilterIndex == 2)
{
RichEdit1->PlainText = true;
FileName = SaveDialog1->FileName + ".txt";
}
else
{
RichEdit1->PlainText = true;
FileName = SaveDialog1->FileName;
}
RichEdit1->Lines->SaveToFile(FileName);
RichEdit1->Modified = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
{
if(RichEdit1->SelLength)
{
Cut1->Enabled = true;
Copy1->Enabled = true;
}
else
{
Cut1->Enabled = false;
Copy1->Enabled = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CutClick(TObject *Sender)
{
RichEdit1->CutToClipboard(); // 剪切文本(RichEdit1->SelText)
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PastClick(TObject *Sender)
{
RichEdit1->PasteFromClipboard(); // (从剪贴版中)粘贴文本
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CopyClick(TObject *Sender)
{
RichEdit1->CopyToClipboard(); // 复制文本到剪贴版
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FindClick(TObject *Sender)
{
FindDialog1->FindText = RichEdit1->SelText; // 设置查找文本
FindDialog1->Options << frHideUpDown; // 隐藏向前、向后选项
FindDialog1->Execute(); // 显示“查找”对话框
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FindDialog1Find(TObject *Sender)
{
TSearchTypes Options;
if(FindDialog1->Options.Contains(frWholeWord))
{ // 用户选择了全字匹配( WholeWord )
Options << stWholeWord;
}
else
{
Options >> stWholeWord;
}
if(FindDialog1->Options.Contains(frMatchCase))
{ // 用户选择了区分大小写
Options << stMatchCase;
}
else
{
Options >> stMatchCase;
}
RichEdit1->FindText(FindDialog1->FindText,
RichEdit1->SelStart + 1, RichEdit1->Text.Length(), Options);
RichEdit1->SetFocus();
}
//--------------------------------------------------------------------------- //----------------------------------------------------------------------------
// 处理字体列表项函数,在TForm1::GetFontNames函数中使用,并由系统调用。
int __stdcall EnumFontsProc(TLogFontA &LogFont, TTextMetricA &TextMetric,
int FontType, Pointer Data)
{ ((TStrings *)Data)->Add((AnsiString)LogFont.lfFaceName);
return 1;
}
//----------------------------------------------------------------------------
void __fastcall TForm1::GetFontNames(void)
{ HDC hDC = GetDC(0);
void * cTmp = (void *)FontName->Items;
EnumFonts(hDC, NULL, (FONTENUMPROC) EnumFontsProc, (long) cTmp );
// EnumFonts 为系统(Windows API)函数,
// 用于获得系统可用的字体列表。
// EnumFontsProc 为自定义函数,作为系统回调函数,用于处理字体列表项
// 当系统返回列表项时,调用该函数并返回字体名。
// cTmp 为用户参数(此处为指向复合列表框FontName->Items的指针),
// 当系统调用 EnumFontsProc 函数时,返回该参数。
ReleaseDC(0,hDC);
FontName->Sorted = True;
}
//----------------------------------------------------------------------------
// 当用户改变文本选择或改变光标位置时,触发该事件。
void __fastcall TForm1::RichEdit1SelectionChange(TObject *Sender)
{
char sizebuf[11];
if(RichEdit1->SelLength)
{ // 有选择文本
Cut->Enabled = true;
Copy->Enabled = true;
sCut->Enabled = true;
sCopy->Enabled = true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -