Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2015
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Directivas para realizar uses de formularios dependiendo de lo que requiera

Buen día, tengo una inquietud tengo tres formularios que entre el formulario 1 y 2 tengo el uses del formulario 1
Entre el formulario 3 y formulario 2 el uses del formulario 2, pero lo que no quiero es tener que usar el formulario 1 porque lo contiene el formulario 2.

Quiero realizar el uses con directivas se que asi no tendré que usar el formulario 1 en el formulario 3, pero no se como implementarlo.

Alguna idea??

Gracias.
Responder Con Cita
  #2  
Antiguo 01-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Bienvenido Soa Pelaez,

La verdad no entendi nada, podrias explicarlo un poco mejor?
Responder Con Cita
  #3  
Antiguo 01-12-2015
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Bienvenido Soa Pelaez,

La verdad no entendi nada, podrias explicarlo un poco mejor?
Tres Formularios.

El 1 necesita del 2
El 3 necesita del 2

Pero lo que no quiero es por querer usar el formulario dos tener que arrastrar el formulario 1 porque se encuentra entre los uses del formulario 2

Con directivas se puede hacer, pero necesito saber como.
Responder Con Cita
  #4  
Antiguo 01-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Ósea que tenés una referencia circular

El 1 necesita del 2
El 3 necesita del 2
El 2 necesita del 1

Eso obviamente es malo y no se soluciona con directivas de compilación.
Es malo por justamente la situación que se te presentó: necesitas tanto a 1 como a 2 en tu proyecto pero sólo te interesa usar uno

Si es posible pon el código en donde se genera la dependencia y vemos como ayudarte a refactorizar

Básicamente la parte que nos interesa de 2 es, que parte no compila si se elimina a 1 del uses
Responder Con Cita
  #5  
Antiguo 01-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Este es un ejemplo trivial, basicamente consiste de dos Forms, Form1 y Form2

El Form1 consiste de un memo y un boton, el cual en su evento OnClick, crea y visualiza de manera modal el Form2. Por lo tanto en su clausula uses encontramos la Unit2

El Form2 simplemente tiene un Edit y un boton; Form2 en su clausula uses contiene a Unit1, por lo tanto creamos una referencia circular

Unidad1 -> Usa a la Unidad2
Unidad2 -> Usa a la Unidad1

En el evento OnClick del Form2, se agrega al Memo del Form1 el contenido del Edit, y se cierra el formulario

El codigo seria el siguiente:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    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
  Form2: TForm2;
begin
  Form2 := TForm2.Create(NIL);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
end;

end.

Código Delphi [-]
unit Unit2;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

uses
  Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.Memo1.Lines.Add(Edit1.Text);
  Close;
end;

end.

Y en efecto si lo ejecutamos, podria decirse que funciona bien. Pero obviamente, si a mi me interesa en otro proyecto usar solo uno de estos dos Form, no me queda otra alternativa que incluir a los dos

Una primera solucion podria ser, quitar del uses del Form2, a la Unit1; obviamente el codigo ahora no compilara ya que no se conoce a 'Form1'.

Asi que la unica alternativa es acceder desde el Form1 al valor del Edit, asi:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(NIL);
  try
    Form2.ShowModal;
    Memo1.Lines.Add(Form2.Edit1.Text);
  finally
    Form2.Free;
  end;
end;

Pero no seria mas lindo poder hacer algo como esto?:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(NIL);
  try
    Memo1.Lines.Add(Form2.GetString);
  finally
    Form2.Free;
  end;
end;

function TForm2.GetString: string;
begin
  ShowModal;
  Result := Edit1.Text;
end;

Obviamente se puede ir mejorando mas y mas, pero eso te lo dejo para que experimentes vos mismo

Saludos
Responder Con Cita
  #6  
Antiguo 01-12-2015
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Este es un ejemplo trivial, basicamente consiste de dos Forms, Form1 y Form2

El Form1 consiste de un memo y un boton, el cual en su evento OnClick, crea y visualiza de manera modal el Form2. Por lo tanto en su clausula uses encontramos la Unit2

El Form2 simplemente tiene un Edit y un boton; Form2 en su clausula uses contiene a Unit1, por lo tanto creamos una referencia circular

Unidad1 -> Usa a la Unidad2
Unidad2 -> Usa a la Unidad1

En el evento OnClick del Form2, se agrega al Memo del Form1 el contenido del Edit, y se cierra el formulario

El codigo seria el siguiente:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    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
  Form2: TForm2;
begin
  Form2 := TForm2.Create(NIL);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
end;

end.

Código Delphi [-]
unit Unit2;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

uses
  Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.Memo1.Lines.Add(Edit1.Text);
  Close;
end;

end.

Y en efecto si lo ejecutamos, podria decirse que funciona bien. Pero obviamente, si a mi me interesa en otro proyecto usar solo uno de estos dos Form, no me queda otra alternativa que incluir a los dos

Una primera solucion podria ser, quitar del uses del Form2, a la Unit1; obviamente el codigo ahora no compilara ya que no se conoce a 'Form1'.

Asi que la unica alternativa es acceder desde el Form1 al valor del Edit, asi:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(NIL);
  try
    Form2.ShowModal;
    Memo1.Lines.Add(Form2.Edit1.Text);
  finally
    Form2.Free;
  end;
end;

Pero no seria mas lindo poder hacer algo como esto?:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(NIL);
  try
    Memo1.Lines.Add(Form2.GetString);
  finally
    Form2.Free;
  end;
end;

function TForm2.GetString: string;
begin
  ShowModal;
  Result := Edit1.Text;
end;

Obviamente se puede ir mejorando mas y mas, pero eso te lo dejo para que experimentes vos mismo

Saludos
Lo que quiero realmente es hacer algo similar a esto.

{$IFDEF CLR}
System.ComponentModel.Design.Serialization, System.Security.Permissions, System.Security, // Esto lo usa solamente si es un equipo que tiene S.O Windows

{$ENDIF}
{$IFDEF LINUX}
WinUtils, libc, // Esto lo usa solamente si es un equipo que tien S.O Linux
{$ENDIF}


Alguien tiene un ejemplo de algo asi, pero especificando uses de Unit, poniendo en contexto el ejemplo que cito en mi inquietud
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Directivas de compilación duilioisola OOP 3 02-12-2011 16:02:19
directivas de grupo gri Redes 0 27-01-2011 10:00:33
Directivas de compilación Livey Varios 0 21-09-2010 23:03:51
Como puedo Enviar Email La cantidad de veces que se requiera jandres Internet 3 15-04-2008 23:03:49
¿Directivas compilacion? drykea Varios 1 03-05-2007 14:51:15


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


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
Copyright 1996-2007 Club Delphi