Tutorial Delphi - Programa de Cálculo de média com validação
unit untPrincipal;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtCtrls;
type
TfrmPrincipal = class(TForm)
Panel1: TPanel;
Label1: TLabel;
edtNomeAluno: TEdit;
Label2: TLabel;
edtNota1: TEdit;
Label3: TLabel;
edtNota2: TEdit;
Label4: TLabel;
edtNota3: TEdit;
btnMedia: TButton;
edtMedia: TEdit;
Label5: TLabel;
Label6: TLabel;
resultado: TLabel;
btnLimpar: TButton;
procedure btnMediaClick(Sender: TObject);
procedure edtNota1KeyPress(Sender: TObject; var Key: Char);
procedure edtNota1Exit(Sender: TObject);
procedure edtNomeAlunoExit(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure btnLimparClick(Sender: TObject);
procedure edtNomeAlunoKeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmPrincipal: TfrmPrincipal;
implementation
{$R *.dfm}
procedure TfrmPrincipal.btnMediaClick(Sender: TObject);
var
N1, N2, N3, MEDIA: Currency ;
begin
// StrToCurr = Converte String para Currency
// StrToCurrDef = Converte String para Currency caso não consiga converter o valor padrão será 0
N1 := StrToCurrDef(edtNota1.Text, 0);
N2 := StrToCurrDef(edtNota2.Text, 0);
N3 := StrToCurrDef(edtNota3.Text, 0);
// Calcula a média
MEDIA := (N1+N2+N3) / 3;
// Verifica performance do aluno
if MEDIA >= 7 then
begin
resultado.Caption := 'Parabéns pelo seu resultado positivo!';
resultado.Font.Color := clGreen;
resultado.Visible := True;
end
else if MEDIA < 5 then
begin
resultado.Caption := 'Que pena aluno reprovado!';
resultado.Font.Color := clMaroon;
resultado.Visible := True;
end
else
begin
resultado.Caption := 'Recuperação';
resultado.Visible := True;
resultado.Font.Color := clBlue;
end;
// Formata os edits para visualizar os pontos decimais
edtMedia.Text := FormatCurr('0.00',Media);
edtNota1.Text := FormatCurr('0.00',N1);
edtNota2.Text := FormatCurr('0.00',N2);
edtNota3.Text := FormatCurr('0.00',N3);
btnLimpar.SetFocus;
end;
procedure TfrmPrincipal.btnLimparClick(Sender: TObject);
begin
// Limpa os campos do formulário
edtNota1.Text := '';
edtNota2.Text := '';
edtNota3.Text := '';
edtNomeAluno.Text := '';
edtMedia.Text := '';
resultado.Visible := False;
edtNomeAluno.SetFocus;
end;
procedure TfrmPrincipal.edtNomeAlunoExit(Sender: TObject);
var
edt: TEdit;
Campo : String;
begin
// Verifica se o campo do nome está preenchido corretamente
if Sender is TEdit then
begin
edt := TEdit(Sender);
if edt.Text = '' then
begin
edt.SetFocus;
raise Exception.Create('O aluno precisa de um nome!');
end;
end;
// Validando o nome do aluno
end;
procedure TfrmPrincipal.edtNota1Exit(Sender: TObject);
var
edt: TEdit;
Valor : Currency;
begin
// Verifica se o valor digitado está de acordo com a condição, gerando uma exception caso contrário
if Sender is TEdit then
begin
edt := TEdit(Sender);
Valor := StrToCurrDef(edt.Text,0);
edt.Text := FormatCurr('0.00',Valor);
if ((Valor < 0) or (Valor > 10)) then
begin
edt.SetFocus;
raise Exception.Create('Nota deve estar entre 0 e 10.');
end;
end;
end;
procedure TfrmPrincipal.edtNota1KeyPress(Sender: TObject; var Key: Char);
begin
// Se a tecla não for entre 0 e 9 ou virgulas ou a tecla backspace não irá digitar nada
IF NOT (Key in ['0'..'9',',',#8]) then
Abort;
end;
procedure TfrmPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AnimateWindow(Handle, 1000, AW_HIDE+AW_BLEND);
end;
procedure TfrmPrincipal.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
// Esta função utiliza a interação com o Windows "SendMessage"
// Faz com que o Enter e as setas para cima e para baixo mudem os campos
case Key of
// WM_NEXTDLGCTL -> MUDA O CONTROLE, 0 INDICA PARA O PRÓXIMO, 1 INDICA O ANTERIOR
// VK_RETURN = ENTER, VK_DOWN = TECLA PARA BAIXO, VK_UP = TECLA PARA CIMA
VK_RETURN, VK_DOWN : SendMessage(Self.Handle, WM_NEXTDLGCTL, 0, 0);
VK_UP: SendMessage(Self.Handle, WM_NEXTDLGCTL,1,0);
end;
// A mesma função acima só que utilizando os recursos so Delphi
{
case Key of
VK_RETURN, VK_DOWN : Self.SelectNext(Self.ActiveControl, True, True);
VK_UP: Self.SelectNext(Self.ActiveControl, False, True);
end;
}
end;
procedure TfrmPrincipal.edtNomeAlunoKeyPress(Sender: TObject; var Key: Char);
begin
if (key in ['0'..'9']) then
begin
Application.MessageBox('Somente letras por favor.','titulo',MB_ok +
MB_defbutton1 + MB_iconexclamation);
Key := #0;
Abort;
end;
end;
end.
Nenhum comentário:
Postar um comentário