unit unt_dialogo;
{$mode objfpc}{$H+}
interface
type
TTipoDialogo = (dtInformacao, dtAviso, dtErro, dtPergunta);
TRetornoDialogo = (rdOK, rdSim, rdNao, rdCancelar);
function ShowDialog(const AMessage: string;
const ATipoDialog: TTipoDialogo = dtInformacao;
const Login: string = ''): TRetornoDialogo;
implementation
uses
Forms, Graphics, Classes, Controls, Buttons, StdCtrls, ExtCtrls, SysUtils;
const
_PN_TITULO: integer = $00DF9254;
_PN_CORPO: integer = $00F9F9F9;
_PN_RODAPE: integer = $00EFEFEF;
_LB_TITULO: integer = $00FFFFFF;
type
{ TDialogForm }
TDialogForm = class(TForm)
private
_Type: TTipoDialogo;
_Message: string;
_User: string;
_System: string;
_CodigoErro: string;
_iconeDialogo: TImage;
_headerPanel: TPanel;
_bodyPanel: TPanel;
_footerPanel: TPanel;
_titleLabel: TLabel;
_messageLabel: TLabel;
_okButton: TBitBtn;
_cancelButton: TBitBtn;
_yesButton: TBitBtn;
_noButton: TBitBtn;
procedure setYesNoButtons;
procedure setOkButton;
procedure setOkCancelButtons;
procedure setDTInformacao;
procedure setDTAViso;
procedure setDTErro;
procedure setDTPergunta;
procedure PYesButton(const Sender: TObject);
procedure PNoButton(const Sender: TObject);
procedure PCancelButton(const Sender: TObject);
procedure POkButton(const Sender: TObject);
public
constructor Create(const ASistema: string = 'NAO INFORMADO');
function ShowModal(const Atipo: TTipoDialogo; const AMensagem: string; const AUsuario: string = 'NÃO INFORMADO'): TModalResult;
procedure InicializarSubobjetos;
end;
{ TDialogForm }
var
DialogForm: TDialogForm;
function ShowDialog(const AMessage: string; const ATipoDialog: TTipoDialogo;
const Login: string): TRetornoDialogo;
begin
if not(Assigned(DialogForm)) then
begin
DialogForm := TDialogForm.CreateNew(Nil);
DialogForm.InicializarSubobjetos;
end;
case DialogForm.ShowModal(ATipoDialog, AMessage, Login) of
mrYes: Result := rdSim;
mrNo: Result := rdNao;
mrCancel: Result := rdCancelar;
else
Result := rdOK;
end;
end;
procedure TDialogForm.setYesNoButtons;
begin
_yesButton.Visible := True;
_noButton.Visible := True;
_cancelButton.Visible := False;
_okButton.Visible := False;
end;
procedure TDialogForm.setOkButton;
begin
_yesButton.Visible := False;
_noButton.Visible := False;
_cancelButton.Visible := False;
_okButton.Visible := True;
end;
procedure TDialogForm.setOkCancelButtons;
begin
_yesButton.Visible := False;
_noButton.Visible := False;
_cancelButton.Visible := True;
_okButton.Visible := True;
end;
constructor TDialogForm.Create(const ASistema: string);
begin
Self._System := ASistema;
end;
function TDialogForm.ShowModal(const Atipo: TTipoDialogo; const AMensagem: string;
const AUsuario: string): TModalResult;
begin
case Atipo of
dtInformacao: Self.setDTInformacao;
dtAviso: Self.setDTAViso;
dtErro: Self.setDTErro;
dtPergunta: Self.setDTPergunta;
end;
Self._Message := AMensagem;
Self._messageLabel.Caption := AMensagem;
Self._User := AUsuario;
Result := inherited ShowModal;
Self._Message := '';
Self._User := '';
end;
procedure TDialogForm.InicializarSubobjetos;
begin
{$REGION 'Formulário'}
Self.Width := 450;
Self.Height := 300;
Self.Position := poScreenCenter;
Self.BorderIcons := [];
Self.BorderStyle := bsSingle;
Self.Font.Size := 12;
{$ENDREGION}
{$REGION 'Paineis'}
_headerPanel := TPanel.Create(Self);
_headerPanel.Parent := Self;
_headerPanel.Align := alTop;
_headerPanel.Color := _PN_TITULO;
_headerPanel.BevelOuter := bvNone;
_headerPanel.BorderWidth := 10;
_headerPanel.Height := 50;
_bodyPanel := TPanel.Create(Self);
_bodyPanel.Parent := Self;
_bodyPanel.Align := alClient;
_bodyPanel.Color := _PN_CORPO;
_bodyPanel.BevelOuter := bvNone;
_bodyPanel.BorderWidth := 10;
_footerPanel := TPanel.Create(Self);
_footerPanel.Parent := Self;
_footerPanel.Align := alBottom;
_footerPanel.Color := _PN_RODAPE;
_footerPanel.BevelOuter := bvNone;
_footerPanel.BorderWidth := 10;
_footerPanel.Height := 55;
{$ENDREGION}
{$REGION 'Labels'}
_titleLabel := TLabel.Create(_headerPanel);
_titleLabel.Parent := _headerPanel;
_titleLabel.Font.Size := 16;
_titleLabel.Font.Color := clWhite;
_titleLabel.Align := alClient;
_titleLabel.Layout := tlCenter;
_titleLabel.Caption := 'Título da janela';
_titleLabel.BorderSpacing.Left := 10;
_messageLabel := TLabel.Create(_bodyPanel);
_messageLabel.Parent := _bodyPanel;
_messageLabel.Font.Color := clWindowText;
_messageLabel.Align := alLeft;
_messageLabel.Layout := tlTop;
_messageLabel.Caption := 'Texto da mensagem aparecerá aqui...';
{$ENDREGION}
{$REGION 'Botões'}
{TODO: Carregar ícones dos botões }
_yesButton := TBitBtn.Create(Self);
_yesButton.Parent := _footerPanel;
_yesButton.Align := alRight;
_yesButton.Caption := 'Sim';
_yesButton.Width := 100;
_yesButton.OnClick := @PYesButton;
_yesButton.BorderSpacing.Left := 10;
_noButton := TBitBtn.Create(Self);
_noButton.Parent := _footerPanel;
_noButton.Align := alRight;
_noButton.Caption := 'Não';
_noButton.Width := 100;
_noButton.OnClick := @PNoButton;
_noButton.BorderSpacing.Left := 10;
_okButton := TBitBtn.Create(Self);
_okButton.Parent := _footerPanel;
_okButton.Align := alRight;
_okButton.Caption := 'OK';
_okButton.Width := 100;
_okButton.OnClick := @POkButton;
_okButton.BorderSpacing.Left := 10;
_cancelButton := TBitBtn.Create(Self);
_cancelButton.Parent := _footerPanel;
_cancelButton.Align := alRight;
_cancelButton.Caption := 'Cancelar';
_cancelButton.Width := 100;
_cancelButton.OnClick := @PCancelButton;
_cancelButton.BorderSpacing.Left := 10;
{$ENDREGION}
{$REGION 'Icone da janela'}
{TODO: Adicionar ícone de acordo com o tipo de diálogo}
_iconeDialogo := TImage.Create(_headerPanel);
_iconeDialogo.Parent := _headerPanel;
_iconeDialogo.Align := alLeft;
_iconeDialogo.Width := 32;
{$ENDREGION}
end;
procedure TDialogForm.setDTInformacao;
begin
Self._titleLabel.Caption := 'Informação';
Self.Caption := Self._titleLabel.Caption;
Self.setOkButton;
end;
procedure TDialogForm.setDTAViso;
begin
Self._titleLabel.Caption := 'Aviso';
Self.Caption := Self._titleLabel.Caption;
Self.setOkButton;
end;
procedure TDialogForm.setDTErro;
begin
Self._titleLabel.Caption := 'Erro';
Self.Caption := Self._titleLabel.Caption;
Self.setOkButton;
end;
procedure TDialogForm.setDTPergunta;
begin
Self._titleLabel.Caption := 'Pergunta';
Self.Caption := Self._titleLabel.Caption;
Self.setYesNoButtons;
end;
procedure TDialogForm.PYesButton(const Sender: TObject);
begin
Self.ModalResult := mrYes;
end;
procedure TDialogForm.PNoButton(const Sender: TObject);
begin
Self.ModalResult := mrNo;
end;
procedure TDialogForm.PCancelButton(const Sender: TObject);
begin
Self.ModalResult := mrCancel;
end;
procedure TDialogForm.POkButton(const Sender: TObject);
begin
Self.ModalResult := mrOk;
end;
finalization
DialogForm.Free;
end.