📄 edit2ff.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "Edit2ff.h"
#include "Edit2f.h"
//---------------------------------------------------------------------------
const float RulerAdj = 4.0/3.0;
const int GutterWid = 4;
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
RichEdit1->Lines->Clear(); // 清空文本
ReadOnly = false;
FileName = "Untitled"; // 设置缺省文件名
RichEdit1->SelAttributes->Name = Form1->FontName->Text;//"宋体";
RichEdit1->SelAttributes->Size = 12;
RichEdit1->HideSelection = false;
Caption = FileName;
RichEdit1->Paragraph->FirstIndent = int((FirstInd->Left+FirstInd->Width/2-GutterWid) /RulerAdj);
RichEdit1->Paragraph->LeftIndent = int((LeftInd->Left+LeftInd->Width/2-GutterWid)/
RulerAdj)-RichEdit1->Paragraph->FirstIndent;
RichEdit1->Paragraph->RightIndent =
int((Ruler->ClientWidth-RightInd->Left+RightInd->Width/2-2) /
RulerAdj)-2*GutterWid;
RichEdit1->Modified = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::RichEdit1SelectionChange(TObject *Sender)
{
char sizebuf[11];
if(RichEdit1->SelLength)
{ // 有选择文本
Form1->Cut->Enabled = true;
Form1->Copy->Enabled = true;
Form1->sCut->Enabled = true;
Form1->sCopy->Enabled = true;
}
else
{ // 未选择文本
Form1->Cut->Enabled = false;
Form1->Copy->Enabled = false;
Form1->sCut->Enabled = false;
Form1->sCopy->Enabled = false;
}
// 设置标尺位置
FirstInd->Left = int(RichEdit1->Paragraph->FirstIndent*RulerAdj)-
4+GutterWid;
LeftInd->Left = int((RichEdit1->Paragraph->LeftIndent+
RichEdit1->Paragraph->FirstIndent)*RulerAdj)-
4+GutterWid;
RightInd->Left = Ruler->ClientWidth-6-int((RichEdit1->Paragraph->RightIndent
+GutterWid)*RulerAdj);
// 设置字型按钮
Form1->sBold->Down = RichEdit1->SelAttributes->Style.Contains(fsBold);
Form1->sItalic->Down = RichEdit1->SelAttributes->Style.Contains(fsItalic);
Form1->sUnderline->Down = RichEdit1->SelAttributes->Style.Contains(fsUnderline);
Form1->BulletsButton->Down = bool(RichEdit1->Paragraph->Numbering);
Form1->FontSize->Text = itoa(RichEdit1->SelAttributes->Size, sizebuf, 10);
Form1->FontName->Text = RichEdit1->SelAttributes->Name;
// 设置段落对齐按钮
switch((int)RichEdit1->Paragraph->Alignment)
{
case 0:
Form1->sLeftAlign->Down = True;
break;
case 1:
Form1->sRightAlign->Down = True;
break;
case 2:
Form1->sCenterAlign->Down = True;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::RulerIndMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
TLabel * oTmpLabel = (TLabel *)Sender;
FDragOfs = X; // 保存箭头偏移量
//oTmpLabel->Width / 2; // 保存箭头偏移量
oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs;
FDragging = True;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::RulerIndMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(FDragging)
{ // 正在拖动
TLabel * oTmpLabel = (TLabel *)Sender;
oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs; // 设置箭头位置
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::LeftIndMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
TLabel *oTmpLabel = (TLabel *)Sender;
FDragOfs = oTmpLabel->Width / 2; // 计算箭头中心位置
FDragging = false; // 停止拖动
RichEdit1->Paragraph->LeftIndent = int((LeftInd->Left+FDragOfs-GutterWid)/
RulerAdj)-RichEdit1->Paragraph->FirstIndent;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FirstIndMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
TLabel *oTmpLabel = (TLabel *)Sender;
FDragOfs = oTmpLabel->Width / 2;
FDragging = false; // 停止拖动
RichEdit1->Paragraph->FirstIndent = int((FirstInd->Left+FDragOfs-GutterWid) / RulerAdj);
LeftIndMouseUp(Sender, Button, Shift, X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::RightIndMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
TLabel *oTmpLabel = (TLabel *)Sender;
FDragOfs = oTmpLabel->Width / 2; // 计算箭头中心位置
FDragging = false; // 停止拖动
RichEdit1->Paragraph->RightIndent =
int((Ruler->ClientWidth-RightInd->Left+FDragOfs-2) /
RulerAdj)-2*GutterWid;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::RichEdit1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button == mbRight)
{ // 弹出菜单
TPoint P, Q;
P.x=X;
P.y=Y;
Q = ClientToScreen(P);
Form1->PopupMenu1->Popup(Q.x, Q.y);
// 参数 X 和 Y 是相对坐标(相对RichEdit1内的位置)
// 而 Popup 方法中使用的参数是屏幕坐标
// 需要将 X、Y 参数转换为屏幕坐标。
// 也可以使用 ClinetToScreen 方法直接转换 X、Y 参数。
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::RulerResize(TObject *Sender)
{
int iCtr = 0;
char sTmp[201];
while (iCtr < 200) {
sTmp[iCtr] = '\t';
iCtr++;
sTmp[iCtr] = '|';
iCtr++;
}
sTmp[200] = '\0';
Ruler->Caption = (AnsiString)sTmp; // 画标尺
RulerLine->Left = 2;
RulerLine->Width = Ruler->Width-5; // 设置标尺线
RightInd->Left = Ruler->ClientWidth-6-int((RichEdit1->Paragraph->RightIndent
+GutterWid)*RulerAdj);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree; // 指定删除窗体
// MDI子窗体缺省时为最小化窗体
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose = Form1->CheckFileSave(); // 判断是否需要保存文件
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -