Avaliação do Usuário

Estrela ativaEstrela ativaEstrela ativaEstrela ativaEstrela ativa

  

Em uma aplicação interface com o usuário é tudo! Os botões, menus e formulários podem levar um bom projeto ao fracasso ou à aclamação. Fazê-los ao mesmo tempo atraentes e fáceis de entender pode tornar uma aplicação um sucesso.

 

Agora imagine as inúmeras possibilidades se pudermos colocar voz para descrever funcionalidades, campos, texto e etc. ao usuário!

 

Construindo:

 

1. Inicie um novo projeto;

 

2. No novo formulário adicione um campo de texto (TEdit) e um botão (TButton);

 

 

 

 

3. No código fonte do seu projeto, na cláusula USES insira ComOBJ;

 

 

 

 

4. Para o evento onClick do botão (clique duas vezes sobre ele para abrir o código já com o evento criado) vamos colocar o seguinte código:

 

Declare a variável voz, como abaixo.

 

{code}

var voz : OLEVariant;

{/code}

 

Agora o código para o corpo do evento.

 

{code}

 voz := CreateOLEObject('SAPI.SpVoice');

 voz.Speak(Edit1.Text,0);

{/code}

 

Entendendo o código:

 

Primeiro importamos a biblioteca ComOBJ que contém os tipos OLE desejados para o uso da API de fala da Microsoft (SAPI – Speech API).

 

Criamos a variável voz do tipo OLEVariant, ou seja, poderá receber qualquer objeto OLE independente do tipo que seja.

 

Em voz := CreateOLEObject('SAPI.SpVoice'); criamos o objeto voz como sendo do tipo SAPI.SpVoice, ou seja, da classe da Speech API.

 

Com voz.Speak(Edit1.Text,0); solicitamos que seja falado o conteúdo do campo de texto de forma síncrona (valor de parâmetro zero), ou seja, o programa só continua depois de falar. Caso deseje que ele fale de forma assíncrona troque o valor por 1 (um), dessa forma o programa continuará a execução dos comandos seguintes enquanto fala.

 

 

Executando:

 

Digite alguma coisa no campo de texto e clique no botão, seu programa “falará” o que você digitou:

 

 

 

 

Mas note que ele falou de um jeito muito estranho, só fala corretamente caso escreva algo em inglês. Parece óbvia a resposta, e é: isso acontece porque a API de texto-para-voz disponível por padrão no Windows está na língua inglesa.

 

Isso pode ser resolvido encontrando-se e baixando pacotes de texto-para-fala (text-to-speech) para língua portuguesa.

 

Vamos alterar um pouco nosso projeto para que seja possível selecionar a voz desejada.

 

No formulário insira uma caixa de combinação (TComboBox) e um segundo botão (TButton):

 

 

 

 

Para esse segundo botão, no evento onClick declare as seguintes variáveis:

 

{code}

var voz, vozes : OLEVariant;

i : Integer;

{/code}

 

 

 

 

Agora, para o segundo botão ainda no evento onClick, insira o seguinte código:

 

{code}

voz := CreateOLEObject('SAPI.SpVoice');

vozes := voz.getVoices;

ComboBox1.Clear;

for i := 0 to vozes.Count - 1 do

ComboBox1.Items.Add(vozes.item(i).GetDescription);

{/code}

 

Com isso, ao clicar no segundo botão serão carregadas todas as vozes disponíveis no sistema:

 

 

 

 

Volte ao evento onClick do primeiro botão e altere o código como demonstrado abaixo:

 

{code}

voz := CreateOLEObject('SAPI.SpVoice');

voz.Voice := voz.GetVoices.Item(combobox1.ItemIndex);

voz.Speak(Edit1.Text,0);

{/code}

 

Com a linha voz.Voice := voz.GetVoices.Item(combobox1.ItemIndex); selecionamos a voz com a qual desejamos que o texto seja lido conforme seleção na caixa de seleção (ComboBox).

Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa

 

Uma coisa que pode ser muito útil em vários tipos de projetos é poder guardar algum tipo de informação no registro do Windows. Pode ser uma configuração do software, algum caminho para acesso à arquivos ou até mesmo dados sobre o usuário ou computador.

Os exemplos apresentados gravam sobre a chave primária HKEY_CURRENT_USER, por questões de comodidade e segurança.

Para isso basta usar os seguintes procedimentos/funções:

 

 

{code}

procedure gravarRegistro(chave : String; variavel: String; valor : String);
var Reg : TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey(chave,True);
Reg.WriteString(variavel,valor);
finally
Reg.CloseKey;
Reg.Free;
end;
end;

{/code}

 

Com o exemplo acima passamos três parâmetros, chave é a folha da árvore do registro onde os dados serão guardados, variável é o nome da variável onde será guardado o valor.

 

Em Reg.OpenKey(chave,True) passamos o parâmetro TRUE para que caso a chave não exista ela seja criada.

 

Agora para ler um valor previamente armazenado:

 

 

 

{code}
function lerRegistro(chave : String; variavel : String) : String;
var Reg : TRegistry;

retorno : String;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey(chave,False);
retorno := Reg.ReadString(variavel));
finally
Reg.CloseKey;
Reg.Free;
end;

return retorno;
end;

{/code}

 

Para Reg.OpenKey(chave,False) passamos o parâmetro FALSE para que caso a chave não exista não seja retornado nada e nem seja criada.

Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa

 

Ter as informações de usuário logado e nome do computador pode facilitar muito a vida do desenvolvedor na hora de pensar em métodos para manter uma aplicação segura. Também ajuda na hora de facilitar a vida do usuário com a infindável  quantidade de usuários e senhas que é preciso se lembrar hoje em dia.

Com essas informações você pode garantir senhas seguras para que o usuário ingresse no computador através de uma rede e um controlador de domínios e para as aplicações dispensar a utilização de usuário e senha a cada vez que o usuário executa-a. Detectando o nome do usuário a aplicação pode encarregar-se de disponibilizar apenas o que lhe permitido sem a necessidade de digitação de uma senha diferente da que foi entrada no logon do sistema operacional, por exemplo.

Essa restrição pode ainda incluir o nome do computador permitindo que o usuário seja atrelado ao seu equipamento, podendo usar o sistema apenas da máquina para qual foi nomeado. Mas isso não garante segurança, já que o nome do computador pode ser alterado por qualquer usuário com privilégios para tal, mas pode ajudar a programar algum controle extra.

Outra ideia pode ser executar um programa na inicialização do sistema que crie um log, talvez em banco de dados, de qual usuário usa qual computador com detalhes de data e hora.

 

Construindo:

 

1. Inicie um novo projeto;

2. No novo formulário inclua quatro TLabel e um TButton;

a. Para o Label1 ajuste a propriedade CAPTION para “Usuário:”;

b. Para o Label2 ajuste a propriedade CAPTION para “Computador:”;

c. Para o Button1 ajuste a propriedade CAPTION para “Pegar”;

 

 

3. Clique duas vezes sobre o botão “Pegar” e declare as seguintes variáveis para a PROCEDURE Button1Click:

 

{code}

var

u, c: array[0..127] of Char;

sz: dword;

{/code}

 

4. Agora digite o seguinte código no corpo da PROCEDURE:

 

{code}

sz := SizeOf(u);

GetUserName(u, sz);

sz := SizeOf(c);

GetComputerName(c, sz);

Label3.Caption := u;

Label4.Caption := c;

{/code}

 

Entendendo o código:

 

As variáveis u e c são cadeias de caracteres de 127 bytes, é necessário que sejam declaras assim pois as funções onde serão usadas aceitas apenas parâmetros do tipo CHAR. A variável sz é do tipo dWord, pois receberá o tamanho das variáveis u e c, na linha abaixo:

 

sz := SizeOf(u)

 

Para as funções GetUserName, que obtém o nome do usuário logado e GetComputerName que obtém o nome do computador são passadas como parâmetro as variáveis u e c, repesctivamente, juntamente com o tamanho delas, após executada as funções o retorno de dados ocorrerá nessas variáveis.

 

Executando:

 

Execute seu projeto e clique no botão “Pegar”. Os componentes Label3 e Label4 serão preenchidos, respectivamente, com o nome do usuário logado e o nome do computador.

 

 

Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa

 

 

Toda a implementação desse tutorial foi feita utilizando o Delphi 2005, se você usá-lo em outra versão, por favor, relate para nós os resultados.

 

Certifique-se de, antes de começar, possuir uma webcam devidamente instalada no seu computador.

 

Baixe o componente tscap32 em http://tscap32.sourceforge.net/ há também uma cópia para download do componente em http://www.seucurso.com.br/downloads/tscap32_delphi7_release.zip

 

Descompacte-o em uma pasta que seja de fácil localização.

 

No Delphi:

 

Clique no menu File e clique sobre a opção Open:

 

 

Encontre o arquivo tscap32.dpk (que deverá estar na pasta criada com a descompactação do componente baixado) e clique no botão Abrir:

 

 

Quando solicitado para qual versão deseja-se converter o componente selecione a opção Delphi for Win32 e clique no botão OK:

 

 

Você deverá ver o componente aberto no Project Manager, do lado direito da janela do Delphi:

 

 

Clique sobre o nome do componente com o botão da direita do mouse e selecione a opção Compile:

 

 

Verifique se não há erros de compilação, warnings (alertas) não impedirão de prosseguirmos, mas verifique-os para ter certeza de que não há nenhum erro que necessite de correção, como por exemplo, arquivos faltantes ou não encontrados.

 

Clique novamente sobre o nome do componente com o botão da direita do mouse e selecione a opção Install:

 

 

 

Você deverá obter uma janela confirmando a instalação:

 

 

Precisamos fechar o componente, que já está instalado, para isso vá ao menu File e clique sobre a opção Close All:

 

 

Ao ser solicitado para salvar as alterações feitas, você pode clicar sobre o botão No se desejar, nada será perdido ou alterado na instalação feita.

 

Vamos criar uma aplicação usando os componentes recém instalados para testá-los. Clique no menu File e na opção New clique sobre VCL Forms Application – Delphi for Win32:

 

 

Encontre o componente TtsCap32, no grupo tsTech do Tool Palette e arraste-o para seu formulário:

 

Salve seu projeto!

 

Encontre os seguintes arquivos descompactados junto com o componente tscap32 e copie-os na mesma pasta onde você salvou seu projeto:

 

tscap32_rt.dcu

tstlg.dcu

vfwunit.dcu

tsDibRel.dcu

tsMessages.dcu

 

Copie também a pasta tsCap32FormResources.

 

Coloque no evento onCreate do seu formulário o seguinte código:

 

{code}

tsCap321.Connected := True;

{/code}

 

 

Execute seu projeto! Divirta-se:

 

I

Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa

De forma análoga ao projeto do cliente NTP também podemos criar um servidor de horário usando o Delphi. Uma aplicação que pode fornecer horário a sistemas operacionais e outras aplicações via protocolo NTP.

Um exemplo de uso é quando apenas uma máquina tem acesso à Internet, ou acesso menos restrito que as demais, que pode atualizar aplicações e outras máquinas em uma rede. Também quando não há acesso à Internet, mas é possível conectar um GPS ao computador, o GPS fornece o horário correto ao computador que via servidor NTP repassa aos computadores e aplicações da rede.

 

Construindo:

 

1. Inicie um novo projeto;

2. No novo formulário insira um componente TIdTimeServer:

a. Ajuste a propriedade Active do componente IdTimeServer para TRUE;

 

 

Entendendo o código:

 

O componente IdTimeServer quando ativado começa a obter a data e hora atuais do computador e fornecer via protocolo NTP na porta UDP:123. Para testar seu funcionamento é preciso executar o cliente NTP com a propriedade HOST ajustada para endereço do computador onde o servidor está sendo executado ou com o texto “LOCALHOST” caso seja no mesmo computador.

 

Executando:

 

Execute seu projeto e utilize o cliente NTP do projeto anterior para testar seu funcionamento.