Declarar MessageBox como variável global

01/02/2016

0

Bom dia,

Gostaria de saber se há um jeito de declarar uma variável global cujo o valor seja uma messagebox.
Gabriel

Gabriel

Responder

Post mais votado

01/02/2016

Crie um método público no seu form principal e faça a chamada de onde quiser.

procedure fechar();
begin
if( Application.Messagebox('Deseja Sair?', 'Sair', MB_YesNo+MB_IconQuestion) = id_yes) then
begin
Application.terminate;
end
end;

Leandro Gonçalves

Leandro Gonçalves
Responder

Mais Posts

01/02/2016

Raimundo Pereira

Sim, o que precisa ?
Responder

01/02/2016

Gabriel

Na minha aplicação, gostaria de declarar uma variável global cujo o valor seja uma messagebox, pois todas as telas teriam o botão de sair, então a variável seria mais ou menos assim:

Application.Messagebox('Deseja Sair?', 'Sair', MB_YesNo+MB_IconQuestion); // esta seria a variável

if( Application.Messagebox('Deseja Sair?', 'Sair', MB_YesNo+MB_IconQuestion) = id_yes) then
begin
    Application.terminate;
end


Gostaria que a messagebox fosse uma variável, para que eu não precise em toda tela ficar digitando esse código no botão sair.
Responder

01/02/2016

Gabriel

aparece uma mensagem de erro dizendo "identifier not found: id_yes" , porém já declarei o Windows no uses. O que pode estar acontecendo?
Responder

01/02/2016

Leandro Gonçalves

utilize IDYES
Responder

01/02/2016

Gabriel

funcionou, só uma ultima dúvida...

Tento declarar essa procedure como pública, mas dá erro quando tento chamar ela em algum botão, o código que eu fiz é:

uses
  Windows, Messages, Classes, SysUtils, FileUtil, Forms, Controls, Graphics,
  Dialogs, StdCtrls, ExtCtrls, DB, u_dmprincipal, dateutils, variants;

type

  { TfrmLogin }

  TfrmLogin = class(TForm)
    btnAcessar: TButton;
    btnSair: TButton;
    edtSenha: TEdit;
    edtLogin: TEdit;
    lblLogin: TLabel;
    lblSenha: TLabel;
    Panel1: TPanel;
    procedure btnAcessarClick(Sender: TObject);
    procedure btnSairClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
                                             //Declaro aqui a procedure como publica
  end;


var
  frmLogin: TfrmLogin;
  vSair : integer;


implementation

{$R *.lfm}

{ TfrmLogin }

procedure TfrmLogin.btnSairClick(Sender: TObject);
begin
  fechar;  // Aqui quero chamar a procedure
end;

procedure fechar();
begin
if( Application.Messagebox('Deseja Sair?', 'Sair', MB_YesNo+MB_IconQuestion) = idyes) then
begin
Application.terminate;
end;
end;                      



já tentei declarar essa procedure como publica com alguns metodos que vi em minhas pesquisas, mas nenhum deu certo, sempre aparece a mensagem "identifier not foun fechar'
Responder

01/02/2016

Leandro Gonçalves

unit Unit2;

interface

uses Winapi.Windows, Winapi.Messages, System.Classes, Vcl.Controls, Vcl.Forms,
  Vcl.AppEvnts;


type

  TAplicacao = Class
  private

  public

    class function Fechar():String;

  End;



implementation



{ TCliente }



{ TAplicacao }

class function TAplicacao.Fechar: String;
begin
  if (Application.Messagebox('Deseja Sair?', 'Sair', MB_YesNo+MB_IconQuestion) = idyes) then
  Begin
    Application.Terminate;
  End;
end;

end.


unit Unit3;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm3 = class(TForm)
    BtnSair: TButton;
    procedure BtnSairClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm3.BtnSairClick(Sender: TObject);
begin
  TAplicacao.Fechar;
end;

end.
Responder

01/02/2016

Leandro Gonçalves

Criei uma Unit para vc ter uma classe com métodos estáticos

E toda tela que vc criar, é só coloca-la na Uses e chamar o método com o nome da classe.
Responder

01/02/2016

Gabriel

Criei a unit e a procedure, mas o erro persiste

unit u_procedures;

{$mode objfpc}{$H+}

interface

uses
  Windows, Messages, Classes, SysUtils, FileUtil, Forms, Controls, Graphics,
  Dialogs, StdCtrls, ExtCtrls, DB, u_dmprincipal, dateutils, variants;

implementation

procedure fechar();
begin
if( Application.Messagebox('Deseja Sair?', 'Sair', MB_YesNo+MB_IconQuestion) = idyes) then
begin
Application.terminate;
end;
end;

end.
                              


quando chamo a procedure no botão fechar, aparece a mesma mensagem

Declarei a unit no uses
Responder

01/02/2016

Leandro Gonçalves

Você tem que criar uma classe conforme eu criei no exemplo (1º bloco), depois nas outras telas você chama o método conforme (2º bloco).
Responder

01/02/2016

Natanael Ferreira

Faltou declarar a procedure logo abaixo do código da Uses.

Teste assim sua unit de procedures:

[Quote]unit u_procedures;

{$mode objfpc}{$H+}

interface

uses
Windows, Messages, Classes, SysUtils, FileUtil, Forms, Controls, Graphics,
Dialogs, StdCtrls, ExtCtrls, DB, u_dmprincipal, dateutils, variants;

procedure fechar(); // Adicionei esta linha

implementation

procedure fechar();
begin
if (Application.Messagebox('Deseja Sair?', 'Sair', MB_YesNo + MB_IconQuestion) = idyes) then
begin
Application.terminate;
end;
end;

end.[/Quote]
Responder

01/02/2016

Gabriel

Leandro, desculpe não tinha visto sua resposta rs, mas agora deu certo

Muito obrigado pela ajuda e paciência pessoal!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar