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

📄 lyriceditor.pas

📁 超级播放器 -- 软件特点 -- 功能齐全 操作简便 绿色环保
💻 PAS
字号:
unit lyricEditor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons,StrUtils;

type
  TFrmLyricEditor = class(TForm)
    Memo1: TMemo;
    Panel1: TPanel;
    addTime: TSpeedButton;
    saveLyric: TSpeedButton;
    reloadBtn: TSpeedButton;
    refreshBtn: TSpeedButton;
    lyricTitle: TLabel;
    playBtn: TSpeedButton;
    pauseBtn: TSpeedButton;
    BackBtn: TSpeedButton;
    StepBtn: TSpeedButton;
    clearTimebtn: TSpeedButton;
    deltimeBtn: TSpeedButton;
    procedure addTimeClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure saveLyricClick(Sender: TObject);
    procedure reloadBtnClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure refreshBtnClick(Sender: TObject);
    procedure playBtnClick(Sender: TObject);
    procedure BackBtnClick(Sender: TObject);
    procedure StepBtnClick(Sender: TObject);
    procedure deltimeBtnClick(Sender: TObject);
    procedure clearTimebtnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    playitem:integer;
    procedure deltimeSign(index:integer);
  end;

var
  FrmLyricEditor: TFrmLyricEditor;
    procedure showLyricEditor;
implementation
uses main,media, lyricBar;
{$R *.dfm}
procedure showLyricEditor;
begin
  if (mainfrm.playitem<>-1) and (mainfrm.showLyricEditorSbtn.tag=0) then
   with TFrmLyricEditor.Create(application) do
   begin
      playitem:=mainfrm.playItem;
      mainfrm.showLyricEditorSbtn.tag:=1;
      
      if mainfrm.HaveLyric then
        Memo1.Lines.Assign(mainfrm.Lyric );

      lyricTitle.Caption := mainfrm.GetGridCell('名称',playitem+1);
      show;
   end;
end;
//插入时间
procedure TFrmLyricEditor.addTimeClick(Sender: TObject);
var
  framepos,mpos:longint;
  plyMin:integer;
  plySec:Single	;
  I, J, SkipChars,CurXPos: Integer;
  curline:string;
begin
  if playitem<>mainfrm.playitem then exit;

  CurXPos:=memo1.CaretPos.X;
  framePos:= GetCurrentMultimediaPos(MediaAliasName);
  mPos:=Round(framePos / Mainfrm.FrameLength * Mainfrm.filelength);
  // 插入时间
  plyMin:=trunc(mpos div 60000);
  plySec:=(mPos-PlyMin*60000) / 1000;
  curline:= '['
            +formatstr(inttostr(plyMin),2,true,false)+':'+formatfloat('00.000',plySec)
            +']'+memo1.Lines.Strings[memo1.CaretPos.y];
  memo1.Lines.Strings[memo1.CaretPos.y]:=curline ;

  //插入时间后,保持鼠标位置不变
  for I := 0 to Memo1.Lines.Count do
    if curline = Memo1.Lines[I] then {found}
    begin
      SkipChars := 0;
      for J := 0 to I - 1 do
        SkipChars := SkipChars + Length(Memo1.Lines[J]);
      SkipChars := SkipChars + (I*2);
      SkipChars := SkipChars + CurXPos;

      Memo1.SetFocus;
      Memo1.SelStart := SkipChars;
      Memo1.SelLength := 0;
      Break;
    end;
end;
  //关闭窗口
procedure TFrmLyricEditor.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Mainfrm.showLyricEditorSbtn.tag:=0;
  action:=cafree;
end;
  //保存歌词
procedure TFrmLyricEditor.saveLyricClick(Sender: TObject);
var strname:string;
begin
   if playitem=mainfrm.playItem then
      mainfrm.Lyric.Assign(Memo1.Lines );
   strName:=extractfilepath(application.exename)+'songTxt\'+mainfrm.GetGridCell('名称',playitem+1)+'.txt';
   memo1.Lines.SaveToFile(strName);
   if FrmLyricBar.visible then
     FrmLyricBar.resetlyric;
end;
  //载入当前歌词
procedure TFrmLyricEditor.reloadBtnClick(Sender: TObject);
begin
  playitem:=mainfrm.playItem;
  lyricTitle.Caption := mainfrm.GetGridCell('名称',playitem+1);

  if mainfrm.HaveLyric then
    Memo1.Lines.Assign(mainfrm.Lyric )
  else
    memo1.Clear;
end;
   //插入时间
procedure TFrmLyricEditor.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=vk_f2 then
    addTimeClick(nil)
  else if key=vk_f3 then
    deltimeBtnClick(nil);
end;

   //刷新歌词
procedure TFrmLyricEditor.refreshBtnClick(Sender: TObject);
var strname:string;
begin
  if playitem=mainfrm.playItem then
    begin
      if mainfrm.HaveLyric then
        Memo1.Lines.Assign(mainfrm.Lyric )
      else
        memo1.clear;
    end
  else
    begin                                                              
      strName:=extractfilepath(application.exename)+'songTxt\'+mainfrm.GetGridCell('名称',playitem+1)+'.txt';
      if fileexists(strname) then
        Memo1.Lines.LoadFromFile(strname)
      else
        memo1.clear;
    end;
end;

procedure TFrmLyricEditor.playBtnClick(Sender: TObject);
begin
 if sender =PlayBtn then
 begin
  if playitem=mainfrm.playItem then
    MainFrm.PlayBtnClick(MainFrm.PlayBtn);
 end
 else if sender = pauseBtn then
 begin
  if playitem=mainfrm.playItem then
    MainFrm.PausebtnClick(MainFrm.Pausebtn);
 end;
end;

procedure TFrmLyricEditor.BackBtnClick(Sender: TObject);
begin
  if playitem=mainfrm.playItem then
    MainFrm.StepBtnClick(Mainfrm.backBtn);

end;

procedure TFrmLyricEditor.StepBtnClick(Sender: TObject);
begin
  if playitem=mainfrm.playItem then
    MainFrm.StepBtnClick(Mainfrm.StepBtn);

end;
procedure TFrmLyricEditor.deltimeSign(index:integer);
var
  tmpstr:string;
  pos1:integer;
begin
  tmpstr:=memo1.Lines.Strings[index];
  pos1:=pos(']',tmpstr);
  while pos1<>0 do
   begin
     tmpstr:=rightstr(tmpstr,length(tmpstr)-pos1);
     pos1:=pos(']',tmpstr);
   end;

  memo1.Lines.Strings[index]:=tmpstr;
end;
procedure TFrmLyricEditor.deltimeBtnClick(Sender: TObject);
begin
   deltimeSign(memo1.CaretPos.y);
end;

procedure TFrmLyricEditor.clearTimebtnClick(Sender: TObject);
var i:integer;
begin
   for i:=0 to memo1.Lines.Count -1 do
     deltimeSign(i);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -