sexta-feira, 31 de agosto de 2012

Video: RLGroup e RLDBResult - Curso Fortes Reports com Delphi - Parte 2



Autor: Rodrigo F. Mattos
Tempo: 20:49min.
Mini Resumo: Nesta vídeo aula, vamos aprender a utilizar o componente RLGroup, que é um dos melhores componentes do Fortes Reports, e também vamos aprender a utilizar o componente RLDBResult que com o RLGroup, se torna um dos melhores componentes do Fortes Reports, o componente RLDBResult, soma os valores, e joga como um Total Geral ou um SubTotal.
Metodologia de desenvolvimento do exemplo: A metodologia do curso é a criação de exemplos utilizando o Delphi 2010 e o Fortes Reports, vai ser utilizado banco de dados de exemplo que vem junto com o Delphi. Utilizaremos o Delphi 2010 com os componentes de acesso a dados como o ClientDataSet e muitos outros.
Tecnologias utilizadas: Delphi 2010, Fortes Reports
Palavras chaves: Delphi 2010, Fortes Reports, ClientDataSet



quinta-feira, 30 de agosto de 2012

Função Delphi Registra uma extensão para um determinado aplicativo

procedure RegistrarExtensao(const Extensao, TipoArquivo, NomeAplicacao, Executavel: string);
var
  ChaveArquivo: string;
  Registro: TRegistry;

  procedure EditarChave(const Chave, Valor: string);
  begin
    Registro.OpenKey(Chave, True);
    Registro.WriteString('', Valor);
    Registro.CloseKey;
  end;

begin
  Registro := TRegistry.Create;
  try
    Registro.RootKey := HKEY_CLASSES_ROOT;
    Registro.LazyWrite := False;
    ChaveArquivo := 'Arquivo' + Extensao;

    //Registra a extensão
    EditarChave('.' + Extensao, ChaveArquivo);

    //Define a descrição para o tipo de arquivo
    EditarChave(Format('%s', [ChaveArquivo]), TipoArquivo);

    //Adiciona uma entrada no menu de contexto
    EditarChave(Format('%s\\shell\\open', [ChaveArquivo]), Format('&Abrir com %s', [NomeAplicacao]));

    //Associa a extensão à aplicação
    EditarChave(Format('%s\\shell\\open\\command', [ChaveArquivo]), Format('"%s" "%s"', [Executavel, '%1']));

    //Define o ícone associado ao tipo de arquivo
    EditarChave(Format('%s\\DefaultIcon', [ChaveArquivo]), Format('%s, 0', [Executavel]));
  finally
    Registro.Free;
  end;
  //Notifica o SO da alteração na associação do tipo de arquivo
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end; 

Verificar se o Processo Existe [Delphi]


Essa função retorna TRUE se ela encontrar o processo


function ProcessoExiste(ExeFileName: string): boolean;
const
  PROCESS_TERMINATE=$0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
result := false;

FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);

while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(
    FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
    or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
   begin
Result := true;
exit;
end;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;


Exemplo

   if ProcessoExiste('calc.exe') then
      ShowMessage('Calculadora aberta')
   else
      ShowMessage('Calculadora fechada');

Componente EditNum [Delphi]

Componente Delphi que aceita somente números(ela fica no formado de valores reais ###,#0.00)  e fica alinhado para direita



Instalando Fortes Reports - Curso Fortes Reports com Delphi – Parte 1


Nesta videoaula vamos começar a aprender a usar o Fortes Reports, primeiramente vamos instalar o Fortes Reports no Delphi 2010


Tempo: 18:07 min.

Mini Resumo: Nesta vídeo aula, vamos começar a aprender a usar o Fortes Reports,primeiramente vamos instalar o Fortes Reports no Delphi 2010, e vamos fazer um exemplo bem simples utilizando o Delphi 2010, Fortes Reports e uma base dedados de exemplo que vem junto com o Delphi 2010.

Metodologia de desenvolvimento do exemplo: A metodologia do curso é a criação de exemplos utilizando o Delphi 2010 e o Fortes Reports, vai ser utilizado banco de dados de exemplo que vem junto com o Delphi. Utilizaremos o Delphi 2010 com os componentes de acesso a dados como ClientDataSet e muitos outros.

Tecnologias utilizadas: Delphi 2010, Fortes Reports
Palavras chaves: Delphi 2010, Fortes Reports


quarta-feira, 29 de agosto de 2012

Dispositivos iOS e Android estão tomando conta do mundo

Sabe aquela sensação de que todo mundo, de repente, tem um dispositivo Android ou iOS? Pois bem, de acordo com uma recente pesquisa da consultoria de análises para mobilidade Flurry, essa não é apenas uma sensação, mas um fato.
Mesmo ainda não sendo maioria absoluta em âmbito mundial, a crescente adoção de gadgets com os sistemas operacionais do Google e Apple está literalmente dominando o mundo e, segundo a Flurry (até parafraseando um jargão político brasileiro) “nunca na história de qualquer outro dispositivo houve taxas de adoção como a desses aparelhos”.
A consultoria afirma que as pessoas estão usando iOS e Android 10 vezes mais rápido do estavam adotando o 

Usando CnPack no Delphi7

Olá pessoal tudo bem? Neste artigo vamos falar um pouco sobre o CnPack no Delphi7.



Primeiramente você tem que fazer o download do CnPack, que pode ser feito através desse site: http://www.cnpack.org/showlist.php?id=39<=en, e depois de baixar você instala.





1°: Depois de instalado, na hora que você for abrir o Delphi7 já vai ter o icone do CnPack lá no canto superior direito do Splash.



2°: Na hora que abrir o Delphi7, no projeto que abre junto com o delphi, vai ter algumas coisas nos cantos do form.







3°: Agora vamos falar

Função Que Retorna Somente Números [Delphi]


Remove Todos os  caracteres de uma String deixando somente números 

function SoNumero(fField : String): String; 
var   
  I : Byte; 
begin   
   Result := '';   
   for I := 1 To Length(fField) do      
       if fField [I] In ['0'..'9'] Then        
            Result := Result + fField [I]; 
end; 

Video: Create Component Template


Autor: Rodrigo Francisco de Mattos
Título:
Tempo: 05:08 min
Mini Resumo: Nesta video aula vamos aprender um pouco sobre uma função bastante interessante do delphi, o Create Component Template.
Tecnologias utilizadas: Delphi7.
Palavras chaves: Delphi7.



terça-feira, 28 de agosto de 2012

Video: Lazarus - Free Pascal - Parte 2




Autor: Rodrigo Francisco de Mattos
Título:
Tempo: 08:08 min
Mini Resumo: Nesta video aula vamos criar um banco de dados de teste, e conectar no lazarus com os próprios componentes da IDE.
Tecnologias utilizadas: Lazarus, IBExpert.
Palavras chaves: Lazarus, IBExpert.


Video: Lazarus - Free Pascal - Parte 1



Nesta video aula vamos aprender a baixar, instalar e conhecer um pouco da IDE do Lazarus. Vamos ver que a IDE do Lazarus é muito idêntica ao do Delphi 7, e que ele é multi-plataforma ele roda em Linux, Windows, Mac OS, mas e o melhor de tudo ele é Free, você não precisa usar copias ilegais do delphi, você pode usar o Lazarus.

Busca Valor Em Todos Campos Tabela [Firebird]

Vai a dica para quem quer saber, quais campos tem determinado valor, é uma função onde você passa a Conexão(TSqlConnection), nome da Tabela se for passado * ele vai pesquisar em todas tabela mais o processo é mais lento, e o campo Busca que é o que ele vai pesquisar dentro do campo.


function BuscaValorEmTodosCamposTabela(conexao : TSQLConnection;
                             Tabela,Busca : String) : TStringList;

var
  Query : TSQLQuery;
  qryPesq : TSQLQuery;
begin
   Result  := TStringList.Create;
   Query   := TSQLQuery.Create(nil);
   qryPesq := TSQLQuery.Create(nil);

   Query.SQLConnection := conexao;
   qryPesq.SQLConnection := conexao;

   Query.SQL.Add('Select R.Rdb$Relation_Name, R.Rdb$Field_Name');
   Query.SQL.Add('from rdb$Relation_Fields R, RDB$FIELDS F');
   Query.SQL.Add('where F.rdb$field_name=R.Rdb$field_source');
// AQUI SE VC PREFERIR VC PODE COLOCAR O NOME DA TABELA PARA IR
//  MAIS RAPIDO
// SE FOR * ELE PESQUISA EM TODAS AS TABELA DO BANCO
    if Tabela &lt;&gt; '*' then 
     Query.SQL.Add('and R.Rdb$Relation_Name = '+QuotedStr(Tabela));
   Query.SQL.Add('order by R.rdb$field_position, R.rdb$field_name');
   Query.Open;
   while not Query.Eof do
   begin
      qryPesq.Close;
      qryPesq.SQL.Clear;
      qryPesq.SQL.Add('select first 1 '+Query.Fields[1].AsString+
                               ' from '+Query.Fields[0].AsString);
      qryPesq.SQL.Add('where '+Query.Fields[1].AsString+' like '+
                               QuotedStr('%'+Busca));
      qryPesq.Open;
      if not qryPesq.IsEmpty then
         Result.Add('Tabela: '+Query.Fields[0].AsString+' campo: '+
                      Query.Fields[1].AsString);
      Query.Next;
   end;

   Query.Close;
   qryPesq.Close;
   FreeAndNil(Query);
   FreeAndNil(qryPesq);
end;



Como ela retorna uma String List você pode colocar um Memo
para receber esse valor




procedure TForm1.Button1Click(Sender: TObject);
begin
   Memo1.Lines.AddStrings(BuscaValorEmTodosCamposTabela(SQLConnection1,
         'CLIENTE','RAFAEL'));
end;

Visualizador NFE


Programa para Vizualizar Notas Fiscal Eletrônica, sem necessidade de instalar é só associar a extensão xml a ele, depois com duplo clique em cima do xml, já abrirá a nota fiscal na tela.


segunda-feira, 27 de agosto de 2012

Pegar Pasta Temporária do Windows [Delphi]


Função para Pegar Pasta temporária do Windows


Function GetTemporaryDir: String;
var
  pNetpath: ARRAY[ 0..MAX_path - 1 ] of Char;
  nlength: Cardinal;
begin
  nlength := MAX_path;
  FillChar( pNetpath, SizeOF( pNetpath ), #0 );
  GetTemppath( nlength, pNetpath );
  Result := StrPas( pNetpath );
end;

Filme dos Pacotes pela Internet [Filme]

Um Pequeno Filme, muito bom onde mostrar como funciona o trafico de dados pelo Internet ele fala sobre protocolos,Virus,Proxy,Roteador. Ele vai mostrar o trajeto que o pacote faz para chegar até você. Vale a pena assitir.


Retirar Email de uma pagina com código Html

Vamos fazer uma rotina que pegue os emails que estão no html, da pagina Crie um novo projeto coloque um Edit, um TWebBrowser, e 1 memo e 2 Button vamos para o código:

Button1 mude o caption para Capturar

Button2 mude o caption para IR

declara e função ValidaEMail

Function ValidaEMail(const EMailIn: String):Boolean;
const
 CaraEsp: array[1..40] of string[1] =
 ( '!','#','$','%','¨','&','*',
 '(',')','+','=','§','¬','¢','¹','²',
 '³','£','´','`','ç','Ç',',',';',':',
 '<','>','~','^','?','/','','|','[',']','{','}',
 'º','ª','°');
var
 i,cont   : integer;
 EMail    : ShortString;
begin
 EMail := EMailIn;
 Result := True;
 cont := 0;
 if EMail <> '' then
 if (Pos('@', EMail)<>0) and (Pos('.', EMail)<>0) then    // existe @ .
 begin
 if (Pos('@', EMail)=1) or (Pos('@', EMail)= Length(EMail)) or 
  (Pos('.', EMail)=1) or (Pos('.', EMail)= Length(EMail)) or 
  (Pos(' ', EMail)<>0) then
 Result := False
 else                                   // @ seguido de . e vice-versa
 if (abs(Pos('@', EMail) - Pos('.', EMail)) = 1) then
 Result := False
 else
 begin
 for i := 1 to 40 do            // se existe Caracter Especial
 if Pos(CaraEsp[i], EMail)<>0 then
 Result := False;
 for i := 1 to length(EMail) do
 begin                                 // se existe apenas 1 @
 if EMail[i] = '@' then
 cont := cont + 1;                    // . seguidos de .
 if (EMail[i] = '.') and (EMail[i+1] = '.') then
 Result := false;
 end;
 // . no f, 2ou+ @, . no i, - no i, _ no i
 if (cont >=2) or ( EMail[length(EMail)]= '.' )
 or ( EMail[1]= '.' ) or ( EMail[1]= '_' )
 or ( EMail[1]= '-' )  then
 Result := false;
 // @ seguido de COM e vice-versa
 if (abs(Pos('@', EMail) - Pos('com', EMail)) = 1) then
 Result := False;
 // @ seguido de - e vice-versa
 if (abs(Pos('@', EMail) - Pos('-', EMail)) = 1) then
 Result := False;
 // @ seguido de _ e vice-versa
 if (abs(Pos('@', EMail) - Pos('_', EMail)) = 1) then
 Result := False;
 end;
 end
 else
 Result := False;
end;


No Bottão Captura Email

procedure TForm1.Button1Click(Sender: TObject);
var
 LinkPag: String;
 Retira,I : Integer;
 Linha : String;
 Posicao : Integer;
 Email : String;
 Arq : TextFile;
 documentoAtivo : variant;
begin
 Memo2.Lines.Clear;
 try
 while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
 begin
 Application.ProcessMessages;
 Sleep(0);
 end;
 finally
 documentoAtivo := WebBrowser1.Document;
 Memo2.Lines.Text:= documentoAtivo.Body.OuterHTML;
 end;

 Memo2.Lines.SaveToFile('C:\Arquivo.txt');
 Memo2.Lines.Clear;

 AssignFile(Arq, 'C:\Arquivo.txt');
 Reset(Arq);
 ReadLn ( arq, linha );
 while not EOF(Arq) do
 begin

 Linha := StringReplace(Linha,#13,'',[rfReplaceAll]);

 Posicao := pos('@',Linha);
 Retira := 1;
 Email  := '';
 if Posicao > 0 then
 begin
 while Pos(UpperCase(Linha[Posicao-Retira]),'.ABCDEFGHIJLMNOPQRSTUVXWYZ_01-23456789') <> 0 do
 begin
 Email := Linha[Posicao-Retira]+Email;
 Retira := Retira+1;
 end;

 if pos('.br',Linha) > 0 then
 Email := Email+copy(Linha,Posicao,pos('.br',Linha)-Posicao+3 )
 else if pos('.com',Linha) > 0 then
 Email := Email+Copy(Linha,Posicao ,pos('.com',Linha)-Posicao+4);

 if ValidaEMail(Email) then
 Memo2.Lines.Append(Email);
 end;
 ReadLn(Arq, Linha);
 end;
 CloseFile(Arq);
end;


No Botão IR


procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser1.Navigate(Edit1.Text);
end;






Video: Buscando Código do IBGE Utilizando o ACBR


Mini Resumo : Pequeno vídeo aula, ensinando como buscar o código de município cadastrado no IBGE utilizando o componente ACBR.

Tempo do Vídeo: 16:01

Tecnologias utilizadas : Delphi,ACBR




Autor: Rafael Mattos

Traduzindo todos os componentes da DevExpress - (por Definitivo)


Já vi muita gente tendo dificuldade com a tradução dos componentes da DevExpress, principalmente o cxGrid, neste artigo vou mostrar como traduzir utilizando cxLocalizerEditor, ele é o Editor de Linguagem da DevExpress. vamos la então !!!!



1. Abra o aplicativo cxLocalizerEditor.exe (C:\Arquivos de programas\DevExpress VCL\ExpressLibrary)

2. No Menu Language acrescente a Língua Português-Brasil.

3. Escolha o Product Name e na coluna da Língua Português-Brasil, realize as
traduções.

4. Salve as traduções. (nesse exemplo vou salvar como TraduçãoDev.ini)



5. Coloque um TcxLocalizer dentro do seu projeto



6. No FormCreate você coloca o seguinte código se existir o arquivo de tradução dentro da pasta do ele traduz senão ele não faz nada.




procedure TForm1.FormCreate(Sender: TObject);
begin
   if FileExists(ExtractFilePath(Application.ExeName)+'\TraduçãoDev.ini') then // VERIFICA SE EXISTE O ARQUIVO DENTRO DA PASTA
   begin
     cxLocalizer1.LoadFromFile(ExtractFilePath(Application.ExeName)+'\TraduçãoDev.ini');
     cxLocalizer1.LanguageIndex := 1; // MUDA DE LINGUAGEM
     cxLocalizer1.Active := TRUE;     // ATIVA O COMPONENTE
   end;
end;


Aqui vai o fonte e o arquivo ini, com a tradução de varios componentes da DevExpress (como o cxGrid e cxScheduler e outros)