• R/O
  • SSH
  • HTTPS

id3v2editorplus: Commit


Commit MetaInfo

Revision26 (tree)
Time2019-09-11 06:55:39
Authorderekwildstar

Log Message

- Mais componentes para manipulação SYLT
- Contém erros propositais

Change Summary

Incremental Difference

--- trunk/V2/prj/ID3v2EditorPlus.dpr (revision 25)
+++ trunk/V2/prj/ID3v2EditorPlus.dpr (revision 26)
@@ -21,7 +21,21 @@
2121
2222 begin
2323 Application.Initialize;
24- Application.MainFormOnTaskbar := True;
24+ // A aplicação possui um controle TWebBrowser em uma página de um Page Control
25+ // que pode ou não ser exibido de acordo com a vontade do usuário, por
26+ // exemplo, ele pode abrir um MP3 e nunca acessar a página onde o TWebBrowser
27+ // está. Quando o controle TWebBrowser é manipulado via código (tem seu
28+ // conteúdo alterado), mas ele nunca é exibido de fato, por algum motivo há um
29+ // AV ao fechar a aplicação. Achei algumas soluções no Stack Overflow e no
30+ // JIRA da Embarcadero (links abaixo). Algumas soluções falavam em navegar
31+ // para "about:blank" antes de fechar o programa ou "deletar" o componente
32+ // (não sei bem se é usar Free nele ou removê-lo da lista de componentes do
33+ // TForm, ou os dois, não testei), contudo, a solulução mais elegante e
34+ // simples foi proposta por Zarko Gajic: remover a linha MainFormOnTaskBar.
35+
36+ // https://stackoverflow.com/questions/30667585/access-violation-on-shutdown-from-hidden-twebbrowser
37+ // https://quality.embarcadero.com/browse/RSP-11275
38+ // Application.MainFormOnTaskbar := True;
2539 ReportMemoryLeaksOnShutdown := True;
2640 TStyleManager.TrySetStyle('Glossy');
2741 Application.Title := 'ID3v2 Editor Plus!';
--- trunk/V2/src/UClassesAjudantes.pas (revision 25)
+++ trunk/V2/src/UClassesAjudantes.pas (revision 26)
@@ -155,7 +155,7 @@
155155 Stream.Write(Dados, 1);
156156 Dados[0] := $FE;
157157 Stream.Write(Dados, 1);
158- Stream.Write(PWideChar(TSYLTItem(SYLT).DescricaoDoConteudo)^, (Length(TSYLTItem(SYLT).DescricaoDoConteudo) + 1) * 2);
158+ Stream.Write(PWideChar(TSYLTItem(SYLT).Descricao)^, (Length(TSYLTItem(SYLT).Descricao) + 1) * 2);
159159
160160 // Letra sincronizada
161161 for Letra in TSYLTItem(SYLT).Conteudo do
@@ -399,7 +399,7 @@
399399 begin
400400 Conteudo := GetBytes(i);
401401
402- SYLT := ASYLT.Add; { TODO : Trocar este nome por "Adicionar"? }
402+ SYLT := ASYLT.Add;
403403 SYLT.CodificacaoDoTexto := Conteudo[0];
404404 Idioma[0] := Conteudo[1];
405405 Idioma[1] := Conteudo[2];
@@ -407,7 +407,7 @@
407407 SYLT.Idioma := Idioma;
408408 SYLT.FormatoDoRotuloDeTempo := Conteudo[4];
409409 SYLT.TipoDeConteudo := Conteudo[5];
410- SYLT.DescricaoDoConteudo := ObterStringTerminadaEmNulo(6,ProximoIndice);
410+ SYLT.Descricao := ObterStringTerminadaEmNulo(6,ProximoIndice);
411411 SYLT.AdicionarConteudo(Conteudo,ProximoIndice);
412412 end;
413413 end;
@@ -419,7 +419,7 @@
419419 Idioma: TLanguageID;
420420 Descricao: String;
421421 Texto: String;
422- Letra: TUSLTItem;
422+ USLT: TUSLTItem;
423423 begin
424424 IndiceDoPrimeiroUSLT := FrameExists('USLT');
425425
@@ -431,10 +431,10 @@
431431
432432 if Texto <> '' then
433433 begin
434- Letra := AUSLT.Add;
435- Letra.Idioma := Idioma;
436- Letra.Descricao := Descricao;
437- Letra.Texto := Texto;
434+ USLT := AUSLT.Add;
435+ USLT.Idioma := Idioma;
436+ USLT.Descricao := Descricao;
437+ USLT.Texto := Texto;
438438 end;
439439 end;
440440 end;
--- trunk/V2/src/UClassesETipos.pas (revision 25)
+++ trunk/V2/src/UClassesETipos.pas (revision 26)
@@ -25,6 +25,7 @@
2525 TUSLT = class(TCollection)
2626 private
2727 FIndice: SmallInt;
28+
2829 FWebBrowser: TWebBrowser;
2930 FDescricao: TLabeledEdit;
3031 FIdioma: TComboBox;
@@ -71,7 +72,7 @@
7172 FIdioma: TLanguageID;
7273 FFormatoDoRotuloDeTempo: Byte;
7374 FTipoDeConteudo: Byte;
74- FDescricaoDoConteudo: String;
75+ FDescricao: String;
7576 FConteudo: TList<TSYLTVerso>;
7677 public
7778 constructor Create(ACollection: TCollection); override;
@@ -79,11 +80,12 @@
7980
8081 procedure AdicionarConteudo(ABytes: TBytes; AIndiceInicial: Word);
8182
83+
8284 property CodificacaoDoTexto: Byte read FCodificacaoDoTexto write FCodificacaoDoTexto;
8385 property Idioma: TLanguageID read FIdioma write FIdioma;
8486 property FormatoDoRotuloDeTempo: Byte read FFormatoDoRotuloDeTempo write FFormatoDoRotuloDeTempo;
8587 property TipoDeConteudo: Byte read FTipoDeConteudo write FTipoDeConteudo;
86- property DescricaoDoConteudo: String read FDescricaoDoConteudo write FDescricaoDoConteudo;
88+ property Descricao: String read FDescricao write FDescricao;
8789 property Conteudo: TList<TSYLTVerso> read FConteudo write FConteudo;
8890 end;
8991
@@ -90,21 +92,35 @@
9092 TSYLT = class(TCollection)
9193 private
9294 FIndice: SmallInt;
95+
96+ FSaida: TLabel;
9397 FIdioma: TComboBox;
94- FDescricaoDoConteudo: TLabeledEdit;
98+ FFormatoDoRotuloDeTempo: TComboBox;
99+ FTipoDeConteudo: TComboBox;
100+ FDescricao: TLabeledEdit;
101+ FProximaSYLT: TAction;
102+ FSYLTAnterior: TAction;
103+ FSalvarSYLT: TAction;
104+ FRemoverSYLT: TAction;
105+ FSubstituirSYLT: TAction;
106+ FContador: TLabel;
107+ FContadorSombra: TLabel;
95108
109+ procedure ExibirLetra(AIndiceDaLetra: Word);
96110 procedure AtualizarEstadoDosComponentesDeSaida;
97111
98- procedure LetraAPartirDoControle(ALetra: TList<TSYLTVerso>);
99-
100112 function GetItem(AIndex: Integer): TSYLTItem;
101113 procedure SetItem(AIndex: Integer; const AValue: TSYLTItem);
102114 public
103- constructor Create;
115+ constructor Create(ASaida: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
104116
105117 procedure Limpar;
106118 function Add: TSYLTItem; overload;
107119 procedure ConfirmarInformacoesDaLetra;
120+ procedure SYLTAnterior(APrimeira: Boolean = False);
121+ procedure ProximaSYLT(AUltima: Boolean = False);
122+ procedure SalvarLetraComo(ACaixaDeDialogoParaSalvarLetra: TSaveDialog);
123+ procedure ExibirVerso(ARotuloDeTempo: TTime);
108124
109125 property Items[AIndex: Integer]: TSYLTItem read GetItem write SetItem; default;
110126 end;
@@ -224,7 +240,12 @@
224240 begin
225241 Clear;
226242 FIndice := -1;
243+
227244 FWebBrowser.Navigate2('about:blank');
245+ FDescricao.Clear;
246+ FIdioma.ItemIndex := 0;
247+ FContador.Caption := '0 / 0';
248+ FContadorSombra.Caption := '0 / 0';
228249
229250 AtualizarEstadoDosComponentesDeSaida;
230251 end;
@@ -498,15 +519,16 @@
498519 constructor TSYLTItem.Create(ACollection: TCollection);
499520 begin
500521 inherited;
501- FCodificacaoDoTexto := 0;
522+ FCodificacaoDoTexto := 1;
502523
503524 FIdioma[0] := Ord('p');
504525 FIdioma[1] := Ord('o');
505526 FIdioma[2] := Ord('r');
506527
528+ FDescricao := '';
507529 FFormatoDoRotuloDeTempo := 2;
508530 FTipoDeConteudo := 1;
509- FDescricaoDoConteudo := '';
531+
510532 FConteudo := TList<TSYLTVerso>.Create;
511533 end;
512534
@@ -525,17 +547,19 @@
525547
526548 procedure TSYLT.AtualizarEstadoDosComponentesDeSaida;
527549 begin
528-/////////////////////////// Ajustar os controles aqui
529-// FProximaUSLT.Enabled := (Count > 0) and (FIndice < Pred(Count));
530-// FUSLTAnterior.Enabled := (Count > 0) and (FIndice > 0);
531-// FSalvarUSLT.Enabled := Count > 0;
532-// FRemoverUSLT.Enabled := FSalvarUSLT.Enabled;
533-// FSubstituirUSLT.Enabled := FSalvarUSLT.Enabled;
534-// FContador.Caption := Succ(FIndice).ToString + ' / ' + Count.ToString;
535-// FContadorSombra.Caption := FContador.Caption;
536-// FDescricao.Enabled := FSalvarUSLT.Enabled;
537-// FIdioma.Enabled := FSalvarUSLT.Enabled;
550+ FProximaSYLT.Enabled := (Count > 0) and (FIndice < Pred(Count));
551+ FSYLTAnterior.Enabled := (Count > 0) and (FIndice > 0);
552+ FSalvarSYLT.Enabled := Count > 0;
553+ FRemoverSYLT.Enabled := FSalvarSYLT.Enabled;
554+ FSubstituirSYLT.Enabled := FSalvarSYLT.Enabled;
555+ FContador.Caption := Succ(FIndice).ToString + ' / ' + Count.ToString;
556+ FContadorSombra.Caption := FContador.Caption;
538557
558+ FDescricao.Enabled := FSalvarSYLT.Enabled;
559+ FIdioma.Enabled := FSalvarSYLT.Enabled;
560+ FFormatoDoRotuloDeTempo.Enabled := FSalvarSYLT.Enabled;
561+ FTipoDeConteudo.Enabled := FSalvarSYLT.Enabled;
562+
539563 if Count = 0 then
540564 begin
541565 ///////////// Limpar o controle que mostra na tela o sylt
@@ -555,33 +579,84 @@
555579
556580 with Items[FIndice] do
557581 begin
558- // Existem outras propriedades que não estão sendo alteradas. Aqui apenas
559- // devem ser incluídas referências a propriedades que o usuário final pode
560- // alterar
582+ Descricao := Self.FDescricao.Text;
561583 StringToLanguageID(Self.FIdioma.Text,IdDoIdioma);
562584 Idioma := IdDoIdioma;
563- DescricaoDoConteudo := Self.FDescricaoDoConteudo.Text;
564- LetraAPartirDoControle(Conteudo);
585+ FormatoDoRotuloDeTempo := Succ(Self.FFormatoDoRotuloDeTempo.ItemIndex);
586+ FTipoDeConteudo := Self.FTipoDeConteudo.ItemIndex;
565587 end;
566588 end;
567589
568-constructor TSYLT.Create;
590+constructor TSYLT.Create(ASaida: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
569591 begin
570592 inherited Create(TSYLTItem);
571593 FIndice := -1;
594+
595+ FSaida := ASaida;
596+ FIdioma := AIdioma;
597+ FFormatoDoRotuloDeTempo := AFormatoDoRotuloDeTempo;
598+ FTipoDeConteudo := ATipoDeConteudo;
599+ FDescricao := ADescricao;
600+ FProximaSYLT := AProximaSYLT;
601+ FSYLTAnterior := SYLTTAnterior;
602+ FSalvarSYLT := ASalvarSYLT;
603+ FRemoverSYLT := ARemoverSYLT;
604+ FSubstituirSYLT := ASubstituirSYLT;
605+ FContador := AContador;
606+ FContadorSombra := AContadorSombra;
572607 end;
573608
574-function TSYLT.GetItem(AIndex: Integer): TSYLTItem;
609+procedure TSYLT.ExibirLetra(AIndiceDaLetra: Word);
575610 begin
576- Result := TSYLTItem(inherited GetItem(AIndex));
611+ if (Count = 0) or (AIndiceDaLetra > Pred(Count)) then
612+ Exit;
613+
614+ with Items[AIndiceDaLetra] do
615+ begin
616+ var OnChangeOriginal: TNotifyEvent;
617+
618+ OnChangeOriginal := Self.FDescricao.OnChange;
619+ try
620+ Self.FDescricao.OnChange := nil;
621+ Self.FIdioma.OnChange := nil;
622+ Self.FFormatoDoRotuloDeTempo.OnChange := nil;
623+ Self.FTipoDeConteudo.OnChange := nil;
624+
625+ Self.FDescricao.Text := Descricao;
626+ Self.FIdioma.ItemIndex := Self.FIdioma.Items.IndexOf(LanguageIDtoString(Idioma));
627+ Self.FFormatoDoRotuloDeTempo.ItemIndex := Pred(FormatoDoRotuloDeTempo);
628+ Self.FTipoDeConteudo.ItemIndex := TipoDeConteudo;
629+ finally
630+ Self.FDescricao.OnChange := OnChangeOriginal;
631+ Self.FIdioma.OnChange := OnChangeOriginal;
632+ Self.FFormatoDoRotuloDeTempo.OnChange := OnChangeOriginal;
633+ Self.FTipoDeConteudo.OnChange := OnChangeOriginal;
634+ end;
635+ end;
636+
637+ FIndice := AIndiceDaLetra;
638+ AtualizarEstadoDosComponentesDeSaida;
577639 end;
578640
579-procedure TSYLT.LetraAPartirDoControle(ALetra: TList<TSYLTVerso>);
641+procedure TSYLT.ExibirVerso(ARotuloDeTempo: TTime);
580642 begin
581- // Implemente isso, gerando um tbytes com a letra sincronizada obtida a partir
582- // do controle de tela.
643+ converter para segundo anstes de usar
644+ if (FIndice = -1) or (Items[FIndice].Conteudo.Count = 0) then
645+ Exit;
646+
647+ for var Verso: TSYLTVerso in Items[FIndice].Conteudo do
648+ if Verso.Tempo = ARotuloDeTempo then
649+ begin
650+ FSaida.Caption := Verso.Texto;
651+ Break;
652+ end;
583653 end;
584654
655+function TSYLT.GetItem(AIndex: Integer): TSYLTItem;
656+begin
657+ Result := TSYLTItem(inherited GetItem(AIndex));
658+end;
659+
585660 procedure TSYLT.Limpar;
586661 begin
587662 Clear;
@@ -592,9 +667,54 @@
592667 AtualizarEstadoDosComponentesDeSaida;
593668 end;
594669
670+procedure TSYLT.ProximaSYLT(AUltima: Boolean = False);
671+begin
672+ if (Count = 0) or (Succ(FIndice) = Count) then
673+ Exit;
674+
675+ // Salva no item da letra atual suas informações
676+ ConfirmarInformacoesDaLetra;
677+
678+ if AUltima then
679+ FIndice := Pred(Count)
680+ else
681+ Inc(FIndice);
682+
683+ ExibirLetra(FIndice);
684+end;
685+
686+procedure TSYLT.SalvarLetraComo(ACaixaDeDialogoParaSalvarLetra: TSaveDialog);
687+begin
688+ ShowMessage('Implemente Salvar Letra Como');
689+// if ACaixaDeDialogoParaSalvarLetra.Execute then
690+// with TStringList.Create do
691+// try
692+// Text := Items[FIndice].Texto;
693+// SaveToFile(ACaixaDeDialogoParaSalvarLetra.FileName);
694+// finally
695+// Free;
696+// end;
697+end;
698+
595699 procedure TSYLT.SetItem(AIndex: Integer; const AValue: TSYLTItem);
596700 begin
597701 inherited SetItem(AIndex, AValue);
598702 end;
599703
704+procedure TSYLT.SYLTAnterior(APrimeira: Boolean);
705+begin
706+ if (Count = 0) or (FIndice = 0) then
707+ Exit;
708+
709+ // Salva no item da letra atual suas informações
710+ ConfirmarInformacoesDaLetra;
711+
712+ if APrimeira then
713+ FIndice := 0
714+ else
715+ Dec(FIndice);
716+
717+ ExibirLetra(FIndice);
718+end;
719+
600720 end.
--- trunk/V2/src/UClassesMediadoras.pas (revision 25)
+++ trunk/V2/src/UClassesMediadoras.pas (revision 26)
@@ -48,7 +48,17 @@
4848 begin
4949 Items.Clear;
5050 FIndice := -1;
51+
5152 FImagem.Picture := nil;
53+ FDescricao.Clear;
54+ FTipo.ItemIndex := 0;
55+ FRemoverImagem.Enabled := False;
56+ FSalvarImagem.Enabled := False;
57+ FSubstituirImagem.Enabled := False;
58+ FProximaImagem.Enabled := False;
59+ FImagemAnterior.Enabled := False;
60+ FContador.Caption := '0 / 0';
61+ FContadorSombra.Caption := '0 / 0';
5262
5363 AtualizarEstadoDosComponentesDeSaida;
5464 end;
--- trunk/V2/src/UDAMOPrincipal.pas (revision 25)
+++ trunk/V2/src/UDAMOPrincipal.pas (revision 26)
@@ -49,6 +49,13 @@
4949 ACTNProximaUSLT: TAction;
5050 OPDIUSLT: TOpenDialog;
5151 SADIUSLT: TSaveDialog;
52+ ACTNRemoverSYLT: TAction;
53+ ACTNSubstituirSYLT: TAction;
54+ ACTNSalvarSYLT: TAction;
55+ ACTNAdicionarSYLT: TAction;
56+ ACTNSYLTAnterior: TAction;
57+ ACTNProximaSYLT: TAction;
58+ SADISYLT: TSaveDialog;
5259 procedure TIMELetreiroTimer(Sender: TObject);
5360 procedure DataModuleCreate(Sender: TObject);
5461 procedure DataModuleDestroy(Sender: TObject);
@@ -80,6 +87,12 @@
8087 procedure ACTNAdicionarUSLTExecute(Sender: TObject);
8188 procedure ACTNUSLTAnteriorExecute(Sender: TObject);
8289 procedure ACTNProximaUSLTExecute(Sender: TObject);
90+ procedure ACTNRemoverSYLTExecute(Sender: TObject);
91+ procedure ACTNSubstituirSYLTExecute(Sender: TObject);
92+ procedure ACTNSalvarSYLTExecute(Sender: TObject);
93+ procedure ACTNAdicionarSYLTExecute(Sender: TObject);
94+ procedure ACTNSYLTAnteriorExecute(Sender: TObject);
95+ procedure ACTNProximaSYLTExecute(Sender: TObject);
8396 private
8497 { Private declarations }
8598 FID3v1Tag: TID3v1Tag;
@@ -470,8 +483,8 @@
470483 FID3v2Tag.ObterUSLT(FUSLT);
471484 FUSLT.USLTAnterior(True);
472485
473- FID3v2Tag.ObterSYLT(FSYLT)
474- //FSYLT.SYLTAnterior(True);
486+ FID3v2Tag.ObterSYLT(FSYLT);
487+ FSYLT.SYLTAnterior(True);
475488 end;
476489 end;
477490
@@ -532,8 +545,8 @@
532545 FID3v1Tag := TID3v1Tag.Create;
533546 FID3v2Tag := TID3v2Tag.Create;
534547 FUSLT := TUSLT.Create(TFORMPrincipal(Owner).WEBBUSLT
535- ,TFORMPrincipal(Owner).LAEDDescricaoDaLetraEstatica
536- ,TFORMPrincipal(Owner).CMBXIdiomaDaLetraEstatica
548+ ,TFORMPrincipal(Owner).LAEDDescricaoUSLT
549+ ,TFORMPrincipal(Owner).CMBXIdiomaUSLT
537550 ,ACTNProximaUSLT
538551 ,ACTNUSLTAnterior
539552 ,ACTNSalvarUSLT
@@ -541,8 +554,20 @@
541554 ,ACTNSubstituirUSLT
542555 ,TFORMPrincipal(Owner).LABEUSLT
543556 ,TFORMPrincipal(Owner).LABEUSLTSombra);
544- FSYLT := TSYLT.Create;
545557
558+ FSYLT := TSYLT.Create(TFORMPrincipal(Owner).LABESYLT
559+ ,TFORMPrincipal(Owner).CMBXIdiomaSYLT
560+ ,TFORMPrincipal(Owner).CMBXFormatoDoRotuloDeTempoSYLT
561+ ,TFORMPrincipal(Owner).CMBXTipoDeConteudoSYLT
562+ ,TFORMPrincipal(Owner).LAEDDescricaoSYLT
563+ ,ACTNProximaSYLT
564+ ,ACTNSYLTAnterior
565+ ,ACTNSalvarSYLT
566+ ,ACTNRemoverSYLT
567+ ,ACTNSubstituirSYLT
568+ ,TFORMPrincipal(Owner).LABEContadorSYLT
569+ ,TFORMPrincipal(Owner).LABEContadorSYLTSombra);
570+
546571 FIndiceDoArquivoAtual := -1;
547572 FMudouAutomaticamente := False;
548573
@@ -609,23 +634,11 @@
609634 LAEDCompositor.Clear;
610635 CMBXIdiomaDoComentario.ItemIndex := -1;
611636 LAEDTipoDoComentario.Clear;
637+ // Os métodos Limpar também limpam os campos da aplicação
612638 { Imagens }
613- PNICAPIC.Limpar; { TODO : Acho que dá pra limpar todos os controles associados diretamente no limpar }
614- LAEDDescricaoDaImagem.Clear;
615- CMBXTipoDaImagem.ItemIndex := 0;
616- ACTNRemoverImagem.Enabled := False;
617- ACTNSalvarImagemComo.Enabled := False;
618- ACTNSubstituirImagem.Enabled := False;
619- ACTNProximaImagem.Enabled := False;
620- ACTNImagemAnterior.Enabled := False;
621- LABEImagens.Caption := '0 / 0';
622- LABEImagensSombra.Caption := '0 / 0';
639+ PNICAPIC.Limpar;
623640 { Letra da música }
624641 FUSLT.Limpar;
625- LAEDDescricaoDaLetraEstatica.Clear;
626- CMBXIdiomaDaLetraEstatica.ItemIndex := 0;
627- LABEUSLT.Caption := '0 / 0';
628- LABEUSLTSombra.Caption := '0 / 0';
629642 { Letra sincronizada }
630643 FSYLT.Limpar;
631644 end;
@@ -676,6 +689,11 @@
676689 AdicionarImagem;
677690 end;
678691
692+procedure TDAMOPrincipal.ACTNAdicionarSYLTExecute(Sender: TObject);
693+begin
694+ AdicionarSYLT;
695+end;
696+
679697 procedure TDAMOPrincipal.ACTNAdicionarUSLTExecute(Sender: TObject);
680698 begin
681699 AdicionarUSLT;
@@ -716,6 +734,11 @@
716734 ProximaMusica;
717735 end;
718736
737+procedure TDAMOPrincipal.ACTNProximaSYLTExecute(Sender: TObject);
738+begin
739+ FSYLT.ProximaSYLT;
740+end;
741+
719742 procedure TDAMOPrincipal.ACTNProximaUSLTExecute(Sender: TObject);
720743 begin
721744 FUSLT.ProximaUSLT;
@@ -736,6 +759,11 @@
736759 RemoverImagem;
737760 end;
738761
762+procedure TDAMOPrincipal.ACTNRemoverSYLTExecute(Sender: TObject);
763+begin
764+ RemoverSYLT;
765+end;
766+
739767 procedure TDAMOPrincipal.ACTNRemoverUSLTExecute(Sender: TObject);
740768 begin
741769 RemoverUSLT;
@@ -773,6 +801,11 @@
773801 PNICAPIC.SalvarImagemComo(SPIDAPIC);
774802 end;
775803
804+procedure TDAMOPrincipal.ACTNSalvarSYLTExecute(Sender: TObject);
805+begin
806+ FSYLT.SalvarLetraComo(SADISYLT);
807+end;
808+
776809 procedure TDAMOPrincipal.ACTNSalvarUSLTExecute(Sender: TObject);
777810 begin
778811 FUSLT.SalvarLetraComo(SADIUSLT);
@@ -788,11 +821,21 @@
788821 SubstituirImagem;
789822 end;
790823
824+procedure TDAMOPrincipal.ACTNSubstituirSYLTExecute(Sender: TObject);
825+begin
826+ SubstituirSYLT;
827+end;
828+
791829 procedure TDAMOPrincipal.ACTNSubstituirUSLTExecute(Sender: TObject);
792830 begin
793831 SubstituirUSLT;
794832 end;
795833
834+procedure TDAMOPrincipal.ACTNSYLTAnteriorExecute(Sender: TObject);
835+begin
836+ FSYLT.SYLTAnterior;
837+end;
838+
796839 procedure TDAMOPrincipal.ACTNUltimaMusicaExecute(Sender: TObject);
797840 begin
798841 ProximaMusica(True);
@@ -858,6 +901,7 @@
858901 Atual := BASSTempoDecorrido;
859902
860903 TFORMPrincipal(Owner).LABETempo.Caption := FormatDateTime('nn:ss',Atual / (24 * 60 * 60)) + ' / ' + FormatDateTime('nn:ss',FTempoTotalDoArquivoAtual / (24 * 60 * 60));
904+ FSYLT.ExibirVerso(Atual);
861905 end;
862906
863907 procedure TDAMOPrincipal.TIMELetreiroTimer(Sender: TObject);
--- trunk/V2/src/UFORMPrincipal.pas (revision 25)
+++ trunk/V2/src/UFORMPrincipal.pas (revision 26)
@@ -84,10 +84,10 @@
8484 SHAPLetreiro: TShape;
8585 LIBOListaDeReproducao: TListBox;
8686 Panel1: TPanel;
87- LAEDDescricaoDaLetraEstatica: TLabeledEdit;
88- LABEIdiomaDaLetra: TLabel;
89- CMBXIdiomaDaLetraEstatica: TComboBox;
90- PANLLetraEstatica: TPanel;
87+ LAEDDescricaoUSLT: TLabeledEdit;
88+ LABEIdiomaUSLT: TLabel;
89+ CMBXIdiomaUSLT: TComboBox;
90+ PANLUSLT: TPanel;
9191 PNSBSalvarLetraEstatica: TPngSpeedButton;
9292 PNSBRemoverLetraEstatica: TPngSpeedButton;
9393 PNGBSubstituirLetraEstatica: TPngSpeedButton;
@@ -97,6 +97,24 @@
9797 LABEUSLT: TLabel;
9898 PNSBUSLTAnterior: TPngSpeedButton;
9999 PNSBProximaULST: TPngSpeedButton;
100+ PANESYLT: TPanel;
101+ PNSBSalvarSYLT: TPngSpeedButton;
102+ PNSBRemoverSYLT: TPngSpeedButton;
103+ PNSBSubstituirSYLT: TPngSpeedButton;
104+ PNSBAdicionarSYLT: TPngSpeedButton;
105+ LABEContadorSYLTSombra: TLabel;
106+ LABEContadorSYLT: TLabel;
107+ PNSBSYLTAnterior: TPngSpeedButton;
108+ PNSBProximaSYLT: TPngSpeedButton;
109+ LAEDDescricaoSYLT: TLabeledEdit;
110+ CMBXIdiomaSYLT: TComboBox;
111+ LABEIdiomaSYLT: TLabel;
112+ CMBXFormatoDoRotuloDeTempoSYLT: TComboBox;
113+ Label3: TLabel;
114+ CMBXTipoDeConteudoSYLT: TComboBox;
115+ LABETipoDeConteudoSYLT: TLabel;
116+ SHAPSYLT: TShape;
117+ LABESYLT: TLabel;
100118 procedure PABOLetreiroPaint(Sender: TObject);
101119 procedure IMAGID3v2Click(Sender: TObject);
102120 procedure ID3v1Modificado(Sender: TObject);
@@ -118,7 +136,7 @@
118136 implementation
119137
120138 uses
121- UClassesETipos;
139+ UClassesETipos, ActiveX;
122140
123141 {$R *.dfm}
124142
Show on old repository browser