várias dicas de Delphi

 

É minha primeira experiência com Blog´s e espero tornar a vida dos programadores mais fácil apresentando algumas dicas.

todas as dicas foram extraidas da própria internet.

Começamos com o DELPHI:

 

1-SELECT ENTRE DATAS EM SQL

{Interbase}
select * from teste where data between cast(’11/01/2007′ as date) and cast (’11/09/2008′ as date)
{Access}
select data_nascimento, nome from exporta_tudo  where data_nascimento between  (#01/01/1953#) and (#02/01/1953#)

2-CRIANDO UMA LISTA DE BOTÕES EM TEMPO DE EXECUÇÃO

Procedure criabotão;
var
   wl_botao:Tbutton;
   wl_left,wl_top,x,wlCont,wlnome:integer;
begin
  wl_left:=10;
  wl_top:=10;
  wlCont:=0;
  wlnome:=0;
{Percorre os componentes existentes e verifica se é do tipo TBotaoOpc}
{Isto para posicionar corretamente o botão em tempo de execução}
For x:=0 to ComponentCount-1 do
begin
If (Components[x].ClassType = Tbutton) then
begin
          wl_Left:=wl_Left+105;
          wlCont:=wlCont+1;
          wlnome:=wlnome+1;
if wlCont > 5 then//se tiver mais de 5 botões ele posiciona na linha abaixo
begin
             wl_Top  := wl_Top + 60;
             wl_Left:=10;
             wlCont := 0;
end;
end;
end;
  wl_botao:= Tbutton.Create(self);
  wl_botao.visible:=true;
  wl_botao.left:= wl_left;
  wl_botao.top:=wl_top;
  wl_botao.Caption:= ‘teste’+inttostr(wlnome);
  wl_botao.Name:=’teste’+inttostr(wlnome);
  wl_botao.Parent:=form1;//é obrigatorio declarar o pai.
end;

3-Traduzindo a mensagem delete record?

Procedure TForm1.TableBeforeDelete(DataSet:TDataSet);
Begin
if MessageDlg(‘Eliminar o registro?,mtConfirmation.[mbYes,mbNo],0)<>mrYes then Abort;
end;

4-Trocar resolução de video automatico.

Private
OLD_WIDTH,OLD_HEIGHT :Integer;
No Evento OnCreate do Form principal coloque o código abaixo:
OLD_WIDTH := Monitor.Width;
OLD_HEIGHT := Monitor.Height;
if (OLD_WIDTH>=1024)and(OLD_HEIGHT>=768)then
begin
  SetScreenResolution(800, 600);
end;
// O comando acima esta programado para: Se a resolução for igual ou maior do 1024 por 768, a resoluçâo vai passar para 800×600
No Evento OnClose do Form principal coloque o Códigoi:
SetScreenResolution(OLD_WIDTH , OLD_HEIGHT);
//O resoluçâo do video vai voltar como era antes.

5-Programa Funciona por um periodo

Faça um banco de dados com campos Instal (Date), Periodo(N),Trava(Alfa)(1), No form que inicia do programa digite a sequinte rotina:
procedure TFrm_Login.FormShow(Sender: TObject);
begin
Dm.Tb_Config.Open;
Dm.Tb_Config.Edit;
If Date() – Dm.Tb_ConfigInstal.Value > Dm.Tb_ConfigPeriodo.Value then
Begin
   ShowMessage(‘O Prazo de utilização do Sistema Expirou,entre em contato com’#13′o desenvolvedor 8145-9686 – pss.maia@hotmail.com.’);
   Dm.Tb_ConfigTrava.Value:=’S’;
   Dm.Tb_Config.Post;
   Dm.Tb_Config.Close;
Close;
end
Else
Begin
If Dm.Tb_ConfigTrava.Value=’S’ then
Begin
     ShowMessage(‘Não adianta mudar a data do sistema, o problema não é esse.’);
     Dm.Tb_Config.Close;
Close;
end;
end;
end;

6-Conectar access em qualquer diretório

Para se conectar com um banco de dados criado em access é só colocar o código abaixo no evento OnCreate do formulário, não esqueçendo de declarar a váriavel con; var con : string;
con:=’Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=’ + ExtractFileDir(ParamStr(0)) + ‘arquivo.MDB’;

7-Enviando Email delphi 7 com Indy

Coloque no form o componente IdMessage e IdSMTP.
IdMessage.Recipients.EMailAddresses := Edit1.Text; //email destinatario
IdMessage.Subject := Edit2.Text;//assunto
IdMessage.Body := Memo1.Lines; // Mensagem que será enviada
IdMessage.From.Address := ‘Seu email’; // Email do Remetente
IdMessage.From.Name := ‘Seu nome’; // Nome do Remetente, que aparecerá qdo chegar.
IdSMTP.Connect;
try
IdSMTP.Send(IdMessage);
finally
IdSMTP.Disconnect;
Application.ProcessMessages;
end;
Application.MessageBox(‘Email Enviado!’, ‘Confirmãção’,  MB_ICONINFORMATION + MB_OK);

8-COMO FAZER FUNCIONAR O TRATAMENTO DE EXCEÇOES NO DELPHI 7

{Dica para utilização do Try except no delphi:
É necessário que o delphi esteja configurado para não parar ao perceber uma tentativa de deletar um registro que esteja relacionado com outras tabela ou seja mesmo você fazendo todo o código do try … except corretamente ao compilar o programa ele vai dar erro… pra isso não acontecer basta entrar em tools + debug options e desmarcar a opção stop on delphi exceptions e tudo ira funcionar normalmente.
veja o exemplo abaixo:}
procedure TFormCadProdutos.BtnExcluirClick(Sender: TObject);
begin
if MessageDlg(‘Excluir o Registro Selecionado?’,mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
try
                TbProd.delete;
                estado :=’B’;
                botoes;
                habilita;
                ShowMessage(‘Excluido com Sucesso !!’);
except
on E: EDBEngineError do
begin
                      ShowMessage(‘Produto Relacionado, exclusão Não Permitida !!’);
                      TbProd.Cancel;
end;
end;
end
else
Abort;
end;

9-BACKUP WINRAR

Adicione os objetos OpenDialog e SaveDialog ao formulario
//Rotina de backup
var HORA, DATA, SOURCE, PATCH, NOME : String;
begin
  HORA   := FormatDateTime(‘HHMM’, Time);
  DATA   := FormatDateTime(‘DDMMYYYY’, Date);
  SOURCE := ‘C:Docume~1richardMeusdo~1*.txt’; //arquivo a ser feito backup
  PATCH  := ‘C:Temp’;                           //pasta destino
  NOME   := DATA+’-’+HORA+’.rar’;
  SaveDialog1.FileName := NOME;
  SaveDialog1.InitialDir := PATCH;
  SaveDialog1.Execute;
  NOME:= SaveDialog1.FileName;
//chama Winrar e começa a compactar. O nome do arquivo será DDMMAAA-HHMM.rar(dia,mes,ano/hora,min)
  ShellExecute(0,nil,’winrar.exe’, Pchar (‘a -ep -ibck ‘+NOME+’ ‘+SOURCE), nil,sw_show);
//fecha o winrar após o términino da compactação
Exit;
end;
//Rotina de restauração de backup
var PATCH, PATCH1, NOME : String;
begin
  OpenDialog1.Execute;
  PATCH  := OpenDialog1.FileName;
  PATCH1 := ‘C:Docume~1richardMeusdo~1′;
  ShellExecute(0,nil,’Winrar.exe’, Pchar (‘e -ibck ‘+PATCH+NOME+’ ‘+PATCH1),nil,sw_show);
//restaura os arquivos e fecha o winrar
Exit;
end;
//OBS: É necessário inclur ShellApi no uses do form e ter o Winrar instalado!!!

10-MUDAR RESOLUÇÃO DE VÍDEO

{Talvez esta função já tenha sido indicada, pois tirei da internet também, mas como me bati bastante e o que me atendeu melhor foi esta função aí está.
Espero que seja proveitosa.}
Private
Procedure AjustaForm;
procedure TCadClientes.AjustaForm;
Const nTamOriginal = 800; // Será o 100% da escala
Var nEscala : Double; // Vai me dar o percentual de Transformação escalar
     nPorcento : Integer; // Vai me dar em percentual inteiro o valor
begin
With CadClientes do
begin
if nTamOriginal <> Screen.Width then
begin
         nEscala := ((Screen.Width-nTamOriginal)/nTamOriginal);
         nPorcento := Round((nEscala*100) + 100);
(Self).Width := Round(Self.Width * (nEscala+1));
(Self).Height := Round(Self.Height * (nEscala+1));
(Self).ScaleBy(nPorcento,100);
end;
end;
end;
procedure TCadClientes.FormShow(Sender: TObject);
begin
   AjustaForm;
end;

11-FORM COM SOMBRA

// Declare o método CreateParams com protected //
protected
procedure CreateParams(var Params: TCreateParams); override;
// sobrescreve o método //
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
  Params.WindowClass.Style := Params.WindowClass.Style or $00020000;
end;

12-FORM TOTALMENTE TRANSPARENTE

Olá amigos, vou mostrar para vcs como deixar o forma totalmente transparente no Delphi 7 blz ? vamos la.
No o Object Inspector no aba proprieds selecione:
TransparentColor:    selecione true.
TransparentColorValue :   selecione uma cor que vc não vai precisar usar mas tarde.
Color:  selecione a mesma cor que vc selecionou em TransparentColorValue.
BorderStyles: selecione bsNone
Pronto é só executar.

13-CRIANDO UM RADIOGROUP PARA BUSCAS ESPECÍFICAS

{esta parte do código especifica como o RadioGroup vai trabalhar
temos a Tabela de escola que esta salva no database como TB_AEscola
e estaremos usando 5campos desta tabela
Este código serve para que seja selecionado pelo Radiogroup qual
será o parametro de busca
Sendo selecionado este parametro no Radiogroup será direcionado o cursor
para o campo edit respectivo onde será digitada a busca}
procedure TF_Principal.RadioGroup1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0 : TB_AEscola.FieldByName(‘Alu_Cod’).AsString;
1 : TB_AEscola.FieldByName(‘Alu_Nome’).AsString;
2 : TB_AEscola.FieldByName(‘Alu_Tel’).AsString;
3 : TB_AEscola.FieldByName(‘Alu_Cel’).AsString;
4 : TB_AEscola.FieldByName(‘Alu_Idade’).AsString;
5 : TB_AEscola.FieldByName(‘Alu_Cidade’).AsString;
end;
Begin
{aqui é indicado como será feita
           EX: se o radiogroup1.campo =0 ( que acima indicamos
           que usa o campo de Alu_Cod) será feita uma busca
           atravéz destes dados (código) e os demais edit´s serão
           apagadados para que assim que a busca localize os dados
           procurados os edit´s possam ser preenchidos }
if RadioGroup1.ItemIndex = 0 then
Begin
                       Edit1.setfocus;
                       Edit2.Clear;
                       Edit3.Clear;
                       Edit4.Clear;
                       Edit5.Clear;
                       Edit6.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
Begin
{aqui fazemos a mesma coisa mas indicando agora
           que estamos trabalhando com o campo indicado
           com os dados de nome dos alunos }
if RadioGroup1.ItemIndex = 1 then
Begin
                       Edit2.setfocus;
                       Edit1.Clear;
                       Edit3.Clear;
                       Edit4.Clear;
                       Edit5.Clear;
                       Edit6.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
{ aqui continuamos a criar o mesmo comando especificando os demais itens
do RadioGroup fazendo com que cada vez que selecionemos um determinado item os demais edites sejam apagados da mesma forma }
Aqui vai o código completo para desenvolver este Radiogroup
procedure TF_Principal.RadioGroup1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0 : TB_AEscola.FieldByName(‘Alu_Cod’).AsString;
1 : TB_AEscola.FieldByName(‘Alu_Nome’).AsString;
2 : TB_AEscola.FieldByName(‘Alu_Tel’).AsString;
3 : TB_AEscola.FieldByName(‘Alu_Cel’).AsString;
4 : TB_AEscola.FieldByName(‘Alu_Idade’).AsString;
5 : TB_AEscola.FieldByName(‘Alu_Cidade’).AsString;
end;
Begin
if RadioGroup1.ItemIndex = 0 then
Begin
                       Edit1.setfocus;
                       Edit2.Clear;
                       Edit3.Clear;
                       Edit4.Clear;
                       Edit5.Clear;
                       Edit6.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
Begin
if RadioGroup1.ItemIndex = 1 then
Begin
                       Edit2.setfocus;
                       Edit1.Clear;
                       Edit3.Clear;
                       Edit4.Clear;
                       Edit5.Clear;
                       Edit6.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
Begin
if RadioGroup1.ItemIndex = 2 then
Begin
                       Edit3.setfocus;
                       Edit2.Clear;
                       Edit1.Clear;
                       Edit4.Clear;
                       Edit5.Clear;
                       Edit6.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
Begin
if RadioGroup1.ItemIndex = 3 then
Begin
                       Edit4.setfocus;
                       Edit2.Clear;
                       Edit3.Clear;
                       Edit1.Clear;
                       Edit5.Clear;
                       Edit6.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
Begin
if RadioGroup1.ItemIndex = 4 then
Begin
                       Edit5.setfocus;
                       Edit2.Clear;
                       Edit3.Clear;
                       Edit4.Clear;
                       Edit1.Clear;
                       Edit6.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
Begin
if RadioGroup1.ItemIndex = 5 then
Begin
                       Edit6.setfocus;
                       Edit2.Clear;
                       Edit3.Clear;
                       Edit4.Clear;
                       Edit5.Clear;
                       Edit1.Clear;
                          TB_AEscola.Filtered:=True;
end;
end;
end;
{Espero que ajude alguem por ai
se quizerem mandem um email
cgfj05ozzy@hotmail.com
um abraço}

14-ENVIO DE EMAIL ATRAVÉS DO API DO WINDOWS

{1. Declare a uses SHELLAPI
2. mailto: coloque o email de destino
3. subject: escreva qual é o assunto do email
4. Coloque um botão e no evento OnClick deste botão escreva:}
procedure TForm1.Button1Click(Sender: TObject);
var Mail: String;
begin
Mail := ‘mailto:Teste@exemplo.com.br’+
‘?subject=Escreva o assunto aqui’;
ShellExecute(GetDesktopWindow,’open’,pchar(Mail),nil,nil,sw_ShowNormal);
end;

15-CONECTADO BANCO FIREBIRD PELO ARQUIVO INI

Correção da Dica de o modo mais facil de se conecatr banco interbase e firebird
testada e aprovada
var
vArqIni:TIniFile;
Caminho:string;
begin
Caminho:=’C:Automacao ComercialBancoAUTOMACAO.FDB’;
DataModulo.conexao.Close;
if not( fileexists(extractfilepath(ParamStr(0))+’Automacao.ini’) ) then
begin
      ShowMessage(‘Arquivo de Configurações do Banco de Dados Não Encontrado!’);
      vArqIni := TIniFile.Create(extractfilepath(ParamStr(0))+’Automacao.ini’);
try
      conexao.ConnectionName:=’BANCO’;
      vArqIni.WriteString(‘BANCO’,’database’,Caminho);
      conexao.Params.Values['DataBase'] :=Caminho;
finally
        vArqIni.Free;
end;
end;
try
  vArqIni := TIniFile.Create(extractfilepath(ParamStr(0))+’Automacao.ini’);
  conexao.ConnectionName:=’BANCO’;
  Caminho :=vArqIni.ReadString(‘BANCO’,’database’,Caminho);
  conexao.Params.Values['DataBase'] :=Caminho;
finally
  vArqIni.Free;
end;
try
   DataModulo.conexao.Connected:=True;
   DataModulo.VChamada:=0;
   DataModulo.spsusuarios.Close;
   DataModulo.spsusuarios.Open;
   DataModulo.UserControl.Execute;
except
     Application.MessageBox( ‘Não foi possivel se conectar com o banco de dados.’ + #13 +
‘verifique se o arquivo de configuração está configurado, ‘ + #13 +
‘ou se o servidor firebird está instalado em seu sistema.’ + #13 +
‘Verifique tambem se o Usuario secundario esta cadastrado.’ + #13 +
‘Entre em contato com suporte para esclarecer qualquer dúvida.’,
‘Error Interno’, mb_ok + mb_IconError );
        Application.Terminate;
end;

16-SALVAR IMAGEM NO ACCESS

//Sempre depois de muito procurar e pouco achar
//Darei um exemplo detalhado de como salvar uma imagem direto no access
//Apesar de muito falarem mal do access, ele não é tão ruim como dizem,
//pelo contrário, analisei muito bancos sem dúvida para o porte do access,
//nenhum outro é tão simples e rádido de utilizar.
//Para aplicações com até 2 GB de dados o access é sem dúvida o mais
//prático e funcional.
//Bom sobre como salvar imagem no banco
//No access voce deve ter um campo da tabela como Objeto OLE
//Para rodar o exemplo, coloque em um formulário 2 Button,
//2 Image e a conexão ADO com o access
//carregue qualquer imagem bmp no Image1
//para salvar a imagem
//no evento onClick do Button1
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
try
    Image1.Picture.Bitmap.SaveToStream(Stream);
    ADOQuery1.SQL.Text := ‘SELECT * FROM Tabela do banco ACCESS WHERE Campo da tabela’;
    ADOQuery1.Open;
    ADOQuery1.Edit;
    TBlobField(ADOQuery1.FieldByName(‘Nome do campo’)).LoadFromStream(Stream);
    ADOQuery1.Post;
finally
    Stream.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
  Stream: TMemoryStream;
begin
  ADOQuery1.SQL.Text := ‘SELECT * FROM Tabela do ACCESS WHERE Campo da tabela’;
  ADOQuery1.Open;
  Stream := TMemoryStream.Create;
try
    TBlobField(ADOQuery1.FieldByName(‘Nome do Campo’)).SaveToStream(Stream);
    Stream.Position := 0;
    Image2.Picture.Bitmap.LoadFromStream(Stream);
finally
    Stream.Free;
end;
end;

17-CRIANDO UM LETREIRO DIGITAL

{coloque um ttimer, um panel, um label dentro do panel. Set a propriedade interval do timer de 1000 para 1. isso fará com que o letreiro fique mais rápido.
Mude as cores e o caption do label como quiser. depois acrescente os códigos abaixo}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if label1.Left=panel1.Width then
label1.Left:=-(label1.Width)
else
label1.Left:=label1.Left+1;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
label1.Left:=-(label1.Width);
end;

18-CRIANDO UMA TELA DE SPLASH (ABERTURA)

Para começar,crie um novo form e colocque na Propriedade Name FrmSplash..

Enfeite o form do jeito que quiser e va em Project>View Soucer

Procure a linha Application.CreateForm(TFrmSplash, FrmSplash);

e abaixo dela coloque:

FrmSplash.Show; // Mostra a Formulario

FrmSplash.refresh; // da um refresh na tela

Sleep(2000); // Coloque na Clascula Uses SysUtils,

FrmSplash.release; // apaga a tela

FrmSplash:= nil;

Pronto agora tecle F9 e pronto..

About these ads
Esse post foi publicado em delphi. Bookmark o link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s