Executar Função/Procedure de outra Classe/Unit - Delphi
Olá à todos. Sou novo no Delphi e gostaria de tirar uma dúvida sobre executar uma Função/Procedure de outra classe/unit.
Supostamente estaria fazendo o seguinte: Ao clicar no botão, eu chamaria a função que está na outra classe/unit que tem como objetivo ativar a label e setar uma frase na classe/unit principal, que a principio está desativada. No que eu posso está errando? Obrigado
CLASSE/UNIT PRINCIPAL
CLASSE/UNIT SECUNDARIA:
Supostamente estaria fazendo o seguinte: Ao clicar no botão, eu chamaria a função que está na outra classe/unit que tem como objetivo ativar a label e setar uma frase na classe/unit principal, que a principio está desativada. No que eu posso está errando? Obrigado
CLASSE/UNIT PRINCIPAL
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Unit2: TUnit2;
begin
Unit2 := TUnit2.Create;
Unit2.mensagem(''TEste de teta'');
end;
end.CLASSE/UNIT SECUNDARIA:
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Unit1;
type
TUnit2 = class
private
public
function mensagem(m: string): string;
end;
implementation
{ TUnit2 }
function TUnit2.mensagem(m: string): string;
var
Unit1: TForm1;
begin
Unit1 := TForm1.Create(Application);
Unit1.Label1.Visible:= true;
Unit1.Label1.Caption:= m;
end;
end.Cayque
Curtidas 0
Melhor post
Luiz Vichiatto
28/12/2017
Unit2 tem uma linha a mais, linha 12 private
a classe tem que ser publica
a classe tem que ser publica
GOSTEI 1
Mais Respostas
Raimundo Pereira
28/12/2017
Veja
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// NEste form declaramos a unit2 onde conterá várias function
uses Unit2;
// Chamando a Função atravez de um buttom
procedure TForm1.Button1Click(Sender: TObject);
begin //Caption //Label do Form1 //True = Estará visivel False= Não estará visivel
Unit2.mensagem('Teste Teta',Label1 ,true);
Unit2.mensagem('Teste Teta 2',Label2 ,true);
end;
end.
// Nesta Unit2 não precisa declarar Unit1. // O Objetivo é que esta unit2 receba chamadas das funções nela contidas unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls; //Função Declarada. Function mensagem(m: string; Label_:Tlabel; Ativado:boolean): string; implementation //Estrutura da Função //Label_:Tlabel pode ser qualquer label em qualquer form futuro //Desde que neste forms seja declarado a Unit2 em uses. Function mensagem(m: string; Label_:Tlabel; Ativado:boolean): string; begin Label_.Caption:=m; Label_.Visible:=Ativado; end; end.
GOSTEI 1
Cayque
28/12/2017
Obrigado pela explicação e pelo exemplo! Problema resolvido!
GOSTEI 0