Jump to content

Recommended Posts

Este tópico é para montarmos uma biblioteca básica para utilizarmos o AutoIt de uma forma mais comercial.

 

Todas as funções aqui apresentadas são de uso e acesso livre a qualquer pessoa para qualquer utilização que desejar, independente de cobrança ou não. Traduzindo, se quiser usar o que tiver aqui para fazer um sistema e cobrar por ele, fique a vontade. Nosso intuito é divulgar e difundir o conhecimento, mas por favor, mantenha os créditos!

 

As funções aqui presentes serão adequadas ao padrão internacional de formatação e documentação e portanto serão centralizadas, formatadas e liberadas na última versão disponível aqui neste post. Me comprometo a fazer este trabalho de ajustes e manter a biblioteca atualizada. Por favor, peço auxílio a todos na questão de padronização.

 

Outro detalhe é que as funções, na medida do possível, sejam completamente independentes, ou se necessário acompanhadas de todos os includes e/ou fontes que sejam necessários à sua execução.

 

A intenção é poder incorporar através de #include a Framework e poder utilizar qualquer função nela contida. Exemplo:

#include "Framework.au3"

OutPut(DT2EXT(_NowCalcDate()))

Observar que o #include tem ASPAS (") e não os tradicionais <>. Porque disso? Para procurar o arquivo Framework.au3 na MESMA pasta onde está o nosso script principal.

 

Se usarmos como

#include <Framework.au3>

Provavelmente vai dar errado porque o AutoIt procura o arquivo na pasta INCLUDE. Se quiser usar assim, lembre de copiar o arquivo para lá mas cuidado para não ficar com 2 cópias!

 

Uma boa dica para obter os parâmetros de cada função, é pressionar CTRL-J com o mouse em cima da função!

 

Versão 1.04 - padronizadas constantes de localização
corrigida função TRUNC com resultados 0 (zero)
Versão 1.03 colocado mais algumas validações de parâmetros

substituídos comandos _ArrayAdd para aumentar a eficiência

corrigido retorno de algumas funções (sempre setava @error)

incluído as funções StringDifference e Trunc

Versão 1.02 - corrigido cálculo da função PADC e incluído algumas funções para números

Versão 1.01 - integradas as funções de string

Versão 1.0

Funções até então:

 

Name ..........: OUTPUT
Description ...: Mostra mensagem usando ConsoleWrite ou MsgBox
Example .......: OUTPUT("Isto é uma mensagem")
Name ..........: DAY
Description ...: Dia do mês de uma data específica
Example .......: DAY(_NowCalcDate()) ; retorna o dia da data de hoje
Name ..........: DOW
Description ...: Dia da semana de uma data específica
Example .......: DOW(_NowCalcDate()) ; retorna o dia da semana de hoje
Name ..........: DOW2EXT
Description ...: Extenso do dia da semana
Example .......: DOWEXT(4) ; retorna "Quarta"
DOWEXT(4, 3) ; retorna "Qua"
DOWEXT(4, Default, Default, True) ; retorna "Quarta-feira"
DOWEXT(4, Default, False, True) ; retorna "quarta-feira"
Name ..........: EXT2DOW
Description ...: Dia da Semana de acordo com o extenso
Example .......: EXT2DOW("Quarta") ; retorna 4
EXT2DOW("Dom") ; retorna 1
EXT2DOW("Sexta-feira") ; retorna 6
Name ..........: MONTH
Description ...: Mês de uma data específica
Example .......: MONTH(_NowCalcDate()) ; retorna o mês da data de hoje
Name ..........: MONTH2EXT
Description ...: Mês por extenso
Example .......: MONTH2EXT(2) ; retorna Fevereiro
MONTH2EXT(8) ; retorna Agosto
Name ..........: EXT2MONTH
Description ...: Mês de acordo com o extenso
Example .......: EXT2MONTH("Março") ; retorna 3
EXT2MONTH("Set") ; retorna 9
Name ..........: YEAR
Description ...: Ano de uma data específica
Example .......: YEAR(_NowCalcDate()) ; retorna o ano da data de hoje
Name ..........: DT2EXP
Description ...: Expande a data para o formato dd/MMM/yyyy
Example .......: DT2EXP(_NowCalcDate()) ; retorna 12/Dez/2017
Name ..........: DT2EXT
Description ...: Extenso de uma data
Example .......: DT2EXT(_NowCalcDate()) ; retorna Terça, 12 de Dezembro de 2017
DT2EXT(_NowCalcDate(), False) ; retorna 12 de Dezembro de 2017
Name ..........: VIRA_DATA
Description ...: Inverte o formato de data de ddmmyyyy para yyymmdd ou vice-versa com ou sem separadores
Example .......: VIRA_DATA("25/06/2017") ; retorna 2017/06/25
Name ..........: SPACE
Description ...: Retorna string com uma quantidade determinada de espaços
Example .......: SPACE(30) ; retorna " "
Name ..........: LIMPA_ESPACO_DUPLO
Description ...: Elimina os espaços duplos dentro de uma string
Example .......: LIMPA_ESPACO_DUPLO(" Este é um exemplo ") ; retorna " Este é um exemplo "
Name ..........: LTRIM
Description ...: Elimina os espaços ANTES do texto, pode escolher qual caracter será limpo
Example .......: LTRIM(" Este é um exemplo ") ; retorna "Este é um exemplo "
Name ..........: RTRIM
Example .......: RTRIM(" Este é um exemplo ") ; retorna " Este é um exemplo"
Name ..........: ALLTRIM
Description ...: Elimina os espaços ANTES e DEPOIS do texto, pode escolher qual caracter será limpo
Example .......: ALLTRIM(" Este é um exemplo ") ; retorna "Este é um exemplo"
Name ..........: PADR
Description ...: Completa uma string com espaços NO FINAL até uma determinada quantidade
Example .......: PADR("ABCDE", 10) ; retorna "ABCDE "
PADR("ABCDE", 3) ; retorna "ABCDE"
Name ..........: PADL
Description ...: Completa uma string com espaços NO COMEÇO até uma determinada quantidade
Example .......: PADL("ABCDE", 10) ; retorna " ABCDE"
PADL("ABCDE", 3) ; retorna "ABCDE"
Name ..........: PADC
Description ...: Completa uma string com espaços NO COMEÇO e NO FINAL até uma determinada quantidade centralizando o texto dentro da string
Example .......: PADC("ABCDE", 11) ; retorna " ABCDE "
PADC("ABCDE", 3) ; retorna "ABCDE"
Name ..........: FATORIAL
Description ...: Fatorial de um número
Example .......: FATORIAL(5) ; retorna 120
Name ..........: STRZERO
Description ...: Completa com zeros à esquerda dos números
Example .......: STRZERO(123, 5) ; retorna "00123"
STRZERO(123, 7, 2) ; retorna "00123.00"
Name ..........: NUMBERFORMAT
Description ...: Formata um nro com separador de milhares e decimais
Example .......: NUMBERFORMAT(12345, 0) ; retorna "12.345"
NUMBERFORMAT(12345, 2) ; retorna "12.345,00"
NUMBERFORMAT(-12345, 0) ; retorna "-12.345"
NUMBERFORMAT(-12345, 2) ; retorna "-12.345,00"
NUMBERFORMAT(12345, 0, 15) ; retorna " 12.345"
NUMBERFORMAT(12345, 2, 15) ; retorna " 12.345,00"
NUMBERFORMAT(-12345, 0, 15, True) ; retorna " (12.345)"
NUMBERFORMAT(-12345, 2, 15, True) ; retorna " (12.345,00)"
Name ..........: MONEYFORMAT
Description ...: Formata um nro com separador de milhares e decimais e inclue o símbolo da moeda no começo, R$ para Brasil
Example .......: MONEYFORMAT(12345, 0) ; retorna "R$ 12.345"
MONEYFORMAT(12345, 2) ; retorna "R$ 12.345,00"
MONEYFORMAT(-12345, 0) ; retorna "R$ -12.345"
MONEYFORMAT(-12345, 2) ; retorna "R$ -12.345,00"
MONEYFORMAT(12345, 0, 15) ; retorna "R$ 12.345"
MONEYFORMAT(12345, 2, 15) ; retorna "R$ 12.345,00"
MONEYFORMAT(-12345, 0, 15, True) ; retorna "R$ (12.345)"
MONEYFORMAT(-12345, 2, 15, True) ; retorna "R$ (12.345,00)"

 

Name ..........: STRINGDIFFERENCE
Description ...: Mostra a diferença entre duas strings
Example .......: STRINGDIFFERENCE("abc", "abcde") ; return "de"
STRINGDIFFERENCE("123456", "246") ; return "135"
Name ..........: TRUNC
Description ...: Trunca números (corta o nro desprezando as decimais)
Example .......: TRUNC(1.238, 2) ; returns 1.23

 

Framework.au3

  • Like 1

Share this post


Link to post
Share on other sites
Para começar e como exemplo, seguem funções para extrair DIAS, MESES e ANOS de datas para poder convertê-las em datas por extenso!
Assim uma data estilo YYYY/MM/DD será escrita por extenso.
Exemplo: _DT2EXT(_NowCalcDate()), onde _NowCalcDate() seria a data de hoje (14/12/2017) retornará uma string "Quinta, 14 de Dezembro de 2017".
Ou _DT2EXT(_NowCalcDate(), False, 3), onde _NowCalcDate() seria a data de hoje (14/12/2017) retornará uma string "14 de Dez de 2017".
#include <Date.au3>
#include <File.au3>
#include <Array.au3>

; Constantes gerais para localização
Global Const $GnLCID = _WinAPI_GetUserDefaultLCID()
Global Const $GsSep_Data = _WinAPI_GetLocaleInfo($GnLCID, $LOCALE_SDATE)
Global Const $GsMoeda = _WinAPI_GetLocaleInfo($GnLCID, $LOCALE_SCURRENCY)
Global Const $GsSep_Decimal = _WinAPI_GetLocaleInfo($GnLCID, $LOCALE_SDECIMAL)
Global Const $GsSep_Milhar = _WinAPI_GetLocaleInfo($GnLCID, $LOCALE_STHOUSAND)

; #FUNCTION# ====================================================================================================================
; Name ..........: DAY
; Description ...: Dia do mês de uma data específica
; Syntax ........: DAY ($sData_Hora)
; Parameters ....: $sData_Hora - [String] data no formato ddmmyyyy ou yyyymmdd com ou sem separadores
; Return values .: Sucesso     - [Number] Nro contendo o dia
;                  Falha       - [Number] 0 e seta @error e @extended
; Author.........: Manimal (visite Fórum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: DAY(_NowCalcDate()) ; retorna o dia da data de hoje
; ===============================================================================================================================
Func DAY ($sData_Hora)
   Local $aTemp = StringRegExp($sData_Hora, "^(?:(?|(\d{2})\D\d{2}\D\d{4}|\d{4}\D\d{2}\D(\d{2})))(?: \d{2}:\d{2}:\d{2})?$", $STR_REGEXPARRAYMATCH) ; dd*mm*yyyy or yyyy*mm*dd opcional 99:99:99
   If @error Then
      $aTemp = StringRegExp($sData_Hora, "^(\d{2})\d{2}(\d{4})$", $STR_REGEXPARRAYMATCH) ; ddmmyyyy
      If @error Then Return SetError(@error, @extended, 0)
      If $aTemp[1] <= 1231 Then ; yyyymmdd
         $aTemp = StringRegExp($sData_Hora, "^\d{6}(\d{2})$", $STR_REGEXPARRAYMATCH)
         If @error Then Return SetError(@error, @extended, 0)
      EndIf
   EndIf
   Return SetError(0, 0, $aTemp[0])
EndFunc   ;==>DAY

; #FUNCTION# ====================================================================================================================
; Name ..........: DOW
; Description ...: Dia da semana de uma data específica
; Syntax ........: DOW ($sData_Hora)
; Parameters ....: $sData_Hora - [String] data no formato ddmmyyyy ou yyyymmdd com ou sem separadores
; Return values .: Sucesso     - [Number] Nro contendo dia da semana (1 = Dom, 2 = Seg, 3 = Ter, 4 = Qua, 5 = Qui, 6 = Sex, 7 = Sáb)
;                  Falha       - [Number] 0 e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: DOW(_NowCalcDate()) ; retorna o dia da semana de hoje
; ===============================================================================================================================
Func DOW ($sData_Hora)
   Local $nDow = _DateToDayOfWeek(YEAR($sData_Hora), MONTH($sData_Hora), DAY($sData_Hora))
   Return SetError(1, @error, $nDow)
EndFunc   ;==>DOW

; #FUNCTION# ====================================================================================================================
; Name ..........: DOW2EXT
; Description ...: Extenso do dia da semana
; Syntax ........: DOW2EXT ($nDow[, $nTamanho = 50[, $bCapital = True[, $bSufixo = False]]])
; Parameters ....: $nDow     - [Number] Nro contendo dia da semana (1 = Dom, 2 = Seg, 3 = Ter, 4 = Qua, 5 = Qui, 6 = Sex, 7 = Sáb)
;                  $nTamanho - [optional, Number]  Nro com tamanho do retorno. Default is 50.
;                  $bCapital - [optional, Boolean] Se deve capitalizar a primeira letra. Default is True.
;                  $bSufixo  - [optional, Boolean] Se deve elminar o sufixo "-feira". Default is False.
; Return values .: Sucesso   - [String] Dia por extenso
;                  Falha     - [String] "" (vazio) e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: DOWEXT(4)                         ; retorna "Quarta"
;                  DOWEXT(4, 3)                      ; retorna "Qua"
;                  DOWEXT(4, Default, Default, True) ; retorna "Quarta-feira"
;                  DOWEXT(4, Default, False, True)   ; retorna "quarta-feira"
; Remarks .......: Função internacionalizada, deve retornar o nome dia da semana na linguagem instalada padrão do Windows
; ===============================================================================================================================
Func DOW2EXT ($nDow, $nTamanho = 50, $bCapital = True, $bSufixo = False)
   If $nTamanho = Default Then $nTamanho = 50
   If $bCapital = Default Then $bCapital = True
   If $bSufixo = Default Then $bSufixo = False
   Local $sTexto = _DateDayOfWeek($nDow, $DMW_LOCALE_LONGNAME)
   If @error Then Return SetError(1, @error, "")
   If not $bSufixo Then $sTexto = StringRegExpReplace($sTexto, "-feira", "")
   If $bCapital Then $sTexto = StringUpper(StringLeft($sTexto, 1)) & StringTrimLeft($sTexto, 1)
   Return SetError(0, 0, StringLeft($sTexto, $nTamanho))
EndFunc   ;==>DOW2EXT

; #FUNCTION# ====================================================================================================================
; Name ..........: EXT2DOW
; Description ...: Dia da Semana de acordo com o extenso
; Syntax ........: EXT2DOW ($sExtenso)
; Parameters ....: $sExtenso - [String] Texto contendo o dia da semana
; Return values .: Sucesso   - [Number] Nro contendo dia da semana (1 = Dom, 2 = Seg, 3 = Ter, 4 = Qua, 5 = Qui, 6 = Sex, 7 = Sáb)
;                  Falha     - [Number] 0 e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: EXT2DOW ("Quarta")      ;  retorna 4
;                  EXT2DOW ("Dom")         ;  retorna 1
;                  EXT2DOW ("Sexta-feira") ;  retorna 6
; ===============================================================================================================================
Func EXT2DOW ($sExtenso)
   Local $aNomes[0]
   For $nDow = 1 to 7
      _ArrayAdd($aNomes, _DateDayOfWeek($nDow, $DMW_LOCALE_LONGNAME))
   Next
   $nDow = _ArraySearch($aNomes, $sExtenso, 0, 0, 0, 1) ; último parâmetro determina search parcial
   If @error Then Return SetError(1, @error, 0)
   Return SetError(0, 0, $nDow + 1)
EndFunc   ;==>EXT2DOW

; #FUNCTION# ====================================================================================================================
; Name ..........: MONTH
; Description ...: Mês de uma data específica
; Syntax ........: MONTH ($sData_Hora)
; Parameters ....: $sData_Hora - [String] data no formato ddmmyyyy ou yyyymmdd com ou sem separadores
; Return values .: Sucesso     - [Number] Nro contendo o mês
;                  Falha       - [Number] 0 e seta @error e @extended
; Author.........: Manimal (visite Fórum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: MONTH(_NowCalcDate()) ; retorna o mês da data de hoje
; ===============================================================================================================================
Func MONTH ($sData_Hora)
   Local $aTemp = StringRegExp($sData_Hora, "^(?:(?|\d{2}\D(\d{2})\D\d{4}|\d{4}\D(\d{2})\D(\d{2})))(?: \d{2}:\d{2}:\d{2})?$", $STR_REGEXPARRAYMATCH) ; dd*mm*yyyy or yyyy*mm*dd opcional 99:99:99
   If @error Then
      $aTemp = StringRegExp($sData_Hora, "^\d{2}(\d{2})(\d{4})$", $STR_REGEXPARRAYMATCH) ; ddmmyyyy
      If @error Then Return SetError(@error, @extended, 0)
      If $aTemp[1] <= 1231 Then ; yyyymmdd
         $aTemp = StringRegExp($sData_Hora, "^\d{4}(\d{2})\d{2}$", $STR_REGEXPARRAYMATCH)
         If @error Then Return SetError(@error, @extended, 0)
      EndIf
   EndIf
   Return SetError(0, 0, $aTemp[0])
EndFunc   ;==>MONTH

; #FUNCTION# ====================================================================================================================
; Name ..........: MONTH2EXT
; Description ...: Mês por extenso
; Syntax ........: MONTH2EXT ($nMes[, $nTamanho = 50[, $bCapital = True]])
; Parameters ....: $nMes     - [Number] Nro contendo o mês.
;                  $nTamanho - [optional, Number]  Nro com tamanho do retorno. Default is 50.
;                  $bCapital - [optional, Boolean] Se deve capitalizar a primeira letra. Default is True.
; Return values .: Sucesso   - [String] extenso
;                  Falha     - [String] "" (vazio) e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: MONTH2EXT (2) ; retorna Fevereiro
;                  MONTH2EXT (8) ; retorna Agosto
; Remarks .......: Função internacionalizada, deve retornar o nome do mês na linguagem instalada padrão do Windows
; ===============================================================================================================================
Func MONTH2EXT ($nMes, $nTamanho = 50, $bCapital = True)
   If $nTamanho = Default Then $nTamanho = 50
   If $bCapital = Default Then $bCapital = True
   Local $sTexto = _DateToMonth($nMes, $DMW_LOCALE_LONGNAME)
   If @error Then Return SetError(1, @error, "")
   If $bCapital Then $sTexto = StringUpper(StringLeft($sTexto, 1)) & StringTrimLeft($sTexto, 1)
   Return SetError(0, 0, StringLeft($sTexto, $nTamanho))
EndFunc   ;==>MONTH2EXT

; #FUNCTION# ====================================================================================================================
; Name ..........: EXT2MONTH
; Description ...: Mês de acordo com o extenso
; Syntax ........: EXT2MONTH ($sExtenso)
; Parameters ....: $sExtenso - [String] Texto contendo o nome do mês
; Return values .: Sucesso   - [Number] Nro contendo mês
;                  Falha     - [Number] 0 e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: EXT2MONTH ("Março") ;  retorna 3
;                  EXT2MONTH ("Set")   ;  retorna 9
; ===============================================================================================================================
Func EXT2MONTH ($sExtenso)
   Local $aNomes[0]
   For $nMes = 1 to 12
      _ArrayAdd($aNomes, _DateToMonth($nMes, $DMW_LOCALE_LONGNAME))
   Next
   $nMes = _ArraySearch($aNomes, $sExtenso, 0, 0, 0, 1) ; último parâmetro determina search parcial
   If @error Then Return SetError(1, @error, 0)
   Return SetError(0, 0, $nMes + 1)
EndFunc   ;==>EXT2MONTH

; #FUNCTION# ====================================================================================================================
; Name ..........: YEAR
; Description ...: Ano de uma data específica
; Syntax ........: YEAR ($sData_Hora)
; Parameters ....: $sData_Hora - [String] data no formato ddmmyyyy ou yyyymmdd com ou sem separadores
; Return values .: Sucesso     - [Number] Nro contendo o ano
;                  Falha       - [Number] 0 e seta @error e @extended
; Author.........: Manimal (visite Fórum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: YEAR(_NowCalcDate()) ; retorna o ano da data de hoje
; ===============================================================================================================================
Func YEAR ($sData_Hora)
   Local $aTemp = StringRegExp($sData_Hora, "^(?:(?|\d{2}\D\d{2}\D(\d{4})|(\d{4})\D\d{2}\D\d{2}))(?: \d{2}:\d{2}:\d{2})?$", $STR_REGEXPARRAYMATCH) ; dd*mm*yyyy or yyyy*mm*dd opcional 99:99:99
   If @error Then
      $aTemp = StringRegExp($sData_Hora, "^\d{4}(\d{4})$", $STR_REGEXPARRAYMATCH) ; ddmmyyyy
      If @error Then Return SetError(@error, @extended, 0)
      If $aTemp[0] <= 1231 Then ; yyyymmdd
         $aTemp = StringRegExp($sData_Hora, "^(\d{4})\d{4}$", $STR_REGEXPARRAYMATCH)
         If @error Then Return SetError(@error, @extended, 0)
      EndIf
   EndIf
   Return SetError(0, 0, $aTemp[0])
EndFunc   ;==>YEAR

; #FUNCTION# ====================================================================================================================
; Name ..........: DT2EXP
; Description ...: Expande a data para o formato dd/MMM/yyyy (usado em inputs)
; Syntax ........: DT2EXP ($sData_Hora[, $nTamanho = 3[, $bCapital = True]])
; Parameters ....: $sData_Hora - [String] data no formato ddmmyyyy ou yyyymmdd com ou sem separadores
;                  $nTamanho   - [optional, Number]  Nro com tamanho do retorno. Default is 50.
;                  $bCapital   - [optional, Boolean] Se deve capitalizar a primeira letra. Default is True.
; Return values .: Sucesso     - [String] data formatada
;                  Falha       - [String] "" (vazio) e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: DT2EXP(_NowCalcDate()) ; retorna 12/Dez/2017
; ===============================================================================================================================
Func DT2EXP ($sData_Hora, $nTamanho = 3, $bCapital = True)
   Local $sTexto = DAY($sData_Hora) & $GsSep_Data & MONTH2EXT(MONTH($sData_Hora), $nTamanho, $bCapital) & $GsSep_Data & YEAR($sData_Hora)
   If @error Then Return SetError(1, @error, "")
   Local $aTemp = StringRegExp($sData_Hora, " (\d{2}:\d{2}):\d{2}$", $STR_REGEXPARRAYMATCH)
   If not @error Then $sTexto &= " - " & $aTemp[0]
   Return SetError(0, 0, $sTexto)
EndFunc   ;==>DT2EXP

; #FUNCTION# ====================================================================================================================
; Name ..........: DT2EXT
; Description ...: Extenso de uma data
; Syntax ........: DT2EXT ($sData_Hora[, $nTamanho = 50[, $bCapital = True[, $bSufixo = False]]])
; Parameters ....: $sData_Hora - [String] data no formato ddmmyyyy ou yyyymmdd com ou sem separadores
;                  $bDow       - [optional, Boolean] Se deve incluir o dia da semana. Default is True.
;                  $nTamanho   - [optional, Number]  Nro com tamanho do retorno. Default is 50.
;                  $bCapital   - [optional, Boolean] Se deve capitalizar a primeira letra. Default is True.
;                  $bSufixo    - [optional, Boolean] Se deve elminar o sufixo "-feira". Default is False.
; Return values .: Sucesso     - [String] data por extenso
;                  Falha       - [String] "" (vazio) e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: DT2EXT(_NowCalcDate())        ; retorna Terça, 12 de Dezembro de 2017
;                  DT2EXT(_NowCalcDate(), False) ; retorna 12 de Dezembro de 2017
; ===============================================================================================================================
Func DT2EXT ($sData_Hora, $bDow = True, $nTamanho = 50, $bCapital = True, $bSufixo = False)
   Local $sTexto = StringRegExpReplace(DT2EXP($sData_Hora, $nTamanho, $bCapital), $GsSep_Data, " de ")
   If @error Then Return SetError(1, @error, "")
   If $bDow Then $sTexto = DOW2EXT(DOW($sData_Hora), $nTamanho, $bCapital, $bSufixo) & ", " & $sTexto
   Return SetError(0, 0, $sTexto)
EndFunc   ;==>DT2EXT

; #FUNCTION# ====================================================================================================================
; Name ..........: VIRA_DATA
; Description ...: Inverte o formato de data de ddmmyyyy para yyymmdd ou vice-versa com ou sem separadores
; Syntax ........: VIRA_DATA ($sData_Hora)
; Parameters ....: $sData_Hora - [String] data no formato ddmmyyyy ou yyyymmdd com ou sem separadores
; Return values .: Sucesso     - [String] data invertida
;                  Falha       - [String] "" e seta @error e @extended
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: VIRA_DATA("25/06/2017") ; retorna 2017/06/25
; Remarks .......: Só funciona com data. Se tiver hora junto dá erro e retorna "" (vazio)
; ===============================================================================================================================
Func VIRA_DATA ($sData_Hora)
   Local $aTemp = StringRegExp($sData_Hora, "(?|^(\d{2})(\D)(\d{2})(\D)(\d{4})$|^(\d{4})(\D)(\d{2})(\D)(\d{2})$)", $STR_REGEXPARRAYMATCH) ; dd*mm*yyyy or yyyy*mm*dd
   If not @error Then Return SetError(0, 0, $aTemp[4] & $aTemp[1] & $aTemp[2] & $aTemp[3] & $aTemp[0])
   $aTemp = StringRegExp($sData_Hora, "^(\d{2})(\d{2})(\d{4})$", $STR_REGEXPARRAYMATCH) ; ddmmyyyy
   If @error Then Return SetError(@error, @extended, "")
   If $aTemp[2] <= 1231 Then ; yyyymmdd
      $aTemp = StringRegExp($sData_Hora, "^(\d{4})(\d{2})(\d{2})$", $STR_REGEXPARRAYMATCH)
      If @error Then Return SetError(@error, @extended, "")
   EndIf
   Return SetError(0, 0, $aTemp[2] & $aTemp[1] & $aTemp[0])
EndFunc   ;==>VIRA_DATA

 

  • Like 1

Share this post


Link to post
Share on other sites

Dando sequencia à biblioteca, mais algumas funções, agora sobre strings!

 

As funções abaixo já estão integradas no Framewrok do primeiro post.

 

Vamos lá pessoa, auxiliem, contribuam, comentem pelo menos se gostaram ou não, se tem alguma dúvida, como funciona uma função e assim por diante...

; #FUNCTION# ====================================================================================================================
; Name ..........: SPACE
; Description ...: Retorna string com uma quantidade determinada de espaços
; Syntax ........: SPACE ($nTamanho)
; Parameters ....: $nTamanho - [Number] Quantidade de espaços
; Return values .: Sucesso   - [String] String de espaços
;                  Falha     - seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: SPACE(30)
; ===============================================================================================================================
Func SPACE ($nTamanho)
    Local $sTexto = _StringRepeat(" ", $nTamanho)
   Return SetError(1, @error, $sTexto)
EndFunc   ;==>SPACE

; #FUNCTION# ====================================================================================================================
; Name ..........: LIMPA_ESPACO_DUPLO
; Description ...: Elimina os espaços duplos dentro de uma string
; Syntax ........: LIMPA_ESPACO_DUPLO ($sTexto)
; Parameters ....: $sTexto - [String] Texto para ser limpo
; Return values .: Sucesso - [String] Texto com os espaços duplos removidos
;                  Falha   - seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: LIMPA_ESPACO_DUPLO("   Este   é um   exemplo   ") ; retorna " Este é um exemplo "
; Remarks .......: Elimina APENAS os espaços DUPLOS, TRIPLOS, etc. Se quiser limpar os espaços antes ou depois usar LTRIM, RTRIM ou ALLTRIM
; ===============================================================================================================================
Func LIMPA_ESPACO_DUPLO ($sTexto)
   $sTexto = StringStripWS($sTexto, $STR_STRIPSPACES)
   Return SetError(1, @error, $sTexto)
EndFunc   ;==>LIMPA_ESPACO_DUPLO

; #FUNCTION# ====================================================================================================================
; Name ..........: LTRIM
; Description ...: Elimina os espaços ANTES do texto, pode escolher qual caracter será limpo
; Syntax ........: LTRIM ($sTexto[, $sChar = " "])
; Parameters ....: $sTexto - [String] Texto a ser limpo
;                  $sChar  - [optional, String] Qual caracter que será limpo. Default is " ".
; Return values .: Sucesso - [String] Texto sem espaços no começo (à esquerda)
;                  Falha   - seta @error e @extended
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: LTRIM("   Este   é um   exemplo   ") ; retorna "Este   é um   exemplo   "
; ===============================================================================================================================
Func LTRIM ($sTexto, $sChar = " ")
    If $sChar = Default Then $sChar = " "
    If $sChar = " " Then Return SetError(0, 0, StringStripWS($sTexto, $STR_STRIPLEADING))
   $sTexto = StringRegExpReplace($sTexto, "^" & $sChar & "*", "")
   Return SetError(@error, @extended, $sTexto)
EndFunc   ;==>LTRIM

; #FUNCTION# ====================================================================================================================
; Name ..........: RTRIM
; Description ...: Elimina os espaços DEPOIS do texto, pode escolher qual caracter será limpo
; Syntax ........: RTRIM ($sTexto[, $sChar = " "])
; Parameters ....: $sTexto - [String] Texto a ser limpo
;                  $sChar  - [optional, String] Qual caracter que será limpo. Default is " ".
; Return values .: Sucesso - [String] Texto sem espaços no final (à direita)
;                  Falha   - seta @error e @extended
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: RTRIM("   Este   é um   exemplo   ") ; retorna "   Este   é um   exemplo"
; ===============================================================================================================================
Func RTRIM ($sTexto, $sChar = " ")
    If $sChar = Default Then $sChar = " "
    If $sChar = " " Then Return SetError(0, 0, StringStripWS($sTexto, $STR_STRIPTRAILING))
   $sTexto = StringRegExpReplace($sTexto, $sChar & "*$", "")
   Return SetError(@error, @extended, $sTexto)
EndFunc   ;==>RTRIM

; #FUNCTION# ====================================================================================================================
; Name ..........: ALLTRIM
; Description ...: Elimina os espaços ANTES e DEPOIS do texto, pode escolher qual caracter será limpo
; Syntax ........: ALLTRIM ($sTexto[, $sChar = " "])
; Parameters ....: $sTexto - [String] Texto a ser limpo
;                  $sChar  - [optional, String] Qual caracter que será limpo. Default is " ".
; Return values .: Sucesso - [String] Texto sem espaços no começo E final
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: ALLTRIM("   Este   é um   exemplo   ") ; retorna "Este   é um   exemplo"
; ===============================================================================================================================
Func ALLTRIM ($sTexto, $sChar = " ")
    If $sChar = Default Then $sChar = " "
    If $sChar = " " Then Return SetError(0, 0, StringStripWS($sTexto, $STR_STRIPLEADING + $STR_STRIPTRAILING))
    Return SetError(0, 0, LTRIM(RTRIM($sTexto, $sChar)))
EndFunc   ;==>ALLTRIM

; #FUNCTION# ====================================================================================================================
; Name ..........: PADR
; Description ...: Preenche uma string com espaços NO FINAL até uma determinada quantidade
; Syntax ........: PADR ($sTexto, $nTamanho[, $sCaracter = " "])
; Parameters ....: $sTexto    - [String] Texto a ser preenchido
;                  $nTamanho  - [Number] Tamanho total da string
;                  $sCaracter - [optional, String] Caracter a preencher. Default is " ".
; Return values .: Sucesso    - [String] Texto preenchido
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: PADR("ABCDE", 10) ; retorna "ABCDE     "
; Remarks .......: Tamanho pode encolher a string se for menor do que o tamanho original
; ===============================================================================================================================
Func PADR ($sTexto, $nTamanho, $sCaracter = " ")
    If $sCaracter = Default Then $sCaracter = " "
    Return SetError(0, 0, StringLeft($sTexto & _StringRepeat($sCaracter, $nTamanho), $nTamanho))
EndFunc   ;==>PADR

; #FUNCTION# ====================================================================================================================
; Name ..........: PADL
; Description ...: Preenche uma string com espaços NO COMEÇO até uma determinada quantidade
; Syntax ........: PADL ($sTexto, $nTamanho[, $sCaracter = " "])
; Parameters ....: $sTexto    - [String] Texto a ser preenchido
;                  $nTamanho  - [Number] Tamanho total da string
;                  $sCaracter - [optional, String] Caracter a preencher. Default is " ".
; Return values .: Sucesso    - [String] Texto preenchido
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: PADL("ABCDE", 10) ; retorna "     ABCDE"
; Remarks .......: Tamanho pode encolher a string se for menor do que o tamanho original
; ===============================================================================================================================
Func PADL ($sTexto, $nTamanho, $sCaracter = " ")
    If $sCaracter = Default Then $sCaracter = " "
    Return SetError(0, 0, StringRight(_StringRepeat($sCaracter, $nTamanho) & $sTexto, $nTamanho))
EndFunc   ;==>PADL

; #FUNCTION# ====================================================================================================================
; Name ..........: PADC
; Description ...: Preenche uma string com espaços NO COMEÇO e NO FINAL até uma determinada quantidade centralizando o texto dentro da string
; Syntax ........: PADR ($sTexto, $nTamanho[, $sCaracter = " "])
; Parameters ....: $sTexto    - [String] Texto a ser preenchido
;                  $nTamanho  - [Number] Tamanho total da string
;                  $sCaracter - [optional, String] Caracter a preencher. Default is " ".
; Return values .: Sucesso    - [String] Texto "centralizado"
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: PADR("ABCD", 10) ; retorna "   ABCD   "
; Remarks .......: Tamanho pode encolher a string se for menor do que o tamanho original
; ===============================================================================================================================
Func PADC ($sTexto, $nTamanho, $sCaracter = " ")
    If $sCaracter = Default Then $sCaracter = " "
   If StringLen($sTexto) >= $nTamanho Then Return SetError(0, 0, $sTexto)
   Local $Extra = Int(($nTamanho - StringLen($sTexto)) / 2)
    Return SetError(0, 0, StringLeft(_StringRepeat($sCaracter, $Extra) & $sTexto & _StringRepeat($sCaracter, $nTamanho), $nTamanho))
EndFunc   ;==>PADC

Acorda povo! :600866:

  • Like 1

Share this post


Link to post
Share on other sites

Por exemplo:

 

A função OUTPUT é uma função que utilizo sempre para escrever alguma mensagem ou debugar alguma variável, acompanhar o código, etc.

 

Quando em desenvolvimento e usando o F5 para rodar o script, a OUTPUT faz com que as mensagens sejam escritas usando o comando ConsoleWrite, mas quando o programa está compilado (.EXE), estas mesmas mensagens são escritas usando o MSGBOX. Assim não é necessário ficar trocando os comandos para teste ou debug.

 

Outro detalhe é o fato de usar a variável $GbDebug_Mode para identificar se está ou não em modo de desenvolvimento.

 

Esta variável facilita pois certas mensagens ou comandos só devem ser executados durante a fase de programação e volta e meia "esquecemos" de retirar as mesmas antes de compilar final, daí as mensagens de teste aparecem no produto final :mad2:

 

Usando a variável $GbDebug_Mode, ajuda bastante!

 

Exemplo:

For $nLoop = 1 to 10
   If $GbDebug_Mode Then OutPut("[" & $nLoop & "]")
   Sleep(100)
Next

Durante o F5, mostra a mensagem do nro do loop. Quando compilado, não mostra nada! :o

  • Like 1

Share this post


Link to post
Share on other sites

@Manimal,

 

Gostei do código, segue as boas práticas.

 

Se me permite sugerir, compartilhe o código no Github, acredito que fica mais fácil de administrar as versões e os builds de cada versão.

  • Like 1

Share this post


Link to post
Share on other sites

Olá Luigi.

 

Com certeza que usar o Github facilitaria as coisas, mas acho que sairia do escopo do fórum não?

 

Nem todos aqui tem acesso ou sabem (ou saberiam) usar o GitHub, só por isso...

  • Like 2

Share this post


Link to post
Share on other sites

@Manimal, sobre o uso do github, acredito que:

 

* é uma nova forma de compartilhar código (não sejamos "puristas" em achar que somente um fórum, no caso o nosso é a única forma de compartilhar código)

* uma hora talvez esse forum acabe, e com ele todo o conhecimento, e talvez o github esteja lá (até a Microsoft esta lá)

* sua ideia é ótima, e merece visibilidade universal, acho que um forum limita um pouco essa visibilidade, afinal de contas, quem quiser fazer o download e não dar feedback algum, vai fazer isso no forum, no github, em qualquer lugar... quem quiser acrescentar, vai fazer o que for preciso e irá somar

*quanto usar o github ser mais complicado, sim, parece, até eu tenho um pouco de dificuldade em entender o conceito de brunchs, mas as grandes ideias nas grandes empresas utilizam esta receita, temos que estudar e assimilar

* eu não sou fã de código compartilhado em mediafire ou aquelas paginas que fazem voce esperar 1 minuto e ficam te mostrando propaganda enquanto vc espera, da uma sensacao ruim

 

Mas, é apenas a minha forma de ver, independente do formato que vocé escolher, eu vou ajudar no que for possivel.

  • Like 3

Share this post


Link to post
Share on other sites

@Luigi.

 

Com certeza que não sou "purista", nem tem como ser atualmente... :lol:

 

Vou abrir um repositório no GitHub e depois deixo o link aqui. Obrigado pela sugestão.

 

@mutleey

 

Qualquer ajuda é bem-vinda, qualquer dúvida, comentário ou crítica construtiva ajuda no processo. Só que precisamos que mais pessoas façam parte...

 

@todos

 

Sendo assim, estou trabalhando em mais algumas funções de números e preciso que alguém se comprometa a desenvolver uma rotina de número por extenso.

 

Alguém se habilita? Não existe errado aqui galera... Só ideias e melhorias...

  • Like 1

Share this post


Link to post
Share on other sites

Ok, agora segue algumas funções de números:

; #FUNCTION# ====================================================================================================================
; Name ..........: FATORIAL
; Description ...: Fatorial de um número
; Syntax ........: FATORIAL ($nNumero)
; Parameters ....: $nNumero - [Number] Nro para calcular o fatorial
; Return values .: Sucesso  - [Number] Fatorial do nro
;                  Falha    - [Number] 0 e seta @error
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: FATORIAL(5) ; retorna 120
; ===============================================================================================================================
Func FATORIAL ($nNumero)
   If $nNumero <= 0 Then Return SetError(1, 0, 0)
   If $nNumero = 1 Then Return SetError(0, 0, 1)
   Return SetError(0, 0, $nNumero * FATORIAL($nNumero - 1))
EndFunc   ;==>FATORIAL

; #FUNCTION# ====================================================================================================================
; Name ..........: STRZERO
; Description ...: Completa com zeros à esquerda dos números
; Syntax ........: STRZERO ($nNumero, $nDigitos[, $nDecimais = 0])
; Parameters ....: $nNumero   - [Number] Nro a ser formatado
;                  $nDigitos  - [Number] Quantidade de dígitos
;                  $nDecimais - [optional,Number] Quantidade de decimais. Default is 0.
; Return values .: Sucesso    - [String] Nro formatado
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: STRZERO(123, 5)    ; retorna "00123"
;                  STRZERO(123, 7, 2) ; retorna "00123.00"
; Remarks .......: Quando informa as decimais o tamanho aumenta em 1 caracter por causa do ponto decimal
; ===============================================================================================================================
Func STRZERO ($nNumero, $nDigitos, $nDecimais = 0)
   If $nDecimais = Default Then $nDecimais = 0
   If $nDecimais > 0 Then $nDigitos += 1
   Return SetError(0, 0, StringFormat("%0" & $nDigitos & "." & $nDecimais & "f", $nNumero))
EndFunc   ;==>STRZERO

; #FUNCTION# ====================================================================================================================
; Name ..........: NUMBERFORMAT
; Description ...: Formata um nro com separador de milhares e decimais
; Syntax ........: NUMBERFORMAT($nNumero[, $nDecimais = 2[, $bContabil = False[, $sSep_Decimal = $GsSep_Decimal[, $sSep_Milhar = $GsSep_Milhar]]]])
; Parameters ....: $nNumero      - [Number] Nro a ser formatado
;                  $nDecimais    - [optional, Number] Quantidade de decimais. Default is 2.
;                  $nTamanho     - [optional, Number] Tamanho da formatação. Default is 0 = tamanho que der
;                  $bContabil    - [optional, Boolean] Se o valor NEGATIVO deve aparecer entre parentesis (padrão contábil)
;                  $sSep_Decimal - [optional, String] Separador de decimais. Default is "," para Brasil
;                  $sSep_Milhar  - [optional, String] Separador de milhar. Default is "." para Brasil
; Return values .: Sucesso       - [String] Nro formatado
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: NUMBERFORMAT(12345, 0)            ; retorna "12.345"
;                  NUMBERFORMAT(12345, 2)            ; retorna "12.345,00"
;                  NUMBERFORMAT(-12345, 0)           ; retorna "-12.345"
;                  NUMBERFORMAT(-12345, 2)           ; retorna "-12.345,00"
;                  NUMBERFORMAT(12345, 0, 15)        ; retorna "         12.345"
;                  NUMBERFORMAT(12345, 2, 15)        ; retorna "      12.345,00"
;                  NUMBERFORMAT(-12345, 0, 15, True) ; retorna "       (12.345)"
;                  NUMBERFORMAT(-12345, 2, 15, True) ; retorna "    (12.345,00)"
; Remarks .......: Se for informado um tamanho E não couber o nro, retorna o nro independente do tamanho
;                  NUMBERFORMAT(12345, 2, 5)         ; retorna "12.345,00"
; ===============================================================================================================================
Func NUMBERFORMAT($nNumero, $nDecimais = 2, $nTamanho = 0, $bContabil = False, $sSep_Decimal = $GsSep_Decimal, $sSep_Milhar = $GsSep_Milhar)
   If $nDecimais = Default Then $nDecimais = 2
   If $bContabil = Default Then $bContabil = False
   If $sSep_Decimal = Default Then $sSep_Decimal = $GsSep_Decimal
   If $sSep_Milhar = Default Then $sSep_Milhar = $GsSep_Milhar
   Local $sNumero = _WinAPI_GetNumberFormat($GnLCID, $nNumero, _WinAPI_CreateNumberFormatInfo($nDecimais, 0, 3, $sSep_Decimal, $sSep_Milhar, ($bContabil) ? 0 : 1))
   If $nTamanho > 0 and $nTamanho > StringLen($sNumero) Then $sNumero = PADL($sNumero, $nTamanho)
   Return SetError(0, 0, $sNumero)
EndFunc   ;==>NUMBERFORMAT

; #FUNCTION# ====================================================================================================================
; Name ..........: MONEYFORMAT
; Description ...: Formata um nro com separador de milhares e decimais e inclue o símbolo da moeda no começo, R$ para Brasil
; Syntax ........: MONEYFORMAT($nNumero[, $nDecimais = 2[, $bContabil = False[, $sSep_Decimal = $GsSep_Decimal[, $sSep_Milhar = $GsSep_Milhar]]]])
; Parameters ....: $nNumero      - [Number] Nro a ser formatado
;                  $nDecimais    - [optional, Number]  Quantidade de decimais. Default is 2.
;                  $nTamanho     - [optional, Number]  Tamanho da formatação. Default is 0 = tamanho que der
;                  $bContabil    - [optional, Boolean] Se o valor NEGATIVO deve aparecer entre parentesis (padrão contábil)
;                  $sSep_Decimal - [optional, String]  Separador de decimais. Default is "," para Brasil
;                  $sSep_Milhar  - [optional, String]  Separador de milhar. Default is "." para Brasil
; Return values .: Sucesso       - [String] Nro formatado
; Author ........: Manimal (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/)
; Example .......: MONEYFORMAT(12345, 0)            ; retorna "R$ 12.345"
;                  MONEYFORMAT(12345, 2)            ; retorna "R$ 12.345,00"
;                  MONEYFORMAT(-12345, 0)           ; retorna "R$ -12.345"
;                  MONEYFORMAT(-12345, 2)           ; retorna "R$ -12.345,00"
;                  MONEYFORMAT(12345, 0, 15)        ; retorna "R$       12.345"
;                  MONEYFORMAT(12345, 2, 15)        ; retorna "R$    12.345,00"
;                  MONEYFORMAT(-12345, 0, 15, True) ; retorna "R$     (12.345)"
;                  MONEYFORMAT(-12345, 2, 15, True) ; retorna "R$  (12.345,00)"
; Remarks .......: Se for informado um tamanho E não couber o nro mais o símbolo da moeda, retorna a moeda com o nro independente do tamanho
;                  MONEYFORMAT(12345, 2, 5)         ; retorna "R$ 12.345,00"
; ===============================================================================================================================
Func MONEYFORMAT($nNumero, $nDecimais = 2, $nTamanho = 0, $bContabil = False, $sSep_Decimal = $GsSep_Decimal, $sSep_Milhar = $GsSep_Milhar)
   Local $sNumero = NUMBERFORMAT($nNumero, $nDecimais, $nTamanho, $bContabil, $sSep_Decimal, $sSep_Milhar)
   If $nTamanho = 0 Then Return SetError(0, 0, $GsMoeda & " " & $sNumero)
   If not StringRegExp($sNumero, "^ {" & StringLen($GsMoeda) + 1 & "}") Then Return SetError(0, 1, $GsMoeda & " " & $sNumero)
   Return SetError(0, 0, StringRegExpReplace($sNumero, "^ {" & StringLen($GsMoeda) + 1 & "}(.+)$", $GsMoeda & " $1"))
EndFunc   ;==>MONEYFORMAT
  • Like 1

Share this post


Link to post
Share on other sites

@Luigi.

 

Boa! Minha função anterior era na mesma linha, usando Regex também.

 

Daí achei essa função interna do Windows que traz inclusive os separadores de milhar e de decimal de acordo com a linguagem do Windows. Achei mais interessante.

 

Mas muito bom. Show de bola!

  • Like 1

Share this post


Link to post
Share on other sites

Olá pessoal.

 

Seguindo com as atualizações (v1.03) e novas funções (StringDifference e Trunc).

 

StringDifference serve para mostrar a diferença entre 2 strings. O normal é usar os operadores = ou <> para saber se as strings são iguais ou não. Com esta, podemos ver também QUAL a diferença.

 

  • STRINGDIFFERENCE("abc", "abcde") ; return "de"
  • STRINGDIFFERENCE("123456", "246") ; return "135"
  • STRINGDIFFERENCE("Segunda-feira", "Segunda") ; return "-feira"

 

Trunc é uma função normal para trabalhar com números. Não tinha percebido que não existe naturalmente no AutoIt. Existem INT, ROUND, FLOOR e CEILING, todas com funções diferentes da TRUNC. Seguem as diferenças entre as demais citadas.

 

  • TRUNC(1.238, 2) ; return 1.23
  • INT(1.238) ; return 1
  • FLOOR(1.238) ; return 1
  • CEILING(1.238) ; return 2
  • ROUND(1.238, 2) ; return 1.24
  • ROUND(1.238, 1) ; return 1.2
  • ROUND(1.238, 0) ; return 1

Arquivo principal no 1o post atualizado.

  • Like 2

Share this post


Link to post
Share on other sites

Gostaria de saber quais funções podem ser adicionadas a essa biblioteca

Como trabalho em uma empresa multinacional e utilizamos muito Autoit aqui, desde 2008 se não me falha a memória, acabo que tendo que criar varias UDFs para atender a demandas específicas.

Caso a biblioteca for de uso geral para area comercial, gostaria de implementar algumas funções que utilizo ou ja utilizei em ambito corporativo. 

Exemplo: Extrair informações, gerenciar objetos do Active Directory em massa
Efetuar login na aplicação utilizando credenciais do Active Directory ou local
Instalar softwares de forma automatizada, utilizando interface própria ou em modo silent
Gerenciar infomações de banco de dados
Aplicar correções do Windows
Gerenciar informações do Registro
e etc.

  • Like 1

Share this post


Link to post
Share on other sites

Não sei se é útil, eu fiz essa função com base em um script no fórum internacional do autoit, claro mantém os créditos, ele mostra um tooltip grande eu uso para programas que permanecem no trymenu mas é necessário um feedback, no meu caso um programa para fazer backups de novels para eu poder ler no ônibus/trem, eu estava tendo alguns problemas, mas consegui resolver todos eles, a única coisa que falta é conseguir que a tooltip seja exibida exatamente no meio da tela como default, tentei fazer com que retornasse o tamanho do tooltip mas não consegui recupera-lo, fazendo um trick com o tamanho da fonte encontrei o problema com a conversão, também em _WinAPI_CreateFont é possível fixar o tamanho da fonte com base no width e ficou distorcido, ainda pretendo resolver esse problema mas por enquanto está muito bom

#include <GuiToolTip.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <FontConstants.au3>
#include <SendMessage.au3>
#include <WindowsConstants.au3>



#Region _OneBigToolTip()
#comments-start
; #FUNCTION# ====================================================================================================================
; Name ..........: _OneBigToolTip()
; Description ...: Cria um ToolTip de tamanhos variados
; Syntax ........: _OneBigToolTip($btt_MSG, $btt_Temp,$fSize=20,$BigTTFont='Tahoma',$BigTTposX= @DesktopWidth / 2, $BigTTposY= @DesktopHeight / 2,$BigTTiW=1,$BigTTTransf=0)
; Parameters ....: $btt_MSG  mensagem a ser exibida
;~                 $btt_Temp tempo da mensagem(False: exibirá a mensagem no tempo minimo de 100ms)
;~                 $fSize tamanho da fonte(False: exibirá a fonte com tamanho minimo de 10pt)
;~                 $BigTTFont fonte a ser usada, Courier, Courier New,Arial,Comic Sans MS, Verdana, Times New Roman mais em(https://www.autoitscript.com/autoit3/docs/appendix/fonts.htm)
;~                 $BigTTposX= posição horizontal(False: exibirá a partir do centro da tela na horizontal)
;~                 $BigTTposY= posição vertical(False: exibirá a partir do centro da tela na vertical)
;~                 $BigTTiW força do riscado da fonte(numeros não válidos não mostrarão efeitos), 0=normal 1=fino 2=negrito
;~                 $BigTTTransf: Transformação da fonte 0= itálico 1= Subilinhado 2=Riscado 3=Itálico+Subilinhado, 4=Itálico+Riscado,5=Subilinhado+Riscado,6=Itálico+Riscado+Subilinhado
; Return values .: Sucesso    - mensagem sendo exibida
; Author ........: BrewManNH,marsfann,blisszero (visite Forum AutoIT Brasil - http://forum.autoitbrasil.com/), https://www.autoitscript.com/forum/topic/179865-how-to-change-tooitip-font-size/
; Example .......: _OneBigToolTip('Mostrando um tooltip grande',2500,50,'Comic Sans MS')
; Remarks .......: ainda não é funcinal em scripts com algumas guis
#comments-end
Func _OneBigToolTip($btt_MSG, $btt_Temp=100,$fSize=20,$BigTTFont='Tahoma',$BigTTposX= @DesktopWidth / 2, $BigTTposY= @DesktopHeight / 2,$BigTTiW=1,$BigTTTransf=0,$BigTTBallon=0)
If $BigTTposX= False Then $BigTTposX= @DesktopWidth / 2
If $BigTTposY= False Then $BigTTposY= @DesktopHeight / 2
If $btt_Temp < 100 Then $btt_Temp = 100
If $fSize < 10 Then $fSize = 10
If $BigTTTransf > 6 Then
   $BigTTTransf = 0
ElseIf $BigTTTransf < 0 Then
   $BigTTTransf = 0
EndIf


;~ determina que tipo de tooltip será exibido
Switch $BigTTBallon
   Case 0
      $BigTTBallon = '0x01' ;sempre acima das janelas padrão
   Case 1
      $BigTTBallon = '0x40' ;Balão
   Case 2
      $BigTTBallon = '0x80' ;'X' para fechar
EndSwitch

;~ cria o tooltip
Local $hToolTip = _GUIToolTip_Create(0,$TTS_CLOSE), $hDC = _WinAPI_GetDC(0)
_GUIToolTip_SetMaxTipWidth($hToolTip, @DesktopWidth - $BigTTposX)
WinSetOnTop ($hToolTip, "", $WINDOWS_ONTOP)

;~ cria a fonte a ser executada no tolltip
Switch $BigTTiW
   Case 2
      $BigTTiWeight = 800
   Case 1
      $BigTTiWeight = 100
   Case Else
      $BigTTiWeight = 500
EndSwitch

;~ configura a saida da transformação da fonte
Switch $BigTTTransf
   Case 0
      Local $hTransf_i = True, $hTransf_u = False, $hTransf_s = False
   Case 1
      Local $hTransf_i = False, $hTransf_u = True, $hTransf_s = False
   Case 2
      Local $hTransf_i = False, $hTransf_u = True, $hTransf_s = False
   Case 3
      Local $hTransf_i = True, $hTransf_u = True, $hTransf_s = False
   Case 4
      Local $hTransf_i = True,  $hTransf_u = False, $hTransf_s = True
   Case 5
      Local $hTransf_i = False, $hTransf_u = True, $hTransf_s = True
   Case 6
      Local $hTransf_i = True, $hTransf_u = True, $hTransf_s = True
  Case Else
      Local $hTransf_i = False, $hTransf_u = False, $hTransf_s = False
   EndSwitch

;~ formata a fonte
Local $hFont = _WinAPI_CreateFont($fSize, 0, 0, 0, $BigTTiWeight, $hTransf_i, $hTransf_u, $hTransf_s, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, $BigTTFont)

;~ adiciona a fonte ao tooltip
Local $hOldFont = _WinAPI_SelectObject($hDC, $hFont)
_SendMessage($hToolTip, $WM_SETFONT, $hFont, True)

;~ prioriza a exibição da fonte
_GUIToolTip_AddTool($hToolTip, 0, $btt_MSG, 0, 0, 0, 0, 0, BitOR($TTF_TRACK, $TTF_ABSOLUTE))

;~ determina a posição do tooltip
_GUIToolTip_TrackPosition($hToolTip, $BigTTposX - $BTTWRetreat, $BigTTposY)

;~ verifica atividade
_GUIToolTip_TrackActivate($hToolTip, True, 0, 0)

;~ tempo de exibição
Sleep($btt_Temp)

;~ apaga o ToolTip
_GUIToolTip_Destroy($hToolTip)

EndFunc

#EndRegion

alguns exemplos

Spoiler
#include <_OneBigTooTip.au3>


        $pedra = 'No meio do caminho tinha uma pedra'& @CRLF & _
        'Tinha uma pedra no meio do caminho'& @CRLF & _
        'Tinha uma pedra'& @CRLF & _
        'No meio do caminho tinha uma pedra'& @CRLF & _
        'Nunca me esquecerei desse acontecimento'& @CRLF & _
        'Na vida de minhas retinas tão fatigadas'& @CRLF & _
        'Nunca me esquecerei que no meio do caminho'& @CRLF & _
        'Tinha uma pedra'& @CRLF & _
        'Tinha uma pedra no meio do caminho'& @CRLF & _
        'No meio do caminho tinha uma pedra'
            ;exibindo um texto grande com quebras de linhas elas são feitas automaticas quando chega ao limite da tela mas tambem podem ser feitas usando @CRLF
        _OneBigToolTip($pedra,2500, 40,'Times New Roman',250,False,3,10)
            For $g = 0 To 20
        _OneBigToolTip('Visite Forum AutoIT Brasil',250, 40,'Times New Roman',False,False,3,10)
        Next
            ;~ no tempo já que true é um valor bolean de 1 então a função entenderá como 1ms, eu remarquei para que o tempo minimo seja 100ms,o mesmo para false=0
        _OneBigToolTip('Um teste do big tooltip',True, 40,'Times New Roman',True,True,3,10)
            ;~ valores acima de 6 e abaixo de um no efeito na fonte serão interpretados como 0(sem efeito
        _OneBigToolTip('Um teste do big tooltip',2000, 40,'Times New Roman',True,True,3,-1)

 

Spoiler

 

#include <MsgBoxConstants.au3>
        #include <_OneBigTooTip.au3>
            ; Press Esc to terminate script, Pause/Break to "pause"
            Global $g_bPaused = False
            HotKeySet("{PAUSE}", "HotKeyPressed")
        HotKeySet("{ESC}", "HotKeyPressed")
        HotKeySet("^d", "HotKeyPressed") ; ctrl+d
            While 1
            Sleep(100)
        WEnd
            Func HotKeyPressed()
            Switch @HotKeyPressed ; The last hotkey pressed.
                Case "{PAUSE}" ; String is the {PAUSE} hotkey.
                    $g_bPaused = Not $g_bPaused
                    While $g_bPaused
                    _OneBigToolTip('Pausado.',250,50,'Comic Sans MS')
                    _OneBigToolTip('Pausado..',250,50,'Comic Sans MS')
                    _OneBigToolTip('Pausado...',250,50,'Comic Sans MS')
                    WEnd
                    Case "{ESC}" ; String is the {ESC} hotkey.
                   _OneBigToolTip('Saindo do Script',2500,50,'Comic Sans MS')
                    Exit
                    Case "^d" ; String is the ctrl+d hotkey.
                    _OneBigToolTip('Exibindo mensagem da função Shift+alt+D',2500,50,'Comic Sans MS')
            EndSwitch
         EndFunc   ;==>HotKeyPressed

 

Spoiler

 

#include <GuiToolTip.au3>
        #include <WinAPI.au3>
        #include <GUIConstantsEx.au3>
        #include <FontConstants.au3>
        #include <SendMessage.au3>
        #include <WindowsConstants.au3>             
            #include <_OneBigTooTip.au3>                
            Global $gPos1 = Random(100,1000), $gPos2 = Random(100,1000)
        #Region ### START Koda GUI section ### Form=
        $Form1 = GUICreate("Text Tooltip", 451, 216,$gPos1, $gPos2)
        $Group1 = GUICtrlCreateGroup("Group1", 24, 16, 273, 185)
        $Label1 = GUICtrlCreateLabel("Label1", 32, 32, 36, 17)
        GUICtrlCreateGroup("", -99, -99, 1, 1)
        $Button1 = GUICtrlCreateButton("Centro", 304, 24, 137, 49, $WS_GROUP)
        $Button2 = GUICtrlCreateButton("Botão", 304, 80, 137, 49, $WS_GROUP)
        $Button3 = GUICtrlCreateButton("Button3", 304, 136, 137, 65, $WS_GROUP)
        GUISetState(@SW_SHOW)
        #EndRegion ### END Koda GUI section ###             
            While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
        Case $Button1
           _OneBigToolTip('Mostrando um tooltip ao pressionar o primeiro botão a partir do centro da tela',2500,20,'Courier')
        Case $Button2
           $posJanela = WinGetPos ( "Text Tooltip" , "" )
           $pos0 = $posJanela[0] + 3
           $pos1 = $posJanela[1] + 246
           _OneBigToolTip('Mostrando um tooltip'  & @CRLF & ' em abaixo da gui',2500,60,'Times New Roman',$pos0,$pos1)
        Case $Button3
           $posJanela = WinGetPos ( "Text Tooltip" , "" )
           $pos0 = $posJanela[0] + 304
           $pos1 = $posJanela[1] + 136
           ConsoleWrite($pos0 & " - " & $pos1 & " ")
           _OneBigToolTip('Mostrando um tooltip em cima do botão',2500,50,'Comic Sans MS',$pos0,$pos1)             
            Case $GUI_EVENT_CLOSE
        Exit                
            EndSwitch
        WEnd

 

 

 

 

 




 

 

Edited by blisszero
ao tentar reparar o problema com a gui fiz alguns aprimoramentos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×