• R/O
  • SSH
  • HTTPS

id3v2editorplus: コミット


コミットメタ情報

リビジョン41 (tree)
日時2019-10-09 10:48:31
作者derekwildstar

ログメッセージ

Geral

Novos arquivos de recurso adicionados

Roxette - How Do You Do.mp3

Texto e temporização SYLT ajustados

UClassesETipos.pas

TSYLTItem.Conteudo agora é TSYLTItem.Versos
TSYLTItem.AdicionarConteudo agora é TSYLTItem.ImportarVersos
Incluída a propriedade TSYLT.SYLTAtual
Remoção de código comentado
Alterações necessárias para considerar a nova ação para edição de SYLT
TSYLTThread agora se autoconfigura e se inicializa no seu construtor, evitando uma chamada a "Start"
O método Execute de TSYLTThread agora chama ExibirVerso(0) a fim de carregar qualquer "verso" que esteja no começo da letra

UDAMOPrincipal.pas

Novas ações para editar, importar e exportar o texto SYLT
Novo método EditarSYLT adicionado

UFORMEditarSYLT.pas

Novo form adicionado

UFORMPrincipal.pas

Novo botão para editar a SYLT adicionado

変更サマリ

差分

--- trunk/V2/prj/ID3v2EditorPlus.dpr (revision 40)
+++ trunk/V2/prj/ID3v2EditorPlus.dpr (revision 41)
@@ -14,7 +14,8 @@
1414 UClassesAjudantes in '..\src\UClassesAjudantes.pas',
1515 UBassUtils in '..\src\UBassUtils.pas',
1616 UFORMSobre in '..\src\UFORMSobre.pas' {FORMSobre},
17- UClassesETipos in '..\src\UClassesETipos.pas';
17+ UClassesETipos in '..\src\UClassesETipos.pas',
18+ UFORMEditarSYLT in '..\src\UFORMEditarSYLT.pas' {FORMEditarSYLT};
1819
1920 {$R *.res}
2021
--- trunk/V2/prj/ID3v2EditorPlus.dproj (revision 40)
+++ trunk/V2/prj/ID3v2EditorPlus.dproj (revision 41)
@@ -131,6 +131,10 @@
131131 <FormType>dfm</FormType>
132132 </DCCReference>
133133 <DCCReference Include="..\src\UClassesETipos.pas"/>
134+ <DCCReference Include="..\src\UFORMEditarSYLT.pas">
135+ <Form>FORMEditarSYLT</Form>
136+ <FormType>dfm</FormType>
137+ </DCCReference>
134138 <BuildConfiguration Include="Release">
135139 <Key>Cfg_2</Key>
136140 <CfgParent>Base</CfgParent>
--- trunk/V2/src/UClassesAjudantes.pas (revision 40)
+++ trunk/V2/src/UClassesAjudantes.pas (revision 41)
@@ -162,7 +162,7 @@
162162 Stream.Write(PWideChar(TSYLTItem(SYLT).Descricao)^, (Length(TSYLTItem(SYLT).Descricao) + 1) * 2);
163163
164164 // Letra sincronizada
165- for Letra in TSYLTItem(SYLT).Conteudo do
165+ for Letra in TSYLTItem(SYLT).Versos do
166166 begin
167167 Dados[0] := $FF;
168168 Stream.Write(Dados, 1);
@@ -390,7 +390,7 @@
390390 SYLTItem.FormatoDoRotuloDeTempo := Conteudo[4];
391391 SYLTItem.TipoDeConteudo := Conteudo[5];
392392 SYLTItem.Descricao := ObterStringTerminadaEmNulo(6,ProximoIndice);
393- SYLTItem.AdicionarConteudo(Conteudo,ProximoIndice);
393+ SYLTItem.ImportarVersos(Conteudo,ProximoIndice);
394394 end;
395395 end;
396396
--- trunk/V2/src/UClassesETipos.pas (revision 40)
+++ trunk/V2/src/UClassesETipos.pas (revision 41)
@@ -79,7 +79,7 @@
7979 FFormatoDoRotuloDeTempo: Byte;
8080 FTipoDeConteudo: Byte;
8181 FDescricao: String;
82- FConteudo: TList<TSYLTVerso>;
82+ FVersos: TList<TSYLTVerso>;
8383 public
8484 constructor Create(ACollection: TCollection); override;
8585 destructor Destroy; override;
@@ -86,7 +86,7 @@
8686
8787 // Adiciona a FConteudo uma letra a partir do MP3. Usado quando se carrega
8888 // um ID3v2 a partir do MP3, quando o arquivo está sendo carregado
89- procedure AdicionarConteudo(ABytes: TBytes; AIndiceInicial: Word);
89+ procedure ImportarVersos(ABytes: TBytes; AIndiceInicial: Word);
9090
9191 property CodificacaoDoTexto: Byte read FCodificacaoDoTexto write FCodificacaoDoTexto;
9292 property Idioma: TLanguageID read FIdioma write FIdioma;
@@ -93,7 +93,7 @@
9393 property FormatoDoRotuloDeTempo: Byte read FFormatoDoRotuloDeTempo write FFormatoDoRotuloDeTempo;
9494 property TipoDeConteudo: Byte read FTipoDeConteudo write FTipoDeConteudo;
9595 property Descricao: String read FDescricao write FDescricao;
96- property Conteudo: TList<TSYLTVerso> read FConteudo write FConteudo;
96+ property Versos: TList<TSYLTVerso> read FVersos write FVersos;
9797 end;
9898
9999 TSYLT = class;
@@ -123,6 +123,7 @@
123123 FSalvarSYLT: TAction;
124124 FRemoverSYLT: TAction;
125125 FSubstituirSYLT: TAction;
126+ FEditarSYLT: TAction;
126127 FContador: TLabel;
127128 FContadorSombra: TLabel;
128129
@@ -131,8 +132,9 @@
131132
132133 function GetItem(AIndex: Integer): TSYLTItem;
133134 procedure SetItem(AIndex: Integer; const AValue: TSYLTItem);
135+ function GetSYLTAtual: TSYLTItem;
134136 public
135- constructor Create(ASaidaAnterior: TLabel; ASaidaCentral: TLabel; ASaidaPosterior: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
137+ constructor Create(ASaidaAnterior: TLabel; ASaidaCentral: TLabel; ASaidaPosterior: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AEditarSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
136138
137139 destructor Destroy; override;
138140
@@ -146,7 +148,7 @@
146148 // letra contida no arquivo
147149 procedure Carregar(AArquivo: TFileName; ANovoSYLT: Boolean);
148150
149- function Add: TSYLTItem; overload;
151+ function Add: TSYLTItem;
150152 procedure ConfirmarInformacoesDaLetra;
151153 procedure Anterior(APrimeira: Boolean = False);
152154 procedure ExibirVerso(APosicao: Cardinal);
@@ -154,6 +156,7 @@
154156 procedure FinalizarThread;
155157
156158 property Items[AIndex: Integer]: TSYLTItem read GetItem write SetItem; default;
159+ property SYLTAtual: TSYLTItem read GetSYLTAtual;
157160 end;
158161
159162 TAPICItem = class(TCollectionItem)
@@ -579,16 +582,11 @@
579582
580583 { TSYLTItem }
581584
582-procedure TSYLTItem.AdicionarConteudo(ABytes: TBytes; AIndiceInicial: Word);
585+procedure TSYLTItem.ImportarVersos(ABytes: TBytes; AIndiceInicial: Word);
583586 var
584587 i: Word;
585588 Verso: TSYLTVerso;
586-// APartirDe: Word;
587-// PularBytes: Byte;
588589 begin
589-// APartirDe := AIndiceInicial;
590-// PularBytes := 0;
591-
592590 // ISO-8859-1
593591 if FCodificacaoDoTexto = 0 then
594592 begin
@@ -614,7 +612,7 @@
614612 Verso.Tempo := SwapEndian32(PDWORD(@ABytes[i])^);
615613
616614 // Adiciona o verso ao conteúdo
617- FConteudo.Add(Verso);
615+ FVersos.Add(Verso);
618616
619617 // Ao incrementar i em 4, nos posicionamos exatamente no final do item
620618 // SYLT e consequentemente no início do próximo
@@ -624,38 +622,6 @@
624622 // início usando o mesmo algorítmo
625623 AIndiceInicial := i;
626624 until i > High(ABytes);
627-
628-
629-
630-// for i := AIndiceInicial to High(ABytes) do
631-// begin
632-// if PularBytes > 0 then
633-// Dec(PularBytes)
634-// else if ABytes[i] = 0 then
635-// begin
636-// // Quando se acha um verso localizando seu terminador ANSI (00), nós
637-// // iremos processar + 4 bytes de timestamp, por isso estes bytes
638-// // precisam ser pulados
639-// PularBytes := 4;
640-//
641-// // De APartirDe até i - APartirDe está o texto do que eu chamo de verso
642-// Verso.Texto := TEncoding.ANSI.GetString(ABytes,APartirDe,i - APartirDe);
643-//
644-// // Após i, existem 4 bytes que representam o timestamp, estes bytes
645-// // encontram-se em um endianess diferente, por isso precisamos trocar
646-// // sua ordem para interpretar o valor corretamente
647-// Verso.Tempo := SwapEndian32(PDWORD(@ABytes[i+1])^);
648-//
649-// // Adiciona o verso e seu rótulo de tempo no conteúdo deste SYLT.
650-// FConteudo.Add(Verso);
651-//
652-// // i encontra-se no terminador de string ANSI (00), depois dele existem
653-// // + 4 bytes do timestamp, logo, adicionamos + 1 Byte de forma que
654-// // APartirDe fique posicionado exatamente em cima do primeiro caractere
655-// // do próximo verso e assim o ciclo pode reiniciar
656-// APartirDe := i + 4 + 1;
657-// end;
658-// end;
659625 end
660626 // Unicode
661627 else
@@ -687,7 +653,7 @@
687653 Verso.Tempo := SwapEndian32(PDWORD(@ABytes[i])^);
688654
689655 // Adiciona o verso ao conteúdo
690- FConteudo.Add(Verso);
656+ FVersos.Add(Verso);
691657
692658 // Ao incrementar i em 4, nos posicionamos exatamente no final do item SYLT
693659 // e consequentemente no início do próximo
@@ -713,12 +679,12 @@
713679 FFormatoDoRotuloDeTempo := 2;
714680 FTipoDeConteudo := 1;
715681
716- FConteudo := TList<TSYLTVerso>.Create;
682+ FVersos := TList<TSYLTVerso>.Create;
717683 end;
718684
719685 destructor TSYLTItem.Destroy;
720686 begin
721- FConteudo.Free;
687+ FVersos.Free;
722688 inherited;
723689 end;
724690
@@ -736,6 +702,7 @@
736702 FSalvarSYLT.Enabled := Count > 0;
737703 FRemoverSYLT.Enabled := FSalvarSYLT.Enabled;
738704 FSubstituirSYLT.Enabled := FSalvarSYLT.Enabled;
705+ FEditarSYLT.Enabled := FSalvarSYLT.Enabled;
739706 FContador.Caption := Succ(FIndice).ToString + ' / ' + Count.ToString;
740707 FContadorSombra.Caption := FContador.Caption;
741708
@@ -760,7 +727,7 @@
760727 else
761728 begin
762729 SYLT := Items[FIndice];
763- SYLT.Conteudo.Clear;
730+ SYLT.Versos.Clear;
764731 end;
765732
766733 var Verso: TSYLTVerso;
@@ -787,7 +754,7 @@
787754 begin
788755 ArquivoSYLT.Read(Verso.Tempo,SizeOf(Cardinal));
789756 Verso.Texto := ArquivoSYLT.TextoUnicode;
790- SYLT.Conteudo.Add(Verso);
757+ SYLT.Versos.Add(Verso);
791758 end;
792759
793760 if ANovoSYLT then
@@ -817,7 +784,7 @@
817784 end;
818785 end;
819786
820-constructor TSYLT.Create(ASaidaAnterior: TLabel; ASaidaCentral: TLabel; ASaidaPosterior: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
787+constructor TSYLT.Create(ASaidaAnterior: TLabel; ASaidaCentral: TLabel; ASaidaPosterior: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AEditarSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
821788 begin
822789 inherited Create(TSYLTItem);
823790 FIndice := -1;
@@ -834,6 +801,7 @@
834801 FSalvarSYLT := ASalvarSYLT;
835802 FRemoverSYLT := ARemoverSYLT;
836803 FSubstituirSYLT := ASubstituirSYLT;
804+ FEditarSYLT := AEditarSYLT;
837805 FContador := AContador;
838806 FContadorSombra := AContadorSombra;
839807 end;
@@ -879,22 +847,22 @@
879847
880848 procedure TSYLT.ExibirVerso(APosicao: Cardinal);
881849 begin
882- if (FIndice = -1) or (Items[FIndice].Conteudo.Count = 0) then
850+ if (FIndice = -1) or (Items[FIndice].Versos.Count = 0) then
883851 Exit;
884852
885- for var i: Word := 0 to Pred(Items[FIndice].Conteudo.Count) do
886- if Items[FIndice].Conteudo[i].Tempo = APosicao then
853+ for var i: Word := 0 to Pred(Items[FIndice].Versos.Count) do
854+ if Items[FIndice].Versos[i].Tempo = APosicao then
887855 begin
888856 FSaidaAnterior.Caption := '####### INÍCIO #######';
889857 FSaidaPosterior.Caption := '######## FIM ########';
890858
891- FSaidaCentral.Caption := Items[FIndice].Conteudo[i].Texto;
859+ FSaidaCentral.Caption := Items[FIndice].Versos[i].Texto;
892860
893861 if i > 0 then
894- FSaidaAnterior.Caption := Items[FIndice].Conteudo[i - 1].Texto;
862+ FSaidaAnterior.Caption := Items[FIndice].Versos[i - 1].Texto;
895863
896- if i < Pred(Items[FIndice].Conteudo.Count) then
897- FSaidaPosterior.Caption := Items[FIndice].Conteudo[i + 1].Texto;
864+ if i < Pred(Items[FIndice].Versos.Count) then
865+ FSaidaPosterior.Caption := Items[FIndice].Versos[i + 1].Texto;
898866
899867 Break;
900868 end;
@@ -914,13 +882,15 @@
914882 Result := TSYLTItem(inherited GetItem(AIndex));
915883 end;
916884
885+function TSYLT.GetSYLTAtual: TSYLTItem;
886+begin
887+ Result := Items[FIndice];
888+end;
889+
917890 procedure TSYLT.IniciarThread;
918891 begin
919- if (Count > 0) and (FIndice > -1) and (Items[FIndice].Conteudo.Count > 0) then
920- begin
892+ if (Count > 0) and (FIndice > -1) and (Items[FIndice].Versos.Count > 0) then
921893 FSYLTThread := TSYLTThread.Create(Self);
922- FSYLTThread.Start;
923- end;
924894 end;
925895
926896 procedure TSYLT.Limpar;
@@ -1009,7 +979,7 @@
1009979 // Tipo de conteúdo
1010980 Write(Items[FIndice].TipoDeConteudo, 1);
1011981
1012- for var Verso: TSYLTVerso in Items[FIndice].Conteudo do
982+ for var Verso: TSYLTVerso in Items[FIndice].Versos do
1013983 begin
1014984 Write(Verso.Tempo,SizeOf(Cardinal));
1015985 Write(PWideChar(Verso.Texto)^, (Length(Verso.Texto) + 1) * 2);
@@ -1044,9 +1014,9 @@
10441014
10451015 constructor TSYLTThread.Create(ASYLT: TSYLT);
10461016 begin
1047- inherited Create(True);
10481017 FreeOnTerminate := True;
10491018 FSYLT := ASYLT;
1019+ inherited Create(False);
10501020 end;
10511021
10521022 procedure TSYLTThread.Execute;
@@ -1055,6 +1025,10 @@
10551025 // rápido, consome menos ciclos de CPU e porque os 3 labels só são atualizados
10561026 // pela própria thread, nunca externamente enquanto a thread está em execução.
10571027 // Imagino que isso não cause problemas, mas se causar, coloque o Synchronize
1028+
1029+ // Exibe o que existir no início da lista de "versos".
1030+ FSYLT.ExibirVerso(0);
1031+
10581032 while not Terminated do
10591033 FSYLT.ExibirVerso(BASSTempoDecorridoEmMilissegundos);
10601034 end;
--- trunk/V2/src/UDAMOPrincipal.pas (revision 40)
+++ trunk/V2/src/UDAMOPrincipal.pas (revision 41)
@@ -62,6 +62,9 @@
6262 OPDIPIC: TOpenPictureDialog;
6363 OPDIAPIC: TOpenDialog;
6464 SADIAPIC: TSaveDialog;
65+ ACTNEditarSYLT: TAction;
66+ ACTNImportarTextoSYLT: TAction;
67+ ACTNExportarTextoSYLT: TAction;
6568 procedure TIMELetreiroTimer(Sender: TObject);
6669 procedure DataModuleCreate(Sender: TObject);
6770 procedure DataModuleDestroy(Sender: TObject);
@@ -103,6 +106,7 @@
103106 procedure ACTNExportarTextoUSLTExecute(Sender: TObject);
104107 procedure ACTNImportarPNGAPICExecute(Sender: TObject);
105108 procedure ACTNExportarPNGAPICExecute(Sender: TObject);
109+ procedure ACTNEditarSYLTExecute(Sender: TObject);
106110 private
107111 { Private declarations }
108112 FID3v1Tag: TID3v1Tag;
@@ -155,6 +159,7 @@
155159 procedure RemoverSYLT;
156160 procedure SalvarSYLT;
157161 procedure SubstituirSYLT;
162+ procedure EditarSYLT;
158163 public
159164 { Public declarations }
160165 procedure DefinirStatusDeModificado(AContexto: TContexto);
@@ -169,7 +174,7 @@
169174
170175 uses
171176 Vcl.Forms, System.Math, WinAPI.Windows, Graphics, UClassesAjudantes,
172- UFORMPrincipal, UBassUtils, UFORMSobre;
177+ UFORMPrincipal, UBassUtils, UFORMSobre, UFORMEditarSYLT;
173178
174179 {$R *.dfm}
175180
@@ -370,6 +375,15 @@
370375 FUSLT.Salvar(SADIUSLT.FileName);
371376 end;
372377
378+procedure TDAMOPrincipal.EditarSYLT;
379+begin
380+ if TFORMEditarSYLT.ShowMe(Owner,FSYLT.SYLTAtual) = mrOk then
381+ begin
382+ FSYLT.ExibirVerso(0);
383+ DefinirStatusDeModificado(cId3v2);
384+ end;
385+end;
386+
373387 procedure TDAMOPrincipal.SubstituirAPIC;
374388 begin
375389 if OPDIAPIC.Execute then
@@ -621,6 +635,7 @@
621635 ,ACTNSalvarSYLT
622636 ,ACTNRemoverSYLT
623637 ,ACTNSubstituirSYLT
638+ ,ACTNEditarSYLT
624639 ,TFORMPrincipal(Owner).LABEContadorSYLT
625640 ,TFORMPrincipal(Owner).LABEContadorSYLTSombra);
626641
@@ -931,6 +946,11 @@
931946 SalvarUSLT;
932947 end;
933948
949+procedure TDAMOPrincipal.ACTNEditarSYLTExecute(Sender: TObject);
950+begin
951+ EditarSYLT;
952+end;
953+
934954 procedure TDAMOPrincipal.ACTNSobreExecute(Sender: TObject);
935955 begin
936956 TFORMSobre.ShowMe(Owner); // Onwer = FORMPrincipal
--- trunk/V2/src/UFORMEditarSYLT.pas (nonexistent)
+++ trunk/V2/src/UFORMEditarSYLT.pas (revision 41)
@@ -0,0 +1,109 @@
1+unit UFORMEditarSYLT;
2+
3+interface
4+
5+uses
6+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
7+ Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.ValEdit, Vcl.Buttons,
8+ UPngSpeedButton, UClassesETipos;
9+
10+type
11+ TFORMEditarSYLT = class(TForm)
12+ VLEDVersos: TValueListEditor;
13+ PNSBSalvar: TPngSpeedButton;
14+ PNSBCancelar: TPngSpeedButton;
15+ PNSBReproduzir: TPngSpeedButton;
16+ PNSBPararReproducao: TPngSpeedButton;
17+ PNSBImportarTextoSYLT: TPngSpeedButton;
18+ PNSBExportarTextoSYLT: TPngSpeedButton;
19+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
20+ procedure FormCreate(Sender: TObject);
21+ procedure HabilitarBotaoDeSalvar(Sender: TObject);
22+ procedure PNSBSalvarClick(Sender: TObject);
23+ procedure FormShow(Sender: TObject);
24+ procedure PNSBCancelarClick(Sender: TObject);
25+ procedure VLEDVersosSelectCell(Sender: TObject; ACol, ARow: Integer;
26+ var CanSelect: Boolean);
27+ private
28+ { Private declarations }
29+ FSYLTItem: TSYLTItem;
30+ public
31+ { Public declarations }
32+ class function ShowMe(AOwner: TComponent; ASYLTItem: TSYLTItem): TModalResult;
33+ end;
34+
35+implementation
36+
37+{$R *.dfm}
38+
39+uses UDAMOPrincipal, UBassUtils;
40+
41+{ TForm1 }
42+
43+procedure TFORMEditarSYLT.FormClose(Sender: TObject; var Action: TCloseAction);
44+begin
45+ Action := caFree;
46+end;
47+
48+procedure TFORMEditarSYLT.FormCreate(Sender: TObject);
49+begin
50+ PNSBSalvar.Enabled := False;
51+end;
52+
53+procedure TFORMEditarSYLT.FormShow(Sender: TObject);
54+begin
55+ VLEDVersos.OnStringsChange := nil;
56+ try
57+ VLEDVersos.Strings.Clear;
58+
59+ for var Verso: TSYLTVerso in FSYLTItem.Versos do
60+ VLEDVersos.Values[Verso.Tempo.ToString] := Verso.Texto;
61+ finally
62+ VLEDVersos.OnStringsChange := HabilitarBotaoDeSalvar;
63+ end;
64+end;
65+
66+class function TFORMEditarSYLT.ShowMe(AOwner: TComponent; ASYLTItem: TSYLTItem): TModalResult;
67+begin
68+ with TFORMEditarSYLT.Create(AOwner) do
69+ begin
70+ FSYLTItem := ASYLTItem;
71+ Result := ShowModal;
72+ end;
73+end;
74+
75+procedure TFORMEditarSYLT.VLEDVersosSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
76+begin
77+ if BASSEstaReproduzindo then
78+ VLEDVersos.Keys[ARow] := BASSTempoDecorridoEmMilissegundos.ToString;
79+end;
80+
81+procedure TFORMEditarSYLT.HabilitarBotaoDeSalvar(Sender: TObject);
82+begin
83+ PNSBSalvar.Enabled := True;
84+end;
85+
86+procedure TFORMEditarSYLT.PNSBCancelarClick(Sender: TObject);
87+begin
88+ ModalResult := mrCancel;
89+end;
90+
91+procedure TFORMEditarSYLT.PNSBSalvarClick(Sender: TObject);
92+var
93+ SYLTVerso: TSYLTVerso;
94+begin
95+ PNSBPararReproducao.Click;
96+
97+ FSYLTItem.Versos.Clear;
98+
99+ for var i: Word := 1 to Pred(VLEDVersos.RowCount) do
100+ begin
101+ SYLTVerso.Tempo := VLEDVersos.Keys[i].ToInteger;
102+ SYLTVerso.Texto := VLEDVersos.Values[VLEDVersos.Keys[i]];
103+ FSYLTItem.Versos.Add(SYLTVerso);
104+ end;
105+
106+ ModalResult := mrOk;
107+end;
108+
109+end.
--- trunk/V2/src/UFORMPrincipal.pas (revision 40)
+++ trunk/V2/src/UFORMPrincipal.pas (revision 41)
@@ -123,6 +123,7 @@
123123 LAEDTipoMimeAPIC: TLabeledEdit;
124124 PngSpeedButton1: TPngSpeedButton;
125125 PngSpeedButton2: TPngSpeedButton;
126+ PNSBEditarSYLT: TPngSpeedButton;
126127 procedure PABOLetreiroPaint(Sender: TObject);
127128 procedure IMAGID3v2Click(Sender: TObject);
128129 procedure ID3v1Modificado(Sender: TObject);
旧リポジトリブラウザで表示