Delphi

 

 

 

 

 

 

 

 

Eventos

Propriedades

Dicas

Erros

As propriedades e os eventos do Delphi, estão na janela do Object Inspector. Quando carregamos o Delphi, a janela Object Inspector normalmente aparece no lado esquerdo. Caso isso não aconteça, pressione a tecla F11, ou vá até o Menu View / Object Inspector. Nem todos os eventos, bem como as propriedades são iguais nos controles. Existem eventos e propriedades que podem existir em vários controles, e outros somente em um. Abaixo, está a figura desta janela.

Como você pode perceber, existem duas guias. A primeira é para alterarmos as propriedades, e a segunda é dos eventos. Abaixo estão alguns eventos.

Eventos

OnChange
Quando alteramos o conteúdo em uma caixa de textos
OnEnter
Quando uma caixa ganha o foco
OnExit
Quando uma caixa perde o foco
OnClick
Quando ocorre um clique do mouse
OndblClick
Quando ocorre um duplo clique do mouse
OnShow
Quando o formulário está sendo carregado
OnClose
Quando o formulário é descarregado (fechado)
OnActivate
Quando o formulário já foi carregado
OnMouseMove
Quando passa o mouse sobre um controle
OnKeyPress
Quando uma determinada tecla é pressionada

 


Propriedades

Propriedades do componente Label (Guia Standard)

Hint
É um balãozinho que aparece quando passamos o mouse
ShowHint
Quando True, exibe a mensagem existente na propriedade Hint
Align
Permite alinhar o conteúdo do label
AutoSize
Quando True (padrão) o tamanho do label automaticamente fica do tamanho do conteúdo existente
WordWrap
Quando a propriedade AutoSize estiver como False, faz com o conteúdo do Label passe para a próxima linha
Height
Altura do controle
Width
Largura do controle
Left
É a posição que o controle tem em relação à esquerda do formulário
Top
É a posição que o controle tem em relação à parte de cima do formulário

Propriedades do componente Edit (Guia Standard)

ReadOnly
Quando os dados de uma caixa estão bloqueados (Somente Leitura)
TabOrder
Indica a order de tabulação que o cursor irá respeitar, quando você apertar a tecla Tab, ou seja: quando você vai inserindo por exemplo caixas de textos, o Delphi, vai automaticamente indicando a ordem nesta propriedade. A primeira caixa (ou controle) sempre iniciará no número 0, e assim sucessivamente
PassWordChar
Permite por exemplo colocar na caixa de senha, um símbolo, para que o usuário não identifique o que está sendo digitado, como por exemplo o * (asterisco)
TabStop
Indica se a próxima caixa vai receber o foco, quando pressionarmos a tecla Tab. Se estiver como False, o controle não receberá o foco
MaxLenght
É a quantidade máxima de caracteres que pode ser digitada dentro de um controle. O padrão é 0 (zero), ou seja: não há limite
Enabled
Indica se a caixa ou outro controle ficará habilitada ou não (disponível) para o usuário digitar, clicar. Quando False, não fica habilitada
CharCase
Indica se as letras ficarão em Maiúsculas (ecUpperCase) ou Minúsculas (ecLowerCase)

Propriedades do Formulário

BorderIcons
Permite ativar/desativar os botões: maximizar, minimizar, help,
menu de controle
Position
Permite escolher a posição que o formulário terá quando for carregado
WindowsState
Permite escolher se o formulário ficará, maximizado, normal ou minimizado
BorderIcons
Possui as seguintes opções
  • biSystemMenu: Mostra ou não a caixa de menu (ícone de menu);

  • biMinimize: Mostra ou não o botão minimizar;

  • biMaximize: Mostra ou não o botão maximizar;

  • biHelp: Mostra ou não o botão help;

BorderStyle
Permite mostrar ou não alguns dos botões acima, bem como se o formulário será redimensionado ou não. Ex.: a opção bsToolWindow, só apresenta o botão Fechar e não permite que o formulário seje redimensionado
FormStyle
Permite configurar se o formulário será normal (fsNormal), MDI (fsMDIForm) , formulário filho (fsMDIChild)
Icon
Permite colocar um ícone que ficará na barra de título
PopupMenu
Informe nesta propriedade o nome do controle PopupMenu (Menu de Contexto - ativado com o botão direito do mouse)

Obs.: Existe no Delphi, três tipos de botão:

Na guia Standard button. Este botão não permite a colocação de ícones
Na guia Additional bitbtn que permite a colocação de ícones
Na guia Additional SpeedButton que é utilizado para construir barra de ferramentas.

 

Glyph (Bitbtn/SppedButton)
Permite colocar ícone
Kind (Bitbtn/SppedButton)
Este botão já traz pronto o ícone em cada opção. Nesta propriedade por exemplo, se escolher bkClose, o botão automaticamente quando for clicado, fecha o formulário, não necessitando assim de programa-lo para isso
Default
Permite que seja utilizado a tecla Enter para executar a codificação existente neste botão, se o mesmo estiver como True
Cancel
Permite que seja utilizado a tecla Esc para que o formulário seja fechado quando pressionarmos esta tecla, se a mesma estiver como True.. Não se esqueça de codificar este botão com a instrução Close

 

Propriedades do componente Table (Guia Data Access)

Active
Quando True indica que a tabela está aberta. False, fechada
DataBaseName
Caminho (pasta) onde está salvo a tabela. É utilizado o Alias também, que é mais fácil de trabalhar
TableName
Nome da tabela
Filter
Permite aplicar um filtro, para selecionar determinados registros
Filtered
Quando True, faz com que o filtro seja aplicado
MasterSource
Faz a ligação de uma tabela com a outra

Propriedades do componente DataSource (Guia Data Access)

DataSet
Indica a ligação do componente Table. É só clicar na seta para selecionar qual é a tabela

Alguns prefixos utilizados no Delphi na propriedade Name

frm
Form
lbl
Label
edt / txt
Edit
btn / cmd
Button
pnl
Panel
lst
List Box
cmb
Combo Box
dbe
DBEdit
tb
Table
ds
Data Source
rg
Radio Group
dbrg
Radio Group para banco de dados
dblkpcmb
Combo Box para banco de dados
ado
AdoTable

 


 

Dicas

Preencher um combo com as fontes
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i := 0 to Screen.Fonts.Count - 1 do
ComboBox1.Items.Add(Screen.Fonts[i]);
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
RichEdit1.Font.Name := ComboBox1.Items[ComboBox1.ItemIndex];
end;

Impressão no Delphi pelo Objeto Printer
var FPrn: System.Text;
begin
AssignPrn(FPrn);
Rewrite(FPrn);
try
Writeln(FPrn, 'Teste');
Writeln(FPrn, txtImprimir.Text);
Finally
CloseFile(FPrn);
end;
end;
Obs.: Acrescente na seção uses a unit: Printers, pois é ela que fará com que alguns dos comandos acima sejam reconhecidos pelo Delphi.

Código de controle e fontes

Código de controle Comando
#9 Tab (Tab)
#10 New Line (Nova Linha)
#13 Carriage Return (Retorno de carro - Enter)
^L New Page (Nova Página)

Exemplo:
Write(FPrn, #9); //Tab
Write(FPrn, #13); //Esvazia buffer de saída
Write(FPrn, #10); //Esvazia e inícia nova linha
Write(FPrn, ^L); //Esvazia e inícia nova página

with Printer.Canvas do
begin
Font.Name := 'Courier New';
Font.Size := 9;
end;
obs.: Chame sempre Assign e Rewrite antes de mudar os valores da propriedade Font na Canvas da Printer

Exemplo de WriteLn e Write

WriteLn(FPrn, 'Número de Componentes = ', ComponenteCount);

Use Write para imprimir texto e não iniciar uma nova linha. Por exemplo, as linhas a seguir são equivalentes a anterior:
Write(FPrn, 'Número de Componentes =');
Write(FPrn, ComponenteCount);
Write(FPrn); //Inicia nova linha
Obs.: Dica extraída do livro Bíblia do Delphi

Utilização da Tecla Enter
No evento onKeyPress da caixa de textos, digite a seguinte codificação:
if key = #13 then {Se a tecla pressionada for o Enter}
begin
key := #0; {Desabilita o beep}
edit2.Text :='Teste';
edit2.setfocus;
end;
Voltar

Formatar valores tipo moeda
var Valor1, Valor2: Real;
begin
Valor1 := strToFloat(txtValor1.Text);
Valor2 := strToFloat(txtValor2.Text);
lblResultado.Color := clblue;
lblResultado.Font.Color := clyellow;
lblResultado.Font.Size := 12;
lblResultado.Caption := FormatFloat('##,##0.00', Valor1 + Valor2)
end;

Enter

No evento onKeyDown do formulário, coloque o código abaixo:
Case key of
VK_UP : Perform(WM_NextDlgCtl,1,0);
VK_Down, VK_Return : Perform(WM_NextDlgCtl,0,0);
end;
Obs.: Deixar no formulário a propriedade KeyPreview como True.

No evento onKeyPress do formulário, coloque o código abaixo:
if key = #13 then key := #0; //Desliga o beep (Se a tecla pressionada for Enter, então é atribuída zero para key).

Esta rotina permite a reindexação de arquivos
btnReindexar.Enabled := False;
try
tbCliente.DeleteIndex('Ind01'); //apaga este índice (secundário)
tbCliente.DeleteIndex('Ind01a');
tbCliente.DeleteIndex(''); //apaga o índice primário (chave primária)

tbCliente.AddIndex('' , 'ID' , [ixPrimary]); //cria o índice primário
tbCliente.AddIndex('Ind01' , 'COD_CLI' , [ixUnique, ixCaseInsensitive]); //cria o índice secundário
tbCliente.AddIndex('Ind01a', 'NOME_CLI', [ixCaseInsensitive]);
Finally
pnlMensagem.Caption := 'Processo encerrado!!!';
btnReindexar.Enabled := True;
end;

Colocando vários controles iguais
Normalmente precisamos colocar vários Labels, Text Box dentro de um formulário. Para evitar que a cada label colocado, tenhamos que seleciona-lo, há um recurso no Delphi.
Segure a tecla Shift apertada e de um clique no controle desejado. Você notará que este controle ficará selecionado, bastando um clique no formulário para que seja inserido o mesmo. Para desativa-lo, de um clique na ferramenta seleção.

Mover e Redimendionar controles
Para Mover: Segure a tecla Ctrl pressionada e utilize uma das 4 setas de movimentação.
Para Redimensionar: Segure a tecla Shift pressionada e utilize as setas de movimentação.

Variáveis
Para criar variáveis, utilize a instrução var, sempre antes do begin. Exemplo:
var Nota1, Nota2: real; //declaração das variáveis Nota1 e Nota2 como tipo Real, ou seja: número com ponto flutuante (permite a colocação de casas decimais).
var Codigo: integer; //declaração da variável Codigo como tipo Integer, ou seja: número inteiro que não permite casas decimais.
var Nome: string; //declaração da variável Nome como tipo String, ou seja: permite a colocação de qualquer caracter, seja número, letra, símbolos especiais.
var Nome: string[30]; //declaração da variável Nome como String com o comprimento máximo de 30 caracteres.

Funções de conversão
strTofloat: Converte uma String (texto) para número com ponto flutuante;
floatTostr: Converte um número para String;
strToint: Converte uma String (texto) para número inteiro;
intTostr: Converte um número inteiro para String;

Exemplo: Nota1 := strTofloat(txtNota1.Text); //Converte a caixa de textos (str) para (variável que é real) número;

Exemplo: txtNota1.Text := floatTostr(Nota1); //Converte a Nota1 (que é a variável real) para textos (caixa de textos). Quando for exibir algum dado no formulário, tem que ser como String, como neste caso, pois o Delphi não permite exibir números.

Manipulando Exceções
Permite a manipulação de erros, como por exemplo em uma caixa de textos quando fica em branco ou quando digitamos letra, e na verdade deveria ser um número, pois caso contrário o Delphi gerará um erro de exceção.
try //Tenta converter
strTofloat(txtNota1.Text);
except //Senão conseguir
On EConvertError do
begin
ShowMessage('Informe uma Nota válida');
txtNota1.SetFocus; //Envia o foco para a caixa de Nota1
exit; //Sai desta procedure, e não processa possíveis linhas que muitas vezes tem dentro da mesma
end;
end;

Chamando o help
Application.HelpCommand(HELP_FINDER, 0)
Obs.: Neste exemplo, quando o usuário clicar no item desejado duas vezes, ou um clique no item para seleciona-lo e depois no botão exibir, o Help será mostrado.

Para carregar um formulário Modal
formulario.ShowModal
Obs.: Formulário Modal, é o formulário que não permite que o usuário clique fora da região do mesmo, ou seja: terá que ser fechado para que o usuário tenha acesso a janela ou formulário anterior.

Para carregar um formulário não Modal
formulario.Show
Obs.: Formulário não Modal, é o formulário que permite que o usuário alterne entre um e outro formulário, ou seja: o usuário pode escolher qual janela ele vai clicar, sendo que os formulários ficarão na tela, sem necessitarem de serem fechados.

Para esconder um formulário
formulario.Hide

Caixa de Mensagens
Para exibir uma caixa de mensagens, para por exemplo confirmar a exclusão de um registro:
if MessageDlg('Deseja Excluir ?',mtConfirmation,[mbYes, mbNo],0)= mrYes then tbCliente.Delete;
ou
if MessageDlgPos('Deseja Excluir ?',mtConfirmation,[mbYes, mbNo],0,200,300)= mrYes then tbCliente.Delete;
//Neste segundo exemplo, as coordenadas 200 e 300, o primeiro indica a distância do topo e o segundo da margem esquerda.

Criando Menus
Para criar Menus no Delphi, é utilizado componente. Clique no componente MainMenu, e coloque-o no formulário.
Depois clique na propriedade Items, para ter início a criação de uma estrutura de Menus.
Propriedades mais utilizadas:
Items: Permite especificar o nome do Menu ou do Item que aparecerá na lista, quando o Menu for aberto;
ShortCut: Permite atribuir uma tecla de Atalho;
BitMap: Permite colocar um ícone.

Criando SubMenu
Clique com o botão direito do Mouse, sobre o item da lista do seu Menu, onde será criado o SubMenu, e escolha o comando Create SubMenu.

Acessando o Menu com o botão direito
Insira o componente PopupMenu, para criar o Menu.
O procedimento para criar este menu, é o mesmo do componente MainMenu acima.
Para ativa-lo, clique na propriedade PopupMenu, e escolha o nome do menu, clicando na seta.

Carregar Imagem
imgFundo.Picture.LoadFromFile('fundo.bmp');

Exibindo Data e Hora no componente statusbar
StatusBar1.panels[0].text := ''+ formatdatetime ('hh:nn:ss', now);
StatusBar1.panels[1].text := ''+ formatdatetime ('dddd", "dd" de "mmmm" de "yyyy"',now);

Diferença entre duas datas
procedure Tfrmcaddevol.dbedtdevolExit(Sender: TObject);
var DataInicial, DataFinal: TDateTime;
diai,mesi,anoi,diaf,mesf,anof:word;
begin
// Define as variáveis
DataInicial:= strTodate(grdLocacao.Columns[1].Field.Text);
Decodedate(DataInicial,anoi,mesi,diai);
DataFinal:= strTodate(dbedtdevol.Text);
Decodedate(DataFinal,anof,mesf,diaf);
DataInicial := EncodeDateTime(anoi, mesi, diai, 0, 0, 0, 0);
DataFinal := EncodeDateTime(anof, mesf, diaf, 3, 0, 0, 0);
// Exibe as datas e a diferença de dias entre elas

dbeatraso.Text := FloatToStr(DaysBetween(DataInicial, DataFInal)); //Mostra a diferença em dias
end;

Componente só recebe número
if not ( Key in ['0'..'9',#13,#8] ) then Key := #0;

Componente só recebe letras
if not ( Key in ['A'..'Z','a'..'z',#13,#8] ) then Key := #0;


 

Erros de codificação

[Error] Unit1.pas(33): Missing operator or semicolon: Este erro normalmente acontece, quando na linha anterior não finalizado com o ponto e vírgula.

[Error] Unit1.pas(34): Incompatible types: 'Real' and 'TCaption' - Este erro acontece, quando você está tentando converter uma string (texto) para uma variável real (número com ponto decimal). Solução: Valor1 := strTofloat(txtValor1.Text).

[Error] Unit1.pas(34): Incompatible types: 'Integer' and 'TCaption' - Este erro acontece, quando você está tentando converter uma string (texto) para uma variável integer (número sem ponto decimal). Solução: Valor1 := strToint(txtValor1.Text).

[Error] Unit1.pas(39): Declaration expected but end of file found: - Verifique se existe na última linha da codificação a instrução end. (o ponto depois do end, indica o final da codificação.