Delphi

Sintaxe e projetos Delphi 10
Voltar
Acesse no Github
Conteúdo disponível

Delphi é uma lingugem de programação desktop, mobile e web desenvolvida pela Embarcadero. Para usar o Delphi com eficiência, baixe o RAD Studio Community no Windows ou o Lazarus IDE no Linux. Para o desenvolvimento com Delphi/Pascal segue-se a regra: O que o Delphi faz é problema dele, o que você faz é problema seu. Portanto, não exclua ou modifique quaisquer linhas que não tenha produzido você mesmo. No repositório abaixo estão todos os meus projetos acadêmicos e anotações sobre Delphi, confira. Vale lembrar que o repositório está em construção, com apenas algumas coisas por hora. A pasta win32 é gerada automaticamente, compondo-se do projeto executável e arquivo debug, portanto pode ser removida ao compartilhar os códigos. O arquivo .pas possui o código programável back-end do formulário de janela, o .dfm possui o código gerado do formulário de janela desenhado. Para os códigos a seguir, usaremos o formato RAD Studio como base de desenvolvimento e estrutura de arquivos. Mais detalhes de código e projeto na prática, acesse meu repositório de exemplos de projetos Delphi abaixo (Github).


Conteúdo

  1. Atribuições: Habilitação de campos e objetos Delphi: Acesse
  2. Condição If: Condição If Then Else: Acesse
  3. Funções e Repetições: Functions e Procedures, Repetições While Do, For to Do e Repeat Until: Acesse
  4. Repetições, Memo e Listbox: Repetições e Objetos Memo e ListBox: Acesse
  5. Editor de Texto: Skins personalizáveis, Menu, ComboBox, Load/SaveFromFile e Strings em arquivos: Acesse
  6. Arrays, StringGrid, PageControl, TrackBar e Timer: Arrays gráficos e codificáveis, com estrutura de timer e paginação: Acesse
  7. Record, StringList, Arquivos, With, Database: Criando Records e CRUD Database: Acesse
  8. Database Firebird: CRUD Database com Firebird: Acesse
  9. Database Firebird FK: CRUD Database com Firebird com FK: Acesse
  10. ConsultasDB e Relatório: Query de consultas e Relatórios personalizados: Acesse
  11. DB Mestre Detalhe: Relacionamentos entre Mestre e Detalhe: Acesse

Outros

  • Trabalho Animais: Jogo de escolha de animais com RadioGroup: Acesse
  • Exercícios Apostila: Exercícios da apostila aplicada em aula: Acesse
  • Avaliação Arrays/Functions: Atividades de avaliação sobre Arrays, StringGrid e Functions: Acesse
  • Avaliação Ceps: Atividade de avaliação sobre Records: Acesse
  • Conexão MySQL Xampp: Conectando Delphi com MySQL Xampp: Acesse
  • ERP Simples: ERP Simples de Crud: Acesse

Anotações


========== ATALHOS ==========
F12: Tela / Editor de código
SHIFT+F12: Abre janela forms
CNTRL+F21: "units"
F11: "object inspector"
Cntrl+d: identação
Cntrl+Shift+v: Na variavel, fará a declaração da mesma

========== EXECUTAR ==========
1-Salva tudo  ctrl + shift + s
2-Compila ctrl + f9
3-Roda F9

Criar novo projeto: new > Windows VCL Application
Abrir Projetos Antigos: File > Reopen   //Tem que abrir o projeto > .dproj

========== Propriedades ==========
Usuário não pode alterar: caption
Usuário pode alterar: text

========== Conversões ==========
v := Real; //Var Real
n1 := StrToFloat(EdN1.Text); //String para Float
lbRes.Caption := FloatToStr(r); //Float para String

========== PROJETO ==========
Criar pasta do Projeto, ddmmyy
Salva Unit: Fontes - uNome
No Delphi Save Project As > Salva Pasta do projeto(salva fora de APP,DCU e Fontes) - prjNome
DCU Project/options: Output Directory(APP) UnitOutput(DCU) - Delphi Compiler

Executável gerado: PastaProjeto > win64 > debug > application. Esse será enviado ao cliente
Abrir: Sempre abrir o projeto pronto no prjNomeProjeto.dproj

=== Enviar Zip do Projeto ===
Enviar somente:
- Delphi Form
- Delphi Source File
- Delphi Project File (2 arquivos)
- Arquivo RES (se possui img)

========== COMPONENTES DO PROJETO ==========
name: btnClicar
caption/text(user pd alterar)/texthint: descrição no elemento
event: onclick… 

ÁREA DE VARIÁVEIS GLOBAIS: Colocar abaixo do var
VAR LOCAIS: var i : integer; //depois do procedure, antes do begin //dentro do begin, atribuir  i := 3;

========== VALOR DE FORMULÁRIO ==========
(Sempre é String, precisa converter e desconverter)
n1 := StrToInt(EdN1.Text);
res := n1+n2;
lblRes.Caption := IntToStr(res);  //ou lblRes.Caption := IntToStr(StrToInt(EdN1.Text)+(StrToInt(edN2.Text)));

COMENTÁRIO: // Linha   e   { } ou {* *} Bloco

========== EXEMPLO DE CÓDIGO EM EVENTO ==========
procedure TForm1.btnDividirClick(Sender: TObject);
var n1,n2,res : Real;
begin
    n1 := StrToFloat(edN1.Text);
    n2 := StrToFloat(edN1.Text);
    res := n1/n2;
    lblMult.Caption := IntToStr(res);
    listBox.Clear; //limpa listBox
End;

Operadores


========== ARITMÉTICOS ==========
Adição +
Subtração -
Multiplicação *
Divisão /
Divisão de Integer Div (2 div 1)
Resto da Divisão de Integer Mod (2 mod 1)

========== RELACIONAIS ==========
Atribuição :=
Igualdade =
Diferente < >
Menor <
Maior >
Menor ou Igual <=
Maior ou Igual >=

========== LÓGICOS ==========
Negação Not
Acréscimo And
Escolha Or

Condição


========== IF ==========
If (x < 0) Then
begin
    y:= 1;
    k:= k + 1;
end
Else
begin
    y:= 2 * x;
    k:= x;
end;

========== CASE ==========
Case (x) Of
begin
    0: lblPop.Caption := 'x é zero';
    1: lblPop.Caption := 'x é um';
    2: lblPop.Caption := 'x é dois';
end;

Repetição


========== FOR ==========
//Regressivo: for cont := num downto 1 do
for c := 1 to StrToInt(edtVal.Text) do
begin
    lblRes.Caption := lblRes.Caption + ' ' + (IntToStr(n+1));
    inc(n)
end;

========== WHILE DO ==========
//1º verifica depois faz
while (v<10) do
begin
    lblRes.Caption := lblRes.Caption + ' ' + IntToStr(v+1);
    inc(v);
end;

========== REPEAT UNTIL ==========
//1º faz depois verifica
repeat
begin
    lblRes.Caption := lblRes.Caption + ' ' + IntToStr(v+1);
    inc(v);
end;
until (v>9);

Function e Procedure


implementation
{$R *.dfm}
    //Funções globais aqui
    function parImpar(num: Integer): string;
    //Vars da função aqui
    begin
        if (num mod 2 = 0) then
        begin
            Result := 'Par';
        end
        else
        begin
            Result := 'Impar';
        end;
    end;

procedure TForm1.btnCalcClick(Sender: TObject); //Procedures não possuem retorno(Result)
    //Funções locais aqui
    var v: Integer;
    begin
        v := StrToInt(edtVal.Text);
        lblRes.Caption := parImpar(v);
    end;

Arrays


(Array gráfico inverte ordem coluna/linha que codificável)
StringGrid[coluna,linha]
ArrayCodificavel[liha,coluna]

(Declarações em var - globais)
matriz : array[1..3, 1..3] of integer; //matriz[linhas,colunas]
mat3d : array[1..12, 1..10, 1..3] of integer; //matriz tridimencional(cubo)
vet : array of Integer; //array de tamanho dinâmico
tam : integer = 0;

(Procedures OnClick)
//Arrays fixos, percorrendo a atribuindo
var col, num, lin : integer;

for lin := 0 to sgMat.RowCount-1 do
begin
    sgMat.Cells[0,lin+1] := IntToStr(lin+1); //sg: Objeto StringGrid
end;
for col := 0 to sgMat.ColCount-1 do
begin
    sgMat.Cells[col+1,0] := IntToStr(col+1);
end;
num := 0;

for lin := 1 to sgMat.RowCount-1 do
begin
    for col := 1 to sgMat.ColCount-1 do
    begin
        sgMat.Cells[col,lin] := IntToStr(num);
        matriz[lin,col] := StrToInt(sgMat.Cells[col,lin]);
        inc(num,2);
    end;
end;

Randomize;
for col := 0 to sgVet.ColCount-1 do
begin
    sgVet.Cells[col,1] := IntToStr(Random(2));
    vetor[col] := StrToInt(sgVet.Cells[col,1]);
end;

//Array dinâmico
begin
    SetLength(vet, tam+1);
    tam := tam + 1;
    vet[tam-1] := Random(100);
    ListBox1.Items.Add('vet['+(tam-1).ToString+']='+(vet[tam-1]).ToString)
end;

Records(Registros)


Pontos = Record
    X,Y: Integer;
    Cor: string;
    OnOff: Boolean;
End;

TRegistro = Class
    Nome: String;
    Telefone: String;
    Cidade: String;
End;

var
    Form1: TForm1;
    PontosTela: Array [1..1024] of Pontos;
    //Arq: File of Pontos;
    TXT: TextFile;

//Adicionar conteúdo aos elementos
PontosTela[1].X := 300;
PontosTela[1].Y := 679;
PontosTela[1].Cor := 'Vermelho';
PontosTela[1].OnOff := True;
PontosTela[2] := PontosTela[1];
ShowMessage(PontosTela[2].X.ToString);


Procedure AddRecord(Lista:TStringList; strNome, strTelefone, strCidade:String);
Var RecNum: Integer;
Begin
    Lista.AddObject(strNome, TRegistro.Create);
        RecNum := Lista.Count-1;
        With TRegistro(Lista.Objects[RecNum]) do Begin
        Nome := strNome;
        Telefone := strTelefone;
        Cidade := strCidade;
    End;
End;

//Importar dados de arquivo
const nmarq = '..\..\uRegistros.pas';
begin
    if FileExists(nmarq) then
    begin
        Memo1.Lines.LoadFromFile(nmArq);
        ListBox1.Items.LoadFromFile(nmArq);
    end
    else
    begin
        MessageDlg('Arq. não encontrado!', mtError, [mbOk], 0);
    end;
end;


var
    Lista: TStringList;
    x: Integer;
begin
    Lista := TStringList.Create;
    AddRecord(Lista,'Joao'  ,'1','Belo Horizonte');
    AddRecord(Lista,'Ana'   ,'2','São Paulo');
    AddRecord(Lista,'Iris'  ,'3','Rio de Janeiro');
    AddRecord(Lista,'Zilda' ,'4','Curitiba');
    AddRecord(Lista,'Bety'  ,'5','Salvador');
    AddRecord(Lista,'Silva' ,'6','Osasco');
    AddRecord(Lista,'Marcia','7','Niteroi');
    Lista.Sorted := True;

    //Adiciona
    For x := 0 to Lista.Count-1 do
    Begin
        Memo1.Lines.Add ( TRegistro(Lista.Objects[x]).Nome + ' ' +TRegistro(Lista.Objects[x]).Telefone+ ' ' +TRegistro(Lista.Objects[x]).Cidade );
    End;

    //Finaliza Record Lista
    For x := 0 to Lista.Count-1 do
    Begin
        Lista.Objects[x].Destroy;
    End;
    Lista.Free;
End;

Database Firebird


1- Instalar Firebird 2.5 32bits, e selecionar opção "mover fpclient.dll para pasta System"
2- Instalar FlameRobin 32bits, configurar BD com User(SYSDBA) Senha(masterkey), Charset(Win1252) e demais parâmetros pessoais

Elaborado por Mateus Schwede
ubsocial.github.io