Revision | 19 (tree) |
---|---|
Zeit | 2019-08-29 06:51:18 |
Autor | derekwildstar |
- Classe Mediadora de APIC concluída
- Início da implementação da lista de reprodução (que ficará para o final)
@@ -0,0 +1,245 @@ | ||
1 | +unit UClassesMediadoras; | |
2 | + | |
3 | +interface | |
4 | + | |
5 | +uses | |
6 | + System.SysUtils, System.Classes, Vcl.ExtCtrls, Vcl.StdCtrls, UPngImageList, | |
7 | + Vcl.ActnList, Vcl.ExtDlgs; | |
8 | + | |
9 | +type | |
10 | + TPNGImageCollection = class (UPngImageList.TPNGImageCollection) | |
11 | + private | |
12 | + FIndice: SmallInt; | |
13 | + FImagem: TImage; | |
14 | + FDescricao: TLabeledEdit; | |
15 | + FTipo: TComboBox; | |
16 | + FProximaImagem: TAction; | |
17 | + FImagemAnterior: TAction; | |
18 | + FSalvarImagem: TAction; | |
19 | + FRemoverImagem: TAction; | |
20 | + FSubstituirImagem: TAction; | |
21 | + FContador: TLabel; | |
22 | + FContadorSombra: TLabel; | |
23 | + | |
24 | + procedure AtualizarEstadoDosComponentesDeSaida; | |
25 | +// procedure CodificarInformacoesDaImagem(AIndiceDaImagem: SmallInt; ADescricao, AMime: String; ATipo: Byte); | |
26 | + public | |
27 | + constructor Create(AOwner: TComponent); override; | |
28 | + procedure ConfigurarComponentesDeSaida(AImagem: TImage; ADescricao: TLabeledEdit; ATipo: TComboBox; AProximaImagem: TAction; AImagemAnterior: TAction; ASalvarImagem: TAction; ARemoverImagem: TAction; ASubstituirImagem: TAction; AContador: TLabel; AContadorSombra: TLabel); | |
29 | + function ExcluirAtual: Boolean; | |
30 | + procedure SalvarImagemComo(ACaixaDeDialogoParaSalvarImagem: TSavePictureDialog); | |
31 | + function AdicionarImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean; | |
32 | + function SubstituirImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean; | |
33 | + procedure Limpar; | |
34 | + procedure ExibirImagem(AIndiceDaImagem: Word); | |
35 | + procedure ProximaImagem(AUltima: Boolean = False); | |
36 | + procedure ImagemAnterior(APrimeira: Boolean = False); | |
37 | + procedure ConfirmarInformacoesDaImagem; | |
38 | + | |
39 | + end; | |
40 | + | |
41 | +implementation | |
42 | + | |
43 | +uses | |
44 | + Vcl.Forms, WinApi.Windows; | |
45 | + | |
46 | +{ TPNGImageCollectionItemsHelper } | |
47 | + | |
48 | +procedure TPNGImageCollection.Limpar; | |
49 | +begin | |
50 | + Items.Clear; | |
51 | + FIndice := -1; | |
52 | + | |
53 | + AtualizarEstadoDosComponentesDeSaida; | |
54 | +end; | |
55 | + | |
56 | +//procedure TPNGImageCollection.CodificarInformacoesDaImagem(AIndiceDaImagem: SmallInt; ADescricao: String; AMime: String; ATipo: Byte); | |
57 | +//begin | |
58 | +// if (Items.Count = 0) or (AIndiceDaImagem = -1) then | |
59 | +// Exit; | |
60 | +// | |
61 | +// Items[AIndiceDaImagem].Name := ADescricao + '¬' + AMime + '¬' + ATipo.ToString; | |
62 | +//end; | |
63 | + | |
64 | +procedure TPNGImageCollection.ProximaImagem(AUltima: Boolean = False); | |
65 | +begin | |
66 | + if (Items.Count = 0) or (Succ(FIndice) = Items.Count) then | |
67 | + Exit; | |
68 | + | |
69 | + // Salva no item da imagem atual suas informações | |
70 | + ConfirmarInformacoesDaImagem; | |
71 | + | |
72 | + if AUltima then | |
73 | + FIndice := Pred(Items.Count) | |
74 | + else | |
75 | + Inc(FIndice); | |
76 | + | |
77 | + ExibirImagem(FIndice); | |
78 | +end; | |
79 | + | |
80 | +procedure TPNGImageCollection.SalvarImagemComo(ACaixaDeDialogoParaSalvarImagem: TSavePictureDialog); | |
81 | +begin | |
82 | + if ACaixaDeDialogoParaSalvarImagem.Execute then | |
83 | + Items[FIndice].PngImage.SaveToFile(ACaixaDeDialogoParaSalvarImagem.FileName); | |
84 | +end; | |
85 | + | |
86 | +function TPNGImageCollection.SubstituirImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean; | |
87 | +begin | |
88 | + Result := ACaixaDeDialogoParaAbrirImagem.Execute; | |
89 | + | |
90 | + if Result then | |
91 | + begin | |
92 | + Items[FIndice].PngImage.LoadFromFile(ACaixaDeDialogoParaAbrirImagem.FileName); | |
93 | + ExibirImagem(FIndice); | |
94 | + end; | |
95 | +end; | |
96 | + | |
97 | +procedure TPNGImageCollection.ImagemAnterior(APrimeira: Boolean = False); | |
98 | +begin | |
99 | + if (Items.Count = 0) or (FIndice = 0) then | |
100 | + Exit; | |
101 | + | |
102 | + // Salva no item da imagem atual suas informações | |
103 | + ConfirmarInformacoesDaImagem; | |
104 | + | |
105 | + if APrimeira then | |
106 | + FIndice := 0 | |
107 | + else | |
108 | + Dec(FIndice); | |
109 | + | |
110 | + ExibirImagem(FIndice); | |
111 | +end; | |
112 | + | |
113 | + | |
114 | +function TPNGImageCollection.AdicionarImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean; | |
115 | +begin | |
116 | + Result := ACaixaDeDialogoParaAbrirImagem.Execute; | |
117 | + if Result then | |
118 | + begin | |
119 | + Items.Add.PngImage.LoadFromFile(ACaixaDeDialogoParaAbrirImagem.FileName); | |
120 | + ProximaImagem(True); | |
121 | + end; | |
122 | +end; | |
123 | + | |
124 | +procedure TPNGImageCollection.AtualizarEstadoDosComponentesDeSaida; | |
125 | +begin | |
126 | + FProximaImagem.Enabled := (Items.Count > 0) and (FIndice < Pred(Items.Count)); | |
127 | + FImagemAnterior.Enabled := (Items.Count > 0) and (FIndice > 0); | |
128 | + FSalvarImagem.Enabled := Items.Count > 0; | |
129 | + FRemoverImagem.Enabled := FSalvarImagem.Enabled; | |
130 | + FSubstituirImagem.Enabled := FSalvarImagem.Enabled; | |
131 | + FContador.Caption := Succ(FIndice).ToString + ' / ' + Items.Count.ToString; | |
132 | + FContadorSombra.Caption := FContador.Caption; | |
133 | + FDescricao.Enabled := FSalvarImagem.Enabled; | |
134 | + FTipo.Enabled := FSalvarImagem.Enabled; | |
135 | + | |
136 | + if Items.Count = 0 then | |
137 | + begin | |
138 | + FImagem.Picture := nil; | |
139 | + FDescricao.Text := ''; | |
140 | + FTipo.ItemIndex := 0; | |
141 | + end; | |
142 | +end; | |
143 | + | |
144 | +procedure TPNGImageCollection.ConfigurarComponentesDeSaida(AImagem: TImage; ADescricao: TLabeledEdit; ATipo: TComboBox; AProximaImagem: TAction; AImagemAnterior: TAction; ASalvarImagem: TAction; ARemoverImagem: TAction; ASubstituirImagem: TAction; AContador: TLabel; AContadorSombra: TLabel); | |
145 | +begin | |
146 | + FImagem := AImagem; | |
147 | + FDescricao := ADescricao; | |
148 | + FTipo := ATipo; | |
149 | + FProximaImagem := AProximaImagem; | |
150 | + FImagemAnterior := AImagemAnterior; | |
151 | + FSalvarImagem := ASalvarImagem; | |
152 | + FRemoverImagem := ARemoverImagem; | |
153 | + FSubstituirImagem := ASubstituirImagem; | |
154 | + FContador := AContador; | |
155 | + FContadorSombra := AContadorSombra; | |
156 | +end; | |
157 | + | |
158 | +procedure TPNGImageCollection.ConfirmarInformacoesDaImagem; | |
159 | +begin | |
160 | + if (Items.Count = 0) or (FIndice = -1) then | |
161 | + Exit; | |
162 | + | |
163 | + Items[FIndice].Name := FDescricao.Text + '¬image/png¬' + FTipo.ItemIndex.ToString; | |
164 | +end; | |
165 | + | |
166 | +constructor TPNGImageCollection.Create(AOwner: TComponent); | |
167 | +begin | |
168 | + inherited; | |
169 | + FIndice := -1; | |
170 | +end; | |
171 | + | |
172 | +function TPNGImageCollection.ExcluirAtual: Boolean; | |
173 | +begin | |
174 | + Result := False; | |
175 | + | |
176 | + if FIndice = -1 then | |
177 | + Exit; | |
178 | + | |
179 | + Result := Application.MessageBox('Deseja mesmo excluir esta imagem?','Tem certeza?',MB_ICONQUESTION or MB_YESNO) = IDYES; | |
180 | + | |
181 | + if not Result then | |
182 | + Exit; | |
183 | + | |
184 | + Items.Delete(FIndice); | |
185 | + | |
186 | + // Caso tenhamos excluído uma imagem que não tenha sido a última imagem da | |
187 | + // lista basta recarregar o índice atual, que está contido no Tag de PNICAPIC. | |
188 | + // Isso vai, invariavelmente, carregar a imagem que estava após a imagem | |
189 | + // excluída | |
190 | + if FIndice < Items.Count then | |
191 | + ExibirImagem(FIndice) | |
192 | + // Caso contrário, se tivermos excluído a última imagem | |
193 | + else | |
194 | + begin | |
195 | + // Ajusta o indice da última imagem | |
196 | + Dec(FIndice); | |
197 | + | |
198 | + // Caso ainda existam imagens na lista, precisamos carregar a última imagem | |
199 | + if Items.Count > 0 then | |
200 | + ExibirImagem(FIndice) | |
201 | + // Por fim, se o fluxo chega aqui é porque a lista de imagens está vazia, | |
202 | + // neste caso apenas ajustamos a tela para refletir essa nova realidade | |
203 | + else | |
204 | + AtualizarEstadoDosComponentesDeSaida; | |
205 | + end; | |
206 | +end; | |
207 | + | |
208 | +procedure TPNGImageCollection.ExibirImagem(AIndiceDaImagem: Word); | |
209 | +begin | |
210 | + if (not Assigned(FImagem)) or (Items.Count = 0) or (AIndiceDaImagem > Pred(Items.Count)) then | |
211 | + Exit; | |
212 | + | |
213 | + FImagem.Picture.Assign(Items[AIndiceDaImagem].PngImage); | |
214 | + | |
215 | + var OnChangeOriginal: TNotifyEvent; | |
216 | + | |
217 | + OnChangeOriginal := FDescricao.OnChange; | |
218 | + try | |
219 | + FDescricao.OnChange := nil; | |
220 | + FTipo.OnChange := nil; | |
221 | + | |
222 | + with TStringList.Create do | |
223 | + try | |
224 | + StrictDelimiter := True; | |
225 | + Delimiter := '¬'; | |
226 | + DelimitedText := Items[AIndiceDaImagem].Name; | |
227 | + | |
228 | + FDescricao.Text := Strings[0]; | |
229 | + FTipo.ItemIndex := 0; | |
230 | + | |
231 | + if Count > 1 then | |
232 | + FTipo.ItemIndex := Strings[2].ToInteger; | |
233 | + finally | |
234 | + Free; | |
235 | + end; | |
236 | + finally | |
237 | + FDescricao.OnChange := OnChangeOriginal; | |
238 | + FTipo.OnChange := OnChangeOriginal | |
239 | + end; | |
240 | + | |
241 | + FIndice := AIndiceDaImagem; | |
242 | + AtualizarEstadoDosComponentesDeSaida; | |
243 | +end; | |
244 | + | |
245 | +end. |
@@ -20,7 +20,7 @@ | ||
20 | 20 | ACTNSalvarID3v2: TAction; |
21 | 21 | ACTNRemoverID3v2: TAction; |
22 | 22 | ACTNCopiarDoID3v1: TAction; |
23 | - TIMEMarquee: TTimer; | |
23 | + TIMELetreiro: TTimer; | |
24 | 24 | OPDIMP3: TOpenDialog; |
25 | 25 | TIMEReprodutor: TTimer; |
26 | 26 | ACTNSobre: TAction; |
@@ -43,7 +43,7 @@ | ||
43 | 43 | OPDIAPIC: TOpenPictureDialog; |
44 | 44 | ACTNReverterID3v1: TAction; |
45 | 45 | ACTNReverterID3v2: TAction; |
46 | - procedure TIMEMarqueeTimer(Sender: TObject); | |
46 | + procedure TIMELetreiroTimer(Sender: TObject); | |
47 | 47 | procedure DataModuleCreate(Sender: TObject); |
48 | 48 | procedure DataModuleDestroy(Sender: TObject); |
49 | 49 | procedure ACTNAbrirMP3Execute(Sender: TObject); |
@@ -71,7 +71,6 @@ | ||
71 | 71 | { Private declarations } |
72 | 72 | FID3v1Tag: TID3v1Tag; |
73 | 73 | FID3v2Tag: TID3v2Tag; |
74 | - FListaDeReproducao: TStringList; | |
75 | 74 | FIndiceDoArquivoAtual: SmallInt; |
76 | 75 | FTempoTotalDoArquivoAtual: Double; |
77 | 76 | FPosicaoHorizontalDoLetreiro: SmallInt; |
@@ -101,13 +100,6 @@ | ||
101 | 100 | procedure CopiarDadosDoID3v1; |
102 | 101 | procedure CarregarGenerosID3; |
103 | 102 | procedure AtualizarBotoesDoReprodutor; |
104 | -// procedure CarregarImagem(AIndiceDaImagem: Word); | |
105 | -// procedure DecodificarInformacoesDaImagem(AIndiceDaImagem: Word); | |
106 | - procedure CodificarInformacoesDaImagem(AIndiceDaImagem: Word; ADescricao: String; AMime: String; ATipo: Byte); | |
107 | -// procedure ProximaImagem(AUltima: Boolean = False); | |
108 | -// procedure ImagemAnterior; | |
109 | - procedure AtualizarBotoesDoNavegadorDeImagens; | |
110 | - procedure SalvarImagemComo; | |
111 | 103 | procedure RemoverImagem; |
112 | 104 | procedure AdicionarImagem; |
113 | 105 | procedure SubstituirImagem; |
@@ -136,8 +128,8 @@ | ||
136 | 128 | if FIndiceDoArquivoAtual = -1 then |
137 | 129 | Exit; |
138 | 130 | |
139 | - FPosicaoHorizontalDoLetreiro := - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextWidth(FListaDeReproducao[FIndiceDoArquivoAtual]); | |
140 | - FPosicaoVerticalDoLetreiro := TFORMPrincipal(Owner).PABOLetreiro.Height div 2 - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextHeight(FListaDeReproducao[FIndiceDoArquivoAtual]) div 2; | |
131 | + FPosicaoHorizontalDoLetreiro := - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextWidth(ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual])); | |
132 | + FPosicaoVerticalDoLetreiro := TFORMPrincipal(Owner).PABOLetreiro.Height div 2 - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextHeight(ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual])) div 2; | |
141 | 133 | end; |
142 | 134 | |
143 | 135 | procedure TDAMOPrincipal.ReiniciarStatusDeModificacao(AContexto: TContexto); |
@@ -161,10 +153,10 @@ | ||
161 | 153 | if FIndiceDoArquivoAtual = -1 then |
162 | 154 | Exit; |
163 | 155 | |
164 | - if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v1 do arquivo "' + ExtractFileName(FListaDeReproducao[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then | |
156 | + if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v1 do arquivo "' + ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then | |
165 | 157 | Exit; |
166 | 158 | |
167 | - Erro := RemoveID3v1TagFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]); | |
159 | + Erro := RemoveID3v1TagFromFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]); | |
168 | 160 | |
169 | 161 | if (Erro <> ID3V2LIBRARY_SUCCESS) and (Erro <> ID3V1LIBRARY_ERROR) then |
170 | 162 | raise Exception.CreateFmt('Não foi possível excluir o tag ID3v1 do arquivo. Código de erro: %d',[Erro]); |
@@ -181,13 +173,13 @@ | ||
181 | 173 | if FIndiceDoArquivoAtual = -1 then |
182 | 174 | Exit; |
183 | 175 | |
184 | - if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v2 do arquivo "' + ExtractFileName(FListaDeReproducao[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita.'#13#10#13#10'Atenção: A reprodução atual será interrompida para que a remoção seja realizada'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then | |
176 | + if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v2 do arquivo "' + ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita.'#13#10#13#10'Atenção: A reprodução atual será interrompida para que a remoção seja realizada'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then | |
185 | 177 | Exit; |
186 | 178 | |
187 | 179 | PararReproducao; |
188 | 180 | DescarregarStream; |
189 | 181 | try |
190 | - Erro := RemoveID3v2TagFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]); | |
182 | + Erro := RemoveID3v2TagFromFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]); | |
191 | 183 | finally |
192 | 184 | CarregarStream; |
193 | 185 | end; |
@@ -202,30 +194,8 @@ | ||
202 | 194 | |
203 | 195 | procedure TDAMOPrincipal.RemoverImagem; |
204 | 196 | begin |
205 | - PNICAPIC.ExcluirAtual; | |
206 | - | |
207 | -// // Caso tenhamos excluído uma imagem que não tenha sido a última imagem da | |
208 | -// // lista basta recarregar o índice atual, que está contido no Tag de PNICAPIC. | |
209 | -// // Isso vai, invariavelmente, carregar a imagem que estava após a imagem | |
210 | -// // excluída | |
211 | -// if PNICAPIC.Tag < PNICAPIC.Items.Count then | |
212 | -// CarregarImagem(PNICAPIC.Tag) | |
213 | -// // Caso contrário, se tivermos excluído a última imagem | |
214 | -// else | |
215 | -// begin | |
216 | -// // Ajusta o indice da última imagem | |
217 | -// PNICAPIC.Tag := PNICAPIC.Tag - 1; | |
218 | -// | |
219 | -// // Caso ainda existam imagens na lista, precisamos carregar a última imagem | |
220 | -// if PNICAPIC.Items.Count > 0 then | |
221 | -// CarregarImagem(PNICAPIC.Tag) | |
222 | -// // Por fim, se o fluxo chega aqui é porque a lista de imagens está vazia, | |
223 | -// // neste caso apenas ajustamos a tela para refletir essa nova realidade | |
224 | -// else | |
225 | -// AtualizarBotoesDoNavegadorDeImagens; | |
226 | -// end; | |
227 | - | |
228 | - DefinirStatusDeModificado(cId3v2); | |
197 | + if PNICAPIC.ExcluirAtual then | |
198 | + DefinirStatusDeModificado(cId3v2); | |
229 | 199 | end; |
230 | 200 | |
231 | 201 | function TDAMOPrincipal.ReproducaoConcluida: Boolean; |
@@ -259,7 +229,7 @@ | ||
259 | 229 | FID3v1Tag.Year := LAEDID3v1Ano.Text; |
260 | 230 | FID3v1Tag.Comment := MEMOID3v1Comentarios.Text; |
261 | 231 | FID3v1Tag.Genre := CMBXID3v1Genero.Items[CMBXID3v1Genero.ItemIndex]; |
262 | - FID3v1Tag.SaveToFile(FListaDeReproducao[FIndiceDoArquivoAtual]); | |
232 | + FID3v1Tag.SaveToFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]); | |
263 | 233 | ReiniciarStatusDeModificacao(cId3v1); |
264 | 234 | end; |
265 | 235 | end; |
@@ -291,7 +261,7 @@ | ||
291 | 261 | { Imagens } |
292 | 262 | // Salva no item da imagem suas informações. Isso é necessário aqui porque o |
293 | 263 | // item da imagem só é atualizado normalmente ao se navegar entre as imagens |
294 | - CodificarInformacoesDaImagem(PNICAPIC.Tag,LAEDDescricaoDaImagem.Text,'image/png',CMBXTipoDaImagem.ItemIndex); | |
264 | + PNICAPIC.ConfirmarInformacoesDaImagem; | |
295 | 265 | |
296 | 266 | AdicionarTodasAsImagens; |
297 | 267 |
@@ -300,7 +270,7 @@ | ||
300 | 270 | PararReproducao; |
301 | 271 | DescarregarStream; |
302 | 272 | try |
303 | - if FID3v2Tag.SaveToFile(FListaDeReproducao[FIndiceDoArquivoAtual]) <> ID3V2LIBRARY_SUCCESS then | |
273 | + if FID3v2Tag.SaveToFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]) <> ID3V2LIBRARY_SUCCESS then | |
304 | 274 | raise Exception.Create('Não foi possível salvar o tag ID3v2'); |
305 | 275 | finally |
306 | 276 | CarregarStream; |
@@ -310,20 +280,10 @@ | ||
310 | 280 | end; |
311 | 281 | end; |
312 | 282 | |
313 | -procedure TDAMOPrincipal.SalvarImagemComo; | |
314 | -begin | |
315 | - if SPIDAPIC.Execute then | |
316 | - PNICAPIC.Items[PNICAPIC.Tag].PngImage.SaveToFile(SPIDAPIC.FileName); | |
317 | -end; | |
318 | - | |
319 | 283 | procedure TDAMOPrincipal.SubstituirImagem; |
320 | 284 | begin |
321 | - if OPDIAPIC.Execute then | |
322 | - begin | |
323 | - PNICAPIC.Items[PNICAPIC.Tag].PngImage.LoadFromFile(OPDIAPIC.FileName); | |
324 | - TFORMPrincipal(Owner).IMAGAPIC.Picture.LoadFromFile(OPDIAPIC.FileName); | |
285 | + if PNICAPIC.SubstituirImagem(OPDIAPIC) then | |
325 | 286 | DefinirStatusDeModificado(cId3v2); |
326 | - end; | |
327 | 287 | end; |
328 | 288 | |
329 | 289 | procedure TDAMOPrincipal.PararReproducao; |
@@ -341,28 +301,11 @@ | ||
341 | 301 | AtualizarBotoesDoReprodutor; |
342 | 302 | end; |
343 | 303 | |
344 | -//procedure TDAMOPrincipal.ProximaImagem(AUltima: Boolean = False); | |
345 | -//begin | |
346 | -// if (PNICAPIC.Items.Count = 0) or (Succ(PNICAPIC.Tag) = PNICAPIC.Items.Count) then | |
347 | -// Exit; | |
348 | -// | |
349 | -// // Salva no item da imagem suas informações | |
350 | -// if PNICAPIC.Tag > -1 then | |
351 | -// CodificarInformacoesDaImagem(PNICAPIC.Tag,TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text,'image/png',TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex); | |
352 | -// | |
353 | -// if AUltima then | |
354 | -// PNICAPIC.Tag := Pred(PNICAPIC.Items.Count) | |
355 | -// else | |
356 | -// PNICAPIC.Tag := PNICAPIC.Tag + 1; | |
357 | -// | |
358 | -// CarregarImagem(PNICAPIC.Tag); | |
359 | -//end; | |
360 | - | |
361 | 304 | procedure TDAMOPrincipal.ProximaMusica(AUltima: Boolean = False; AForcarReproducao: Boolean = False); |
362 | 305 | var |
363 | 306 | ContinuarReproducao: Boolean; |
364 | 307 | begin |
365 | - if (FIndiceDoArquivoAtual = -1) or (Succ(FIndiceDoArquivoAtual) = FListaDeReproducao.Count) then | |
308 | + if (FIndiceDoArquivoAtual = -1) or (Succ(FIndiceDoArquivoAtual) = TFORMPrincipal(Owner).LIBOListaDeReproducao.Count) then | |
366 | 309 | begin |
367 | 310 | // Garante a parada do timer quando a última música termina e ainda zera o |
368 | 311 | // contador de tempo, mas isso só será feito se a mudança de faixa ocorrer |
@@ -377,7 +320,7 @@ | ||
377 | 320 | DescarregarStream; |
378 | 321 | |
379 | 322 | if AUltima then |
380 | - FIndiceDoArquivoAtual := Pred(FListaDeReproducao.Count) | |
323 | + FIndiceDoArquivoAtual := Pred(TFORMPrincipal(Owner).LIBOListaDeReproducao.Count) | |
381 | 324 | else |
382 | 325 | Inc(FIndiceDoArquivoAtual); |
383 | 326 |
@@ -414,7 +357,7 @@ | ||
414 | 357 | |
415 | 358 | with TFORMPrincipal(Owner) do |
416 | 359 | begin |
417 | - Erro := FID3v1Tag.LoadFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]); | |
360 | + Erro := FID3v1Tag.LoadFromFile(LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]); | |
418 | 361 | |
419 | 362 | case Erro of |
420 | 363 | ID3V2LIBRARY_ERROR: { O tag não existe no arquivo! }; |
@@ -450,7 +393,7 @@ | ||
450 | 393 | |
451 | 394 | with TFORMPrincipal(Owner) do |
452 | 395 | begin |
453 | - Erro := FID3v2Tag.LoadFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]); | |
396 | + Erro := FID3v2Tag.LoadFromFile(LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]); | |
454 | 397 | |
455 | 398 | case Erro of |
456 | 399 | ID3V2LIBRARY_ERROR: raise Exception.Create('Não foi possível obter o tag ID3v2: Erro desconhecido'); |
@@ -502,9 +445,7 @@ | ||
502 | 445 | end; |
503 | 446 | end; |
504 | 447 | PNICAPIC.ImagemAnterior(True); |
505 | - end | |
506 | - else | |
507 | - AtualizarBotoesDoNavegadorDeImagens; | |
448 | + end; | |
508 | 449 | end; |
509 | 450 | end; |
510 | 451 |
@@ -512,15 +453,6 @@ | ||
512 | 453 | end; |
513 | 454 | end; |
514 | 455 | |
515 | -//procedure TDAMOPrincipal.CarregarImagem(AIndiceDaImagem: Word); | |
516 | -//begin | |
517 | -// if PNICAPIC.Items.Count > 0 then | |
518 | -// TFORMPrincipal(Owner).IMAGAPIC.Picture.Assign(PNICAPIC.Items[AIndiceDaImagem].PngImage); | |
519 | -// | |
520 | -// DecodificarInformacoesDaImagem(AIndiceDaImagem); | |
521 | -// AtualizarBotoesDoNavegadorDeImagens; | |
522 | -//end; | |
523 | - | |
524 | 456 | procedure TDAMOPrincipal.CarregarMP3; |
525 | 457 | begin |
526 | 458 | if not ExistemModificacoes or (Application.MessageBox('Você fez alterações nas informações do arquivo atual mas não as salvou, deseja mesmo carragar outro(s) MP3 e perder as alterações realizadas?','Tem certeza?',MB_ICONQUESTION or MB_YESNO) = IDYES) then |
@@ -527,7 +459,7 @@ | ||
527 | 459 | if OPDIMP3.Execute then |
528 | 460 | begin |
529 | 461 | PararReproducao; |
530 | - FListaDeReproducao.Assign(OPDIMP3.Files); | |
462 | + TFORMPrincipal(Owner).LIBOListaDeReproducao.Items.Assign(OPDIMP3.Files); | |
531 | 463 | FIndiceDoArquivoAtual := 0; |
532 | 464 | CarregarStream; |
533 | 465 | AtualizarContadorDaListaDeReproducao; |
@@ -548,7 +480,7 @@ | ||
548 | 480 | CarregarID3v1; |
549 | 481 | CarregarID3v2; |
550 | 482 | |
551 | - FManipuladorDoStream := BASS_StreamCreateFile(False, PChar(FListaDeReproducao[FIndiceDoArquivoAtual]), 0, 0, BASS_STREAM_PRESCAN or BASS_UNICODE); | |
483 | + FManipuladorDoStream := BASS_StreamCreateFile(False, PChar(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]), 0, 0, BASS_STREAM_PRESCAN or BASS_UNICODE); | |
552 | 484 | |
553 | 485 | if FManipuladorDoStream = 0 then |
554 | 486 | raise Exception.CreateFmt('A biblioteca BASS não foi capaz de carregar o arquivo. Código de erro %d',[BASS_ErrorGetCode]); |
@@ -565,12 +497,6 @@ | ||
565 | 497 | |
566 | 498 | end; |
567 | 499 | |
568 | -//procedure TDAMOPrincipal.CodificarInformacoesDaImagem(AIndiceDaImagem: Word; ADescricao: String; AMime: String; ATipo: Byte); | |
569 | -//begin | |
570 | -// if (PNICAPIC.Items.Count > 0) and (AIndiceDaImagem < PNICAPIC.Items.Count) then | |
571 | -// PNICAPIC.Items[AIndiceDaImagem].Name := ADescricao + '¬' + AMime + '¬' + ATipo.ToString; | |
572 | -//end; | |
573 | - | |
574 | 500 | procedure TDAMOPrincipal.CopiarDadosDoID3v1; |
575 | 501 | begin |
576 | 502 | showmessage(FID3v1Tag.Loaded.ToString(False)); |
@@ -578,11 +504,22 @@ | ||
578 | 504 | |
579 | 505 | procedure TDAMOPrincipal.DataModuleCreate(Sender: TObject); |
580 | 506 | begin |
581 | -// PNICAPIC.ConfigurarImagemDeSaida(TFORMPrincipal(Owner).IMAGAPIC); | |
507 | + PNICAPIC.ConfigurarComponentesDeSaida(TFORMPrincipal(Owner).IMAGAPIC | |
508 | + ,TFORMPrincipal(Owner).LAEDDescricaoDaImagem | |
509 | + ,TFORMPrincipal(Owner).CMBXTipoDaImagem | |
510 | + ,ACTNProximaImagem | |
511 | + ,ACTNImagemAnterior | |
512 | + ,ACTNSalvarImagemComo | |
513 | + ,ACTNRemoverImagem | |
514 | + ,ACTNSubstituirImagem | |
515 | + ,TFORMPrincipal(Owner).LABEImagens | |
516 | + ,TFORMPrincipal(Owner).LABEImagensSombra); | |
517 | + | |
518 | + | |
519 | + | |
582 | 520 | FID3v1Tag := TID3v1Tag.Create; |
583 | 521 | FID3v2Tag := TID3v2Tag.Create; |
584 | 522 | |
585 | - FListaDeReproducao := TStringList.Create; | |
586 | 523 | FIndiceDoArquivoAtual := -1; |
587 | 524 | FManipuladorDoStream := 0; |
588 | 525 | FMudouAutomaticamente := False; |
@@ -600,37 +537,10 @@ | ||
600 | 537 | if not BASS_Free then |
601 | 538 | raise Exception.CreateFmt('Não foi possível liberar os recursos alocados pela biblioteca BASS. Código de erro %d',[BASS_ErrorGetCode]); |
602 | 539 | |
603 | - FListaDeReproducao.Free; | |
604 | 540 | FID3v2Tag.Free; |
605 | 541 | FID3v1Tag.Free; |
606 | 542 | end; |
607 | 543 | |
608 | -//procedure TDAMOPrincipal.DecodificarInformacoesDaImagem(AIndiceDaImagem: Word); | |
609 | -//var | |
610 | -// NaoFoiModificado: Boolean; | |
611 | -//begin | |
612 | -// if PNICAPIC.Items.Count > 0 then | |
613 | -// with TStringList.Create do | |
614 | -// try | |
615 | -// StrictDelimiter := True; | |
616 | -// Delimiter := '¬'; | |
617 | -// DelimitedText := PNICAPIC.Items[AIndiceDaImagem].Name; | |
618 | -// | |
619 | -// NaoFoiModificado := not ExistemModificacoes; | |
620 | -// | |
621 | -// TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text := Strings[0]; | |
622 | -// TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex := 0; | |
623 | -// | |
624 | -// if Count > 1 then | |
625 | -// TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex := Strings[2].ToInteger; | |
626 | -// | |
627 | -// if NaoFoiModificado then | |
628 | -// ReiniciarStatusDeModificacao(cId3v2); | |
629 | -// finally | |
630 | -// Free; | |
631 | -// end; | |
632 | -//end; | |
633 | - | |
634 | 544 | procedure TDAMOPrincipal.DefinirStatusDeModificado(AContexto: TContexto); |
635 | 545 | begin |
636 | 546 | if AContexto = cId3v1 then |
@@ -685,19 +595,6 @@ | ||
685 | 595 | Result := (Pos('*',TFORMPrincipal(Owner).TASHID3v1.Caption) > 0) or (Pos('*',TFORMPrincipal(Owner).TASHID3v2.Caption) > 0); |
686 | 596 | end; |
687 | 597 | |
688 | -//procedure TDAMOPrincipal.ImagemAnterior; | |
689 | -//begin | |
690 | -// if (PNICAPIC.Items.Count = 0) or (PNICAPIC.Tag = 0) then | |
691 | -// Exit; | |
692 | -// | |
693 | -// // Salva no item da imagem suas informações | |
694 | -// CodificarInformacoesDaImagem(PNICAPIC.Tag,TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text,'image/png',TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex); | |
695 | -// | |
696 | -// PNICAPIC.Tag := PNICAPIC.Tag - 1; | |
697 | -// | |
698 | -// CarregarImagem(PNICAPIC.Tag); | |
699 | -//end; | |
700 | - | |
701 | 598 | procedure TDAMOPrincipal.LimparCamposDaAplicacao(ACamposALimpar: TContexto); |
702 | 599 | begin |
703 | 600 | with TFORMPrincipal(Owner) do |
@@ -727,9 +624,7 @@ | ||
727 | 624 | CMBXIdiomaDoComentario.ItemIndex := -1; |
728 | 625 | LAEDTipoDoComentario.Clear; |
729 | 626 | { Imagens } |
730 | - PNICAPIC.Items.Clear; | |
731 | - PNICAPIC.Tag := -1; | |
732 | - IMAGAPIC.Picture := nil; | |
627 | + PNICAPIC.Limpar; | |
733 | 628 | LAEDDescricaoDaImagem.Text := ''; |
734 | 629 | CMBXTipoDaImagem.ItemIndex := 0; |
735 | 630 | ACTNRemoverImagem.Enabled := False; |
@@ -795,8 +690,7 @@ | ||
795 | 690 | |
796 | 691 | procedure TDAMOPrincipal.ACTNImagemAnteriorExecute(Sender: TObject); |
797 | 692 | begin |
798 | - continue aqui | |
799 | - ImagemAnterior; | |
693 | + PNICAPIC.ImagemAnterior; | |
800 | 694 | end; |
801 | 695 | |
802 | 696 | procedure TDAMOPrincipal.ACTNMusicaAnteriorExecute(Sender: TObject); |
@@ -816,7 +710,7 @@ | ||
816 | 710 | |
817 | 711 | procedure TDAMOPrincipal.ACTNProximaImagemExecute(Sender: TObject); |
818 | 712 | begin |
819 | - ProximaImagem; | |
713 | + PNICAPIC.ProximaImagem; | |
820 | 714 | end; |
821 | 715 | |
822 | 716 | procedure TDAMOPrincipal.ACTNProximaMusicaExecute(Sender: TObject); |
@@ -868,7 +762,7 @@ | ||
868 | 762 | |
869 | 763 | procedure TDAMOPrincipal.ACTNSalvarImagemComoExecute(Sender: TObject); |
870 | 764 | begin |
871 | - SalvarImagemComo; | |
765 | + PNICAPIC.SalvarImagemComo(SPIDAPIC); | |
872 | 766 | end; |
873 | 767 | |
874 | 768 | procedure TDAMOPrincipal.ACTNSubstituirImagemExecute(Sender: TObject); |
@@ -883,12 +777,8 @@ | ||
883 | 777 | |
884 | 778 | procedure TDAMOPrincipal.AdicionarImagem; |
885 | 779 | begin |
886 | - if OPDIAPIC.Execute then | |
887 | - begin | |
888 | - PNICAPIC.Items.Add.PngImage.LoadFromFile(OPDIAPIC.FileName); | |
780 | + if PNICAPIC.AdicionarImagem(OPDIAPIC) then | |
889 | 781 | DefinirStatusDeModificado(cId3v2); |
890 | - ProximaImagem(True); | |
891 | - end; | |
892 | 782 | end; |
893 | 783 | |
894 | 784 | procedure TDAMOPrincipal.AdicionarTodasAsImagens; |
@@ -922,27 +812,6 @@ | ||
922 | 812 | end; |
923 | 813 | end; |
924 | 814 | |
925 | -//procedure TDAMOPrincipal.AtualizarBotoesDoNavegadorDeImagens; | |
926 | -//begin | |
927 | -// ACTNProximaImagem.Enabled := (PNICAPIC.Items.Count > 0) and (PNICAPIC.Tag < Pred(PNICAPIC.Items.Count)); | |
928 | -// ACTNImagemAnterior.Enabled := (PNICAPIC.Items.Count > 0) and (PNICAPIC.Tag > 0); | |
929 | -// ACTNSalvarImagemComo.Enabled := PNICAPIC.Items.Count > 0; | |
930 | -// ACTNRemoverImagem.Enabled := ACTNSalvarImagemComo.Enabled; | |
931 | -// ACTNSubstituirImagem.Enabled := ACTNSalvarImagemComo.Enabled; | |
932 | -// TFORMPrincipal(Owner).LABEImagens.Caption := Succ(PNICAPIC.Tag).ToString + ' / ' + PNICAPIC.Items.Count.ToString; | |
933 | -// TFORMPrincipal(Owner).LABEImagensSombra.Caption := TFORMPrincipal(Owner).LABEImagens.Caption; | |
934 | -// | |
935 | -// TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Enabled := ACTNSalvarImagemComo.Enabled; | |
936 | -// TFORMPrincipal(Owner).CMBXTipoDaImagem.Enabled := ACTNSalvarImagemComo.Enabled; | |
937 | -// | |
938 | -// if PNICAPIC.Items.Count = 0 then | |
939 | -// begin | |
940 | -// TFORMPrincipal(Owner).IMAGAPIC.Picture := nil; | |
941 | -// TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text := ''; | |
942 | -// TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex := 0; | |
943 | -// end; | |
944 | -//end; | |
945 | - | |
946 | 815 | procedure TDAMOPrincipal.AtualizarBotoesDoReprodutor; |
947 | 816 | begin |
948 | 817 | ACTNPrimeiraMusica.Enabled := (FIndiceDoArquivoAtual > -1) and (FIndiceDoArquivoAtual > 0); |
@@ -949,7 +818,7 @@ | ||
949 | 818 | ACTNMusicaAnterior.Enabled := ACTNPrimeiraMusica.Enabled; |
950 | 819 | ACTNReproduzir.Enabled := (FIndiceDoArquivoAtual > -1) and not EstaReproduzindo; |
951 | 820 | ACTNPararReproducao.Enabled := (FIndiceDoArquivoAtual > -1) and EstaReproduzindo; |
952 | - ACTNProximaMusica.Enabled := (FIndiceDoArquivoAtual > -1) and (FIndiceDoArquivoAtual < Pred(FListaDeReproducao.Count)); | |
821 | + ACTNProximaMusica.Enabled := (FIndiceDoArquivoAtual > -1) and (FIndiceDoArquivoAtual < Pred(TFORMPrincipal(Owner).LIBOListaDeReproducao.Count)); | |
953 | 822 | ACTNUltimaMusica.Enabled := ACTNProximaMusica.Enabled; |
954 | 823 | end; |
955 | 824 |
@@ -958,7 +827,7 @@ | ||
958 | 827 | TFORMPrincipal(Owner).LABEPlaylist.Caption := '000 / 000'; |
959 | 828 | |
960 | 829 | if FIndiceDoArquivoAtual > -1 then |
961 | - TFORMPrincipal(Owner).LABEPlaylist.Caption := Format('%.3d / %.3d',[Succ(FIndiceDoArquivoAtual),FListaDeReproducao.Count]); | |
830 | + TFORMPrincipal(Owner).LABEPlaylist.Caption := Format('%.3d / %.3d',[Succ(FIndiceDoArquivoAtual),TFORMPrincipal(Owner).LIBOListaDeReproducao.Count]); | |
962 | 831 | end; |
963 | 832 | |
964 | 833 | procedure TDAMOPrincipal.AtualizarLetreiro; |
@@ -967,7 +836,7 @@ | ||
967 | 836 | Exit; |
968 | 837 | |
969 | 838 | TFORMPrincipal(Owner).PABOLetreiro.Canvas.Brush.Style := bsClear; |
970 | - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextOut(FPosicaoHorizontalDoLetreiro,FPosicaoVerticalDoLetreiro,FListaDeReproducao[FIndiceDoArquivoAtual]); | |
839 | + TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextOut(FPosicaoHorizontalDoLetreiro,FPosicaoVerticalDoLetreiro,ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual])); | |
971 | 840 | end; |
972 | 841 | |
973 | 842 | procedure TDAMOPrincipal.AtualizarTempoDecorrido(AZero: Boolean = False); |
@@ -990,7 +859,7 @@ | ||
990 | 859 | Result := BASS_ChannelBytes2Seconds(FManipuladorDoStream, BASS_ChannelGetPosition(FManipuladorDoStream,BASS_POS_BYTE)); |
991 | 860 | end; |
992 | 861 | |
993 | -procedure TDAMOPrincipal.TIMEMarqueeTimer(Sender: TObject); | |
862 | +procedure TDAMOPrincipal.TIMELetreiroTimer(Sender: TObject); | |
994 | 863 | begin |
995 | 864 | if FIndiceDoArquivoAtual = -1 then |
996 | 865 | Exit; |
@@ -81,6 +81,8 @@ | ||
81 | 81 | PNSBReverterID3v1: TPngSpeedButton; |
82 | 82 | TASHListaDeReproducao: TTabSheet; |
83 | 83 | SHAPLetreiro: TShape; |
84 | + LIBOListaDeReproducao: TListBox; | |
85 | + Panel1: TPanel; | |
84 | 86 | procedure PABOLetreiroPaint(Sender: TObject); |
85 | 87 | procedure IMAGID3v2Click(Sender: TObject); |
86 | 88 | procedure ID3v1Modificado(Sender: TObject); |