No vídeo de hoje, vamos demonstrar em como extrair as imagens contidas dentro de um RPO (Repositório de Objetos).
A dúvida de hoje, nos perguntaram, se seria possível extrair todas as imagens contidas dentro de um RPO, sendo possível assim analisar o nome dos arquivos.
Pensando nisso, montamos um exemplo, onde primeiro é usado a TFileDialog para perguntar em qual pasta deseja extrair. Em seguida é usado a função GetResArray buscando todos os arquivos com extensão png e por último é percorrido esses arquivos e extraído a imagem através da função Resource2File.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "Totvs.ch"
/*/{Protheus.doc} User Function zVid0072
Função para extrair as imagens do RPO para dentro de uma pasta
@author Atilio
@since 20/02/2023
@version 1.0
@type function
/*/
User Function zVid0072()
Local aArea := FWGetArea()
Local cTitulo := "Selecione a pasta para a extração de arquivos do RPO"
Local cDirIni := GetTempPath()
Local cTipArq := ""
Local lSalvar := .F.
Private cPasta := ""
//Abre a tela apra selecionar uma pasta
cPasta := tFileDialog(;
cTipArq,; // Filtragem de tipos de arquivos que serão selecionados
cTitulo,; // Título da Janela para seleção dos arquivos
,; // Compatibilidade
cDirIni,; // Diretório inicial da busca de arquivos
lSalvar,; // Se for .T., será uma Save Dialog, senão será Open Dialog
GETF_RETDIRECTORY; // Se não passar parâmetro, irá pegar apenas 1 arquivo; Se for informado GETF_MULTISELECT será possível pegar mais de 1 arquivo; Se for informado GETF_RETDIRECTORY será possível selecionar o diretório
)
//Se tem a pasta e ela existe
If ! Empty(cPasta) .And. ExistDir(cPasta)
//Se o último caractere não for uma barra, adiciona, ex.: "C:\pasta" -> "C:\pasta\"
cPasta := Alltrim(cPasta)
If Right(cPasta, 1) != "\"
cPasta += "\"
EndIf
//Aciona a extração de arquivos
Processa({|| fExtrai()}, 'Processando...')
EndIf
FWRestArea(aArea)
Return
Static Function fExtrai()
Local aArea := FWGetArea()
Local aArquivos := {}
Local cArqui := ""
Local nArqAtu := 0
Local nTotal := 0
//Busca todos os arquivos que sejam do tipo PNG
aArquivos := GetResArray("*.png")
//Define o tamanho da régua
nTotal := Len(aArquivos)
ProcRegua(nTotal)
//Percorre todos os arquivos
For nArqAtu := 1 To nTotal
//Incrementa a régua
IncProc("Extraindo arquivo " + cValToChar(nArqAtu) + " de " + cValToChar(nTotal) + "...")
//Pega o nome do arquivo atual
cArqui := aArquivos[nArqAtu]
//Extrai o arquivo dentro da pasta selecionada
Resource2File(cArqui, cPasta + cArqui)
Next
//Abre a pasta
ShellExecute("OPEN", "explorer.exe", cPasta, "C:\", 1)
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.