PDA

Ver la Versión Completa : Como acceder a un dfm paralelo en tiempo de diseño


cdac901
22-11-2012, 00:26:16
Buenas Noches, espero ser los mas descriptivo posible en el titulo.

Delphi XE3, Windows 7

Tengo 2 dfm

El primero se llama Unit1.dfm:


object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 237
ClientWidth = 425
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 128
Top = 40
Width = 59
Height = 13
Caption = 'Hola Mundo '
end
end


y este otro se llama Unit1_Paralelo.dfm:


object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 237
ClientWidth = 425
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 128
Top = 40
Width = 59
Height = 13
Caption = 'Hola Mundo Paralelo'
end
end


El .pas esta de la siguiente forma

unit Unit1;

{$define DFM_PARALELO} //Con esta directiva se compila en tiempo de ejecucion Unit1.dfm o Unit1_Paralelo.dfm

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)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$ifdef DFM_PARALELO}
{$R Unit1_Paralelo.dfm}
{$else DFM_PARALELO}
{$R *.dfm}
{$endif DFM_PARALELO}

end.




Hasta ahora las pruebas que hecho han funcionado sin novedad, pero el detalle que tengo ahorita habra una forma en la que pueda acceder a Unit1_Paralelo.dfm en tiempo de diseño para hacerle cambios?.

De antemano gracias por las sugerencias que me puedan dar, y si hay otra forma de poder trabajar 2 .dfm con 1 .pas teniendo hacer cambios en los .dfm en tiempo de diseño se los agradeceria doblemente.

cdac901
22-11-2012, 00:29:26
Por alguna razón el codigo quedo en una sola linea, al moderador si tiene la oportunidad de borrar el mensaje anterior o modificarlo se lo agradeceria, ya que no veo como modificarlo por los medios que tengo (Listo alineado como debe se gracias)

Al González
22-11-2012, 01:19:26
Las que usas son directivas de compilación condicionales. Sólo al compilar para generar el código ejecutable es que son consideradas por Delphi.

Lo más parecido a «trabajar 2 .dfm con 1 .pas» es emplear herencia visual. Busca el término en Google y en estos mismos foros, encontrarás mucho material con ejemplos.

De todas formas conviene que detalles un poco más el origen de esa necesidad.

Saludos. :)

cdac901
22-11-2012, 19:29:29
Hola Gracias por tu respuesta, la opción de herencia visual la propusimos para este caso, pero el problema que se nos presento con esta propuesta es que, en el formulario Padre tengo un Button1 (por ejemplo) en cada uno de los formularios hijos aparecera tambien aparecera Button1 sin la posibilidad de poder borrarlo en tiempo de diseño.

La idea de esto es tener 2 presentaciones del mismo producto. Me explico mejor

Ejemplo:

Venezuela: Pide el Numero de Control en una Factura de Compras.
Panama: No Pide el Numero de Control en una Factura de Compras.

Lo que se desea es quitar el Edit y el Label que pide el dato "Numero de Control" para Panama, sin la necesidad de ocultar dichos objetos con Visible := False en el .pas, internamente el codigo fuente funciona exactamente igual lo unico que no va a pedir el dato a nivel visual.

De antemano gracias por la ayuda prestada.

roman
22-11-2012, 20:14:52
Ejemplo:

Venezuela: Pide el Numero de Control en una Factura de Compras.
Panama: No Pide el Numero de Control en una Factura de Compras.

Lo que se desea es quitar el Edit y el Label que pide el dato "Numero de Control" para Panama, sin la necesidad de ocultar dichos objetos con Visible := False en el .pas, internamente el codigo fuente funciona exactamente igual lo unico que no va a pedir el dato a nivel visual.

De antemano gracias por la ayuda prestada.

Bueno, pues la herencia visual que menciona Al, sigue siendo la mejor opción, en mi opinión. Lo que pasa es que la clase base sólo debería contar con los elementos comunes a todas las ventanas y de ahí derivar, añadiendo un descendiente que aumente el o los controles necesarios.

// Saludos