dicas de delphi - nelson

30
ÍNDICE Abrir e fechar porta do cd Executar configuração de vídeo Verifica se o campo dbedit está em branco Filtrar data em tabela Alterar registro de uma tabela Cancela alteração do registro na tabela Filtra banco de dados Mensagem clicando no ‘x’ do form Retirar campo do registro Calcular qrlabel Inserindo barra de status no form Colocar data na barra de status Rotina para calcular valores de dbedit com função substring Desabilita o <Ctrl> + <Alt> + <Del> Habilita o <Ctrl> + <Alt> + <Del> Substitui o <Tab> pelo <Enter> Configuração do Dblookupcombobox (relacionamentos) Teclar e exibir número (=lastkey clipper) Inserindo botões na barra de ferramentas Criando uma barra de ferramentas Selecionar figura com caixa de diálogo abrir e exibir seu caminho no edit. Atualizando o cache de uma table Relacionamento de arquivos em Delphi Relatório no delphi Separando Horas e Minutos Filtro de Relatórios Teclar SETAS e mudar o foco Abrir arquivo Word pelo Delphi Copiar arquivos (fazer backup) Clicar no label e abrir browser Executar comando do DOS

Upload: sonia-silva

Post on 25-Jul-2015

510 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Dicas de Delphi - Nelson

ÍNDICE

Abrir e fechar porta do cd Executar configuração de vídeo Verifica se o campo dbedit está em brancoFiltrar data em tabela Alterar registro de uma tabelaCancela alteração do registro na tabelaFiltra banco de dadosMensagem clicando no ‘x’ do formRetirar campo do registroCalcular qrlabelInserindo barra de status no formColocar data na barra de status Rotina para calcular valores de dbedit com função substring Desabilita o <Ctrl> + <Alt> + <Del>Habilita o <Ctrl> + <Alt> + <Del>Substitui o <Tab> pelo <Enter>Configuração do Dblookupcombobox (relacionamentos)Teclar e exibir número (=lastkey clipper)Inserindo botões na barra de ferramentas Criando uma barra de ferramentasSelecionar figura com caixa de diálogo abrir e exibir seu caminho no edit.Atualizando o cache de uma tableRelacionamento de arquivos em DelphiRelatório no delphiSeparando Horas e MinutosFiltro de RelatóriosTeclar SETAS e mudar o foco Abrir arquivo Word pelo DelphiCopiar arquivos (fazer backup)Clicar no label e abrir browserExecutar comando do DOSVerificar data válidaDescobrir o código ASCII de uma tecla Como usar as teclas de função F1, F2, etc? Inserindo figuras ao lado da opção do menu (main menu) Formulário de SPLASH Inserindo Cursor animadoCapturando o número do registro do Windows. Retirar os Número de Série dos HDsExecuta programas externosRetirando Registro Campo a Campo de uma tabelaAprendendo a trabalhar com menus Adicionando teclas de atalho a um Menu Calcular DataLocalizar um campo que não é campo chave.

Page 2: Dicas de Delphi - Nelson

Localizar um campo digitando apenas um pedaço do conteúdo do campoDbgrid zebrado Formatar valores monetáriosDigitar no dbgrid e mostar valor no campo seguinteVerificar se disquete está no drive:Instalar bde em tempo de execução

Função para verificar a existência do bdeMessagebox com opçõesVerificar data VálidaE-mail pelo DelphiCalcular diferença entre dois horáriosSegundos em HorasSetFocus em outro botão (messagebox)Salvando um relatório QuickReport com formato TXT, CSV ou HTM Trocando a figura (ícone) de um botão do DBNAVAGATORData por extensoEsconde botão iniciar do windowsRestaura o botão iniciar do windowsMostra barra de tarefas do WindowsEsconde a Barra de tarefas do WindowsMostra memória utilizada pelo WindowsConvertendo um número real para string com 2 casas.Utilizando o Esc para fechar um formulárioData por extensoInsufficient memory for this operation.

{Fazer um programa feito em Kylix3 funcionar fora do mesmo:1. Edite a biblioteca "/etc/ld.so.conf" e inclua a seguinte linha no final:

/pasta/kylix3/bin

2.faça o linux reiniciar *ou* execute o "ldconfig" para forçar areleitura dos arquivos de sistema

3.digite a seguinte instrução:source /pasta/kylix3/bin}

Pág.: 2

Page 3: Dicas de Delphi - Nelson

ABRIR E FECHAR PORTA DO CD incluir uses MMSystem

abrir mciSendString('Set cdaudio door open wait', nil, 0, handle);

fechar mciSendString('Set cdaudio door closed wait', nil, 0, handle);

EXECUTAR CONFIGURAÇÃO DE VÍDEO WinExec('RunDLL32.exe Shell32.DLL,Control_RunDLL Desk.cpl', SW_Show);

CALCULAR DATAdbedit5.text:=datetostr(date()+3);

VERIFICA SE O CAMPO DBEDIT ESTÁ EM BRANCOif dbedit2.text= '' then begin showmessage('Favor preencher o campo NOME'); exit; end;

FILTRAR DATA EM TABELASvara:string;begina:=maskedit1.text;

datamodule2.movimento.filter:= 'devolucao >= '+ quotedstr(a) ;datamodule2.movimento.filtered:=true;end;

FILTRAR TABELA TRUE/FALSEvara,b :string ;

begina:='true';b:= 'false';

if checkbox1.checked= true then datamodule2.tblfita.filter:= 'legenda = '+ quotedstr(a)else datamodule2.tblfita.filter:= 'legenda = '+ quotedstr(b); datamodule2.tblfita.filtered:=true;

Pág.: 3

Page 4: Dicas de Delphi - Nelson

ALTERAR REGISTO DE UMA TABELAwith datamodule2.tblfita do edit;datamodule2.tblfita.post;

CANCELA ALTERAÇÃO DO REGISTO NA TABELAdatamodule2.tblfita.cancel;

FILTRA BANCO DE DADOSVarTexto : String;Begintexto:=edit1.text;Table1.Filter := 'coddofornecedor >= ' + QuotedStr(Texto);Table1.Filtered := True;

MENSAGEM CLICANDO NO ‘X’ DO FORMprocedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begincanclose:=application.messagebox('Sair agora?','Confirmação para sair',mb_YESNo)=mrYes;end;

RETIRAR CAMPO DO REGISTRORegistro Campo a Campo

datamodule2.table1.last; {último reg}

qrlabel1.caption:=datamodule2.table1['codicli'];qrlabel2.caption:=datamodule2.table1.fieldbyname('nome').AsString;qrlabel3.caption:=datamodule2.table1.fieldbyname('telefone').asstring;

Fieldbyname --> seleciona o registro AsString --> Converte o campo p/ stringTDataTimeFieldTTimeFieldTFloatFieldTIntegerField

CALCULAR QRLABELqrExpr1 --> Expression - Count Master - table1

Pág.: 4

Page 5: Dicas de Delphi - Nelson

INSERINDO BARRA DE STATUS NO FORMBARRA DE STATUS STATUS BAR

Na guia win32 inserir um componente StatusBar

Clicar na Barra de STatus e adicionar as separações(panels)Existe a propriedade WIDTH para aumentar o tamanho do espaço, além da propriedade Text

COLOCAR DATA NA BARRA DE STATUSEvento OnActivate do Form : statusbar1.panels[0].text:=datetostr(date());application.onhint:=Showhint; (apenas para adicionar o hint - a data não precisa do comando)

Apresentar o HINT. Criar a procedure:

procedure TForm1.showhint(Sender: TObject);begin statusbar1.panels[1].text:=application.hint;end;

em PRIVATE acrescentar a procedure: procedure showhint (Sender:TObject);

ROTINA PARA CALCULAR VALORES DE DBEDIT COM FUNÇÃO SUBSTRING procedure TForm6.Button1Click(Sender: TObject); var a,b:real; S:string;begin S := Copy(DBEDIT2.TEXT, 3, 7); { 'COPY' = substr} a:=strtofloat(s); b:=a*2; label7.caption:=floattostr(b);

DESABILITA O <CTRL> + <ALT> + <DEL>procedure TForm1.Button1Click(Sender: TObject);constnel = 97;varOldValue : Longbool;BeginSystemParametersInfo(nel, Word(True), @OldValue,0);end;

Pág.: 5

Page 6: Dicas de Delphi - Nelson

HABILITA O <CTRL> + <ALT> + <DEL>procedure TForm1.Button2Click(Sender: TObject);constSPI_SCREENSAVERRUNNING = 97;

varOldValue : Longbool;Begin

SystemParametersInfo(SPI_SCREENSAVERRUNNING, Word(False), @OldValue,0);end;

SUBSTITUI O <TAB> PELO <ENTER>Acrescentar um comando para cada edit em seu formulário

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif Key = VK_RETURN then Perform(Wm_NextDlgCtl,0,0); {{ENTER por TAB}}end;end.

CONFIGURAÇÃO DO DBLOOKUPCOMBOBOX (RELACIONAMENTO)Com as tabelas normais (sem índices secundários) siga os passos:

fornecedor | produtos

cadastro de fornecedor (normalmente)

No cadastro de Produtos --> Inserir um DBLookuoCombobox (datacontrol)Configurar propriedades:

1º Onde se gravaDataSource==> tabela2Datafield => codfor

2º de onde se lê:ListSource --> tabela1ListField --> campo que se lê e mostra (NOME DO FORNECEDOR)KeyField --> campo chave da tabela 1 (CODFORNE)

TECLAR E EXIBIR NÚMERO (=LASTKEY CLIPPER) Primeiramente habilitar a propriedade KeyPreview para TRUE no formulário.Programar no evento OnKeyPress as teclas esperadas para a digitação:Exemplo:

Pág.: 6

Page 7: Dicas de Delphi - Nelson

IF KEY IN['1'] THEN LABEL1.CAPTION:=LABEL1.CAPTION + '1';

CRIANDO UMA BARRA DE FERRAMENTASIncluir o componente TOOLBAR da guia WIN32 Adicione também separações para a barra de ferrametas. Clicom com o botão direito sobre a barra e selecione a opção new separator - configure a propriedade Style do separetor para DSDIVIDER

ISERINDO BOTÕES NA BARRA DE FERRAMENTAS ADDITIONAL SPEEDBUTTON Propriedade Glyph para inserir figura no botão.

SELECIONAR FIGURA COM CAIXA DE DIÁLOGO ABRIR E EXIBIR SEU CAMINHO NO EDIT.

Insira primeiramente um componente OpenPictureDialog da Guia Dialogs e em seguida programe o botão com a rotina abaixo:

if openPictureDialog1.Execute thenbeginImage1.Picture.LoadFromFile(OpenPictureDialog1.Filename);edit1.text:= OpenPictureDialog1.Filename;end;

Atualizando o cache de uma table

Existe uma função que é colocada nas tabelas no evento AfterPost queatualiza o cache da tabela evitando corromper o arquivo, eis aqui a linha:

Adicione na clausula USES, a unit BDE

No evento AfterPost coloque:

DbiSaveChanges((Dataset as TTable).Handle);

Relacionamento de arquivos em Delphi

É importante que as duas tabelas utilizadas tenham o mesmo tipo de dado, ou seja, que tenham um campo em comum.

Primeiramente teremos que criar um índice secundário na tabela.Abra o DataBase Destktop e a tabela que terá o relacionamento.Com a tabela aberta clique na opção TABLE Properties e escolha Secondary Indexes. Clique em Define para criarmos a indexação da tabela.

Pág.: 7

Page 8: Dicas de Delphi - Nelson

Selecione o campo que irá se relacionar com outra tabela e clique na seta para a direita. Confirme clicando no botão OK para salvar o índice. Forneça um nome e clique em OK.Salve a tabela e feche o DataBase Desktop.

Estando com o Delphi em tela ativa e com o Data Module configurado com duas tabelas, clique na tabela que irá fornecer os dados para o relacionamento. Na propriedade MASTERSOURCE selecione o nome da tabela que irá receber as informações. Agora em MASTERFIELDS clique no botão com três pontinhos. Isso fará com que seja aberta uma caixa de diálogo denominada Fild Link Designer. Clique em Available Indexes e selecione o índice desejado (aquele que foi criado no DataBase Desktop). Selecione o campo para relacionamento na caixa da direita e clique em ADD. Com isso a configuração do relacionamento está pronta. Falta apenas a inclusão dos componentes no formulário.

Para criar um relatório no Delphi siga os passos:

1. Adicione um novo formulário.2. Vá até a guia Qreport e insira o componente QuickRep3. Clique na Guia Data Access e insira o componente Table e DataSource4. Com o Query selecionado, altera as propriedades DatabaseName.5. Selecione a propriedade DataSet do relatório (Qreport) e altera para Table16. De um duplo clique sobre o componente QuickRep que está no formulário. Isso fará com

que a caixa de diálogo Report Settings apareça. 7. Marque as opções Page Header, Column Header e Detail band (essas opções criam um

espaço para o título, subtítulo e campos para exibição dos dados respectivamente)8. insira o componente QRLabel (na guia Qreport) na área Page Header. Faça a formatação

da fonte.9. Insira mais quantos QRLabels desejar para a área Column Header.10. Selecine o componente Table do formulário 11. Na propriedade DataBaseName escolha o nome criado para o Alias de seu projeto12. Agora altere a propriedade TableName com o nome da tabela que você fará o relatório.13. Vá até a opção ACTIVE e altere para TRUE.14. Com o Datasource selecionado altere a propriedade Dataset para Table115. Agora vamos voltar para a área de Detail. Insira um componente QRDBText da guia

Qreport16. Na propriedade DataSet selecione Table117. Selecione a opção DataField e escolha um campo para ser exibido.

Acionando o relatório

Coloque um botão em um outro formulário para poder ativar a impressão.Digite o seguinte código para o botão:

FORM2.QUICKREP1.PREVIEW;

Pág.: 8

Page 9: Dicas de Delphi - Nelson

SEPARANDO HORAS E MINUTOS var Form1: TForm1; entra,sai,diferenca:tdatetime; HORA,MINUTO: INTEGER;

procedure TForm1.Button1Click(Sender: TObject);beginentra:= strtotime(edit1.text);sai:= strtotime(edit2.text);diferenca:= sai-entra;label4.caption:=timetostr(diferenca);

Hora:=StrToINT(Copy(TimeToStr(diferenca),1,2));label6.caption:=INTtoStr(hora);

MINUTO:=StrToINT(Copy(TimeToStr(diferenca),4,2));label8.caption:=INTtoStr(MINUTO);

end;

Filtro em Relatório

Tenha um form com um edit mais um botão de OK. No formulário com o QuickRep altere o evento ONSTARTPAGE com o filtro desejado e clique em Files Uses Unit.

Teclar SETAS e mudar o foco . Evento OnKeyPress

FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Case Key of VK_DOWN: Perform( WM_NEXTDLGCTL, 0, 0 ); VK_UP: Perform( WM_NEXTDLGCTL, 0, 1 ); end;

end;

Abrir arquivo Word pelo Delphi

ShellExecute(Handle, 'open', 'd:\arq_nel\aulas_nel\delphi 4\ete-delphi.doc', nil, nil, SW_SHOWMAXIMIZED);não esqueça de adicionar ShellAPI na seção uses de sua unit!!!

Copiar arquivos

Copiar arquivos um por vez:

Pág.: 9

Page 10: Dicas de Delphi - Nelson

CopyFile('d:\arq_nel\aulas_nel\delphi 4\ete-delphi.doc','d:\arq_nel\copias\ete-delphi.doc',True);Showmessage('Cópia efetuad com sucesso');

Para copiar um lote de arquivos utilizando curingas:var SR: TSearchRec; I: integer; Origem, Destino: string;begin I := FindFirst('d:\arq_nel\aulas_nel\delphi 4\*.*', faAnyFile, SR); while I = 0 do begin if (SR.Attr and faDirectory) <> faDirectory then begin Origem := 'd:\arq_nel\aulas_nel\delphi 4\' + SR.Name; Destino := 'd:\arq_nel\copias\' + SR.Name; if not CopyFile(PChar(Origem), PChar(Destino), false) then ShowMessage('Erro ao copiar ' + Origem + ' para ' + Destino); end; I := FindNext(SR);end; showmessage('Backup efetuado com sucesso');

false: indica que o arquivo será sobrescrito.

não esqueça de adicionar ShellAPI na seção uses de sua unit!!!

Clicar no label e abrir browserdeclarar na publicprocedure JumpTo(const aAdress: String);

declarar:procedure TForm1.JumpTo(const aAdress: String);varbuffer: String;begin buffer := 'http://' + aAdress; ShellExecute(Application.Handle, nil, PChar(buffer), nil, nil, SW_SHOWNORMAL);end;

No evento onclick inserir:procedure TForm1.Label2Click(Sender: TObject);beginbegin JumpTo('www.casadoprogramador.hpg.com.br');end;

Pág.: 10

Page 11: Dicas de Delphi - Nelson

Executar comando do dos:

WinExec(PChar('command.com /c dir /p ' +Edit1.Text),SW_SHOWNORMAL);

Verificar data válida:tryStrToDate(Edit1.Text);excepton EConvertError doShowMessage ('Data Inválida!');edit1.setfocus;

Descobrir o código ASCII de uma tecla

{ - Coloque um Label no form (Label1);

- Mude a propriedade KeyPreview do form para true;

- Altere o evento OnKeyDown do form como abaixo: }

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);begin Label1.Caption := Format('O código da tecla pressionada é: %d', [Key]);end;

Observações

Para testar execute e observe o Label enquanto pressiona as teclas desejadas.

Como usar as teclas de função F1, F2, etc?

//Para você colocar chamadas usando as teclas de função basta colocar o seguinte código no evento 'OnKeyDown' do formulário:

procedure Tform1.FormKeyDown(Sender:TObject; var Key: Word; Shift: TShifState);begin if key = vk_F1 then begin { instrucoes a serem executadas } end;end;{ OBSERVAÇÃO:Não se esqueça de colocar a propriedade 'KeyPreview' do formulário em 'True'.

Você também pode usar as variáveis VK_F1 até VK_F12 referentes as outras teclas de função.

Pág.: 11

Page 12: Dicas de Delphi - Nelson

}

Inserindo figuras ao lado da opção do menu (main menu)Primeiramente insira um componentes da guia WIN32 ImageList.Dê dois cliques no componente ImageList já no seu formulário para abrir o Form1.ImageList1. Nesta janela, clique no botão ADD... para selecionar as figuras (.iço e.bmp). Note que após inserido as figuras, nesta janela, elas receberão um número de controle em baixo de sua visualização.Após incluir todas as figuras desejadas, clique no botão de OK.

Insira um componente MainMenu, e em sua propriedade Images selecione ImageList1 .Comece a criar as opções do menu e em cada sub-opção na propriedade ImageIndex insira o número criado anteriormente no ImageList1.Feche o formulário de criação do menu e teste seu formulário que já estará com as figuras.

Formulário de SPLASHCrie seu formulário que será a tela de apresentação normalmente.Vá em o Project e selecione a opção Options.Observe que os formulários estão todos exibidos na tela da esquerda. Selecione o que será a tela de apresentação e transfira para a direita, clicando no botão adequado.Clique em ok.Abra a opção View Source do menu Project do Delphi, para inserir a programação em negrito:

beginApplication.initialize;Formabertura:=tformabertura.create(application);Formabertura.show;Formabertura.update;…..……

formabertura.hide;formabertura.free;application.run;end.

Inserindo Cursor animado

procedure TForm1.Button2Click(Sender: TObject);constcnCursorID1 = 1;begin Screen.Cursors[ cnCursorID1 ] := LoadCursorFromFile('c:\windows\system\helicopter.ani' ); Cursor := cnCursorID1;end;

Pág.: 12

Page 13: Dicas de Delphi - Nelson

Capturando o número do registro do Windows.

Declare Registry na cláusula uses da unit. Inserira um Button e um Label. Colocando o caminho, podemos verificar qualquer coisa do Registro do Windows

function Registrow : String; var Registro: TRegistry; begin Registro := TRegistry.Create; Registro.RootKey := HKEY_LOCAL_MACHINE; if Registro.OpenKey('Software\Microsoft\Windows\CurrentVersion', false)then result := Registro.ReadString('ProductKey'); Registro.Free; end;

procedure TForm1.Button1Click(Sender: TObject); begin Registrow; Label1.Caption := Registrow; end;

Retirar os Número de Série dos HDs

Declarar a funcão em Private

Function TForm1.SerialNum(FDrive:String) :String;varSerial: DWord;DirLen, Flags: DWord;DLabel : Array[0..11] of Char;beginTryGetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0);Result := IntToHex(Serial,8);ExceptResult := '';end;end;

procedure TForm1.Button3Click(Sender: TObject);begin Label3.Caption := serialnum('d'); Label2.Caption := serialnum('c');end;

Pág.: 13

Page 14: Dicas de Delphi - Nelson

Executa programas externos

Winexec(Pchar(‘c:\windows\explorer.exe’),Sw_show);

Retirando Registro Campo a Campo de uma tabela

Label1.caption:=table1[‘codigo’];Label2.caption:=table1.fieldbyname(‘telefone’).asstring;

Fieldbyname Seleciona o registroAsString converte o campo para StringAsTdataTimeFieldAsTtimeFieldAsTfloatFieldAsTintegerField

Aprendendo a trabalhar com menus

Com O Delphi 4 você pode adicionar rapidamente menus suspensos em um programa, simplesmente definindo os nomes dos itens que você quer que apareçam no menu.

Utilizaremos alguns componentes da paleta de componentes do Delphi 4.

1. Dê um clique na guia Standard na paleta de componentes para seleciona-la.

2. Dê um clique no componente MainMenu e, em seguida, dê umclique em algum lugar do canto superior esquerdo do formulário.

3. Dê um duplo clique sobre o ícone MainMenu que estará sobre o formulário.4. A caixa de diálogo aparecerá:

5. Na janela Object Inspector, dê um clique na caixa de texto ao lado da propriedade CAPTION, para seleciona-la, digite &Arquivo e pressione a tecla ENTER.

6. Na caixa de diálogo Form1.MainMenu1, dê um clique no lado direito da palavra Arquivo que você acabou de inserir.

7. Voltando à janela Objector Inspector, dê um clique na caixa de texto ao lado da propriedade Caption para seleciona-la, digite &Ajuda e pressione a tecla ENTER.

8. Seguindo os procedimentos 6 e 7, acrescente a opção Sobre na barra de menus..

Agora vamos acrescentar abaixo da opção do menu Arquivo, a opção Sair. Para fazer isso proceda da seguinte forma:

1. Dê um clique na opção de menu Arquivo da caixa de diálogo Form1.MainMenu1 para selecioná-la, e em seguida, dê um clique no retângulo vazio logo abaixo.

Pág.: 14

Page 15: Dicas de Delphi - Nelson

2. Na janela Object Inspector, dê um clique na caixa de texto ao lado da propriedade Caption para seleciona-la, digite &Sair e pressione a tecla ENTER.

Adicionando teclas de atalho a um Menu

Agora vamos adicionar para a opção Sair do menu Arquivo que acabamos de criar, a tecla de atalho CTRL + X. Para isso, proceda da seguinte frma:

1. Dê um clique na opção Sair para seleciona-la.2. Na janela Object Inspector, dê um clique na listagem drop-dowm da propriedade ShortCut e escolha a

opção CTRL + X.3. Dê um clique no botãoo fechar.

Para concluirmos esta etapa de elaboração de menus suspensos, vamos acrescentar um código de programa para a opção Sair do menu Arquivo.

Estando no formulário de nossa aplicação, proceda da seguinte forma:

1. Dê um clique no menu Arquivo e, em seguida, dê um clique na opção Sair Ctrl + X.2. Ao fazer isso, a janela de código de programa aparecerá – digite então o comando CLOSE;

Calcular Data

Dbedit5.text:=datetostr(date()+3);

Localizar um campo que não é campo chave:

table1.LOCATE('nome', edit1.text, []);

Localizar um campo digitando apenas um pedaço do conteúdo do campo:

table1.locate('Nome', Trim(Edit1.Text), [loPartialKey]);

DBGRID ZEBRADO

NO EVENTO ONDrawColumnCell INSIRA O CÓDIGO

If odd(Table1.RecNo) thenbeginDBGrid1.Canvas.Font.Color:= clWhite;DBGrid1.Canvas.Brush.Color:= clRED;endelsebeginDBGrid1.Canvas.Font.Color:= clBlack;DBGrid1.Canvas.Brush.Color:= clWhite;end;

Pág.: 15

Page 16: Dicas de Delphi - Nelson

DBGrid1.Canvas.FillRect(Rect);DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);

FORMATAR VALORES MONETÁRIOS

val_desconto:=strtofloat(edit1.Text);label4.caption:=FormatCurr('R$ #,##0.00',val_desconto);

DIGITAR NO DBGRID E MOSTAR VALOR NO CAMPO SEGUINTE

procedure TForm1.DBGrid1ColExit(Sender: TObject);beginif dbgrid1.selectedindex=4 then begin if table1.fieldbyname('ano').asstring='15' then table1.FieldByName('genero').asstring:='teste1'; if table1.fieldbyname('ano').asstring='16' then table1.FieldByName('genero').asstring:='teste2'; end;end;

VERIFICAR SE DISQUETE ESTÁ NO DRIVE:

function DiskInDrive(const Drive: char): Boolean;varDrvNum: byte;EMode: Word;begin result := false; DrvNum := ord(Drive); if DrvNum >= ord('a') then dec(DrvNum,$20); EMode := SetErrorMode(SEM_FAILCRITICALERRORS); try if DiskSize(DrvNum-$40) <> -1 then result := true else showmessage(' Disco não Preparado'); finally SetErrorMode(EMode); end;end;

No evento On click inserir:diskindrive(a);

Pág.: 16

Page 17: Dicas de Delphi - Nelson

INSTALAR BDE EM TEMPO DE EXECUÇÃO

- Inicie um novo projeto, coloque um componente TButton e altere sua propriedade Name e Caption para "BtInstalar" e "&Instalar BDE", respectivamente.

- Na cláusula Uses, declare as biblioteca "StdCtrls" e "Buttons'.

- Antes da seção Implementation, digite o seguinte código:

function DllRegisterServer:integer; stdcall; external 'BdeInst.dll';

- No evento OnClick do BtInstalar, insira o código abaixo:

DllRegisterServer;

- Salve o projeto em uma pasta específica, por exemplo "C:\InstalaBDE\".

- Localize o diretório onde encontra-se o arquivo "BdeAdmin.exe" e faça a descompactação do arquivo "bdeinst.zip" (que encontra-se neste diretório) no local onde foi salvo o seu projeto.

- Para finalizar, copie a pasta do projeto para a máquina que se deseja instalar o BDE e execute o aplicativo "InstalaBDE.exe".

FUNÇÃO PARA VERIFICAR A EXISTÊNCIA DO BDE

Insira em uses a cláusula BDE

function CheckBDEInstalled: Boolean;beginResult := (dbiInit(nil) = DBIERR_NONE)end;

procedure TForm1.FormActivate(Sender: TObject);beginif CheckBDEInstalled then

label1.caption:='Foi Encontrado o BDE em sua máquina'elsebeginlabel1.caption:='Preparando para instalar o BDE.';DllRegisterServer;end;end;

Pág.: 17

Page 18: Dicas de Delphi - Nelson

MESSAGEBOX COM OPÇÕES

If messagebox( handle, ‘mensagem’,’mensagem da barra de título’,ícone + botão) = id_yes then Close

Opções de ícones mb_iconexclamation - mb_iconinformation – mb_iconquestion – mb_iconwarning – mb_iconerror

Opções de botões Mb_ok, mb_okcancel, mb_abortretryignoe, mb_yesno, mb_yesnocancel, mb_retrycancel

Enviar E-MAIL pelo Delphi

varmail:string;beginMail := 'mailto:[email protected]'; ShellExecute(GetDesktopWindow,'open',pchar(Mail),nil,nil,sw_ShowNormal);

Validar DATA

tryStrToDate(Edit1.Text);excepton EConvertError doShowMessage ('Data Inválida!');

Calcular diferença entre dois horáriosvar Form1: TForm1; entra,sai,diferenca:tdatetime; hora,minuto:integer; total:real; retorno:string;implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);beginedit1.text:=timetostr(time());end;

procedure TForm1.BitBtn1Click(Sender: TObject);beginedit2.text:=timetostr(time());entra:=strtotime(edit1.text);

Pág.: 18

Page 19: Dicas de Delphi - Nelson

sai:=strtotime(edit2.text);diferenca:=sai-entra;label4.caption:=timetostr(diferenca);hora:=strtoint(copy(timetostr(diferenca),1,2));label6.caption:=inttostr(hora);minuto:=strtoint(copy(timetostr(diferenca),4,2));label8.caption:=inttostr(minuto);

end;

procedure TForm1.BitBtn2Click(Sender: TObject);begintotal:=strtofloat(maskedit1.text);

if (hora=0) thenbegintotal:=total * 1;end;if (hora>0) and (minuto>0) thenbegintotal:=total * (hora + 1);end;if (hora>0) and (minuto=0) thenbegintotal:=total * (hora);end;str(total:8:2,retorno);label12.caption:= 'R$ ' + retorno;end;

Segundos em Horasfunction FormatSecsToHMS(Secs: LongInt): string; var Hrs, Min: Word; begin Hrs := Secs div 3600; Secs := Secs mod 3600; Min := Secs div 60; Secs := Secs mod 60; Result := Format('%d:%d:%d', [Hrs, Min, Secs]); end;

procedure TForm1.Button1Click(Sender: TObject);beginlabel3.caption:= FormatSecsToHMS(strtoint(edit1.text));end;

Pág.: 19

Page 20: Dicas de Delphi - Nelson

SetFocus em outro botão (messagebox)

messagebox(handle,'Deseja alterar esse registro?','Alteração',mb_yesno+mb_defbutton2+mb_iconquestion);

Salvando um relatório QuickReport com formato TXT, CSV ou HTM

APENAS inserir os componentes que já estão no quickreport: QRTextFilter, QRCSVFilter ou QRHTMLFilter. Na hora do preview clique no botão salvar relatório e selecione o tipo da extensão desejada.

Modificando Os Ícones Do Dbnavigator

Essa dica mostra como mudar o ícone dos botões do componete DbNavigator. O código abaixo tem como objetivo mostrar como se altera o ícone do botão de inserir.

Coloque um componente Dbnavigator no form. Crie um novo tipo de dados no editor de código:

type NewTypeNav = class( TDbNavigator );

No evento OnCreate do form, escreva o seguinte código:

var c:Tbitmap;begin c:=Tbitmap.Create; c.LoadFromFile('C:\Insert.bmp'); newtypenav(dbnavigator1).buttons[nbinsert].Glyph:=c;

Explicando o códigoCriamos uma variável do tipo Tbitmap para abrir o arquivo de bitmap. Esta figura vai ficar no lugar da figura padrão do dbnavigator. Depois modificamos a propriedade glyph do botão de inserir com o conteúdo da variável.

Data por extensolabel1.caption:=formatdatetime('''Olá, hoje é '' ddd, dd '' de '' mmmm'' de ''yyyy',now);

Esconde botão iniciar do windows

var taskbarhandle,buttonhandle:HWND;begintaskbarhandle:=findwindow('shell_traywnd',nil);buttonhandle:=getwindow(taskbarhandle,gw_child);

Pág.: 20

Page 21: Dicas de Delphi - Nelson

if visible=true then showWindow(buttonhandle,sw_hide); {esconde o botão}

Restaura o botão iniciar do windowsvar taskbarhandle,buttonhandle:HWND;begintaskbarhandle:=findwindow('shell_traywnd',nil);buttonhandle:=getwindow(taskbarhandle,gw_child);if visible=true then showWindow(buttonhandle,sw_restore); {restaura o botão}

Mostra barra de tarefas do Windows:showWindow(findWindow('Shell_trayWnd',nil),SW_Shownormal);

Esconde a Barrade tarefas do Windows:showWindow(findWindow('Shell_trayWnd',nil),SW_hide);

Mostra memória utilizada pelo Windowsvarmemorystatus:TMemoryStatus;begin MemoryStatus.dwlength:=sizeof(MemoryStatus); GlobalMemoryStatus(MemoryStatus); label1.caption:='Total de Memória Física livre: ' + inttoStr(MemoryStatus.dwavailvirtual);

Convertendo um número real para string com 2 casas.  var     ValorReal : Real;     ValorString : String;    begin    ValorReal := 5;     ValorString := floattostrf(ValorReal,ffFixed,18,2);   end;

Utilizando o Esc para fechar um formulário.      {TForm1.FormKeyDown}  // utilize o evento onkeydown  case key of    vk_Escape: form1.close;  end;

Pág.: 21

Page 22: Dicas de Delphi - Nelson

Contar Registros de um dgbridshowmessage(inttostr(table1.recordcount));

DATA por extenso

var Form1: TForm1; ames:array[1..12] of string = ('Jan', 'Fev', 'Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez');implementation

{$R *.DFM}function dataatual:string;vardia,mes,ano:word;begindecodedate(now,ano,mes,dia);result:='São Bernardo do Campo ' + inttostr(dia)+ ' de ' + ames[mes] + ' de ' + inttostr(ano)end;

procedure TForm1.Button1Click(Sender: TObject);beginshowmessage(dataatual());end;

INSUFFICIENT MEMORY FOR THIS OPERATION.

Outra possibilidade de evitar esses erros eh aumentar a Memoria Compartilhada: Vá ao BDE Administrator (que esta no dir do Delphi), Configuraçoes, INIT Mude a propriedade SHAREDMEMSIZE para um valor maior (sempre uma potencia de 2)... 8192 jah eh bom...ele trava menos!!

Pág.: 22