Declarar MessageBox como variável global

Delphi

01/02/2016

Bom dia,

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

Gabriel

Curtidas 0

Melhor post

Leandro Gonçalves

Leandro Gonçalves

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;
GOSTEI 2

Mais Respostas

Raimundo Pereira

Raimundo Pereira

01/02/2016

Sim, o que precisa ?
GOSTEI 0
Gabriel

Gabriel

01/02/2016

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.
GOSTEI 0
Gabriel

Gabriel

01/02/2016

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

Leandro Gonçalves

01/02/2016

utilize IDYES
GOSTEI 1
Gabriel

Gabriel

01/02/2016

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'
GOSTEI 0
Leandro Gonçalves

Leandro Gonçalves

01/02/2016

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.
GOSTEI 1
Leandro Gonçalves

Leandro Gonçalves

01/02/2016

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.
GOSTEI 1
Gabriel

Gabriel

01/02/2016

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
GOSTEI 0
Leandro Gonçalves

Leandro Gonçalves

01/02/2016

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).
GOSTEI 1
Natanael Ferreira

Natanael Ferreira

01/02/2016

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]
GOSTEI 1
Gabriel

Gabriel

01/02/2016

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

Muito obrigado pela ajuda e paciência pessoal!
GOSTEI 1
POSTAR