Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


100 Dicas DELPHi, Notas de estudo de Sistemas de Informação

100 dicas DELPHI

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 09/11/2009

leandro-borges-10
leandro-borges-10 🇧🇷

4.5

(2)

2 documentos

1 / 61

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Um tutorial com as 100 melhores dicas selecionadas a dedo em
toda a Internet para facilitar ainda mais o seu apredinzado em
Delphi.
Autor: Marcelo Jaloto Machado
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d

Pré-visualização parcial do texto

Baixe 100 Dicas DELPHi e outras Notas de estudo em PDF para Sistemas de Informação, somente na Docsity!

Um tutorial com as 100 melhores dicas selecionadas a dedo em

toda a Internet para facilitar ainda mais o seu apredinzado em

Delphi.

Autor: Marcelo Jaloto Machado

[email protected]

  1. Mostrar e esconder o Botão Iniciar
  2. Mostrar e esconder A Barra de Tarefas
  3. Pegando o nome do usuario e a empresa do Windows
  4. arrastar um Form sem clicar no Caption
  5. Bloquear a tecla Ctrl+Del do DBGrid
  6. ESCONDENDO A APLICAÇÃO DA BARRA DE TAREFAS
  7. OS COMANDOS INC e DEC
  8. COMO FAZER UM BEEP NO COMPUTADOR
  9. COMO FAZER UMA PAUSA POR UM PERÍODO DETERMINADO
  10. DESABILITANDO O SPLASH SCREEN DO REPORT SMITH
  11. Lendo o volume do HD
  12. descobrindo o número serial do hd
  13. (^) PARA SABER SOMENTE O PATH DA APLICAÇÃO
  14. INTERCEPTAR AS TECLAS DE FUNÇÃO (f1, f2, f3...)
  15. TRADUZINDO A MENSAGEM: "Delete Record?"
  16. INCLUIr UM PREVIEW PERSONALIZADO nO QUICK REPORT
  17. EXECUTANDO PROGRAMAS EXTERNOS
  18. UTILIZANDO A TECLA ENTER PARA SALTAR DE CAMPO
  19. Tocando um som Wav sem o Media Player
  20. Obter o diretório onde seu programa está instalado
  21. bloquear um arquivo em ambiente de rede
  22. Usando Enter para mudar de campo de um DBGrid
  23. Função para obter o número do registro atual
  24. Enviando um arquivo para a lixeira
  25. carregar um cursor animado (.ani)*
  26. Transferir o conteúdo de um Memo para o MemoField
  27. Capturando o conteúdo do Desktop
  28. Escrevendo um texto diagonal usando o canvas
  29. extrair um icone de um determinado aplicativo
  30. Alinhando items do menu à direita
  31. abrir automaticamente seu navegador padrão e carregar a página determinada pelo link
  32. (^) copiar registros de uma tabela para outra incluindo valores NULos
  33. deletar arquivos de um diretório com o caractere curinga ''*
  34. capturar a lista de Aliases disponíveis
  35. Abrir e Fechar a bandeja dO drive de CD-ROM
  36. Utilizando o Code Explorer
  37. Copiando arquivos via Delphi
  38. abrir um TComboBox sem clicá-lo
  39. mudar a cor da célula ativa do DBGrid
  40. Como incrementar 1 mês numa data
  41. Verificar se existe disquete no drive
  42. Acessar o ambiente DOS
  43. Executar um programa (DOS) e fechar sua janela em seguida
  1. desenhar um bitmap no formulário
  2. evitando a saída de formulário
  3. desabilitando simultaneamente as teclas ( alt + f4 )
  4. Filtrando Registros
  5. Como saber se um form já esta criado
  6. não redimensionar o formulário
  7. Criando Forms Dinamicamente (SDI)
  8. Criando Forms Dinamicamente (MDI)
  9. Definido o tamanho mínimo e máximo de um form

1) Mostrar e esconder o Botão Iniciar

Crie um sub-diretório chamado “ Botão Iniciar ” utilizando o windows explorer. Depois abra o DELPHI; feche o projeto que estiver aberto usando a opção Close all dentro do menu File e crie um novo projeto utilizando a opção New Application

também no menu File.

a) Mude as seguintes propriedades do Form1: Name : frmEsconderMostrar Caption : Programa para Esconder e Mostrar o Botão Iniciar Position : poScreenCenter BorderStyle : bsDialog Height : 104 Width : 403

b) Insira dois Botões no formulário: na Paleta de Componentes Standard - Button

c) Mude as seguintes propriedades do Button1:

Name : btnEsconder Caption : Esconder o Botão Iniciar Width : 177

d) Mude as seguintes propriedades do Button2: Name : btnMostrar Caption : Mostrar o Botão Iniciar Width : 177

OBS : Salve o projeto no sub-diretório que você criou:

e) A Unit1 salve com o nome de untEsconderMostrar e o Project1 com o nome de EsconderMostrar

f) Na parte interface da unit (untEsconderMostrar) abaixo da clausula uses inclua a definição da procedure

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs,

StdCtrls;

Procedure MostrarEsconderIniciar(Estado:Boolean); {inclua esta linha}

Na parte implementation da unit (untEsconderMostrar) inclua a procedure MostrarEsconderIniciar:

implementation

{$R *.DFM}

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs,

StdCtrls;

procedure EscondeBarraTarefa(EstadoBarra: Boolean); {inclua esta linha}

Na parte implementation da unit (untBarraTarefa) inclua a procedure EscondeBarraTarefa:

implementation

{$R *.DFM}

procedure EscondeBarraTarefa(EstadoBarra: Boolean); var wndHandle : THandle; wndClass : array[0..50] of Char; begin StrPCopy(@wndClass[0],'Shell_TrayWnd'); wndHandle := FindWindow(@wndClass[0], nil); If EstadoBarra=True Then ShowWindow(wndHandle, SW_RESTORE) {Mostra a barra de tarefas} Else ShowWindow(wndHandle, SW_HIDE); {Esconde a barra de tarefas} end;

3) Pegando o nome do usuario e a empresa do Windows

Crie um sub-diretório chamado “ Usuário ” utilizando o windows explorer. Feche o projeto que estiver aberto usando a opção Close all dentro do menu File e crie um novo projeto utilizando a opção New Application também no menu File.

a) Mude as seguintes propriedades do Form1:

Name : frmEmpresausuario Caption : Programa para ler do Windows nome do Usário e Empresa Position : poScreenCenter BorderStyle : bsDialog Height : 123 Width : 441

b) Insira um Botões no formulário: na Paleta de Componentes Standard - Button

c) Mude as seguintes propriedades do Button1: Name : btnUsuario Caption : Pegar nome do Usuário e Empresa no Windows Width : 241 d) Insira duas Caixas de Edição no formulário: na Paleta de Componentes Standard - Edit

e) Mude as seguintes propriedades do Edit1:

Name : EdtUsuario Text : vazio Width : 417

f) Mude as seguintes propriedades do Edit2: Name : EdtEmpresa Text : vazio Width : 417

OBS : Salve o projeto no sub-diretório que você criou:

g) A Unit1 salve com o nome de untEmpresaUsuario o Project1 com o nome de Usuario.

h) Na parte uses da interface da unit ( untEmpresaUsuario ) insira a clausula : Registry

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry ;

No evento onClick do botão btnUsuario inclua as seguintes linhas de

código:

procedure TForm1.Button1Click(Sender: TObject);

var reg: TRegIniFile;

begin reg := TRegIniFile.create('SOFTWARE\MICROSOFT\MS SETUP (ACME)'); EdtUsuario.Text := reg.ReadString('USER INFO','DefName',''); EdtEmpresa.Text := reg.ReadString('USER INFO','DefCompany',''); reg.free; end ;

4) Como arrastar um Form sem clicar no Caption?

Quando você pressiona o botão do mouse, o Windows identifica a posição da tela onde o cursor estava no momento do clique. Se a posição é igual a área do Caption do Form, o Windows ativa o modo de movimentação do Form permitindo que este seja arrastado. Portanto, a maneira mais fácil de solucionar esta questão é "enganar" o Windows. Neste exemplo vamos considerar que o usuário poderá arrastar o Form ao clicar na área cliente deste Form:

a) Crie uma nova aplicação;

b) Adicione a seguinte declaração na seção private do Form: procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;

var

H : HWnd; begin

H := FindWindow(Nil,'Project1'); if H <> 0 then ShowWindow(H,SW_HIDE);

end;

7) OS COMANDOS INC e DEC

Você sabia que existe uma opção para a comum linha de comando: Variavel:=Variavel+1;?

O comando INC e DEC permitem agilizar o processamento do seu sistema. Para isso substitua a linha acima por:

INC(variavel);

ou

DEC(variavel) se você quiser diminuir ao invés de aumentar 1.

8) COMO FAZER UM BEEP NO COMPUTADOR

messageBeep(0);

9) COMO FAZER UMA PAUSA POR UM PERÍODO DETERMINADO

NumSec é o tempo em segundos de espera

var NumSec SmallInt; StartTime: TDateTime; begin StartTime := now; NumSec:=10; repeat Application.ProcessMessages; until Now > StartTime + NumSec * (1/24/60/60); end;

10) DESABILITANDO O SPLASH SCREEN DO REPORT SMITH

1 - Localize o arquivo RS_RUN.INI (no diretório do Windows);

2 - Na seção [ReportSmith] inclua a linha seguinte: ShowAboutBox=

3 - Na seção [RS_RunTime] inclua a linha seguinte: ShowAboutBox=

4 - Não se esqueça de distribuir com o seu aplicativo o referido arquivo INI.

11) Lendo o volume do HD

Function ExtractDiskSerial(Drive:String):String; Var Serial:DWord; DirLen,Flags: DWord; DLabel : Array[0..11] of Char; begin GetVolumeInformation(PChar(Drive+':'),dLabel,12,@Serial,DirLen,Flags,nil,0); Result := IntToHex(Serial,8); end;

12) descobrindo o número serial do hd

procedure TForm1.Button1Click(Sender: TObject); var SerialNum : pdword; a, b : dword; Buffer : array [0..255] of char; begin if GetVolumeInformation('c:', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then Label1.Caption := IntToStr(SerialNum^); end;

13) PARA SABER SOMENTE O PATH DA APLICAÇÃO

ExtractFilePath( Application.ExeName )

14) INTERCEPTAR AS TECLAS DE FUNÇÃO (f1, f2, f3...)

Primeiro, coloque a propriedade KeyPreview do formulário como TRUE. Depois, insira

este código no evento OnKeyDown do formulário:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_F5 then showMessage('I pressed the F5 key'); end;

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

15) TRADUZINDO A MENSAGEM: "Delete Record?"

Begin SelectNext(Sender as tWinControl, True, True ); Key := #0; end; end;

19) Tocando um som Wav sem o Media Player

Acrescente MMSystem na Uses do começo na Unit

Utilize a API SndPlaySound(); Para interromper o som sem ele acabar de tocar utilize a API PlaySound(nil,0,0);

Ex: SndPlaySound('c:\teste.wav', snd_ASync);

PS: snd_Loop serve para repetir continuamente o som.

20) Obter o diretório onde seu programa está instalado

Crie uma váriavel do tipo String e insira a seguinte linha no evento ou função desejada do formulário:

ExtractFilePath(Application.Exename);

Retorna-rá o path atual do arquivo .EXE do seu programa.

21) Como bloquear um arquivo em ambiente de rede

É uma dica simples mas muito importante !!! Quando você programar visando uma rede e quiser bloquear um arquivo é só chamar o metodo "edit" da Tabela que estiver usando. EX: Table1.edit; PS: Se o registro já estiver bloqueado ocorrerá um erro, então você deve fazer o seguinte :

try { para verificar o erro } Table1.edit; exception on TDBEngineError do { o erro..} MessageDlg('Registro ja esta sendo usado...!', mtInformation, [ mbOk ], 0 ); end;

22) Usando Enter para mudar de campo de um DBGrid

If ( Chr(Key) <> #13) Then Exit; If ( DBGrid1.SelectedIndex + 1 <> DBGrid1.FieldCount ) Then DBGRid1.SelectedIndex := DBGRid1.SelectedIndex + 1;

23) Função para obter o número do registro atual

Function Recno(Dataset: TDataset): Longint; var CursorProps: CurProps; RecordProps: RECProps; begin { Return 0 if dataset is not Paradox or dBASE } Result := 0; with Dataset do begin if State = dsInactive then DBError(SDataSetClosed); Check(DbiGetCursorProps(Handle, CursorProps)); UpdateCursorPos; try Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RecordProps)); case CursorProps.iSeqNums of 0: Result := RecordProps.iPhyRecNum; { dBASE } 1: Result := RecordProps.iSeqNum; { Paradox } end; except on EDBEngineError do Result := 0; end; end; end;

24) Enviando um arquivo para a lixeira

uses ShellAPI;

Function DeleteFileWithUndo(sFileName : string ) : boolean;

var fos : TSHFileOpStruct;

begin

FillChar( fos, SizeOf( fos ), 0 ); With fos do begin wFunc := FO_DELETE; pFrom := PChar( sFileName ); fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT; end; Result := ( 0 = ShFileOperation( fos ) ); end;

25) carregar um cursor animado (*.ani)

procedure TForm1.Button1Click(Sender: TObject); var begin with Form1.Canvas do begin Font.Name := 'Arial'; Font.Size := 24; tf := TFont.Create; tf.Assign(Font); GetObject(tf.Handle, sizeof(lf), @lf); lf.lfEscapement := 450; lf.lfOrientation := 450; tf.Handle := CreateFontIndirect(lf); Font.Assign(tf); tf.Free; TextOut(20, Height div 2, 'Texto Diagonal!'); end; end;

29) extrair um icone de um determinado aplicativo

Para extrair ícones de um executável, deve-se usar a função da API Extraction. Ela usa 3 parâmetros: Instance - Instância da aplicação FileName - Nome do executável. Deve ser um PChar NumIcon - Número do ícone a ser recuperado. Se for Word(-1), a função retorna a quantidade de ícones do executável.

Coloque ShellAPI em uses no começo da unit.

procedure TForm1.Button1Click(Sender: TObject); var IconIndex : word; h : hIcon; begin IconIndex := 0; h := ExtractAssociatedIcon(hInstance,'C: \WINDOWS\NOTEPAD.EXE',IconINdex); DrawIcon(Form1.Canvas.Handle,10,10,h); end;

30) Alinhando items do menu à direita

Para alinhar itens do menu principal à direita, deve-se utilizar o seguinte código:

{Isto justifica todos itens à direita do selecionado}

procedure SetJustify(Menu: TMenu; MenuItem: TMenuItem; Justify: Byte); {$IFDEF WIN32} var ItemInfo: TMenuItemInfo; Buffer: array[0..80] of Char;

{$ENDIF}

begin {$IFDEF VER80} MenuItem.Caption := Chr(8) + MenuItem.Caption; {$ELSE} ItemInfo.cbSize := SizeOf(TMenuItemInfo); ItemInfo.fMask := MIIM_TYPE; ItemInfo.dwTypeData := Buffer; ItemInfo.cch := SizeOf(Buffer); GetMenuItemInfo(Menu.Handle, MenuItem.Command, False, ItemInfo); if Justify = 1 then ItemInfo.fType := ItemInfo.fType or MFT_RIGHTJUSTIFY; SetMenuItemInfo(Menu.Handle, MenuItem.Command, False, ItemInfo); {$ENDIF} end;

31) abrir automaticamente seu navegador padrão e carregar a página

determinada pelo link

1º Declare o procedure na seção PUBLIC da unit. procedure JumpTo(const aAdress: String);

2º Coloque a cláusula ShellAPI na uses no início da unit.

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

procedure TForm1.Label1Click(Sender: TObject); begin JumpTo('www.geocities.com/SiliconValley/Way/1497'); end;

32) copiar registros de uma tabela para outra incluindo valores NULL

procedure TtableCopiaRegistro(Origem, Destino: Ttable); begin with TabelaOrig do begin {Inicia um contador para os campos da TabelaOrig} for i := 0 to FieldCount -1 do {Este if verifica se o campo da TabelaOrig é NULL, se for, atribui seu valor ao campo da TabelaDest} if not Fields[i].IsNull then TabelaDest.Fields[i].Assign(Fields[i]);

35) Abrir e Fechar a bandeja DO drive de CD-ROM

{Para Abrir:}

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

{Para Fechar:} mciSendString('Set cdaudio door closed wait', nil, 0, handle);

36) Utilizando o Code Explorer

A versão 4 do Borland Delphi está recheada de novos recursos em várias áreas do produto (IDE, Internet, linguagem, aplicações multi-tier, entre outras).

Uma das primeiras coisas que notamos quando abrimos o editor de código do Delphi 4 é a presença de um painel ancorado na lateral esquerda, contendo todos os tipos, classes, propriedades, métodos, variáveis globais, rotinas globais e interfaces contidos na unit selecionada. Esse painel é chamado Code Explorer e seu objetivo é tornar mais fácil a navegação entre as units do projeto e automatizar alguns processos envolvidos na criação de classes.

O Code Explorer também permite que você navegue diretamente para as declarações que são apresentadas nele, bastando dar um duploclique com o mouse sobre a declaração desejada. Novas declarações podem ser feitas também usando o Code Explorer, facilitando o desenvolvimento do código. Por exemplo, vamos supor que você queira criar uma nova função chamada Calculo com dois parâmetros do tipo real e que retornará também um real. Para isso, deve-se seguir os seguintes passos:

Selecione a pasta Variable/Constants dentro do Code Explorer. Dê um clique com o botão direito do mouse e selecione New no menu que aparecerá, como mostra a figura a seguir.

O Code Explorer apresentará um novo item que permite identificar qual o tipo de declaração que está sendo feita, por meio da informação que o programador passar a ele. No nosso exemplo, digitaremos o cabeçalho da função Calculo como segue :

function Calculo(x, y : real) : real;

Após digitar a declaração e pressionar o Code Explorer criará automaticamente o cabeçalho da função na seção Interface e a sua implementação na seção Implementation da unit, como mostra a figura seguinte, evitiando assim que ocorreram erros de declaração no interior do código.

Um outro recurso que o Code Explorer fornece é conhecido como Class Completion. O programador pode, dentre outras facilidades, criar apenas o básico da declaração de uma propriedade e, com o simples toque de um atalho no teclado, o Code Explorer completará a declaração. Como exemplo, vamos declarar uma propriedade chamada Cor do tipo TColor dentro da nossa classe TForm 1.

type

TForm1=class(TForm) private {declarações privadas} public {declarações públicas} property Cor:TColor; end;

Agora com o cursor posicionado sobre a declaração da propriedade, pressionamos C e o Code Explorer completará toda a declaração da estrutura da classe.

37) Copiando arquivos via Delphi

Function CopiaArquivo(scrname,destname:string):byte; var source,destination:file; buffer:array[1..1024] of byte; readcnt,writecnt:word; pname,dname,fname,ename:String; {USO: R:=COPIAARQUIVO('C:\diretorio\FILE.EXT','C:\diretorio\FILE.EXT'); Devolve 0=Ok, 1=Erro no Origem, 2=Erro no Destino, 3=Disco Cheio} begin AssignFile(source,scrname); Try Reset(source,1); Except CopiaArquivo:=1; Exit; end;

If destname[length(destname)]='' then begin pname:=scrname; destname:=destname+separa(scrname,'',Ocorre(scrname,'')+1); end; AssignFile(destination,destname); Try Rewrite(destination,1); Except CopiaArquivo:=2; Exit; end;

Repeat BlockRead(source,buffer,sizeof(buffer),readcnt); Try BlockWrite(destination,buffer,readcnt,writecnt); Except CopiaArquivo:=3; {Disco Cheio?}