PDA

Ver la Versión Completa : Acceder a un segundo formulario desde una Unit


JuanOrtega
08-01-2016, 20:30:04
Hola estoy haciendo una unit para poder acceder al control de un segundo formulario , en este caso , un formulario secundario About , el tema es que estoy llamando a la funcion change_title() del unit "effects" para cambiar el titulo del about sin ningun problema , el tema es que este codigo no resuelve nada porque no reconoce ni el nombre del formulario que esta especificado en una variable.

El codigo :


uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
DH_Form_Effects, Vcl.ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient,FormAbout,effects;

procedure TForm1.Form_NowClick(Sender: TObject);
var
name_unit:string;
name_form:string;
begin
name_unit := 'FormAbout';
name_form := 'About';

change_title(FormAbout,About); // Call function of unit 'effects'
end;

end;


Unit effects :


unit effects;

interface

uses Windows, Vcl.Forms, Vcl.StdCtrls, Vcl.ExtCtrls;

procedure change_title(name_unit: string; name_form: string);

implementation

procedure change_title(name_unit: string; name_form: string);
begin
name_unit.name_form.Caption := 'testing';
// FormAbout.About.Caption := 'testing';
end;

end.


¿ Como soluciono este problema ?

Caminante
08-01-2016, 22:34:24
Hola
procedure change_title(Aform: TForm); begin AForm.Caption := 'testing'; end;

Uso


change_title(About);//About es el formulario

BDWONG
08-01-2016, 22:39:41
Hola porque no le pasas por parametro a la funcion change_title() la referencia del objeto TFORM
algo asi:

unit effects;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils,Forms;

procedure changeTitle(form:TForm; name_form:String);
implementation

procedure changeTitle(form:TForm; name_form:String);
begin
form.Caption:=name_form;
end;

end.




Este es el primer formulario tiene dos botones el primer para ejectuar la segunda ventana y el segundo
boton para cambiar el titulo de la segunda ventana

var
Form1: TForm1;

implementation

{$R *.lfm}

uses
Unit2,effects;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
//boton que ejecuta la ventana
Unit2.Form2.ShowModal;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//boton que cambia el nombre de la ventana
changeTitle(Form2,'he sido cambiado');
ShowMessage('Nombre cambiado correctamente');
end;

end.


Obviamente yo estoy suponiendo que ya tienes las dos ventanas creadas en tu proyecto y la unit llamada effects
el ejemplo esta hecho en lazarus 1.4 pero me imagino que no tendra problemas en funcionar en Delphi