Navegando em pastas com as funções cGetFile e TFileDialog – Maratona AdvPL e TL++ 077

Nesse vídeo demonstraremos em como fazer a navegação em pastas (para escolha de arquivos) com as funções cGetFile e TFileDialog.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe077
Exemplo de telas para selecionar arquivos
@type Function
@author Atilio
@since 08/12/2022
@see https://tdn.totvs.com/display/tec/cGetFile e https://tdn.totvs.com/display/tec/tFileDialog
@obs 
    Função cGetFile
    Parâmetros
        + cMascara     , Caractere      , Máscara de arquivos
        + cTitulo      , Caractere      , Título da janela
        + nMascPadrao  , Numérico       , Indica o número da máscara
        + cDirInicial  , Caractere      , Pasta inicial
        + lSalvar      , Lógico         , Se .T. será usado um botão Salvar se não será usado o botão Abrir
        + nOpcoes      , Numérico       , Opções da janela ( GETF_MULTISELECT ; GETF_NOCHANGEDIR ; GETF_LOCALFLOPPY ; GETF_LOCALHARD ; GETF_NETWORKDRIVE ; GETF_SHAREWARE ; GETF_RETDIRECTORY ; GETF_HIDDENDIR ; GETF_SYSDIR ; )
        + lArvore      , Lógico         , Se .T. irá exibir pasta da Protheus Data senão só da máquina local
        + lKeepCase    , Lógico         , Se .T. mantém o nome original senão retorna o nome tudo minúsculo
    Retorno
        + cRet         , Caractere      , Retorna o nome do arquivo selecionado


    Função TFileDialog
    Parâmetros
        + cMascara     , Caractere      , Máscara de arquivos
        + cTitulo      , Caractere      , Título da janela
        + nParam3      , Numérico       , Compatibilidade (não utilizado)
        + cDirInicial  , Caractere      , Pasta inicial
        + lSalvar      , Lógico         , Se .T. será usado um botão Salvar se não será usado o botão Abrir
        + nOpcoes      , Numérico       , Opções da janela (se não passar nada será apenas um arquivo; se usar GETF_MULTISELECT será múltiplos arquivos; se usar GETF_RETDIRECTORY será usado pastas)
    Retorno
        + cRet         , Caractere      , Retorna o nome do(s) arquivo(s) selecionado(s) ou da pasta selecionada conforme nOpcoes

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe077()
    Local aArea     := FWGetArea()
    Local cDirIni   := GetTempPath()
    Local cTipArq   := ""
    Local cTitulo   := ""
    Local lSalvar   := .F.
    Local cArqSel   := ""
    Local cPasta    := ""

    //cGetFile - Seleção de arquivo txt / xml podendo alterar pasta (local e servidor)
    cArqSel := cGetFile( 'Arquivo TXT|*.txt| Arquivo XML|*.xml',; //[ cMascara], 
                         'Selecao de Arquivos',;                  //[ cTitulo], 
                         0,;                                      //[ nMascpadrao], 
                         'C:\TOTVS\',;                            //[ cDirinicial], 
                         .F.,;                                    //[ lSalvar], 
                         GETF_LOCALHARD  + GETF_NETWORKDRIVE,;    //[ nOpcoes], 
                         .T.)                                     //[ lArvore] 
    
    If ! Empty(cArqSel)
        FWAlertInfo("O arquivo escolhido é "+cArqSel, "Teste 1 - cGetFile")
    EndIf




    //cGetFile - Seleção de arquivo txt sem opção de alterar pasta
    cArqSel := cGetFile( 'Selecione um Arquivo (*.*)|*.*',;                            //[ cMascara], 
                         'Selecao de Arquivos',;                                       //[ cTitulo], 
                         0,;                                                           //[ nMascpadrao], 
                         'C:\TOTVS\',;                                                 //[ cDirinicial], 
                         .F.,;                                                         //[ lSalvar], 
                         GETF_LOCALHARD  + GETF_NETWORKDRIVE + GETF_NOCHANGEDIR,;      //[ nOpcoes], 
                         .F.)                                                          //[ lArvore]

    If ! Empty(cArqSel)
        FWAlertInfo("Arquivos escolhido: "+cArqSel, "Teste 2 - cGetFile")
    EndIf




    //TFileDialog - Selecionando apenas 1 arquivo
    cTipArq := "Todas extensões (*.*) | Arquivos texto (*.txt) | Arquivos com separações (*.csv)"
    cTitulo := "Seleção de Arquivos para Processamento"
    cArqSel := 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
        ;          // 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
    )

    If ! Empty(cArqSel)
        FWAlertInfo("O arquivo selecionado foi: " + cArqSel, "Teste 1 - TFileDialog")
    EndIf




    //TFileDialog - Selecionando mais de 1 arquivo
    cTipArq := "Todas extensões (*.*) | Arquivos imagem (*.png) | Arquivos imagem (*.jpg)"
    cTitulo := "Seleção de Múltiplos Arquivos para Processamento"
    cArqSel := 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_MULTISELECT;          // 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
    )

    If ! Empty(cArqSel)
        FWAlertInfo("Arquivo(s) selecionado(s): " + cArqSel, "Teste 2 - TFileDialog")
    EndIf




    //TFileDialog - Selecionando uma pasta
    cTipArq := ""
    cTitulo := "Seleção de Pasta para Salvar arquivo"
    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
    )

    If ! Empty(cPasta)
        FWAlertInfo("Pasta Selecionada: " + cPasta, "Teste 3 - TFileDialog")
    EndIf

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação