Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acceder a un segundo formulario desde una Unit (https://www.clubdelphi.com/foros/showthread.php?t=89658)

JuanOrtega 08-01-2016 20:30:04

Acceder a un segundo formulario desde una Unit
 
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 :

Código Delphi [-]
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 :

Código Delphi [-]
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
Código Delphi [-]
procedure change_title(Aform: TForm); begin   AForm.Caption := 'testing'; end;

Uso


Código Delphi [-]
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:

Código Delphi [-]
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

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 07:30:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi