{{:bk_cab_rh3software.png?200|}}
\\
**Workflow Studio \ Fluxo**
\\
=======Linguagem de Script=======
----
###
Scripts são usados em blocos SCRIPT na definição do fluxo. São uma forma muito poderosa e flexível de estender as funções básicas do diagrama de fluxo e permitem a criação de processos de negócio integrados.
###
É possível fazer diversas atividades através de scripts, entre outras:
* Ler dados da definição do fluxo;
* Ler/alterar variáveis do fluxo;
* Ler/gravar dados num banco de dados;
* Acessar webservices;
* Criar/alterar arquivos no sistema de diretórios;
* Enviar emails.
###
A sintaxe padrão do script é Pascal. Todo o código inserido no bloco SCRIPT é interpretado e compilado em tempo de execução ao instanciar o fluxo.
###
###
**Atenção:** Não utilize funções que executem mensagens para o usuário (//message dialogs// ou //input windows//, por exemplo). São exemplos de funções que aguardam alguma entrada do usuário e como o fluxo é executado como um serviço este tipo de função irá parar a execução do fluxo.
###
======Resultado do script======
----
###
Todo script, ao ter sua execução finalizada, pode retornar um **resultado** ao fluxo. Este resultado pode ser utilizado para indicar se o código foi executado com sucesso ou até mesmo para direcionar o fluxo.
###
O resultado é definido através da variável //result//.
Por exemplo, para definir o resultado do script como 'sim', deve-se executar:
result := 'sim';
###
Desta forma o script irá retornar o valor 'sim' ao final da execução e seguir pela transição marcada como 'sim'.
###
###
Não é obrigatório que todo script retorne um valor, como em casos de algoritmos muito simples que não requeiram nenhum tratamento especial.
###
###
Dica: Em casos de script complexos (que envolvam manipulações de dados ou webservices) sempre usar pelo menos 2 valores para retorno de script. Um para indicar se o código foi executado com sucesso, e outro para indicar se houve falha e redirecionar o fluxo com algum tratamento de erro apropriado.
###
======Linguagem de programação Pascal======
----
{{:manual_usuario:studio:fluxo:designer:apostilapascal.pdf | Clique aqui}} para visualizar a apostila com os conceitos básicos de programação e linguagem Pascal.
======Principais comandos======
----
=====Try ... Finally ... End=====
----
###
Este bloco é usado quando, ao final da execução dos comandos que estiverem entre o "Try ... Finally", havendo ou não erros que não permitam a continuação da execução de todo o bloco, o sistema irá executar o que estiver entre "Finally ... End".
###
###
**Nota:** Este bloco é obrigatório para a criação de objetos, pois deve certificar-se que o mesmo seja liberado da memória em sua conclusão.
###
//Exemplo//
var
casa1, casa2: Tcasa;
begin
try
casa1 := TCasa.create;
casa2 := nil;
if then
begin
casa2 := TCasa.create;
end;
finally
casa1.free;
if casa2 <> nil then
casa2.free;
end;
end.
=====Try ... Except ... End=====
----
O comando "try...Except...End" serve para tratar erros possíveis e previstos.
###
Os comandos entre o Try e o Except serão executados se não contiverem erros, caso contrário, o que estiver depois do Except será executado.
###
//Exemplo:// Tratar a possibilidade da variável "x" ser ZERO.
var Resultado : integer;
try
Resultado := 10 div x;
except
Resultado := 0;
end;
=====If ... Then ... Else=====
----
###
O comando "If ... Then ... Else" especifica a condicional sobre a qual uma declaração será executado.
###
//Sintaxe//
If then else ;
//Exemplo//
var
idade:integer;
begin
idade := pIdade;
If (idade < 1) or (idade > 120) then
sMensagem := 'Você não está dizendo a verdade.'
Else
sMensagem := 'Ok!';
end;
=====Case ... of =====
----
###
O procedimento Case é usado para ramificar um código dependendo do resultado ou valor encontrado neste código.
###
//Sintaxe//
Case of
else
//Exemplo//
var
tecla: char;
begin
tecla := pTexto;
Case tecla of
'A': sMensagem := 'Você digitou uma letra';
'0': sMensagem := 'Você digitou um número';
else
sMensagem := 'Você digitou um caracter especial';
end;
end;
=====Repeat ... Until=====
----
###
Os procedimentos entre Repeat e until são executados na seqüência enquanto uma condição seja satisfeita.
###
//Sintaxe//
Repeat
Until ;
//Exemplo//
var
a, b : integer;
begin
b := 1;
Repeat
a := a + b;
sMensagem := IntToStr(a) + IntToStr(b);
Until a = 1000;
end;
=====While .. Do=====
----
A declaração While controla a execução repetida de uma declaração simples ou composta.
//Sintaxe//
While do .
//Exemplo//
var
a, b : integer;
begin
b := 1;
While a < 1001 Do
begin
a := a + b;
sMensagem := IntToStr(a) + IntToStr(b);
end;
end;
=====For .. Do=====
----
###
O bloco "For ... Do" é uma declaração que será executada até que a variável de controle seja satisfeita.
###
//Sintaxe//
For := To ou Downto Do .
//Exemplo//
var
cont, x : integer;
begin
For cont := 1 To 100 Do
begin
x := x + cont;
sMensagem := IntToStr(x);
end;
end;
=====Goto / Label=====
----
###
A instrução Goto permite que você salte de onde está no momento para um linha rotulada específica. Um rótulo é definido usando-se a palavra label.
###
//Sintaxe//
Goto ;
Label ;
//Exemplo//
FIXME COMANDO "GOTO" NÃO ENCONTRADO
var
resp : char;
a, b : integer
begin
b := 1;
Label inicio:
a := a + b;
sMensagem1 := IntToStr(a);
sMensagem2 := 'Deseja somar mais um';
resp := sResp;
If (resp = 'S' or 's' or 'Y' or 'y') then Goto inicio;
end;
=====Efetuando uma conexão ADO=====
----
###
Abaixo segue o exemplo de como efetuar uma conexão ADO para acessar uma base de dados Oracle:
###
FIXME "TADOConnection" NÃO ENCONTRADO
var
conexao: TADOConnection;
begin
try
conexao := TADOConnection.create(nil);
conexao.connectionString := 'Provider=OraOLEDB.Oracle.1;Password=wfs_douglas;User ID=wfs_douglas;Data Source=wfs;';
conexao.loginprompt := false;
conexao.connected := true;
finally
conexao.free;
end;
end;
* **conexao:** Variável que guardará a conexão e que deverá ser usada para configurar os componentes de acesso a banco de dados(TADOQueryEx);
* **connectionString:** Propriedade da variável de conexão responsável por configurar o exato acesso a um usuário de banco de dados;
* //Password//: Senha do usuário de banco de dados;
* //ID//: Login do usuário de banco de dados;
* //wfs//: Alias que informa qual o banco de dados a ser usado.
* **loginprompt:** Fica definido como "false" para que não seja exibida uma tela de confirmação para o usuário sempre que a conexão for efetuada;
* **connected:** Passando o valor "True" efetua a conexão. "False" finaliza uma conexão aberta.
=====Consulta ao banco de dados=====
----
Abaixo segue o exemplo de como efetuar uma consulta de banco de dados:
FIXME "TADOQueryEx" NÃO ENCONTRADO
var
query: TADOQueryEx;
begin
try
query := TADOQueryEx.create(nil);
query.connection := conexao;
query.setSql( 'select * from wfs_fluxos' );
query.active := true;
finally
query.free;
end;
end;
* **query:** Variável de acesso ao banco de dados;
* **connection:** Propriedade responsável para apontar para uma conexão existente a um usuário de banco de dados;
* **setSql:** Propriedade onde será informado o comando SQL para acessar as informações do banco;
* **active:** O valor "True" executa a consulta. O valor "False" finaliza a consulta.
======Biblioteca de funções======
----
Este tópico descreve e exemplifica o uso de todas as funções utilizadas pelo WFS.
=====Funções específicas=====
----
Listagem das funções específicas do WFS.
====ConectarDBSistema====
----
###
A função estabelece uma conexão com um [[manual_usuario:studio:studio_objetivo_sistemas | sistema]] cadastrado e que possua uma conexão válida. O parâmetro passado deverá ser exatamente o nome do sistema.
###
//Sintaxe//
ConectarDBSistema('RH3');
//Exemplo//
conexao := ConectarDBSistema('RH3');
=====Funções nativas=====
----
Listagem das funções nativas do Delphi e utilizadas no WFS.
====Abs====
----
###
A função Abs converte o valor do parâmetro em um valor absoluto, ou seja, um número positivo.
###
//Sintaxe//
Abs(Valor);
//Exemplo//
var Vl : integer;
begin
Vl := Abs(-15); //Converte valores negativos para positivo
sMensagem := IntToStr(Vl);
end;
====AnsiCompareStr====
----
Função utilizada para comparação entre strings. Esta função é case-sensitive.
//Sintaxe//
AnsiCompareStr(const S1, S2: string): Integer;
//Exemplo//
var
strTexto, strTextoIgual, strTextoDiferente : string;
begin
strTexto := 'Compara duas strings';
strTextoIgual := 'Compara duas strings';
strTextoDiferente := 'String diferente';
if AnsiCompareStr(strTexto,strTextoIgual) = 0 then
sMensagem := 'As strings são iguais'
else
sMensagem := 'As strings são diferentes';
if AnsiCompareStr(strTexto,strTextoDiferente) = 0 then
sMensagem := 'As strings são iguais'
else
sMensagem := 'As strings são diferentes';
end;
====AnsiCompareText====
----
Função utilizada para comparação entre Strings. Esta função NÃO é case-sensitive.
//Sintaxe//
AnsiCompareText(const S1, S2: string): Integer;
//Exemplo//
var
strTexto, strTextoIgual, strTextoDiferente : string;
begin
strTexto := 'Compara duas strings';
strTextoIgual := 'Compara duas strings';
strTextoDiferente := 'String diferente';
if AnsiCompareText(strTexto,strTextoIgual) = 0 then
sMensagem := 'As strings são iguais'
else
sMensagem := 'As strings são diferentes';
if AnsiCompareText(strTexto,strTextoDiferente) = 0 then
sMensagem := 'As strings são iguais'
else
sMensagem := 'As strings são diferentes';
end;
====AnsiLowerCase ====
----
Converte todos os caracteres de uma string para minúsculo.
//Sintaxe//
AnsiLowerCase(const S: string): string;
//Exemplo//
var
X: string;
Begin
X := sValor;
sMensagem := AnsiLowerCase(X); { Label1 ficará tudo em letras minúsculas }
end;
====AnsiUpperCase ====
----
Converte todos os caracteres de uma string para maiúsculo.
//Sintaxe//
AnsiUpperCase(const S: string): string;
//Exemplo//
var
X: String;
Begin
X := sValor;
sMensagem := AnsiUpperCase(X); { Label1 ficará tudo em letras maiúsculas }
end;
====Append====
----
Insere um registro no final do arquivo.
//Sintaxe//
Append(var FileHandle: TextFile);
//Exemplo//
FIXME "Não permite o uso do comando readln com 2 parãmetros"
var
myFile : TextFile;
text : string;
begin
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
WriteLn(myFile, 'Hello');
WriteLn(myFile, 'World');
CloseFile(myFile);
Append(myFile);
WriteLn(myFile, 'Final line added');
CloseFile(myFile);
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, text);
sMensagem := text;
end;
CloseFile(myFile);
end;
====ArcTan====
----
É uma função matemática que dá o valor em radianos do arco tangente.
//Sintaxe//
ArcTan(const Number: Extended): Extended;
//Exemplo//
var
float : single;
begin
float := ArcTan(PI/2);
sMensagem := 'ArcTan of PI/2 = '+FloatToStr(float);
end;
====Assigned====
----
###
A função Assigned verifica se a referência não é nula. Ela retorna True se não for nula, e False se for nula.
###
Utilização de uma referência Nil irá resultar em uma excepção.
###
As três versões do Assigned permitem a função de trabalhar com ponteiros de dados, referências a objetos e referências método de classe.
###
//Sintaxe//
Assigned(PointerName: Pointer ): Boolean;
Assigned(ObjectName: TObject ): Boolean;
Assigned(MethodName: Method ): Boolean;
//Exemplo//
var
myPtr : PChar;
begin
if Assigned(myPtr)
then sMensagem := 'myPtr is not nil'
else sMensagem := 'myPtr is nil';
myPtr := Nil;
if Assigned(myPtr)
then sMensagem := 'myPtr is still not nil'
else sMensagem := 'myPtr is nil';
end;
====AssignFile====
----
###
O procedimento AssignFile atribui um valor a FileHandle para um nome de arquivo, em preparação para a leitura ou escrita para esse arquivo.
###
Assinatura 1
###
Toma um tipo de variável arquivo de texto como a alça. O arquivo é tratado como um arquivo de texto quando aberto.
###
###
Se o nome do arquivo é uma string vazia, então o acesso aos arquivos é feito para os fluxos de entrada e de saída padrão do console.
###
Assinatura 2
###
Toma um tipo de variável arquivo binário como a alça. O arquivo é tratado como um arquivo binário.
###
###
Em ambos os casos, quando o arquivo é aberto por Append, Reset ou ReWrite, presume-se a estar no diretório atual.
###
//Sintaxe//
AssignFile (var FileHandle: TextFile; const FileName: string);
AssignFile (var FileHandle: File; const FileName: string);
//Exemplo//
FIXME
var
myFile : TextFile;
text : string;
begin
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
WriteLn(myFile, 'Hello');
WriteLn(myFile, 'World');
CloseFile(myFile);
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, text);
sMensagem := text;
end;
CloseFile(myFile);
end;
====Chdir====
----
O procedimento Chdir configura o "drive + caminho" de trabalho para o diretório fornecido.
Se o diretório for inválido, retornará o erro ElnOutError e o diretório permanecerá inalterada.
//Sintaxe//
Chdir(const Directory: string );
//Exemplo//
FIXME
var
directory : string;
begin
GetDir(2, directory);
sMensagem := 'Default C drive directory = '+directory;
Chdir(directory);
GetDir(2, directory);
sMensagem := 'Default C drive directory = '+directory;
Chdir('C:Bad/Path/Value');
GetDir(2, directory);
sMensagem := 'Default C drive directory = '+directory;
end;
====Chr====
----
Converte um inteiro em caractere.
//Sintaxe//
Chr(IntValue: Integer): AnsiChar;
Chr(IntValue: Integer): WideChar;
//Exemplo//
FIXME
var
tab : char;
crlf : string;
begin
tab := Chr(9);
crlf := Chr(13)+Chr(10);
sMensagem := 'Hello'+tab+'World';
sMensagem := 'Hello'+crlf+'World';
tab := ^I; // I = 9th capital of the alphabet
crlf := ^M^J; // M = 13th, J = 10th letters
sMensagem := 'Hello'+tab+'World';
sMensagem := 'Hello'+crlf+'World';
end;
====CloseFile====
----
Fecha um arquivo aberto.
//Sintaxe//
CloseFile(var F);
//Exemplo//
var
F: TextFile;
begin
AssignFile(F, 'C:\TEM\ARQUIVO.TXT');
Reset(F);
sMensagem := IntToStr(FileSize(F));
CloseFile(F); { Fecha o arquivo }
end;
====CompareStr====
----
Compara duas Strings para ver qual é a maior. Leva em consideração o Case-sensitive.
//Sintaxe//
CompareStr(const FirstString, SecondString: string): Integer;
//Exemplo//
FIXME
====CompareText====
----
Compara duas strings para ver qual é a maior. Não levando em consideração o Case-sensitive.
//Sintaxe//
CompareText(const String1, String2: string): Integer;
//Exemplo//
FIXME
====Copy====
----
Faz a cópia de parte de uma String ou Array.
//Sintaxe//
Copy(Source: string; StartChar, Count: Integer): string;
Copy(Source: array; StartIndex, Count: Integer): array;
//Exemplo 1//
var
Source, Target : string;
begin
Source := '12345678';
Target := Copy(Source, 3, 4);
sMensagem := 'Target : '+Target;
end;
//Exemplo 2//
var
i : Integer;
Source, Target : array of Integer;
begin
for i := 1 to 8 do
Source[i-1] := i;
Target := Copy(Source, 3, 4);
for i := 0 to Length(Target) -1 do
sMensagem := 'Target['+IntToStr(i)+'] : '+IntToStr(Target[i]);
end;
====Cos====
----
Função matemática para recuperar o Cosseno de um número.
//Sintaxe//
Cos(const Number: Extended): Extended;
//Exemplo//
var
float : single;
begin
float := Cos(PI/3);
sMensagem := 'Cos(PI/3) = '+FloatToStr(float);
end;
====CreateOleObject====
----
FIXME
//Sintaxe//
//Exemplo//
====Date====
----
Retorna a data atual.
//Sintaxe//
Date : TDateTime;
//Exemplo//
begin
sMensagem := 'Yesterday = '+DateToStr(Yesterday);
sMensagem := 'Today = '+DateToStr(Date);
sMensagem := 'Tomorrow = '+DateToStr(Tomorrow);
sMensagem := 'Today''s time = '+TimeToStr(Date);
end;
====DateTimeToStr====
----
Converte os valores de data e hora TDateTime para uma string.
//Sintaxe//
DateTimeToStr(DateTime: TDateTime): string;
DateTimeToStr(DateTime: TDateTime; const FormatSettings: TFormatSettings): string;
//Exemplo//
var
myDate : TDateTime;
begin
myDate := StrToDateTime('09/02/2002 12:00');
sMensagem := 'Middle of a day = '+DateTimeToStr(myDate);
myDate := StrToDateTime('09/02/2002 00:00');
sMensagem := 'Start of a day = '+DateTimeToStr(myDate);
end;
====DateToStr====
----
Converte um valor de data TDateTime para uma string.
//Sintaxe//
DateToStr(Date: TDateTime): string;
DateToStr(Date: TDateTime; const FormatSettings: TFormatSettings): string;
//Exemplo//
var
myDate : TDateTime;
begin
myDate := StrToDate('13/02/2002');
sMensagem := 'myDate = '+DateToStr(myDate);
end;
====DayOfWeek====
----
Retorna o índice de um dia da semana.
* 1 = Sunday;
* 2 = Monday;
* 3 = Tuesday;
* 4 = Wednesday;
* 5 = Thursday;
* 6 = Friday;
* 7 = Saturday.
//Sintaxe//
DayOfWeek(Date: TDateTime): Integer;
//Exemplo//
FIXME
var
myDate : TDateTime;
day : string;
begin
myDate := EncodeDate(2002, 12, 31);
day := LongDayNames[DayOfWeek(myDate)];
sMensagem := 'Christmas day 2002 is on a '+day;
end;
====Dec====
----
Diminui o valor de uma variável ordinal.
//Sintaxe//
Dec(var Variable: Ordinal variable);
Dec(var Variable: Ordinal variable; Count: Integer );
//Exemplo//
FIXME
var
Character : char;
Number : Integer;
Card : TSuit;
begin
Character := 'B';
sMensagem := 'Character : '+Character;
Dec(Character);
sMensagem := 'Character-1 : '+Character;
Number := 23;
sMensagem := 'Number : '+IntToStr(Number);
Dec(Number, 5);
sMensagem := 'Number-5 : '+IntToStr(Number);
Card := Clubs;
sMensagem := 'Card starts at Clubs';
Dec(Card);
if Card = Hearts then sMensagem := 'Card is now Hearts';
if Card = Clubs then sMensagem := 'Card is now Clubs';
if Card = Diamonds then sMensagem := 'Card is now Diamonds';
if Card = Spades then sMensagem := 'Card is now Spades';
end;
====DecodeDate====
----
Extrai o ano, mês, dia a partir de um TDateTime.
//Sintaxe//
DecodeDate(const SourceDate: TDateTime; out Year, Month, Day: Word);
//Exemplo//
var
myDate : TDateTime;
myYear, myMonth, myDay : Word;
begin
myDate := StrToDate('29/12/2000');
DecodeDate(myDate, myYear, myMonth, myDay);
sMensagem := 'myDate now = '+DateToStr(myDate);
sMensagem := 'myDay = '+IntToStr(myDay);
sMensagem := 'myMonth = '+IntToStr(myMonth);
sMensagem := 'myYear = '+IntToStr(myYear);
end;
====DecodeTime====
----
###
Divide um TDateTime em valores de tempo individuais (Hora, minuto, segundo e milissegundos).
###
//Sintaxe//
DecodeTime(const SourceDateTime: TDateTime; out Hour, Min, Sec, MSec: Word);
//Exemplo//
var
myDate : TDateTime;
myHour, myMin, mySec, myMilli : Word;
begin
myDate := StrToDateTime('29/12/2000 12:45:12.34');
DecodeTime(myDate, myHour, myMin, mySec, myMilli);
sMensagem := 'Time now = '+TimeToStr(myDate);
sMensagem := 'Hour = '+IntToStr(myHour);
sMensagem := 'Minute = '+IntToStr(myMin);
sMensagem := 'Second = '+IntToStr(mySec);
sMensagem := 'MilliSec = '+IntToStr(myMilli);
end;
====Delete====
----
Excluir uma seção de caracteres de uma string.
//Sintaxe//
Delete(var Source: string; StartChar: Integer; Count: Integer);
//Exemplo//
var
Source : string;
begin
Source := '12345678';
Delete(Source, 3, 4);
sMensagem := 'Source now : '+Source;
end;
====EncodeDate====
----
Construir um valor TDateTime passando como parâmetro: ano, mês e dia.
//Sintaxe//
EncodeDate(const Year, Month, Day: Word ): TDateTime;
//Exemplo//
var
myDate : TDateTime;
begin
myDate := EncodeDate(2000, 02, 29);
LongTimeFormat := 'hh:mm:ss.zzz';
sMensagem := 'Date set to '+DateToStr(myDate);
sMensagem := 'Time set to '+TimeToStr(myDate);
end;
====EncodeTime====
----
Criar um valor TDateTime passando como parâmetro: hora, min, segundo e milissegundos.
//Sintaxe//
EncodeTime(const Hour, Min, Sec, MSec: Word): TDateTime;
//Exemplo//
var
myDate : TDateTime;
begin
myDate := EncodeTime(12, 34, 56, 789);
LongTimeFormat := 'hh:mm:ss.z';
sMensagem := 'Date set to '+DateToStr(myDate);
sMensagem := 'Time set to '+TimeToStr(myDate);
end;
====EOF====
----
Retorna um valor lógico se fim de arquivo.
FIXME
//Sintaxe//
Eof(var F): Boolean;
//Exemplo//
var
F1, F2: TextFile;
Ch: Char;
begin
AssignFile(F1, 'c:\temp\arquivo.txt');
Reset(F1);
AssignFile(F2, 'c:\temp\arquivo.txt');
Rewrite(F2);
While not Eof(F1) Do
begin
Read(F1, Ch);
Write(F2, Ch);
end;
CloseFile(F2);
CloseFile(F1);
end;
====Exp====
----
Retorna o expoente de um número.
//Sintaxe//
Exp(Number: Extended): Extended;
//Exemplo//
var
float : Double;
begin
float := Ln(2);
sMensagem := 'Ln(2) = '+FloatToStr(float);
float := Exp(float);
sMensagem := 'Exp(Ln(2)) = '+FloatToStr(float);
end;
====FilePos====
----
Retorna a posição de um arquivo de texto ou binário.
//Sintaxe//
FilePos(var FileHandle: File;): LongInt;
FilePos(var FileHandle: TextFile;);
FIXME
//Exemplo//
var
myWord, myWord1, myWord2, myWord3 : Word;
myFile : File of Word;
begin
AssignFile(myFile, 'Test.cus');
ReWrite(myFile);
myWord1 := 123;
myWord2 := 456;
myWord3 := 789;
Write(myFile, myWord1, myWord2, myWord3);
CloseFile(myFile);
FileMode := fmOpenRead;
Reset(myFile);
while not Eof(myFile) do
begin
Read(myFile, myWord);
sMensagem := 'Record '+
IntToStr(FilePos(myFile))+' = '+
IntToStr(myWord);
end;
CloseFile(myFile);
end;
====FileSize====
----
Retorna a quantidade de registros de um arquivo aberto.
//Sintaxe//
FileSize(var FileHandle: File;): Integer;
FIXME
//Exemplo//
var
myWord, myWord1, myWord2, myWord3 : Word;
myFile : File of Word;
begin
AssignFile(myFile, 'Test.cus');
ReWrite(myFile);
sMensagem := 'File size = '+IntToStr(FileSize(myFile));
myWord1 := 123;
myWord2 := 456;
myWord3 := 789;
Write(myFile, myWord1, myWord2, myWord3);
sMensagem := 'File size now = '+IntToStr(FileSize(myFile));
CloseFile(myFile);
end;
====FloatToStr====
----
Converter um valor de ponto flutuante para uma string.
//Sintaxe//
FloatToStr(Value: Extended): string;
FloatToStr(Value: Extended; const FormatSettings: TFormatSettings): string;
//Exemplo//
var
amount1, amount2, amount3 : Extended;
begin
amount1 := 1234567890.123456789;
amount2 := 1234567890123456.123;
amount3 := 1E100;
sMensagem := 'Amount1 = '+FloatToStr(amount1);
sMensagem := 'Amount2 = '+FloatToStr(amount2);
sMensagem := 'Amount3 = '+FloatToStr(amount3);
end;
====Format====
----
Efetua a formatação de números e texto em uma string.
//Sintaxe//
Format(Const Formatting: string; Const Data: array of const): string;
Format(Const Formatting: string; Const Data: array of const; FormatSettings: TFormatSettings): string;
FIXME
//Exemplo//
var
text : string;
begin
sMensagem := Format('%s', ['Hello']));
sMensagem := Format('String = %s', ['Hello']));
sMensagem := Format('Decimal = %d', [-123]);
sMensagem := Format('Exponent = %e', [12345.678]);
sMensagem := Format('Fixed = %f', [12345.678]);
sMensagem := Format('General = %g', [12345.678]);
sMensagem := Format('Number = %n', [12345.678]);
sMensagem := Format('Money = %m', [12345.678]);
sMensagem := Format('Pointer = %p', [addr(text)]);
sMensagem := Format('String = %s', ['Hello']);
sMensagem := Format('Unsigned decimal = %u', [123]);
sMensagem := Format('Hexadecimal = %x', [140]);
end;
====FormatDateTime====
----
Transforma uma data em string.
//Sintaxe//
FormatDateTime(const Formatting: string; DateTime: TDateTime): string;
FormatDateTime(const Formatting: string; DateTime: TDateTime; const FormatSettings: TFormatSettings): string;
//Exemplo//
var
myDate : TDateTime;
begin
myDate := StrToDateTime('10/10/2014');
sMensagem := ' d/m/y = '+
FormatDateTime('d/m/y', myDate);
sMensagem := ' dd/mm/yy = '+
FormatDateTime('dd/mm/yy', myDate);
sMensagem := ' ddd d of mmm yyyy = '+
FormatDateTime('ddd d of mmm yyyy', myDate);
sMensagem := 'dddd d of mmmm yyyy = '+
FormatDateTime('dddd d of mmmm yyyy', myDate);
sMensagem := ' ddddd = '+
FormatDateTime('ddddd', myDate);
sMensagem := ' dddddd = '+
FormatDateTime('dddddd', myDate);
sMensagem := ' c = '+
FormatDateTime('c', myDate);
end;
====FormatFloat====
----
Transforma um número de ponto flutuante em uma string.
//Sintaxe//
FormatFloat(const Formatting: string; Value: Extended): string;
FormatFloat(const Formatting: string; Value: Extended; FormatSettings: TFormatSettings): string;
//Exemplo//
var
float : extended;
begin
float := 1234.567;
sMensagem := '##### : '+FormatFloat('#####', float);
sMensagem := '00000 : '+FormatFloat('00000', float);
sMensagem := '0 : '+FormatFloat('0' , float);
sMensagem := '#,##0 : '+FormatFloat('#,##0', float);
sMensagem := ',0 : '+FormatFloat(',0' , float);
sMensagem := '0.#### : '+FormatFloat('0.####', float);
sMensagem := '0.0000 : '+FormatFloat('0.0000', float);
sMensagem := '0.0000000E+00 : '+FormatFloat('0.0000000E+00', float);
sMensagem := '0.0000000E-00 : '+FormatFloat('0.0000000E-00', float);
sMensagem := '#.#######E-## : '+FormatFloat('#.#######E-##', float);
sMensagem := '"Value = "0.0 : '+FormatFloat('"Value = "0.0', float);
sMensagem := '0.0 : '+FormatFloat('0.0' , -1234.567);
sMensagem := '0.0 "CR";0.0 "DB" : '+
FormatFloat('0.0 "CR";0.0 "DB"', -1234.567);
sMensagem := '0.0 "CR";0.0 "DB" : '+
FormatFloat('0.0 "CR";0.0 "DB"', 1234.567);
sMensagem := '0.0 : '+FormatFloat('0.0' , 0.0);
sMensagem := '0.0;-0.0;"Nothing" : '+
FormatFloat('0.0;-0.0;"Nothing"', 0.0);
end;
====Frac====
----
Retornas a parte fracionária de um número de ponto flutuante.
//Sintaxe//
Frac(const Number: Extended): Extended;
//Exemplo//
begin
sMensagem := 'Round(12.75) = '+IntToStr(Round(12.75));
sMensagem := 'Trunc(12.75) = '+IntToStr(Trunc(12.75));
sMensagem := ' Int(12.75) = '+FloatToStr(Int(12.75));
sMensagem := ' Frac(12.75) = '+FloatToStr(Frac(12.75));
end;
====GetActiveOleObject====
----
FIXME
//Sintaxe//
//Exemplo//
====High====
----
Retorna o maior valor de um tipo ou variável.
//Sintaxe//
High(type or variable): Ordinal type;
//Exemplo//
var
myChar : TChar;
myArray : TArray;
myEnum : TEnum;
myShort : TShort;
begin
sMensagem := 'High(TChar) = '+IntToStr(Ord(High(TChar)));
sMensagem := 'High(myChar) = '+IntToStr(Ord(High(myChar)));
sMensagem := 'High(TArray) = '+IntToStr(High(TArray));
sMensagem := 'High(myArray) = '+IntToStr(High(myArray));
sMensagem := 'High(TEnum) = '+IntToStr(Ord(High(TEnum)));
sMensagem := 'High(myEnum) = '+IntToStr(Ord(High(myEnum)));
sMensagem := 'High(TShort) = '+IntToStr(Ord(High(TShort)));
sMensagem := 'High(myShort) = '+IntToStr(Ord(High(myShort)));
end;
====Inc====
----
Incrementa uma variável ordinal.
//Sintaxe//
Inc(var Variable: Ordinal variable ) ;
Inc(var Variable: Ordinal variable; Count: Integer);
FIXME
//Exemplo//
var
Character : char;
Number : Integer;
Card : TSuit;
begin
Character := 'A';
sMensagem := 'Character : '+Character;
Inc(Character);
sMensagem := 'Character+1 : '+Character;
Number := 23;
sMensagem := 'Number : '+IntToStr(Number);
Inc(Number, 5);
sMensagem := 'Number+5 : '+IntToStr(Number);
Card := Clubs;
sMensagem := 'Card starts at Clubs';
Inc(Card);
if Card = Hearts then sMensagem := 'Card is now Hearts';
if Card = Clubs then sMensagem := 'Card is now Clubs';
if Card = Diamonds then sMensagem := 'Card is now Diamonds';
if Card = Spades then sMensagem := 'Card is now Spades';
end;
====IncMonth====
----
Incrementa um certo número de meses em uma variável TDateTime.
//Sintaxe//
IncMonth(const StartDate: TDateTime {; NumberOfMonths : Integer = 1} ): TDateTime;
FIXME
//Exemplo//
var
myDate : TDateTime;
begin
myDate := StrToDate('31/01/2000');
sMensagem := 'myDate = '+DateToStr(myDate);
myDate := IncMonth(myDate);
sMensagem := 'myDate + 1 month = '+DateToStr(myDate);
myDate := IncMonth(myDate, 12);
sMensagem := 'myDate + 12 months = '+DateToStr(myDate);
end;
====InputQuery====
----
Exibir uma caixa de diálogo que pede ao usuário para informar um texto.
//Sintaxe//
InputQuery(const Caption, Prompt: string; var UserValue: string): Boolean;
//Exemplo//
var
value : string;
begin
repeat
if not InputQuery('Test program', 'Please type your name', value)
then sMensagem := 'User cancelled the dialog';
until value <> '';
sMensagem := 'Hello '+value;
end;
====Insert====
----
Insira uma string em outra string.
//Sintaxe//
Insert(const InsertStr: string; var TargetStr: string; Position: Integer);
//Exemplo//
var
Target : string;
begin
Target := '12345678';
Insert('-+-', Target, 3);
sMensagem := 'Target : '+Target;
end;
====Int====
----
Retorna a parte inteira de um argumento.
//Sintaxe//
Int(X: Real): Real;
//Exemplo//
var
R: Real;
begin
R := Int(123.456); { Mostra “123.0” }
R := Int(-123.456); { Mostra “-123.0” }
end;
====Interpret (*)====
----
FIXME
//Sintaxe//
//Exemplo//
====IntToHex====
----
Converter um número inteiro em uma string hexadecimal.
//Sintaxe//
IntToHex(DecimalValue: Integer; MinimumWidth: Integer): string;
//Exemplo//
begin
sMensagem := '1234 decimal = '+IntToHex(1234, 1);
sMensagem := '1234 decimal = '+IntToHex(1234, 8);
end;
====IntToStr====
----
Converter um número inteiro em uma string.
//Sintaxe//
IntToStr(Number: Integer): string;
IntToStr(BigNumber: Int64): string;
//Exemplo//
var
NormalInteger : Integer;
BigInteger : Int64;
begin
NormalInteger := 2147483647;
BigInteger := 9223372036854775807;
sMensagem := 'NormalInteger : '+IntToStr(NormalInteger);
sMensagem := 'BigInteger : '+IntToStr(BigInteger);
sMensagem := 'Calculated number : '+IntToStr(27 * 4);
end;
====IsLeapYear====
----
Retorna true se um determinado ano civil é um ano bissexto.
//Sintaxe//
IsLeapYear(const Year: Word): Boolean;
//Exemplo//
begin
if IsLeapYear(2000)
then sMensagem := '2000 was a leap year'
else sMensagem := '2000 was not a leap year';
end;
====IsValidIdent====
----
FIXME
//Sintaxe//
//Exemplo//
====Length====
----
Retorna o número de elementos de um Array ou string.
//Sintaxe//
Length(const SourceString: string): Integer;
Length(const SourceArray: array): Integer;
FIXME
//Exemplo//
var
openArray : array of char;
fixedArray : array[2..4] of Integer;
multiArray : array[2..4, 1..9] of Integer;
shortStr : shortstring;
longStr : string;
i : Integer;
begin
SetLength(openArray, 17);
sMensagem := 'Length of openArray = '+IntToStr(Length(openArray));
sMensagem := 'Length of fixedArray = '+IntToStr(Length(fixedArray));
sMensagem := 'Length of multiArray = '+IntToStr(Length(multiArray));
shortStr := 'ABCDEFGH';
longStr := '12345678901234567890';
sMensagem := 'Length of shortStr = '+IntToStr(Length(shortStr));
sMensagem := 'Length of longStr = '+IntToStr(Length(longStr));
for i := 1 to Length(shortStr) do
sMensagem := 'Letter '+IntToStr(i)+' = '+shortStr[i];
end;
====Ln====
----
Retorna o logaritmo natural de um número.
//Sintaxe//
Ln(Number: Extended): Extended;
//Exemplo//
var
float : Double;
begin
float := Ln(2);
sMensagem := 'Ln(2) = '+FloatToStr(float);
float := Exp(float);
sMensagem := 'Exp(Ln(2)) = '+FloatToStr(float);
end;
====Low====
----
Retorna o menor valor de um tipo ou variável.
//Sintaxe//
Low(type or variable): Ordinal type;
//Exemplo//
var
myChar : TChar;
myArray : TArray;
myEnum : TEnum;
myShort : TShort;
begin
sMensagem := 'Low(TChar) = '+IntToStr(Ord(Low(TChar)));
sMensagem := 'Low(myChar) = '+IntToStr(Ord(Low(myChar)));
sMensagem := 'Low(TArray) = '+IntToStr(Low(TArray));
sMensagem := 'Low(myArray) = '+IntToStr(Low(myArray));
sMensagem := 'High(myArray) = '+IntToStr(High(myArray));
sMensagem := 'Low(TEnum) = '+IntToStr(Ord(Low(TEnum)));
sMensagem := 'Low(myEnum) = '+IntToStr(Ord(Low(myEnum)));
sMensagem := 'High(myEnum) = '+IntToStr(Ord(High(myEnum)));
sMensagem := 'Low(TShort) = '+IntToStr(Ord(Low(TShort)));
sMensagem := 'Low(myShort) = '+IntToStr(Ord(Low(myShort)));
end;
====LowerCase====
----
Coloca todos os caracteres de uma string em minúsculo.
FIXME
//Sintaxe//
LowerCase(const MixedString: string ): string;
//Exemplo//
====Machine (*)====
----
FIXME
//Sintaxe//
//Exemplo//
====Now====
----
Retorna a data e hora corrente;
//Sintaxe//
Now: TDateTime;
//Exemplo//
var
pTexto: string;
begin
pTexto := 'A data e hora é ' + DateTimeToStr(Now); { Mostra a hora e data }
end;
====Odd====
----
Testa se um número inteiro tem um valor ímpar.
//Sintaxe//
Odd(Number: Integer | Int64 ): Boolean;
//Exemplo//
var
i : Integer;
begin
for i := 1 to 9 do
if Odd(i) then sMensagem := IntToStr(i);
end;
====Ord====
----
Fornece o valor ordinal de um número inteiro, character ou enum.
//Sintaxe//
Ord(Arg: AnsiChar | Char | WideChar | Enumeration | Integer ): Integer;
Ord(Arg: Int64 ): Int64;
//Exemplo//
var
A : AnsiChar;
C : Char;
W : WideChar;
E : Boolean;
I : Integer;
I64 : Int64;
begin
A := 'A';
C := 'C';
W := 'W';
E := True;
I := 22;
I64 := 64;
sMensagem := 'A = '+IntToStr(Ord(A));
sMensagem := 'C = '+IntToStr(Ord(C));
sMensagem := 'W = '+IntToStr(Ord(W));
sMensagem := 'E = '+IntToStr(Ord(E));
sMensagem := 'I = '+IntToStr(Ord(I));
sMensagem := 'I64 = '+IntToStr(Ord(I64));
end;
====Pos====
----
Encontre a posição de uma string em outra.
//Sintaxe//
Pos(const Needle, HayStack: string ): Integer;
FIXME
//Exemplo//
====Raise====
----
Levantar uma exceção.
//Sintaxe//
Raise
Raise Object reference
Raise Object reference At Address pointer
FIXME
//Exemplo 1//
var
fred, jim : string;
begin
fred := 'Good name';
jim := 'Badname ';
try
sMensagem := fred+' swapped = '+SwapNames(fred);
sMensagem := jim+' swapped = '+SwapNames(jim);
except
On E : Exception do
sMensagem := E.Message;
end;
end;
var
blankPos : Integer;
i : Integer;
nameLen : Integer;
begin
Result := '';
blankPos := Pos(' ', name);
nameLen := Length(name);
if (blankPos > 0) and (blankPos < nameLen)
then
begin
i := blankPos + 1;
repeat
if name[i] <> ' '
then Result := Copy(name, i, nameLen-i+1) + ' ' +
Copy(name, 1, blankPos-1)
else Inc(i);
until (i > nameLen) or (Length(Result) > 0);
end;
if Length(Result) = 0
then Raise Exception.CreateFmt('Invalid name : ''%s''', [name]);
end;
//Exemplo 2//
var
age : Integer;
exc : EBadAge;
begin
age := 23;
if age < 30
then
begin
exc := EBadAge.CreateFmt('Bad age : %d',[age]);
Raise exc;
end;
end;
====Random====
----
Gerar um ponto de flutuação aleatória ou número inteiro.
//Sintaxe//
Random : Extended;
Random (LimitPlusOne: Integer): Integer;
FIXME
//Exemplo//
var
float : single;
int : Integer;
i : Integer;
begin
for i := 1 to 5 do
begin
float := Random;
sMensagem := 'float = '+FloatToStr(float);
end;
for i := 1 to 5 do
begin
int := 1 + Random(100);
sMensagem := 'int = '+IntToStr(int);
end;
end;
====ReadLn====
----
Leia uma linha completa de dados a partir de um arquivo de texto.
//Sintaxe//
ReadLn(var Variable1 {,var Variable2...} );
ReadLn(var FileHandle: TextFile; var Variable1 {,var Variable2...} ) ;
FIXME
//Exemplo//
var
myFile : TextFile;
n1, n2, n3 : Integer;
begin
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
WriteLn(myFile, '1 2 3 4'); // Note that the 4 will be ignored
WriteLn(myFile, 5, ' ', 6, ' ', 7);
WriteLn(myFile, '8 9'); // Missing numbers will be seen as 0
CloseFile(myFile);
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, n1, n2, n3);
sMensagem := IntToStr(n1)+' '+
IntToStr(n2)+' '+
IntToStr(n3);
end;
CloseFile(myFile);
end;
====Reset====
----
Abre um arquivo de texto para leitura, ou um arquivo binário para leitura / escrita.
//Sintaxe//
Reset(var FileHandle: TextFile);
Reset(var FileHandle: File {RecordSize);
FIXME
//Exemplo//
var
myFile : TextFile;
text : string;
begin
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
WriteLn(myFile, 'Hello');
WriteLn(myFile, 'World');
CloseFile(myFile);
FileMode := fmOpenRead;
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, text);
sMensagem := text;
end;
CloseFile(myFile);
end;
====Rewrite====
----
Abra um arquivo de texto ou binário com acesso de gravação.
//Sintaxe//
Rewrite(var FileHandle: TextFile);
Rewrite(var FileHandle: File {RecordSize );
FIXME
//Exemplo//
var
myFile : TextFile;
text : string;
begin
AssignFile(myFile, 'Test.txt');
Rewrite(myFile);
WriteLn(myFile, 'Hello');
WriteLn(myFile, 'World');
CloseFile(myFile);
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, text);
sMensagem := text;
end;
CloseFile(myFile);
end;
====Round====
----
Arredonda um número de ponto flutuante para um inteiro.
//Sintaxe//
Round(const Number: Extended): Int64;
//Exemplo//
begin
sMensagem := 'Round(12.75) = '+IntToStr(Round(12.75));
sMensagem := 'Trunc(12.75) = '+IntToStr(Trunc(12.75));
sMensagem := 'Int(12.75) = '+FloatToStr(Int(12.75));
sMensagem := 'Frac(12.75) = '+FloatToStr(Frac(12.75));
end;
====Scripter (*)====
----
FIXME
//Sintaxe//
//Exemplo//
====SetOf (*)====
----
FIXME
//Sintaxe//
//Exemplo//
====Sin====
----
O seno de um número.
//Sintaxe//
Sin(const Number: Extended): Extended;
//Exemplo//
var
float : single;
begin
float := Sin(PI/6);
sMensagem := 'Sin(PI/6) = '+FloatToStr(float);
end;
====Sqr====
----
Retorna um número ao quadrado.
//Sintaxe//
Sqr(X: Real): (Real);
FIXME
//Exemplo//
var
S, Temp: String;
begin
FloatoStr(Sqr(5.0):2:1, Temp); { Retorna 25.0 }
S := '5 ao quadrado é ' + Temp;
sMensagem := S;
end;
====Sqrt====
----
Retorna a raiz quadrada de um número.
//Sintaxe//
Sqrt(Number: Extended): Extended;
FIXME
//Exemplo//
var
number, squareRoot : Extended;
begin
number := 225;
squareRoot := Sqrt(number);
sMensagem := 'Square root of ' + number + ' = ' squareRoot;
number := 3.456;
squareRoot := Sqrt(number);
sMensagem := 'Square root of ' + number + ' = ' squareRoot;
number := Infinity;
number := Sqrt(number);
sMensagem := 'Square root of Infinity = ' + number;
end;
====StrToDate====
----
Converte uma string de data em um valor TDateTime.
//Sintaxe//
StrToDate(const Date: string): TDateTime;
StrToDate(const Date: string; const FormatSettings: TFormatSettings): TDateTime;
//Exemplo//
var
myDate : TDateTime;
begin
myDate := StrToDate('15/03/75');
sMensagem := '15/03/75 = '+DateTimeToStr(myDate);
myDate := StrToDate('01/01/2075');
sMensagem := '01/01/2075 = '+DateTimeToStr(myDate);
end;
====StrToDateTime====
----
Converte uma string de "data + hora" em um valor TDateTime.
//Sintaxe//
StrToDateTime(const DateTime: string): TDateTime;
StrToDateTime(const DateTime: string; const FormatSettings: TFormatSettings): TDateTime;
//Exemplo//
var
myDateTime : TDateTime;
begin
myDateTime := StrToDateTime('23/02/75 12');
sMensagem := '23/02/75 12 = '+DateTimeToStr(myDateTime);
myDateTime := StrToDateTime('23/02/2075 12:34:56');
sMensagem := '23/02/2075 12:34:56 = '+DateTimeToStr(myDateTime);
end;
====StrToFloat====
----
Converter uma string de número em um valor de ponto flutuante.
//Sintaxe//
StrToFloat(FloatString: string): Extended;
StrToFloat(FloatString: string; const FormatSettings: TFormatSettings): Extended;
//Exemplo 1//
var
stringValue : string;
floatValue : Extended;
begin
stringValue := '123.456E+002';
floatValue := StrToFloat(stringValue);
sMensagem := stringValue+' = '+FloatToStr(floatValue);
end;
//Exemplo 2//
var
A : Extended;
begin
try
A := StrToFloat('10 E 2'); // Middle blanks are not supported
except
sMensagem := 'Erro de conversão';
end;
try
A := StrToFloat('$FF'); // Hexadecimal values are not supported
except
sMensagem := 'Erro de conversão';
end;
end;
====StrToInt====
----
Converter uma string de número inteiro num valor inteiro.
//Sintaxe//
StrToInt(IntegerString: string): Integer;
//Exemplo//
var
A, B, C, D, E, F : Integer;
begin
A := 32;
B := StrToInt('100');
C := StrToInt(' -12');
D := StrToInt('$1E');
E := StrToInt('-0x1E');
F := A + B + C + D + E;
sMensagem := 'A : '+IntToStr(A);
sMensagem := 'B : '+IntToStr(B);
sMensagem := 'C : '+IntToStr(C);
sMensagem := 'D : '+IntToStr(D);
sMensagem := 'E : '+IntToStr(E);
sMensagem := 'F : '+IntToStr(F);
end;
====StrToIntDef====
----
###
Converte uma string em um valor inteiro com valor padrão no caso de algum problema na conversão.
###
//Sintaxe//
StrToIntDef(const IntegerString: string; Default: Integer): Integer;
//Exemplo 1//
var
A, B, C, D, E, F : Integer;
begin
A := 32;
B := StrToIntDef('100', 0);
C := StrToIntDef(' -12', 0);
D := StrToIntDef('$1E', 0);
E := StrToIntDef('-0x1E', 0);
F := A + B + C + D + E;
sMensagem := 'A : '+IntToStr(A);
sMensagem := 'B : '+IntToStr(B);
sMensagem := 'C : '+IntToStr(C);
sMensagem := 'D : '+IntToStr(D);
sMensagem := 'E : '+IntToStr(E);
sMensagem := 'F : '+IntToStr(F);
end;
//Exemplo 2//
var
A : Integer;
begin
A := StrToIntDef('100 ', 55);
sMensagem := 'Value = '+IntToStr(A);
A := StrToIntDef('$FG' , 66);
sMensagem := 'Value = '+IntToStr(A);
end;
====StrToTime====
----
Converte uma string de hora em um valor TDateTime.
//Sintaxe//
StrToTime(const Time: string): TDateTime;
StrToTime(const Time: string; const FormatSettings: TFormatSettings): TDateTime;
//Exemplo//
var
myTime : TDateTime;
begin
myTime := StrToTime('3PM');
sMensagem := '3PM = '+TimeToStr(mytime);
myTime := StrToTime('15');
sMensagem := '15 = '+TimeToStr(mytime);
myTime := StrToTime('15:03');
sMensagem := '15:03 = '+TimeToStr(mytime);
myTime := StrToTime('15:03:45');
sMensagem := '15:03:45 = '+TimeToStr(mytime);
end;
====Time====
----
Retorna a hora atual.
//Sintaxe//
Time: TDateTime;
//Exemplo//
var
today : TDateTime;
begin
today := Time;
ShowMessage('today has date = '+DateToStr(today));
ShowMessage('today has time = '+TimeToStr(today));
end;
====TimeToStr====
----
Converte um valor de tempo TDateTime para uma string.
//Sintaxe//
TimeToStr(Time: TDateTime): string;
TimeToStr(Time: TDateTime; const FormatSettings: TFormatSettings): string;
//Exemplo//
var
myTime : TDateTime;
begin
myTime := StrToTime('15:22:35');
sMensagem := 'myTime = '+TimeToStr(myTime);
end;
====Trim====
----
Remove os espaços em branco iniciais e finais de uma string.
//Sintaxe//
Trim(const Text: String): String;
Trim(const Text: WideString): WideString;
//Exemplo//
const
PaddedString = ' Letters ';
begin
sMensagem := '[' + TrimLeft(PaddedString) + ']';
sMensagem := '[' + TrimRight(PaddedString) + ']';
sMensagem := '[' + Trim(PaddedString) + ']';
end;
====TrimLeft====
----
Remove espaços em branco à esquerda de uma string.
//Sintaxe//
TrimLeft(const Text: String): String;
TrimLeft(const Text: WideString): WideString;
//Exemplo//
const
PaddedString = ' Letters ';
begin
sMensagem := '[' + TrimLeft(PaddedString) + ']';
sMensagem := '[' + TrimRight(PaddedString) + ']';
sMensagem := '[' + Trim(PaddedString) + ']';
end;
====TrimRight====
----
Remove espaços em branco finais de uma string.
//Sintaxe//
TrimRight(const Text: String): String;
TrimRight(const Text: WideString): WideString;
//Exemplo//
const
PaddedString = ' Letters ';
begin
sMensagem := '[' + TrimLeft(PaddedString) + ']';
sMensagem := '[' + TrimRight(PaddedString) + ']';
sMensagem := '[' + Trim(PaddedString) + ']';
end;
====Trunc====
----
Retorna a parte inteira de um número de ponto flutuante.
//Sintaxe//
Trunc(const Number: Extended): Integer;
//Exemplo//
begin
sMensagem := 'Round(12.75) = '+IntToStr(Round(12.75));
sMensagem := 'Trunc(12.75) = '+IntToStr(Trunc(12.75));
sMensagem := ' Int(12.75) = '+FloatToStr(Int(12.75));
sMensagem := 'Frac(12.75) = '+FloatToStr(Frac(12.75));
end;
====UpperCase====
----
Substituir os caracteres minúsculos em maiúsculos em uma string.
//Sintaxe//
UpperCase(const MixedString: string): string;
FIXME
//Exemplo//
====VarArrayCreate====
----
FIXME
//Sintaxe//
//Exemplo//
====VarArrayHighBound====
----
FIXME
//Sintaxe//
//Exemplo//
====VarArrayLowBound====
----
FIXME
//Sintaxe//
//Exemplo//
====VarIsNull====
----
FIXME
//Sintaxe//
//Exemplo//
====VarToStr====
----
FIXME
//Sintaxe//
//Exemplo//
====Write====
----
Gravar dados em um arquivo de texto ou binário.
//Sintaxe//
Write(Expression1 {options} {, Expression2 {options} ...} );
Write(var FileHandle: TextFile; Expression1 {options} {, Expression2 {options} ...} );
Write(var FileHandle: File; var Value1 {,var Value2 ...} );
//Exemplo 1//
var
myFile : TextFile;
text : string;
i : Integer;
begin
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
Write(myFile, 'Hello ');
Write(myFile, 'World');
WriteLn(myFile);
for i := 2 to 4 do
Write(myFile, i/2, ' ');
WriteLn(myFile);
for i := 2 to 4 do
Write(myFile, i/2:5:1);
WriteLn(myFile);
CloseFile(myFile);
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, text);
sMensagem := text;
end;
CloseFile(myFile);
end;
//Exemplo 2//
type
TCustomer = record
name : string[20];
age : Integer;
male : Boolean;
end;
var
myFile : File of TCustomer;
customer : TCustomer;
begin
AssignFile(myFile, 'Test.cus');
ReWrite(myFile);
customer.name := 'Fred Bloggs';
customer.age := 21;
customer.male := true;
Write(myFile, customer);
customer.name := 'Jane Turner';
customer.age := 45;
customer.male := false;
Write(myFile, customer);
CloseFile(myFile);
FileMode := fmOpenRead;
Reset(myFile);
while not Eof(myFile) do
begin
Read(myFile, customer);
if customer.male
then sMensagem := 'Man with name '+customer.name+
' is '+IntToStr(customer.age)
else sMensagem := 'Lady with name '+customer.name+
' is '+IntToStr(customer.age);
end;
CloseFile(myFile);
end;
//Exemplo 3//
var
myWord, myWord1, myWord2 : Word;
myFile : File of Word;
begin
AssignFile(myFile, 'Test.bin');
ReWrite(myFile);
myWord1 := 234;
myWord2 := 567;
Write(myFile, myWord1, myWord2);
CloseFile(myFile);
FileMode := fmOpenRead;
Reset(myFile);
while not Eof(myFile) do
begin
Read(myFile, myWord);
sMensagem := IntToStr(myWord);
end;
CloseFile(myFile);
end;
====WriteLn====
----
Escrever uma linha completa de dados para um arquivo de texto.
//Sintaxe//
WriteLn(Expression1 {options} {, Expression2 {options} ...} );
WriteLn(var FileHandle : TextFile; Expression1 {options} {, Expression2 {options} ...} );
//Exemplo//
var
myFile : TextFile;
text : string;
begin
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
WriteLn(myFile, 'Hello World');
WriteLn(myFile);
WriteLn(myFile, '22/7 = ' , 22/7);
WriteLn(myFile, '22/7 = ' , 22/7:12:6);
CloseFile(myFile);
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, text);
sMensagem := text;
end;
CloseFile(myFile);
end;
======Biblioteca de Classes======
----
Este tópico descreve e exemplifica o uso de classes utilizadas pelo WFS.
=====HTTP/REST via script=====
----
**Exemplo 1: ** Testes de envio (SLACK) para uma pessoa especifica passando o nome de outras pessoa no username;
var
http: TWHTTP;
response: THTTResponse;
jsonObject: TJsonObject;
token, channel, text, username: String;
begin
try
try
// Criando a conexão
http := TWHTTP.create();
// Parâmetros necessários para o método GET.
token := http.encodeParameter( 'xoxb-179556611860-ZhO1pl49DXlJOmbDp6nKU9jd' );
channel := http.encodeParameter( '@juliano.rafael' );
text := http.encodeParameter( 'Teste de *integração*' );
username := http.encodeParameter( '@juliano.rafael' );
// Precisa de SSL.
http.setSSL( true );
response := http.doGet( 'https://slack.com/api/chat.postMessage?token=' + token + '&channel=' + channel + '&text=' + text + '&username=' + username );
jsonObject := response.GetResponseJson(response.GetResponseString());
except
showMessage( 'ocorreu erro' );
end;
finally
http.Free();
response.Free();
end;
end;
**Exemplo 2: ** Teste de envio para um canal se passando por um usuário;
var
http: TWHTTP;
response: THTTResponse;
jsonObject: TJsonObject;
token, channel, text, username: String;
begin
try
try
// Criando a conexão
http := TWHTTP.create();
// Parâmetros necessários para o método GET.
token := http.encodeParameter( 'xoxb-179556611860-ZhO1pl49DXlJOmbDp6nKU9jd' );
channel := http.encodeParameter( 'channel' );
text := http.encodeParameter( 'Teste de *integração*' );
username := http.encodeParameter( '@juliano.rafael' );
// Precisa de SSL.
http.setSSL( true );
response := http.doGet( 'https://slack.com/api/chat.postMessage?token=' + token + '&channel=' + channel + '&text=' + text + '&username=' + username );
// Convertendo o retorno em JsonObject.
jsonObject := response.GetResponseJson(response.GetResponseString());
except
showMessage( 'ocorreu erro' );
end;
finally
http.Free();
response.Free();
end;
end;
**Exemplo 3: ** Carregando lista de usuários do Slack;
var
http: TWHTTP;
response: THTTResponse;
jsonObject: TJsonObject;
jsonPair: TJSonPair;
jsonArray: TJsonArray;
token, url: String;
i: Integer;
begin
try
try
// Criando a conexão
http := TWHTTP.create();
// Parâmetros necessários para o método GET.
token := http.encodeParameter( 'xoxb-179556611860-ZhO1pl49DXlJOmbDp6nKU9jd' );
// Precisa de SSL.
http.setSSL( true );
url := 'https://slack.com/api/users.list?token=' + token;
response := http.doGet( url );
// Convertendo o retorno em JsonObject.
jsonObject := response.GetResponseJson(response.GetResponseString());
jsonPair := response.getByName( jsonObject, 'members' );
jsonArray := jsonPair.jsonValue;
for i := 0 to jsonArray.size - 1 do
begin
showMessage( TJsonObject( jsonArray.get(i) ).get(2).jsonValue.value );
end;
except
showMessage( 'ocorreu erro' );
end;
finally
http.Free();
response.Free();
end;
end;
**Exemplo 4: ** Inserindo Issue no Jira via basic authentication;
var
http: TWHTTP;
response: THTTResponse;
jsonObject: TJsonObject;
url, paramJson: String;
begin
try
try
// Criando a conexão
http := TWHTTP.create();
// Neste caso necessario autenticação básica
http.setBasicAuthentication( true );
http.setUser( 'board-jira@rh3software.com' );
http.setPassWord( 'Rh3@1593576482' );
// Será passado um Json.
http.setContentType( 'application/json' );
// Default charset.
http.setCharset( 'utf-8' );
// Precisa de SSL.
http.setSSL( true );
// Json em forma de string para ser passado como data para o doPost.
paramJson := '{
"fields": {
"project":
{
"key": "RH3"
},
"summary": "Segundo testes da API.",
"description": "Creating of an issue using project keys and issue type names using the REST API",
"issuetype": {
"name": "Bug"
}
}
}';
// URL
url := 'https://rh3software.atlassian.net/rest/api/2/issue';
// Response do doPost
response := http.doPost( url, paramJson );
// Convertendo o retorno em JsonObject.
jsonObject := response.GetResponseJson(response.GetResponseString());
// Pegando o objeto retornado para mostrar a chave que foi incluída.
showMessage( response.getByName( jsonObject, 'key' ).jsonValue.value );
except
showMessage( 'ocorreu erro' );
end;
finally
http.Free();
response.Free();
end;
end;
**Exemplo 5: ** Retornando um statuscode >= 400 da api.
var
http: TWHTTP;
response: THTTResponse;
jsonObject: TJsonObject;
url, paramJson: String;
begin
try
try
// Criando a conexão
http := TWHTTP.create();
// Neste caso necessario autenticação básica
http.setBasicAuthentication( true );
http.setUser( 'board-jira@rh3software.com' );
http.setPassWord( 'Rh3@1593576482' );
// Será passado um Json.
http.setContentType( 'application/json' );
// Default charset.
http.setCharset( 'utf-8' );
// Precisa de SSL.
http.setSSL( true );
// Json em forma de string para ser passado como data para o doPost.
paramJson := '{
"fields": {
"project":
{
"key": "fdsafdas"
},
"summary": "REST ye merry gentlemen.",
"description": "Creating of an issue using project keys and issue type names using the REST API",
"issuetype": {
"name": "Bug"
}
}
}';
// URL
url := 'https://rh3software.atlassian.net/rest/api/2/issue';
// Response do doPost
response := http.doPost( url, paramJson );
// Convertendo o retorno em JsonObject.
jsonObject := response.GetResponseJson(response.GetResponseString());
// Pegando o objeto retornado porem o statuscode > 400
if response.getStatusCode() >= 400 then
showMessage( TJsonObject( response.getByName( jsonObject, 'errors' ).jsonValue ).get(0).jsonValue.value );
except
showMessage( 'ocorreu erro' );
end;
finally
http.Free();
response.Free();
end;
end;