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