📄 lyriceditor.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 + -