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

📄 main.pas

📁 有关多媒体的各个细节
💻 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 + -