📄 unit_main.pas
字号:
Unit Unit_Main;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, CommCtrl, ImgList, ExtCtrls, ToolWin,
Buttons, Menus, VCLUnZip, VCLZip, clipbrd, extdlgs, jpeg, strutils, IniFiles, RichEdit2Ctrl,
Colors, TreeCtrls, StdActns, ActnList, shellapi;
Type
TF_Main=Class(TForm)
ImageList1: TImageList;
CoolBar1: TCoolBar;
Panel1: TPanel;
Panel3: TPanel;
Splitter1: TSplitter;
B_Add: TBitBtn;
B_AddChild: TBitBtn;
B_Rename: TBitBtn;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
StatusBar1: TStatusBar;
Panel2: TPanel;
T_Auto: TTimer;
N3: TMenuItem;
N6: TMenuItem;
H1: TMenuItem;
B_Delete: TBitBtn;
T_MainTextEn: TTimer;
ToolBar1: TToolBar;
VCLZip1: TVCLZip;
VCLUnZip1: TVCLUnZip;
N8: TMenuItem;
N5: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
H2: TMenuItem;
N15: TMenuItem;
A1: TMenuItem;
T_Undo: TMenuItem;
N16: TMenuItem;
T_Cut: TMenuItem;
T_Copy: TMenuItem;
T_Paste: TMenuItem;
T_Del: TMenuItem;
D1: TMenuItem;
K1: TMenuItem;
M1: TMenuItem;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
Page: TPageControl;
TabSheet1: TTabSheet;
TreeView: TTreeView;
Image_Menu: TImageList;
ImageList4: TImageList;
N7: TMenuItem;
N18: TMenuItem;
T_s: TTimer;
MainText: TRichEdit2;
N4: TMenuItem;
N17: TMenuItem;
P1: TMenuItem;
N19: TMenuItem;
F1: TMenuItem;
P2: TMenuItem;
HorRuler1: THorRuler;
PopupColors: TPopupPanel;
ColorBoxEx1: TColorBoxEx;
Image_Toolbar: TImageList;
Com_Front: TComboBox;
Com_Size: TComboBox;
B_Bcolors: TBitBtn;
B_Colors: TBitBtn;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
TB: TToolButton;
TI: TToolButton;
TU: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
TabSheet2: TTabSheet;
N20: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
N25: TMenuItem;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
N26: TMenuItem;
Procedure FormCreate(Sender: TObject);
Procedure TreeViewClick(Sender: TObject);
Procedure B_AddClick(Sender: TObject);
Procedure B_AddChildClick(Sender: TObject);
Procedure B_RenameClick(Sender: TObject);
Procedure T_AutoTimer(Sender: TObject);
Procedure B_DeleteClick(Sender: TObject);
Procedure TreeViewEdited(Sender: TObject; Node: TTreeNode;
Var S: String);
Procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
Var AllowChange: Boolean);
Procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
Procedure FormClose(Sender: TObject; Var Action: TCloseAction);
Procedure Com_FrontChange(Sender: TObject);
Procedure T_MainTextEnTimer(Sender: TObject);
Procedure Com_SizeChange(Sender: TObject);
Procedure MainText3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Procedure I1Click(Sender: TObject);
Procedure N9Click(Sender: TObject);
Procedure A1Click(Sender: TObject);
Procedure K1Click(Sender: TObject);
Procedure M1Click(Sender: TObject);
Procedure T_PasteClick(Sender: TObject);
Procedure N5Click(Sender: TObject);
Procedure N3Click(Sender: TObject);
Procedure T_DelClick(Sender: TObject);
Procedure D1Click(Sender: TObject);
Procedure N2Click(Sender: TObject);
Procedure N6Click(Sender: TObject);
Procedure T_UndoClick(Sender: TObject);
Procedure T_sTimer(Sender: TObject);
Procedure T_CopyClick(Sender: TObject);
Procedure T_CutClick(Sender: TObject);
Procedure MainTextMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Procedure N17Click(Sender: TObject);
Procedure P1Click(Sender: TObject);
Procedure B_ColorsClick(Sender: TObject);
Procedure ColorBoxEx1Change(Sender: TObject);
Procedure ColorBoxEx1Click(Sender: TObject);
Procedure MainTextSelectionChange(Sender: TObject);
Procedure B_BcolorsClick(Sender: TObject);
Procedure TBClick(Sender: TObject);
Procedure TIClick(Sender: TObject);
Procedure TUClick(Sender: TObject);
Procedure BitBtn1Click(Sender: TObject);
Procedure BitBtn2Click(Sender: TObject);
Procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Procedure TreeViewDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; Var Accept: Boolean);
Procedure TreeViewDragDrop(Sender, Source: TObject; X, Y: Integer);
Procedure actUnderlineTealExecute(Sender: TObject);
Procedure N19Click(Sender: TObject);
Procedure N26Click(Sender: TObject);
Procedure N10Click(Sender: TObject);
Procedure N12Click(Sender: TObject);
Procedure N13Click(Sender: TObject);
Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
Procedure TreeViewDeletion(Sender: TObject; Node: TTreeNode);
Procedure TreeViewAddition(Sender: TObject; Node: TTreeNode);
Procedure N20Click(Sender: TObject);
Procedure N21Click(Sender: TObject);
Procedure N22Click(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Const
Ver='1.15';
VMain='1.0';
CFlag='**1.0WhereAreYou..MyRight?**';
Error_FileNotExist='打开文件错误,文件可能不存在';
Error_FileIsUsing='文件正在使用中,无法进行操作';
Error_Stream='写入流错误,无法建立标志';
Error_Compress='写入文件标识失败!压缩错误';
Error_Pic='不能读取图片,可能是该图片已经损坏';
Error_Ver='文件标志错误,可能是本软件不能兼容该图书文件,尝试升级软件';
Error_Other='未知错误';
Type
InFor=Record
SFlag: String[Length(CFlag)]; //标志
SWriter: String[20]; //书籍作者
SMaker: String[20]; //电子书作者
SInfor: String[255]; //简介
SRemark: String[100]; //备注
SLabel: String[20]; //分类
SPass: String[20]; //密码
BReadOnly: Boolean; //只读(即是否是源代码)
End;
Var
F_Main: TF_Main;
BUpDown, BChange, BFontC, FMoveAsChild, BitB, BitI, BitU: Boolean; //BFontC:当前是否将改变字体颜色
STitle, Smulu, SFileName: String;
Implementation
{$R *.dfm}
Uses Unit_Code, Unit_Made, Unit_About;
Procedure TF_Main.FormCreate(Sender: TObject);
Begin
BitB:=False;
BitI:=False;
BitU:=False;
TB.Down:=BitB;
TI.Down:=BitI;
TU.Down:=BitU;
//三个按钮的Down值
FMoveAsChild:=False;
BChange:=False;
Smulu:=ExtractFilePath(Application.ExeName);
Com_Front.Items:=screen.Fonts;
Com_Front.Text:='宋体';
{ If FileExists(Smulu+'Temp.ebm') Then
DeleteFile(Smulu+'Temp.ebm'); }
If DirectoryExists(Smulu+'Temp') Then
DeletePath(Smulu+'Temp');
MkDir(Smulu+'Temp');
MkDir(Smulu+'Temp\File');
//新建
N2.Click;
SFileName:=''; //当前文件名
STitle:='无标题文档';
TreeView.Selected:=TreeView.Items.Item[0];
F_Main.Caption:='电子阅览者 [Elcreader]-'+STitle+' : '+TreeView.Selected.Text;
End;
Procedure TF_Main.TreeViewClick(Sender: TObject);
Begin
If TreeView.Selected<>Nil Then
Begin
F_Main.Caption:='电子阅览者 [Elcreader]-'+STitle+' : '+TreeView.Selected.Text;
End;
End;
Procedure TF_Main.B_AddClick(Sender: TObject);
Var
aNode: TTreeNode;
STitle: String;
Begin
Page.ActivePageIndex:=0;
STitle:=GetNTitle();
aNode:=TreeView.Items.AddObjectFirst(TreeView.Selected, STitle,
pointer(-1));
aNode.ImageIndex:=2;
TreeView.Selected:=aNode;
MainText.Enabled:=True;
MainText.SetFocus;
aNode.EditText;
End;
Procedure TF_Main.B_AddChildClick(Sender: TObject);
Var
aNode: TTreeNode;
STitle: String;
Begin
Page.ActivePageIndex:=0;
If TreeView.Selected=Nil Then Exit;
STitle:=GetNTitle();
aNode:=TreeView.Items.AddChildObjectFirst(TreeView.Selected, STitle,
pointer(-1));
aNode.ImageIndex:=2;
aNode.Parent.ImageIndex:=1;
TreeView.Selected:=aNode;
aNode.EditText;
End;
Procedure TF_Main.B_RenameClick(Sender: TObject);
Begin
Page.ActivePageIndex:=0;
If TreeView.Selected<>Nil Then
TreeView.Selected.EditText;
End;
Procedure TF_Main.T_AutoTimer(Sender: TObject);
Var
ScrollMessage: TWMVScroll;
Begin
ScrollMessage.Msg:=WM_VScroll;
If BUpDown=False Then
ScrollMessage.ScrollCode:=sb_Linedown
Else
ScrollMessage.ScrollCode:=sb_Lineup;
ScrollMessage.Pos:=0;
MainText.Dispatch(ScrollMessage);
End;
Procedure TF_Main.B_DeleteClick(Sender: TObject);
Var
STtemp: String;
Begin
STtemp:='是否删除文章:"'+TreeView.Selected.Text+'"?';
Page.ActivePageIndex:=0;
If TreeView.Selected<>Nil Then
If Application.MessageBox(pchar(STtemp), '询问', MB_YESNO Or MB_ICONQUESTION)=IDyes Then
If TreeView.Selected.HasChildren=True Then
Begin
If Application.MessageBox('该文章中包含子文章,删除该文章会连同子文章一起删除,是否继续?',
'询问', MB_YESNO Or MB_ICONQUESTION)=IDyes Then
TreeView.Selected.Delete;
End
Else
TreeView.Selected.Delete;
End;
Procedure TF_Main.TreeViewEdited(Sender: TObject; Node: TTreeNode;
Var S: String);
Var
i: Integer;
Begin
For i:=0 To TreeView.Items.Count-1 Do
If TreeView.Items[i].Text=S Then
Begin
MessageBox(Handle, pchar('对不起,你修改的标题已经存在,请更换其它标题'), pchar('标题重复'),
MB_ICONINFORMATION Or MB_OK);
S:=Node.Text;
Exit;
End;
//BChange:=True;
RenameFile(Smulu+'Temp\'+Node.Text+'.bop', Smulu+'Temp\'+S+'.bop');
End;
Procedure TF_Main.TreeViewChanging(Sender: TObject; Node: TTreeNode;
Var AllowChange: Boolean);
Begin
If TreeView.Selected<>Nil Then
Begin
MainText.Enabled:=True;
BChange:=True;
MainText.Lines.SaveToFile(Smulu+'Temp\File\'+TreeView.Selected.Text+'.bop'); //保存文本
End;
// If Node.Text=TreeView.Selected.Text Then Exit;
If FileExists(Smulu+'Temp\File\'+Node.Text+'.bop') Then
MainText.Lines.LoadFromFile(Smulu+'Temp\File\'+Node.Text+'.bop')
Else
MainText.Clear;
End;
Procedure TF_Main.TreeViewChange(Sender: TObject; Node: TTreeNode);
Begin
Try
TreeView.SaveToFile(Smulu+'Temp\File\Treeview.rtp'); //保存目录树
Except
{MessageBox(Handle, pchar(Error_FileIsUsing), pchar('信息'),
MB_ICONINFORMATION Or MB_OK);}
Addlog('Error_FileIsUsing');
End;
End;
Procedure TF_Main.FormClose(Sender: TObject; Var Action: TCloseAction);
Begin
If DirectoryExists(Smulu+'Temp') Then
DeletePath(Smulu+'Temp')
End;
Procedure TF_Main.Com_FrontChange(Sender: TObject);
Begin
If MainText.SelLength>0 Then
MainText.SelAttributes.Name:=Com_Front.Text;
End;
Procedure TF_Main.T_MainTextEnTimer(Sender: TObject);
Var
Tttb: Boolean;
Begin
Tttb:=TreeView.Selected<>Nil;
B_Rename.Enabled:=Tttb;
B_Delete.Enabled:=Tttb;
B_AddChild.Enabled:=Tttb;
TB.Enabled:=MainText.Enabled;
TI.Enabled:=MainText.Enabled;
TU.Enabled:=MainText.Enabled;
HorRuler1.Enabled:=MainText.Enabled;
End;
Procedure TF_Main.Com_SizeChange(Sender: TObject);
Begin
If MainText.SelLength>0 Then
Try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -