Executar Função/Procedure de outra Classe/Unit - Delphi

Delphi

Lógica de programação

28/12/2017

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

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

Cayque

Curtidas 0

Melhor post

Luiz Vichiatto

Luiz Vichiatto

28/12/2017

Unit2 tem uma linha a mais, linha 12 private
a classe tem que ser publica
GOSTEI 1

Mais Respostas

Raimundo Pereira

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

Cayque

28/12/2017

Obrigado pela explicação e pelo exemplo! Problema resolvido!
GOSTEI 0
POSTAR