Í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 status no form Colocar data na barra de status Rotina para calcular valores de dbedit com função substring Desabilita o + + Habilita o + + Substitui o pelo 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 Verificar data válida Descobrir 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 animado Capturando o número do registro do Windows. Retirar os Número de Série dos HDs Executa programas externos Retirando Registro Campo a Campo de uma tabela Aprendendo a trabalhar com menus Adicionando teclas de atalho a um Menu
Calcular Data Localizar um campo que não é campo chave. Localizar um campo digitando apenas um pedaço do conteúdo do campo Dbgrid zebrado Formatar valores monetários Digitar no dbgrid e mostar valor no campo seguinte Verificar se disquete está no drive: Instalar bde em tempo de execução Função para verificar a existência do bde Messagebox com opções Verificar data Válida E-mail pelo Delphi Calcular diferença entre dois horários Segundos em Horas SetFocus 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 DBNAVAGATOR Data por extenso Esconde botão iniciar do windows Restaura o botão iniciar do windows Mostra barra de tarefas do Windows Esconde a Barra de tarefas do Windows Mostra memória utilizada pelo Windows Convertendo um número real para string com 2 casas. Utilizando o Esc para fechar um formulário Data por extenso Insufficient 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 a releitura dos arquivos de sistema 3.digite a seguinte instrução: source /pasta/kylix3/bin}
Pág.:
2
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 DATA dbedit5.text:=datetostr(date()+3); VERIFICA SE O CAMPO DBEDIT ESTÁ EM BRANCO if dbedit2.text= '' then begin showmessage('Favor preencher o campo NOME'); exit; end; FILTRAR DATA EM TABELAS var a:string; begin a:=maskedit1.text; datamodule2.movimento.filter:= 'devolucao >= '+ quotedstr(a) ; datamodule2.movimento.filtered:=true; end;
FILTRAR TABELA TRUE/FALSE var a,b :string ; begin a:='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
ALTERAR REGISTO DE UMA TABELA with datamodule2.tblfita do edit; datamodule2.tblfita.post; CANCELA ALTERAÇÃO DO REGISTO NA TABELA datamodule2.tblfita.cancel; FILTRA BANCO DE DADOS Var Texto : String; Begin texto:=edit1.text; Table1.Filter := 'coddofornecedor >= ' + QuotedStr(Texto); Table1.Filtered := True; MENSAGEM CLICANDO NO ‘X’ DO FORM procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin canclose:=application.messagebox('Sair agora?','Confirmação para sair',mb_YESNo)=mrYes; end; RETIRAR CAMPO DO REGISTRO Registro 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/ string TDataTimeField TTimeField TFloatField TIntegerField
CALCULAR QRLABEL qrExpr1 --> Expression - Count Master - table1
Pág.:
4
INSERINDO BARRA DE STATUS NO FORM BARRA 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 STATUS Evento 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 + + procedure TForm1.Button1Click(Sender: TObject); const nel = 97; var OldValue : Longbool; Begin SystemParametersInfo(nel, Word(True), @OldValue,0); end;
Pág.:
5
HABILITA O + + procedure TForm1.Button2Click(Sender: TObject); const SPI_SCREENSAVERRUNNING = 97; var OldValue : Longbool; Begin SystemParametersInfo(SPI_SCREENSAVERRUNNING, Word(False), @OldValue,0); end;
SUBSTITUI O PELO Acrescentar um comando para cada edit em seu formulário procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if 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 grava DataSource==> tabela2 Datafield => codfor 2º de onde se lê: ListSource --> tabela1 ListField --> 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
IF KEY IN['1'] THEN LABEL1.CAPTION:=LABEL1.CAPTION + '1';
CRIANDO UMA BARRA DE FERRAMENTAS Incluir 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 then begin Image1.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 que atualiza 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
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. 2. 3. 4. 5. 6.
Adicione um novo formulário. Vá até a guia Qreport e insira o componente QuickRep Clique na Guia Data Access e insira o componente Table e DataSource Com o Query selecionado, altera as propriedades DatabaseName. Selecione a propriedade DataSet do relatório (Qreport) e altera para Table1 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 projeto 12. 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 Table1 15. Agora vamos voltar para a área de Detail. Insira um componente QRDBText da guia Qreport 16. Na propriedade DataSet selecione Table1 17. 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;
SEPARANDO HORAS E MINUTOS Pág.:
8
var Form1: TForm1; entra,sai,diferenca:tdatetime; HORA,MINUTO: INTEGER; procedure TForm1.Button1Click(Sender: TObject); begin entra:= 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
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 browser declarar na public procedure JumpTo(const aAdress: String); declarar: procedure TForm1.JumpTo(const aAdress: String); var buffer: 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); begin begin JumpTo('www.casadoprogramador.hpg.com.br'); end;
Executar comando do dos: Pág.: 10
WinExec(PChar('command.com /c dir /p ' +Edit1.Text),SW_SHOWNORMAL);
Verificar data válida: try StrToDate(Edit1.Text); except on EConvertError do ShowMessage ('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
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 SPLASH Crie 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: begin Application.initialize; Formabertura:=tformabertura.create(application); Formabertura.show; Formabertura.update; ….. … …
formabertura.hide; formabertura.free; application.run; end. Inserindo Cursor animado procedure TForm1.Button2Click(Sender: TObject); const cnCursorID1 = 1; begin Screen.Cursors[ cnCursorID1 ] := LoadCursorFromFile('c:\windows\system\helicopter.ani' ); Cursor := cnCursorID1; end;
Pág.: 12
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; var Serial: DWord; DirLen, Flags: DWord; DLabel : Array[0..11] of Char; begin Try GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0); Result := IntToHex(Serial,8); Except Result := ''; end; end; procedure TForm1.Button3Click(Sender: TObject); begin Label3.Caption := serialnum('d'); Label2.Caption := serialnum('c'); end;
Pág.: 13
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 registro AsString converte o campo para String AsTdataTimeField AsTtimeField AsTfloatField AsTintegerField
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:
Pág.: 14
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. 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) then begin DBGrid1.Canvas.Font.Color:= clWhite; DBGrid1.Canvas.Brush.Color:= clRED; end else begin DBGrid1.Canvas.Font.Color:= clBlack; Pág.: 15
DBGrid1.Canvas.Brush.Color:= clWhite; end; 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); begin if 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; var DrvNum: 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
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; begin Result := (dbiInit(nil) = DBIERR_NONE) end; procedure TForm1.FormActivate(Sender: TObject); begin if CheckBDEInstalled then label1.caption:='Foi Encontrado o BDE em sua máquina' else begin label1.caption:='Preparando para instalar o BDE.'; DllRegisterServer; end; end;
Pág.: 17
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_retrycancel
Mb_ok, mb_okcancel, mb_abortretryignoe, mb_yesno, mb_yesnocancel,
Enviar E-MAIL pelo Delphi var mail:string; begin Mail := 'mailto:
[email protected]'; ShellExecute(GetDesktopWindow,'open',pchar(Mail),nil,nil,sw_ShowNormal);
Validar DATA try StrToDate(Edit1.Text); except on EConvertError do ShowMessage ('Data Inválida!');
Calcular diferença entre dois horários var Form1: TForm1; entra,sai,diferenca:tdatetime; hora,minuto:integer; total:real; retorno:string; implementation {$R *.DFM} procedure TForm1.FormActivate(Sender: TObject); begin edit1.text:=timetostr(time()); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin edit2.text:=timetostr(time()); entra:=strtotime(edit1.text); Pág.: 18
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); begin total:=strtofloat(maskedit1.text); if (hora=0) then begin total:=total * 1; end; if (hora>0) and (minuto>0) then begin total:=total * (hora + 1); end; if (hora>0) and (minuto=0) then begin total:=total * (hora); end; str(total:8:2,retorno); label12.caption:= 'R$ ' + retorno; end;
Segundos em Horas function 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); begin label3.caption:= FormatSecsToHMS(strtoint(edit1.text)); end; Pág.: 19
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ódigo Criamos 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 extenso label1.caption:=formatdatetime('''Olá, hoje é '' ddd, dd '' de '' mmmm'' de ''yyyy',now);
Esconde botão iniciar do windows var taskbarhandle, buttonhandle:HWND; begin taskbarhandle:=findwindow('shell_traywnd',nil); buttonhandle:=getwindow(taskbarhandle,gw_child); Pág.: 20
if visible=true then showWindow(buttonhandle,sw_hide); {esconde o botão}
Restaura o botão iniciar do windows var taskbarhandle, buttonhandle:HWND; begin taskbarhandle:=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 Windows var memorystatus: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
Contar Registros de um dgbrid showmessage(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; var dia,mes,ano:word; begin decodedate(now,ano,mes,dia); result:='São Bernardo do Campo ' + inttostr(dia)+ ' de ' + ames[mes] + ' de ' + inttostr(ano) end; procedure TForm1.Button1Click(Sender: TObject); begin showmessage(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