📄 main.pas
字号:
unit main;
interface
uses
WinProcs, WinTypes, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus, ExtCtrls, Buttons;
const MaxTitleNum=30;
type
SaveFormSizeRecord=Record
Width,Height:Integer;
end;
TMainForm = class(TForm)
TitleListBox: TListBox;
NewTitleEdit: TEdit;
ExitButton: TButton;
MainMenu1: TMainMenu;
FileMenu: TMenuItem;
NewMenuItem: TMenuItem;
OpenFileMenuItem: TMenuItem;
ExitMenuItem: TMenuItem;
OpenDialog1: TOpenDialog;
TitleLabel: TLabel;
NewLabel: TLabel;
MainTxtMemo: TMemo;
EnterEdit: TEdit;
DeleteTxtMemo: TMemo;
Bevel1: TBevel;
AddBitBtn: TBitBtn;
DeleteBitBtn: TBitBtn;
EnterBitBtn: TBitBtn;
procedure ExitButtonClick(Sender: TObject);
procedure ExitMenuItemClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure OpenFileMenuItemClick(Sender: TObject);
procedure TitleListBoxClick(Sender: TObject);
procedure NewMenuItemClick(Sender: TObject);
procedure AddBitBtnClick(Sender: TObject);
procedure DeleteBitBtnClick(Sender: TObject);
procedure EnterBitBtnClick(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
fp:File;
FileHandleNum:Integer;
MainDir,BmpDir,AviDir,TxtDir,WavDir:String[30];
MainTxtFileName,AutoTxtFileName:String[80];
TxtFileName:String[80];
CurrentTitleLineNum:Integer;
CurrentSubTitleLineNum:Integer;
CurrentTitleName:String[30];
TitleArray:Array[0..MaxTitleNum] of String[30];
SubTitleArray:Array[0..MaxTitleNum] of String[30];
EnterTypeFlag,AllowDeleteFlag:Boolean;
SaveFormSize:SaveFormSizeRecord;
//初始化列表框
procedure InitTitleListBox(Const TitleNameStr:String);
//在Ext文件中删除当前节
procedure DeleteCurrentTitleNameContentInExeFile(Const TitleNameStr:String);
//获取文件名
function GetCurrentFileName(const SourceFileNameStr:String):String;
end;
var
MainForm: TMainForm;
implementation
uses Exe;
{$R *.DFM}
//得到当前文件名
function TMainForm.GetCurrentFileName(const SourceFileNameStr:String):String;
var
strLength1,strLength2:Integer;
FilePathStr:String;
begin
Result:='';
FilePathStr:=ExtractFilePath(SourceFileNameStr);
strLength1:=Length(SourceFileNameStr);
strLength2:=Length(FilePathStr);
Result:=Copy(SourceFileNameStr,strLength2+1,StrLength1-StrLength2);
end;
//在Ext文件中删除当前节
procedure TMainForm.DeleteCurrentTitleNameContentInExeFile(Const TitleNameStr:String);
var
i,DeleteLineNum:Integer;
HaveThisTitleFlag,FinishDeleteFlag:Boolean;
begin
i:=0;
DeleteTxtMemo.Clear;
DeleteTxtMemo.Lines.LoadFromFile(AutoTxtFileName);
HaveThisTitleFlag:=False;
DeleteLineNum:=0;
while i<=DeleteTxtMemo.Lines.Count-1 do
begin
if DeleteTxtMemo.Lines[i]=TitleNameStr+'~' then
begin
HaveThisTitleFlag:=True;
DeleteLineNum:=i;
i:=i+DeleteTxtMemo.Lines.Count+5;
end
else
Inc(i);
end;
{有,则删除}
if HaveThisTitleFlag then
begin
FinishDeleteFlag:=False;
while (DeleteLineNum<=DeleteTxtMemo.Lines.Count-1) and (not FinishDeleteFlag) do
begin
if Pos('~',DeleteTxtMemo.Lines[i])<>0 then
begin
FinishDeleteFlag:=True;
end
else
DeleteTxtMemo.Lines.Delete(DeleteLineNum);
end;
DeleteTxtMemo.Lines.SaveToFile(AutoTxtFileName);
end;
DeleteTxtMemo.Clear;
end;
{初始化列表框}
procedure TMainForm.InitTitleListBox(Const TitleNameStr:String);
var i,j:Integer;
begin
i:=0;
j:=0;
{Find filehead}
While i<=MainTxtMemo.Lines.count-1 do
begin
if Pos(TitleNameStr+'~',MainTxtMemo.Lines[i])<>0 then
begin
j:=i;
i:=i+MainTxtMemo.Lines.Count;
end
else
Inc(i);
end;
TitleListBox.Clear;
{Replace FileHead}
if i<>MainTxtMemo.Lines.Count-1 then
begin
CurrentTitleLineNum:=j;
i:=j+1;
While i<MainTxtMemo.Lines.Count-1 do
begin
if Pos('^',MainTxtMemo.Lines[i])=0 then
begin
TitleArray[i]:=MainTxtMemo.Lines[i];
TitleListBox.Items.Add(MainTxtMemo.Lines[i]);
Inc(i);
end
else
i:=i+MainTxtMemo.Lines.Count;
end;
end;
end;
//“返回”或“退出”
procedure TMainForm.ExitButtonClick(Sender: TObject);
begin
{是“返回”,则写“退出”}
if CurrentTitleName<>'FileHead' then
begin
ExitButton.Caption:='退出';
CurrentTitleName:='FileHead';
InitTitleListBox(CurrentTitleName);
end
else{是“退出”,则保存文件}
begin
if FileExists(MainTxtFileName) then
MainTxtMemo.Lines.SaveToFile(MainTxtFileName);
Close;
end;
end;
//退出
procedure TMainForm.ExitMenuItemClick(Sender: TObject);
begin
if FileExists(MainTxtFileName) then
MainTxtMemo.Lines.SaveToFile(MainTxtFileName);
Close;
end;
{创建窗体时,初始化数据}
procedure TMainForm.FormCreate(Sender: TObject);
begin
MainDir:=ExtractFilePath(ParamStr(0));
BmpDir:='bmp\';
AviDir:='avi\';
TxtDir:='txt\';
WavDir:='wav\';
CurrentTitleLineNum:=0;
CurrentSubTitleLineNum:=0;
AllowDeleteFlag:=False;
AutoTxtFileName:='';
SaveFormSize.Width:=409;
SaveFormSize.Height:=150;
end;
{打开文件}
procedure TMainForm.OpenFileMenuItemClick(Sender: TObject);
var
StrExt:String;
begin
OpenDialog1.InitialDir:=MainDir+TxtDir;
OpenDialog1.DefaultExt:='*.txt';
OpenDialog1.Filter:='Text files (*.txt)|*.TXT';
MainTxtMemo.Clear;
CurrentTitleName:='FileHead';
if Opendialog1.Execute then
begin
MainTxtFileName:=OpenDialog1.FileName;
MainTxtMemo.Lines.LoadFromFile(MainTxtFileName);
StrExt:=ExtractFileExt(MainTxtFileName);
AutoTxtFileName:=Copy(MainTxtFileName,1,Length(MainTxtFileName)-Length(StrExt)+1)+'ext';
InitTitleListBox(CurrentTitleName);
MainForm.Caption:='正制作 :'+GetCurrentFileName(MainTxtFileName);
end;
end;
{选标题}
procedure TMainForm.TitleListBoxClick(Sender: TObject);
begin
CurrentTitleName:=TitleListBox.Items[TitleListBox.ItemIndex];
EnterEdit.Text:=CurrentTitleName;
if CurrentTitleName<>'' then
AllowDeleteFlag:=True
else
AllowDeleteFlag:=False;
end;
//新文件
procedure TMainForm.NewMenuItemClick(Sender: TObject);
var
NewString,StrExt:String;
ClickedOk:Boolean;
fp:File;
begin
NewString:='*.txt';
ClickedOk:=InputQuery('新建文件','请输入新的文件名:',NewString);
if (ClickedOk) and ( NewString<>'*.txt') then
begin
MainTxtFileName:=MainDir+TxtDir+NewString;
CurrentTitleName:='FileHead';
if Not FileExists(MainTxtFileName) then
begin
AssignFile(fp,MainTxtFileName);
Rewrite(fp);
CloseFile(fp);
end;
MainTxtMemo.Lines.LoadFromFile(MainTxtFileName);
MainTxtMemo.Lines.Add(CurrentTitleName+'~');
MainTxtMemo.Lines.Add('^');
StrExt:=ExtractFileExt(MainTxtFileName);
AutoTxtFileName:=Copy(MainTxtFileName,1,Length(MainTxtFileName)-Length(StrExt)+1)+'ext';
InitTitleListBox(CurrentTitleName);
MainForm.Caption:='正制作 :'+GetCurrentFileName(MainTxtFileName);
end
else
ShowMessage('文件名无效');
end;
//添加
procedure TMainForm.AddBitBtnClick(Sender: TObject);
var
i:Integer;
HaveNameSameFlag:Boolean;
begin
{如果新类为空,退出}
if NewTitleEdit.Text='' then
begin
ShowMessage('新标题名为空 !请输入。');
end
else
begin
{判断是否有相同的标题}
i:=0;
HaveNameSameFlag:=False;
While i<TitleListBox.Items.Count do
begin
if NewTitleEdit.Text=TitleListBox.Items[i] then
begin
ShowMessage('文件中已有此标题!请另起名字。');
HaveNameSameFlag:=True;
i:=i+TitleListBox.Items.Count;
end
else
Inc(i);
end;
{没有相同的标题,则加入}
if Not HaveNameSameFlag then
begin
TitleListBox.Items.Add(NewTitleEdit.Text);
MainTxtMemo.Lines.Insert(CurrentTitleLineNum+TitleListBox.Items.Count,
NewTitleEdit.Text);
TitleListBox.ItemIndex:=TitleListBox.Items.Count-1;
{是大标题,则加^}
if ExitButton.Caption='退出' then
begin
MainTxtMemo.Lines.Add(NewTitleEdit.Text+'~');
MainTxtMemo.Lines.Add('^');
end;
end;
end;
end;
//删除
procedure TMainForm.DeleteBitBtnClick(Sender: TObject);
var
i,j:Integer;
CanDeleteMoreLinesFlag:Boolean;
begin
if AllowDeleteFlag then
begin
AllowDeleteFlag:=False;
TitleListBox.Items.Delete(TitleListBox.ItemIndex);
{如果是小标题,则只删除一行,否则删除此标题所有内容。}
i:=0;
j:=0;
{是否是大标题}
CanDeleteMoreLinesFlag:=False;
while i<MainTxtMemo.Lines.Count do
begin
if Pos(CurrentTitleName+'~',MainTxtMemo.Lines[i])<>0 then
begin
j:=i;
CanDeleteMoreLinesFlag:=True;
i:=i+MainTxtMemo.Lines.Count;
end
else Inc(i);
end;
if CanDeleteMoreLinesFlag then
begin
i:=MaintxtMemo.Lines.Count-j;
while i>0 do
begin
if FileExists(AutoTxtFileName) then
DeleteCurrentTitleNameContentInExeFile(MainTxtMemo.Lines[j]);{删除Exe.Ext文件内该标题所有内容}
MainTxtMemo.Lines.delete(j);
Dec(i);
end;
end;
{删当前行}
MainTxtMemo.Lines.delete(TitleListBox.ItemIndex+CurrentTitleLineNum+2);
EnterEdit.Text:='';
if FileExists(AutoTxtFileName) then
DeleteCurrentTitleNameContentInExeFile(CurrentTitleName);{删除Exe.ext文件内该标题所有内容}
end
else
begin
ShowMessage('你没有选要删除的标题!');
end;
end;
//进入
procedure TMainForm.EnterBitBtnClick(Sender: TObject);
begin
if (ExitButton.Caption='返回') and (EnterEdit.Text<>'') then
begin
ExeForm.Caption:='制作: '+CurrentTitleName;
ExeForm.InitShowArray;
ExeForm.SaveExeInSertLineNum:=0;
{exe.ext文件存在,则打开,否则重新创建}
if FileExists(AutoTxtFileName) then
begin
ExeForm.WorkMemo.Clear;
ExeForm.ExeMemo.Clear;
ExeForm.ExeMemo.Lines.LoadFromFile(AutoTxtFileName);
ExeForm.SaveExeInSertLineNum:=ExeForm.WorkMemoGetDataFromExeMemo(CurrentTitleName,ExeForm.WorkMemo,ExeForm.ExeMemo);
{如果有此标题,则将数据分离到数据中,没有,则创建此标题}
if ExeForm.WorkMemo.Lines.Count<>0 then
begin
ExeForm.TranslateStr;
end
else
begin
ExeForm.ExeMemo.Lines.Add(CurrentTitleName+'~');
ExeForm.ExeMemo.Lines.Add('^');
ExeForm.SaveExeInSertLineNum:=ExeForm.ExeMemo.Lines.Count-2;
end;
end
else
begin
{创建Exe.Ext文件}
ExeForm.WorkMemo.Clear;
ExeForm.ExeMemo.Clear;
AssignFile(fp,AutoTxtFileName);
Rewrite(fp);
CloseFile(fp);
ExeForm.ExeMemo.Lines.LoadFromFile(AutoTxtFileName);
ExeForm.ExeMemo.Lines.Add(CurrentTitleName+'~');
ExeForm.ExeMemo.Lines.Add('^');
end;
if ExeForm.WorkMemo.Lines.Count<> 0 then
ExeForm.ShowArrayTotalNum:=ExeForm.WorkMemo.Lines.Count-1
else ExeForm.ShowArrayTotalNum:=0;
ExeForm.CurrentShowArrayNum:=0;
ExeForm.ClearShowThing;
if ExeForm.WorkMemo.Lines.Count<>0 then
begin
ExeForm.ShowCurrentNowLine(ExeForm.CurrentShowArrayNum);{显示当前行}
end;
ExeForm.InitStepComboBoxData;
ExeForm.Show;
end
else
begin
{更新标题框}
InitTitleListBox(CurrentTitleName);
if CurrentTitleName<>'FileHead' then
ExitButton.Caption:='返回';
EnterEdit.Text:='';
end;
end;
//重画窗体
procedure TMainForm.FormResize(Sender: TObject);
begin
MainForm.Width:=409;
MainForm.Height:=220;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -