Olá pessoal…
Hoje vou mostrar uma dialog simples que desenvolvi que serve para mostrar um texto de log, e com opção de salvar.
Essa função desenvolvida, recebe até 4 parâmetros, sendo a Mensagem, o Título, o Tipo (se for 1 terá apenas o botão OK, se for 2 será Confirmar e Cancelar), e por último se será editável.
Abaixo um exemplo do tipo 1.
Abaixo um exemplo do tipo 2.
Abaixo o arquivo txt gerado.
Abaixo o código desenvolvido:
//Bibliotecas
#Include "Protheus.ch"
#Include "Rwmake.ch"
/*/{Protheus.doc} zMsgLog
Função que mostra uma mensagem de Log com a opção de salvar em txt
@type function
@author Atilio
@since 14/04/2017
@version 1.0
@param cMsg, character, Mensagem de Log
@param cTitulo, character, Título da Janela
@param nTipo, numérico, Tipo da Janela (1 = Ok; 2 = Confirmar e Cancelar)
@param lEdit, lógico, Define se o Log pode ser editado pelo usuário
@return lRetMens, Define se a janela foi confirmada
@example
u_zMsgLog("Daniel Teste 123", "Título", 1, .T.)
u_zMsgLog("Daniel Teste 123", "Título", 2, .F.)
/*/
User Function zMsgLog(cMsg, cTitulo, nTipo, lEdit)
Local lRetMens := .F.
Local oDlgMens
Local oBtnOk, cTxtConf := ""
Local oBtnCnc, cTxtCancel := ""
Local oBtnSlv
Local oFntTxt := TFont():New("Lucida Console",,-015,,.F.,,,,,.F.,.F.)
Local oMsg
Local nIni:=1
Local nFim:=50
Default cMsg := "..."
Default cTitulo := "zMsgLog"
Default nTipo := 1 // 1=Ok; 2= Confirmar e Cancelar
Default lEdit := .F.
//Definindo os textos dos botões
If(nTipo == 1)
cTxtConf:='&Ok'
Else
cTxtConf:='&Confirmar'
cTxtCancel:='C&ancelar'
EndIf
//Criando a janela centralizada com os botões
DEFINE MSDIALOG oDlgMens TITLE cTitulo FROM 000, 000 TO 300, 400 COLORS 0, 16777215 PIXEL
//Get com o Log
@ 002, 004 GET oMsg VAR cMsg OF oDlgMens MULTILINE SIZE 191, 121 FONT oFntTxt COLORS 0, 16777215 HSCROLL PIXEL
If !lEdit
oMsg:lReadOnly := .T.
EndIf
//Se for Tipo 1, cria somente o botão OK
If (nTipo==1)
@ 127, 144 BUTTON oBtnOk PROMPT cTxtConf SIZE 051, 019 ACTION (lRetMens:=.T., oDlgMens:End()) OF oDlgMens PIXEL
//Senão, cria os botões OK e Cancelar
ElseIf(nTipo==2)
@ 127, 144 BUTTON oBtnOk PROMPT cTxtConf SIZE 051, 009 ACTION (lRetMens:=.T., oDlgMens:End()) OF oDlgMens PIXEL
@ 137, 144 BUTTON oBtnCnc PROMPT cTxtCancel SIZE 051, 009 ACTION (lRetMens:=.F., oDlgMens:End()) OF oDlgMens PIXEL
EndIf
//Botão de Salvar em Txt
@ 127, 004 BUTTON oBtnSlv PROMPT "&Salvar em .txt" SIZE 051, 019 ACTION (fSalvArq(cMsg, cTitulo)) OF oDlgMens PIXEL
ACTIVATE MSDIALOG oDlgMens CENTERED
Return lRetMens
/*-----------------------------------------------*
| Função: fSalvArq |
| Descr.: Função para gerar um arquivo texto |
*-----------------------------------------------*/
Static Function fSalvArq(cMsg, cTitulo)
Local cFileNom :='\x_arq_'+dToS(Date())+StrTran(Time(),":")+".txt"
Local cQuebra := CRLF + "+=======================================================================+" + CRLF
Local lOk := .T.
Local cTexto := ""
//Pegando o caminho do arquivo
cFileNom := cGetFile( "Arquivo TXT *.txt | *.txt", "Arquivo .txt...",,'',.T., GETF_LOCALHARD)
//Se o nome não estiver em branco
If !Empty(cFileNom)
//Teste de existência do diretório
If ! ExistDir(SubStr(cFileNom,1,RAt('\',cFileNom)))
Alert("Diretório não existe:" + CRLF + SubStr(cFileNom, 1, RAt('\',cFileNom)) + "!")
Return
EndIf
//Montando a mensagem
cTexto := "Função - "+ FunName() + CRLF
cTexto += "Usuário - "+ cUserName + CRLF
cTexto += "Data - "+ dToC(dDataBase) + CRLF
cTexto += "Hora - "+ Time() + CRLF
cTexto += "Mensagem - "+ cTitulo + cQuebra + cMsg + cQuebra
//Testando se o arquivo já existe
If File(cFileNom)
lOk := MsgYesNo("Arquivo já existe, deseja substituir?", "Atenção")
EndIf
If lOk
MemoWrite(cFileNom, cTexto)
MsgInfo("Arquivo Gerado com Sucesso:"+CRLF+cFileNom,"Atenção")
EndIf
EndIf
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.



Boa tarde.
O codigo não compila poderia me ajudar?
Boa tarde.
Claro, qual é o erro?
bom dia. consegui resolver. obrigado pelo retorno.