Cadastre-se Revistas DevMedia Cursos
 

Space de PAULO QUICOLI
Busca Autor


Últimas 20 atualizações de PAULO QUICOLI

Artigo - Artigo Clube Delphi 102 - Messenger Personlizado

Esse artigo faz parte da revista Clube Delphi Edição 102. Clique aqui para ler todos os artigos desta edição

Win32

Suporte técnico on-line via chat

Faça você mesmo um aplicativo de Chat usando Delphi

Neste artigo veremos

·         Como utilizar a suíte de componentes Indy;

·         Como criar um protocolo de comunicação;

·         Como utilizar o protocolo criado em um aplicativo de troca de mensagens instantâneas.

Qual a finalidade?

·         Desenvolvimento de um servidor de mensagens no estilo MSN.

Quais situações utilizam esses recursos?

·         Em sistemas que necessitam trocar informações através de uma rede TCP/IP.

 

Resumo do DevMan

         Manter uma forma de comunicação barata e eficiente com o cliente é essencial. E se esse meio de comunicação puder ser personalizado para sua empresa, melhor ainda. Aumentar a comunicação do cliente com o suporte técnico e ter essa preocupação com o bom atendimento, sem dúvida é o diferencial de qualquer empresa. Hoje o mercado tem usado freqüentemente o Messenger da Microsoft para manter um bom relacionamento com seus clientes, porém muitas empresa temem o uso indiscriminado da ferramenta, além é claro do risco de vírus na rede.

         Neste artigo um serviço de troca de mensagens instantâneas será desenvolvido e personalizado de acordo com as nossas necessidades. Criaremos um pequeno protocolo para troca de mensagens e um servidor para distribuir o fluxo de comandos.

 

Acredito que a uma boa parte de nós, programadores que precisam manter contato com seus clientes, utilizam o MSN para prestar suporte técnico. Porém existem alguns clientes que não permitem o uso de aplicativos de mensagem instantânea com medo de que sua rede seja infectada por vírus ou até mesmo por achar que os funcionários ficarão batendo papo o dia todo. Como resolver esse impasse? É aí que o Delphi vem em nosso socorro. Por que não criar um serviço de chat, estilo MSN, só que personalizado para sua empresa? O cliente com esse chat instalado não veria outra coisa a não ser a disponibilidade do suporte e você poderia ver todos os clientes que estão on-line. Com certeza ao mostrar esse aplicativo a esse cliente ele iria se sentir seguro, pois o serviço de comunicação estará com o logo da sua empresa e apenas o setor de suporte estará disponível. Vamos por a mão na massa e agregar valor aos nossos negócios!

Uma visão geral

Nosso DevChat, nome que daremos a nossa aplicação, será composto de 3 partes: um server e dois clients. O server será responsável por manter os clients cadastrados e seu estado. Também caberá a ele direcionar a comunicação entre os clients. Isso significa que para um client enviar uma mensagem de texto para outro, essa deverá ser enviada ao server e então será encaminhada para o destinatário (Figura 1) e para isso o client deve se conectar ao Server por meio da Internet.

 

Figura 1. Interação entre clients e server

Os outros dois clients são muito parecidos. Um será destinado aos clientes e a ele só será permitido enxergar a equipe de suporte. O outro será utilizado pelo suporte e nele estarão sendo exibidos todos os clientes.

Mas o que esperar do nosso DevChat ? Quero implementar junto com vocês as seguintes funcionalidades:

·         Troca de mensagens, formato texto simples: Quem nunca sentiu dificuldade em ler certos diálogos no MSN onde a cada palavra que a pessoa digita do outro lado forma um gif animado pra você? Nosso chat será uma ferramenta de suporte da sua empresa, por isso, isso será cortado.

·         Notificação de mudança de estado: Será possível identificar quem está on-line ou não.

Acredito que com esses requisitos estamos cobrindo o que há de mais básico em termos de comunicação textual on-line.

Construindo o servidor

Como já mencionado, o server deve manter os clients cadastrados.  Para isso vou utilizar um banco de dados Firebird. Na Figura 2 vemos as tabelas que o compõem. Além disso, também é sua responsabilidade validar quem está tentando se conectar. Para que o exemplo faça sentido, crie um banco de dados com o nome que desejar, aqui criamos com o nome DevChat.fdb, e nele crie as tabelas, chaves primárias e estrangeiras conforme o esquema da Figura 2. Não abordarei a criação do banco nesse artigo por não fazer parte do tema.

 

Nota: Não cobrirei aqui a forma que esses clients serão cadastrados, por isso vou inserir alguns registros no banco de dados de forma manual. Seria importante disponibilizar, por exemplo, uma página onde seus clientes pudessem baixar o client e registrar um usuário e senha.

 

Figura 2. Diagrama do banco de dados DevChat.fdb

A comunicação realizada em um aplicativo de Chat se dá através de uma rede TCP/IP, ou seja, para criarmos nosso servidor ele deve ser capaz de utilizar TCP/IP para enviar e receber mensagens. Como fazer isso com Delphi? Quando você instala o Delphi um dos pacotes de componentes que é adicionado é o Indy. Ele é composto por um conjunto de componentes específicos para trabalhar com redes e oferece os mais variados recursos. Neste artigo vamos utilizar a versão disponibilizada junto com o RAD Studio 2007. Portanto crie um novo projeto no RAD Studio e salve-o como DevChatServer.dproj e deixe-o como na Figura 3.

Figura 3. Exemplo de tela do DevChat-Server

Adicione também um Data Module ao projeto e conecte-se ao banco de dados, como na Figura 4. Os componentes qryEmpresa, qryUsuario, qrySuporte simplesmente acessam suas respectivas tabelas e juntamente com os controles de update (upUsuario e upSuporte) permitem que sejam atualizadas informações.

 

Nota: Para conexão com o banco de dados, estamos usando os componentes na paleta Interbase, tais como IBDataBase, IBQuery, IBTransation e IBUpdateSQL. Porém, nada impede que façamos tais conexões utilizando outros componentes de acesso a dados como o dbExpress, por exemplo.


Figura 4. Data Module para conexão ao banco

Ao formulário principal adicione um componente idTCPServer que está localizado na guia Indy Servers. É este componente que pode tornar nosso aplicativo um servidor. Nele configuramos qual porta o DevChat irá utilizar para escutar os clients que desejam se conectar. Para ativar o servidor vamos colocar no evento OnClick do botão Iniciar o código da Listagem 1.

Listagem 1. Iniciando o servidor

procedure TfrmPrincipal.btnIniciarClick(Sender: TObject);

begin

  if btIniciar.Caption = 'Iniciar' then

  begin

    tcpServer.DefaultPort := strtoInt(editPorta.Text);

    tcpServer.Active := true;

    dtm.qryUsuario.Close;

    dtm.qryUsuario.SQL.Clear;

    dtm.qryUsuario.SQL.Text := 'UPDATE USUARIO SET ONLINE = 0, STATUS = 0';

    dtm.qryUsuario.ExecSQL;

    dtm.qryUsuario.Transaction.CommitRetaining;

    dtm.qryUsuario.Close;

    dtm.qrySuporte.Close;

    dtm.qrySuporte.SQL.Clear;

    dtm.qrySuporte.SQL.Text := 'UPDATE SUPORTE SET ONLINE = 0, STATUS = 0';

    dtm.qrySuporte.ExecSQL;

    dtm.qrySuporte.Transaction.CommitRetaining;

    dtm.qrySuporte.Close;

    btIniciar.Caption := 'Parar';

  end

  else

  begin

    tcpServer.Active := false;

    btIniciar.Caption := 'Iniciar'

  end;

  Total := 0;

end;

Se executarmos o programa e clicarmos sobre o botão Iniciar é provável que o firewall do seu sistema operacional seja acionado. Isso acontece porque estamos abrindo uma porta de conexão. No caso do Windows XP, basta confirmar e tudo estará funcionando. Caso o exista algum firewall no seu sistema operacional que não seja o do próprio Windows, talvez seja necessário dar permissão para o sistema que acabamos de desenvolver.

Na Listagem 1 estamos passando, através da propriedade DefaultPort, para o componente tcpServer qual porta será utilizada para manter uma comunicação e então o ativamos. Após isso, ajustamos todos os usuários a terem seu status como off-line apenas fazendo um Update nas tabelas Usuario e Suporte. Isso é necessário, já que em teoria nenhum usuário ou suporte técnico poderia estar on-line com o servidor off-line.

Como dito anteriormente, o servidor ficará escutado as requisições das outras duas aplicações e fará o redirecionamento das mensagens de um para outro. Por isso, precisaremos prever que tipos de mensagem e como elas serão interpretadas no lado servidor.

O que precisamos fazer agora é programar o servidor para que ele seja capaz de interpretar o que recebe e conseqüentemente distribuir as mensagens e comandos recebidos. Usaremos o evento OnExecute do componente TIdTCPServer. Clique duas vezes sobre esse conforme visto na Listagem 2.

Nessa Listagem 2, recebemos o valor passado pelo client através do parâmetro do evento. Em seguida fazemos um copy na variável Texto para que possamos saber qual comando ou mensagem foi passado. Caso a mensagem seja listaSuporte chamamos o método GetUsuariosSuporte. Você precisará criar essa função conforme a Listagem 3. Veja que a tarefa é simples, apenas conectamos ao banco de dados, executamos uma instrução SQL para retornar todos os membros do suporte técnico e carregamos em um TStringList que é passado como retorno.

Listagem 2. Processando o comando de lista de suporte

procedure TServerF.tcpServerExecute(AContext: TIdContext);

var

  comando: string;

  Texto: string;

  ListaSuporte: TStringList;

begin

  Texto:= AContext.Connection.IOHandler.ReadLn;

  comando := Copy(Texto, 1, Pos('||', Texto)-1);

  if comando = 'listaSuporte' then

  begin

    ListaSuporte := GetUsuariosSuporte;

    AContext.Connection.IOHandler.WriteRFCStrings(ListaSuporte);

  end;

end;

Listagem 3. Obtendo a lista de suporte

function TServerF.GetUsuariosSuporte: TStringList;

var

 ListaSuporte: TStringList;

begin

  dtm.qrySuporte.Close;

  dtm.qrySuporte.SQL.Clear;

  dtm.qrySuporte.SQL.Add('SELECT * FROM SUPORTE');

  dtm.qrySuporte.Open;

  ListaSuporte := TStringList.Create;

  while not dtm.qrySuporte.Eof do

  begin

    ListaSuporte.Append('listaSuporte||' +

      dtm.qrySuporteID_SUPORTE.asString + '||' +

      dtm.qrySuporteAPELIDO.AsString + '||'+

      dtm.qrySuporteONLINE.AsString + '||'+

      dtm.qrySuporteSTATUS.AsString+ '||');

    dtm.qrySuporte.Next;

  end;

  dtm.qrySuporte.Close;

  result := ListaSuporte;

end;

Mais tarde veremos que a lista retornada será utilizada para armazenar esses integrantes do suporte na versão client e para isso vamos utilizar o que o Delphi nos oferece de melhor, um ClientDataSet.

Mas antes disso veremos outro ponto importantíssimo em nossa solução. Para que as três aplicações conversem entre si, vamos estabelecer um protocolo. Definiremos algumas regras e comandos que farão com que os três aplicativos enviem e recebam mensagens e comandos entre si.

No servidor é preciso agora verificar se o usuário que está tentando se conectar é válido. Toda vez que algum usuário tenta se conectar utilizando o host e porta específicos, o evento onConnect do TcpServer é disparado e é nele que vamos verificar as informações que estão chegando. Programe o evento OnConnect mencionado anteriormente conforme a Listagem 4.

Listagem 4. Validando a conexão

procedure TServerF.tcpServerConnect(AContext: TIdContext);

var

  cliente: TUsuario;

  loginInfo: TLoginInfo;

  IdUsuario: integer;

  texto, comando: string;

begin

  texto := AContext.Connection.IOHandler.ReadLn;

  comando := Copy(texto,1,pos('||',texto)-1);

  delete(texto,1,pos('||',texto)+1);

  loginInfo := TLoginInfo.Create;

  loginInfo.IdEmpresa := strToInt(Copy(texto,1,pos('||',texto)-1));

  delete(texto,1,pos('||',texto)+1);

  loginInfo.Nick := Copy(texto,1,pos('||',texto)-1);

  delete(texto,1,pos('||',texto)+1);

  loginInfo.Senha := Copy(texto,1,pos('||',texto)-1);

  idUsuario := Login(loginInfo.IdEmpresa, loginInfo.Nick, loginInfo.Senha);

  if idUsuario > 0  then

  begin

    cliente := TUsuario.Create;

    cliente := LoadUsuario(idUsuario);

    cliente.IP := AContext.Connection.Socket.Binding.PeerIP;

    cliente.Host := GStack.HostByAddress(cliente.IP);

    cliente.Online := oSim;

    cliente.Status := sDisponivel;

    AContext.Data := cliente;

    AContext.Connection.IOHandler.WriteLn('sucessoLogin||'

      + IntToStr(cliente.IdUsuario)+ '||');

   Total := Total + 1;

  end

  else

  begin

    AContext.Connection.IOHandler.WriteLn('sucessoLogin||'

      + IntToStr(idUsuario)+'||');

    Acontext.Connection.Disconnect;

  end;

  loginInfo.Free;

end;

 

Vamos entender a Listagem 4. Observe que o evento tcpServerConnect carrega consigo um parâmetro do tipo TIdContext, o AContext. Para cada client que se conecta, ou tenta se conectar, um novo TIdContext é criado o representando. A variável AContext contém informações importantes, como por exemplo a conexão atual, e através dela podemos obter os comandos que o client está enviando.  Isso é feito na linha a seguir:

 

texto := AContext.Connection.IOHandler.ReadLn;

 

Perceba que em dado momento, recebemos o ID do usuário na variável idUsuario. Essa variável recebe a identificação do usuário através da função Login.

 

  idUsuario := Login(loginInfo.IdEmpresa, loginInfo.Nick, loginInfo.Senha);

 

Veja que desmembramos o conteúdo da variável texto em um objeto da classe TLoginInfo e passamos o resultado para o método Login, que por sua vez retorna o Id do usuário, 0 se o login não for válido ou ainda -1 se o usuário já estiver conectado. Caso o usuário seja válido, um objeto do tipo TUsuario é instanciado e passado para a propriedade Data do objeto AContext atual, então enviamos o retorno disso de volta para o client, que digo novamente é representado pelo objeto AContext. Atualizamos a quantidade de usuários conectados no server.

 

Nota: A definição da classe TLoginInfo e TUsuario é feita na Unit ClientesU e por questões de espaço não é exibida aqui mas está disponível para download.

 

Crie uma nova função no Server para que possamos fazer esse trabalho. Veja seu código na Listagem 5. Na Listagem 5 vemos como que um usuário é validado. Criamos uma function chamada Login que é chamada de dentro do evento OnConnect retornando o ID do usuário. A validação é ainda mais simples do que vimos até agora. Apenas pegamos a Empresa, Apelido e Senha do usuário e efetuamos consultas ao banco de dados.

Listagem 5. Verificando o usuário junto ao banco de dados

function TServerF.Login(IdEmpresa: integer; Nick, Senha: string): Integer;

begin

  dtm.qryUsuario.Close;

  dtm.qryUsuario.SQL.Clear;

  dtm.qryUsuario.SQL.Add('SELECT * FROM USUARIO');

  dtm.qryUsuario.SQL.Add('WHERE ID_EMPRESA = :ID_EMPRESA');

  dtm.qryUsuario.SQL.Add('AND APELIDO = :NICK');

  dtm.qryUsuario.SQL.Add('AND SENHA = :SENHA');

  dtm.qryUsuario.ParamByName('NICK').AsString := Nick;

  dtm.qryUsuario.ParamByName('ID_EMPRESA').AsInteger := IdEmpresa;

  dtm.qryUsuario.ParamByName('SENHA').AsString := Senha;

  dtm.qryUsuario.Open;

  if dtm.qryUsuario.IsEmpty then

    result := 0

  else

  begin

    if dtm.qryUsuarioONLINE.AsInteger = 1 then

      result := -1

    else

    begin

      result := dtm.qryUsuarioID_USUARIO.AsInteger;

      dtm.qryUsuario.Edit;

      dtm.qryUsuarioONLINE.AsInteger := 1;

      dtm.qryUsuarioSTATUS.AsInteger := 1;

      dtm.qryUsuario.Post;

      dtm.qryUsuario.Transaction.CommitRetaining;

    end;

  end;

  dtm.qryUsuario.Close;

end;

Definindo um protocolo

Como o client precisa se comunicar com o servidor é necessário que criemos um protocolo de comunicação que seja obedecido e conhecido pelas partes envolvidas. Um protocolo de comunicação é um conjunto de comandos e valores que são formatados em um padrão pré-determinado. Nosso protocolo será simples, baseado em texto simples e cobrirá as funcionalidades citadas anteriormente. Veja que nas Tabelas 1 e 2 especificamos os o comandos válidos que serão trocados entre aplicação cliente e servidora, respectivamente.

Funcionalidade

Protocolo

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
08/01/2010 16:21:00





Pocket Video - Palestra webMobile TeckWeek 2009 - NHibernate: o que você está perdendo ao não utilizar


Atenção! Este vídeo necessita do aplicativo DevMedia Player para ser executada. Clique aqui para baixar o aplicativo

Título: Palestra webMobile TeckWeek 2009:NHibernate: o que você está perdendo ao não utilizar [01 h:23 min:21 s]

Duração: 01:23:21 min.

Descrição: Nesta palestra, Paulo Quicoli nos falará o que estamos perdendo por não utilizar o NHibernate. Por que um banco de dados relacional (Padrao de mercado; Estabilidade; Independentes; Segurança; Ponto de compartilhamento); Diferenças de uma estrutura relacional com uma orientada a objetos;Relacional e objetos não combinam (Granularidade; Subtipos; Navegação; Identidade; Unicidade; Estrutura de uma aplicação NHibernate; Muitos exemplos práticos....


-->">
18/10/2009 12:34:00





Artigo - PNG no Delphi Win32


PNG no Delphi Win32

 

Procurando melhorar o visual das minhas aplicações, comecei a procurar pela internet pelos belos ícones e imagens do Windows Vista. Encontrei vários pacotes de imagens, a maioria deles continha arquivos PNG.

Como não queria convertê-los para JPG e causar uma possível perda de qualidade e também perda do efeito de transparência, procurei por algum componente que permitisse utilizar arquivos PNG diretamente no Delphi. Encontrei então o PNG Delphi, um componente feito pelo brasileiro Gustavo Daud, e que pode ser baixado em http://pngdelphi.sourceforge.net.

O padrão PNG veio para substituir o Gif, apresentando o recurso de transparência parcial de imagens, e com o PNG Delphi, conseguimos isso.

Instalando

Infelizmente o componente não vem com um pacote pronto para instalação, e devemos então criar esse pacote. Entre no menu Component -> Install Component. Na janela que surgir, Figura 1, escolha a guia Into new package . No campo Unit file name localize o arquivo pngextra.pas.

 

 

Figura 1. Instalando o PNGDelphi

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
22/12/2008 13:19:00





Video aula - Como registrar em que folha foi impresso um determinado registro em um relatório


Atenção! Este vídeo necessita do aplicativo DevMedia Player para ser executada. Clique aqui para baixar o aplicativo

 

Título: Como registrar em que folha foi impresso um determinado registro em um relatório

 

Tempo: 34:31 min.

 

Mini-Resumo: Nesta vídeo-aula o autor apresenta um problema  e sua solução. O problema em questão é: Ao imprimir um relatório, no registro impresso deve ser registrada a folha em que ele constou. Para efeito de demonstração um banco de dados Firebird, contendo uma tabela de nomes fictícios foi utilizada e como gerador de relatório  foi empregado o QuickReport. A solução utiliza ainda recursos do Firebird (generators),  QuickReport (eventos de banda) e do próprio Delphi (ClientDataSet) trabalhando em conjunto para que a cada registro impresso tenha seu número de folha registrado.

-->">
01/12/2008 10:16:00





Video aula - Criando um pequeno framework para notificação de erros-parte III-Implementando o construtor da classe e criando método que retorna lista de erros existentes


Título: Criando um pequeno framework para notificação de erros-parte III-Implementando o construtor da classe e criando método que retorna lista de erros existentes

 

Tempo: 00:29:48

 

Mini-Resumo: Nesta vídeo-aula, dando continuidade ao projeto ErroNotifier, o autor implementa mais dois métodos, o construtor da classe e um que retornará uma lista de erros existentes.  O construtor da classe recebe como parâmetro um objeto que implementa a interface INotifier, já explicada em vide aulas anteriores. Para esse fim então é criada uma implementação padrão de notificação de erros, o TDefaultNotifier que atua da seguinte forma:

Ao iniciar a notificação, o controle a ser notificado mudar de cor e tem seu hint alterado. Ao finalizar a notificação o controle volta ao seu estado anterior. Para isso, no método construtor desse objeto é passado como parâmetro a cor que indica erro e a cor que indica que tudo é válido.Com isso tudo implementado chega a hora de demonstrar o framework em funcionamento. Ao projeto criado, no formulário principal, são adicionados dois TEdits que serão validados no respectivo evento OnChange. Uma referência, um campo privado do tipo TErroNotifier, é instanciado e utilizado. Na próxima vídeo aula será mostrado como implementar alguns eventos que permitirão outras formas de notificação, na verdade, formas auxiliares, além de será criado um outro notificador padronizado que irá adicionar ao lado do controle inválido um ícone de erro.

-->">
03/10/2008 17:45:00





Video aula - Criando um pequeno framework para notificação de erros-parte II-Iniciando a implementação do centralizador (Criando um notificador para o projeto)


Título: Criando um pequeno framework para notificação de erros-parte II-Iniciando a implementação do centralizador (Criando um notificador para o projeto)

 

Tempo: 00:26:30

 

Mini-Resumo: Dando continuidade ao pequeno framework ErrorNotifier o autor inicia a implementação do centralizador e define uma interface que deve ser utilizada para implementação de notificadores personalizados. Além da definição da interface uma breve discussão da importância do uso de interfaces é feita, mostrando como elas são utilizadas para diminuir o acoplamento entre objetos, que é um dos principais problemas em sistemas orientados a objetos mal projetados. Também é mostrado como que o GUID é gerado a partir da IDE do Delphi.  A classe que representa o centralizador é constituída, neste estágio, de uma API simples e objetiva. São mostrados os métodos para adicionar um controle e para remover um controle da respectiva lista e também como verificar se um controle já não consta na lista, isto pra que se evite que um usuário desatento tente inserir o mesmo controle duas vezes no framework. Além disso também é visto no código o uso da interface criada, provando assim o desacoplamento entre objetos e classes. Para a próxima parte da vídeo aula será mostrado como implementar os mais variados tipos de notificadores.

-->">
05/09/2008 00:53:00





Video aula - Criando um pequeno framework para notificação de erros-parte I-Implementando a classe TInvalidControl


Título: Criando um pequeno framework para notificação de erros-parte I-Implementando a classe TInvalidControl

 

Tempo: 00:17:40

 

Mini-Resumo: Nesta vídeo-aula o autor apresenta uma forma de se melhorar o relacionamento entre usuários e sistemas no que diz respeito à notificação de erros. É proposta a criação de um pequeno framework, o ErrorNotifier, para centralizar e notificar ao usuários quais campos de um janela de entrada de dados estão inválidos, semelhantemente a um controle já existente na suíte JVCL e também no .NET Framework.Um diagrama do funcionamento do framework é utilizado para expor melhor as idéias envolvidas, entre elas é a de não centralizar no framework a validações, e sim os controles que não passaram pela validação feita pro nós. Esse framework é formado por duas classes distintas, um que representa o centralizador de controles inválidos e outra que é responsável pela notificação, não importando a forma. A codificação é iniciada utilizando orientação a objetos, com o desenvolvimento da primeira classe envolvida no negócio, a classe que representa os controles inválidos e que será utilizada na segunda parte desta vídeo-aula, quando o centralizador de erros for implementado.

-->">
05/09/2008 00:41:00





Video aula - Como auto-completar uma data digitada por um usuário-Parte II-(Final)


Autor:Paulo Quicoli

Título:Como auto-completar uma data digitada por um usuário-Parte II-(Final)

Tempo: 24:28 min

Mini Resumo: O autor apresenta aplicar o recurso de autocompletar uma data em controle Dataware

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: O exemplo construído cria um controle herdado de TDBEdit que permite ao usuário final digitar uma data incompleta e o controle se encarrega de completá-la.

Palavras chaves: Criação de componentes, Delphi 2007.

 

 

-->">
18/06/2008 00:22:00





Video aula - Como auto-completar uma data digitada por um usuário-Parte I-


Autor: Paulo Quicoli

Título: Como auto-completar uma data digitada por um usuário-Parte I-

Tempo: 17:53 min

Mini Resumo: O autor mostra como criar uma procedure que autocompleta uma data digitada por um usuário

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: Utilizando inicialmente um TEdit para digitação de uma data, é mostrado como auto-completar essa data digitada. Como por exemplo transformar 01/01/08 em 01/01/2008 ou, 01/01 em 01/01/2008.

Palavras chaves: Auto-completar, Datas, Delphi

 

 

 

 

 

-->">
08/06/2008 17:47:00





Video aula - Incorporando uma DLL em um executável


Autor: Paulo Quicoli

Título: Incorporando uma DLL em um executável

Tempo: 29:37 min

Mini Resumo: O autor apresenta como é possível incorporar uma DLL, ou qualquer outro arquivo, em um executável fazendo uso de resources.

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: Criando um arquivo de resource uma DLL é incluída em um executável e a mesma é então extraída na inicialização do executável.

Palavras chaves: Arquivo de resources, Delphi

 

 

 

-->">
30/03/2008 19:38:00





Video aula - Destacando as linhas de um dbGrid ao mover do mouse


Autor: Paulo Quicoli

Título: Destacando as linhas de um dbGrid ao mover do mouse

Tempo: 20:41 min

Mini Resumo: O autor apresenta como é possível, ao mover do mouse sobre o dbgrid, destacar a linha em que o mouse se encontra. 

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: Ao hackear a classe TDBGrid os métodos protegidos tornam-se acessíveis podendo assim ao evento onMouseOver implementar o destaque da posição atual do mouse sobre o dbGrid

Palavras chaves: DBGrid, VCL, Delphi

 

 

 

 

 

 

-->">
21/03/2008 10:48:00





Video aula - Criando busca incremental em um ListBox


Autor: Paulo Quicoli

Título: Criando busca incremental em um ListBox

Tempo: 10:31 min

Mini Resumo: O autor apresenta como é possível realizar uma busca incremental dentre os itens de um ListBox

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: Usando mensagens do Windows o exemplo demonstra como é possível localizar itens de um ListBox apenas digitando suas iniciais

Palavras chaves: Mensagens do Windows, Delphi.

 

 

 

 

-->">
20/03/2008 00:35:00





Video aula - Controlando transações manualmente no DbExpress4 com Delphi 2007


Autor: Paulo Quicoli

Título:Controlando transações manualmente no DbExpress4 com Delphi 2007

Tempo: 26:59 min

Mini Resumo: O autor mostra como é possível utilizar a API do DBX 4 para controlar manualmente as transações de um banco de dados.

Tecnologias utilizadas: Delphi 2007, DBX 4

Exemplos construídos: Em um cadastro simples é demonstrado como utilizar o TDBXTransaction para controlar manualmente as transações, efetuando commit ou rollback, e também como é possível levantar uma exceção caso um applyupdates não dê certo.

Palavras chaves: Mensagens do Windows, Delphi

 

 

-->">
12/03/2008 22:51:00





Video aula - Apresentando mensagens do windows durante a execução de uma aplicação


Autor: Paulo Quicoli

Título: Apresentando mensagens do windows durante a execução de uma aplicação

Tempo: 13:27 min

Mini Resumo: O autor mostra como é possível tornar a aplicação mais responsiva utilizando as mensagens do windows

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: É explicado como utilizadar a API SendMessage e como utilizar o método Application.ProcessMessages

Palavras chaves: Mensagens do Windows, Delphi.

 

 

 

-->">
07/03/2008 00:03:00





Video aula - Construindo uma ferramenta de busca de arquivos - Parte II


Autor: Paulo Quicoli

Título: Construindo uma ferramenta de busca de arquivos - Parte II

Tempo: 23:21 min

Mini Resumo: O autor apresenta como fazer uso do componente ShellTreeView dentro da aplicação de exemplo e como utilizar de forma recursiva a procedure de busca de arquivos

Tecnologias utilizadas: Delphi 7

Exemplos construídos: Continuando com o exemplo anterior agora é possível selecionar de forma visual em qual pasta será realizada a busca e como aplicar a busca dentro de subdiretórios

Palavras chaves: Busca de arquivos, Procedures/Funções recursivas, Delphi 7.

 

 

-->">
27/02/2008 21:10:00





Video aula - Construindo uma ferramenta de busca de arquivos - Parte I


Autor: Paulo Quicoli

Título: Construindo uma ferramenta de busca de arquivos - Parte I

Tempo: 34:09 min

Mini Resumo: O autor apresenta como realizar buscas de arquivos utilizando o Delphi

Tecnologias utilizadas: Delphi 7

Exemplos construídos: O exemplo construído permite ao usuário selecionar a pasta e informar a máscara de busca. Os resultados são então retornados em uma lista que contém detalhes do arquivos, como Nome, Pasta, Tamanho e  Data da última modificação

Palavras chaves: Busca de arquivos, Delphi 7

 

-->">
27/02/2008 20:58:00





Video aula - Introdução ao componente WPTools-Parte IV-Mesclagem de mala direta


Autor: Paulo Quicoli

Título: Introdução ao componente WPTools - Parte IV

Tempo: 33:37 min

Mini Resumo: O autor mostra realizar mesclagem de mala direta.

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: O exemplo existente é acrescido da rotina de geração de mala direta, ou seja, foi criada uma fonte de dados e a partir dela cartas de mala direta são criadas.

Palavras chaves: Editor de Texto, WPTools, Delphi

 

 

-->">
16/01/2008 22:50:00





Video aula - Introdução ao componente WPTools-Inserindo campos, mesclagem de texto e personalizando sua exibição-Parte III


Autor: Paulo Quicoli

Título: Introdução ao componente WPTools - Parte III

Tempo: 20:33 min

Mini Resumo: O autor mostra como inserir campos e mesclagem a um texto e como personalizar sua exibição

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: Dando continuidade ao exemplo anteriormente iniciado, agora é criada uma lista com os campos de mesclagem para que o usuário final possa criar seu arquivo de mala direta.

Palavras chaves: Editor de Texto, WPTools, Delphi.

 

 

 

 

-->">
30/11/2007 00:09:00





Video aula - Introdução ao componente WPTools-Adicionando o editor padrão da WPTools em um projeto próprio-Parte II


Autor: Paulo Quicoli

Título: Introdução ao componente WPTools - Parte II

Tempo: 26:44 min

Mini Resumo: O autor mostra como adicionar o editor padrão da WPTools em um projeto próprio e inicia o trabalho de personalização do editor padrão

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: É iniciado o desenvolvimento de um exemplo que irá gerar cartas de mala direta para pessoas previamente cadastradas em um banco de dados.

Palavras chaves: Editor de Texto, WPTools, Delphi.

 

 

 

-->">
30/11/2007 00:07:00





Video aula - Introdução ao componente WPTools


Autor: Paulo Quicoli

Título: Introdução ao componente WPTools

Tempo: 12:40 min

Mini Resumo: O autor apresenta os recursos oferecidos pelo componente WPTools

Tecnologias utilizadas: Delphi 2007

Exemplos construídos: O exemplo utilizado é distribuído pelo pacote de instalação da WPTools

Palavras chaves: Editor de Texto, WPTools, Delphi.

 

 

 

 

-->">
23/11/2007 00:52:00





 

Editor Geral da revista ClubeDelphi. Formado em processamento de dados pela FATEC-TQ. Atua como Analista de Sistemas na Siplan Control-M unidade Jaboticabal (www.siplancontrolm.com.br), prof. na FATEC-TQ e consultor na NHibernate Brasil (www.nhibernatebrasil.net) Blog:http://quicoli.wordpress.com
Arquivo de atualizações
 2010
 2009
 2008
 2007
 2006
 2005

Estatísticas do Autor:
Número de posts: 142
Características dos posts deste autor:
Conteúdo:
Utilidade:
140 11
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group