Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Crear nuevas propiedades de un formulario (https://www.clubdelphi.com/foros/showthread.php?t=254)

Angel 09-05-2003 11:03:07

Crear nuevas propiedades de un formulario
 
Hola a todos.

Me gustaría crear un nuevo formulario con propiedades añadidas por mí y que aparecieran en el Object inspector, el problema es que no tengo ni idea de como hacerlo.

¿Podría alguien enviarme código de ejemplo, o algún enlace donde lo expliquen, o algo de ayuda?


Muchas gracias a todos

delphi.com.ar 09-05-2003 16:50:34

Si querés hacerlo con herencia visual, las propiedades no van a aparecer en el object inspector, pero si creas una clase heredada de TForm sin su respectivo DFM, creas un nuevo formulario y modificas la clase heredada, Eureka!….

Este ejemplo lo vengo usando desde hace mucho y funciona:


Código:

unit FSForm;

type
  TFSForm = class(TForm)
  …
  published
    property StatusBar  : TStatusBar read FStatusBar    write FStatusBar;
    property AutoTabs  : Boolean    read FAutoTabs      write SetAutoTabs;
  end;

Implementación
Código:

unit unCustomConsulta;

interface

uses
  Windows, Messages, SysUtils... FSForm;

type
  TfrmCustomConsulta = class(TFSForm)
  ....

La primera ves que modificas el form para modificar la clase, las propiedades no aparecen, pero lo cerras y lo abrís... (el IDE lee el DFM y la información RTTI de las clases).. y listo!

delphi.com.ar 09-05-2003 16:52:28

Vuelvo aclarar que la unit FSForm es una Unit "plana"... no tiene DFM... (File / New / Unit)

Angel 10-05-2003 12:51:18

Siento mucho comunicarte que el truco no me funciona (quizás esté haciendo algo mal). Aqui te muestro las dos units que tengo creadas:

unit UListForm;

interface

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

type
TFSForm = class(TForm)
private
FValor: Integer;
FParam1: Variant;
public
published
property ParametroEntrada:Variant read FParam1 write FParam1;
property aux:Integer read FValor Write FValor;
end;

implementation

end.

y la unit donde heredo esta clase:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Dialogs, UListForm;



type
TForm1 = class(TFSForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }

public
{ Public declarations }
published

end;

var
Form1: TForm1;

implementation

{$R *.dfm}



Incluso cerrando y volviendo a abrir el Delphi siguen sin mostrarse esas dos nuevas propiedades.

¿Estoy haciendo algo mal?


Saludos

delphi.com.ar 10-05-2003 23:13:58

Bueno, ante todo quiero decirte que no tengo un Delphi para probarlo pero si la memoria no me falla. me parece que me olvidé de comentarte algo, hay que modificar la declaración del TForm1 en el dfm, donde debe decir algo similar a
Código:

object Form1: TForm1
No recuerdo bien la sintaxis, pero te aseguro que es la primer linea, tenés que poner uno de estos códigos:
Código:

object Form1: TFSForm
Código:

inherited Form1: TFSForm
Código:

inherited Form1: TForm1
Espero que sea esto, comentame como te fue, sinó recien el lunes voy a poder volver a ayudarte... Suerte!

Angel 12-05-2003 09:39:53

hola delphi.com.ar,

Sigo sin conseguir que me funcione.... me gustaría mandarte el proyecto que tengo hecho para que lo vieses y me dijeses que falla. Consigo que me compile, pero no me muestra las propiedades que creo.

He realizado los cambios que me propusiste, pero el único que funciona es dejándolo como estaba.

es decir, si escribo esto en el DFM (que sería lo lógico)

object Form1: TFrmList
Left = 192
Top = 108
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end

me aparece el siguiente error al intentar cargar otra vez el proyecto:
Error in module: Declaration of class TFrmList is missing or incorrect

¿alguna idea del error?

delphi.com.ar 12-05-2003 16:52:35

Bueno, he probado esto en Delphi 5, y veo que no hay que cambiar nada en el DFM.
Pero la mala noticia, es que en Delphi 7 no funciona...
Mil disculpas.. es que aun sigo programando solo en Delphi 5

Angel 13-05-2003 09:32:28

Yo estoy utilizando el Delphi 5 tambien (y no consigo que funcione)

delphi.com.ar 13-05-2003 17:00:00

Bueno, siendo así, envíame el proyecto a webmaster@delphi.com.ar

PD: Tené en cuenta que si migras a una versión superior, vas a perder los datos modificados de esas propiedades, lo que es un verdadero peligro para tu aplicación.

roman 14-05-2003 06:35:40

Una forma de agregar propiedades a un formulario la pueden ver en la página de Dr. Marteens , específicamente el truco 16

// Saludos

delphi.com.ar 26-06-2003 23:54:24

Bueno, me acabo de dar cuenta que en la unit donde registro mis componentes en el paquete de diseño, aparece la línea:

Código:

RegisterCustomModule(TFSForm, TCustomModule);
Eso era lo que faltaba,
mil disculpas por la omisión
Saludos!

lafirma 04-07-2003 19:33:18

Como hago para agregar al repositorio un form que no tenga dfm?

delphi.com.ar 04-07-2003 20:47:28

Agregas un Form heredado del form sin DFM!

lafirma 10-07-2003 00:55:57

mi pregunta sobre agregar forms al repositorio sin dfm se refiere a que esa opcion solo la he encontrado haciendo click derecho en la ventana del form, pero como el form esta sin dfm no hay diseño visual, por lo tanto no hay acceso a esa opcion

guillotmarc 10-07-2003 01:09:09

Hola.

Lo que te está indicando delphi.com.ar, es que crees un formulario intermedio. Creas un nuevo Formulario y en su definición de clase :

Código:

type
  TForm1 = class(TForm)

lo cambies por algo como

Código:

type
  TiFSForm = class(TFSForm)

Ahora cierra este formulario y vuelvelo a abrir, te aparecerá con las nuevas propiedades, y como es un formulario con .dfm lo podrás añadir al Repositorio.

Ahora los nuevos formularios, los vas a heredar de este ultimo TiFSForm en lugar de TFSForm inicial.

Por cierto delphi.com.ar, ¿ este truco también funciona para definir eventos en el formulario ?

Saludos.

delphi.com.ar 10-07-2003 15:39:42

No lo he probado, pero como Delphi le da a los eventos el mismo trato que a las propiedades, mejor dicho: los eventos no son mas que propiedades del tipo "procedure of object", ¡¡Tiene que Funcionar!!

Saludos!


La franja horaria es GMT +2. Ahora son las 19:49:52.

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