Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
habilitar una clase antes de su uso en un componente

Hola compañeros tengo un componente para mostrar varios display pongo el principio del código

Código Delphi [-]
unit MultiDisplay;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, Graphics,UDiGDisplayJL2;

type

  TDisplay1 =class(TPersistent) //Para crear propiedades agrupadas   2/
  private
       FDigits: byte; { Número de digitos a representar }
       FValue: string; { Valor a arepresentar }
       FBckgndColor, FDigitOnColor, FDigitOffColor: TColor; { Colores }
       FAlignment: TAlignment; { Alineación horizontal }
       FLeadingZeros: boolean; { Rellenar con ceros }
       FTipoVisor  :  TTypeVisor;
       procedure setTipoVisor(const Value:TTypeVisor);
       procedure SetDigits(Value: byte);
       procedure SetValue(Value: String);
       procedure SetBckgndColor(Value: TColor);
       procedure SetDigitOnColor(Value: TColor);
       procedure SetDigitOffColor(Value: TColor);
       procedure SetAlignment(Value: TAlignment);
       procedure SetLeadingZeros(Value: boolean);
  published
       property LeadingZeros    : boolean   read FLeadingZeros   write SetLeadingZeros default False;
       property Alignment  : TAlignment   read FAlignment   write SetAlignment default           taRightjustify;
       property Digits    : byte     read FDigits     write SetDigits default 4;
       property Value    : string   read FValue     write SetValue;
       property BckgndColor  : TColor   read FBckgndColor   write SetBckgndColor;
       property DigitOnColor  : TColor   read FDigitOnColor   write SetDigitOnColor;
       property DigitOffColor  : TColor   read FDigitOffColor   write SetDigitOffColor;
       property TipoVisor   : TTypeVisor  read FTipoVisor    write SetTipoVisor default VNumeric;
  end;

type
  TDisplay2 =class(TPersistent) //Para crear propiedades agrupadas   2/
  private
       FDigits: byte; { Número de digitos a representar }
       FValue: string; { Valor a arepresentar }
       FBckgndColor, FDigitOnColor, FDigitOffColor: TColor; { Colores }
       FAlignment: TAlignment; { Alineación horizontal }
       FLeadingZeros: boolean; { Rellenar con ceros }
       FTipoVisor  :  TTypeVisor;

       procedure setTipoVisor(const Value:TTypeVisor);
       procedure SetDigits(Value: byte);
       procedure SetValue(Value: String);
       procedure SetBckgndColor(Value: TColor);
       procedure SetDigitOnColor(Value: TColor);
       procedure SetDigitOffColor(Value: TColor);
       procedure SetAlignment(Value: TAlignment);
       procedure SetLeadingZeros(Value: boolean);
  published
       property LeadingZeros    : boolean   read FLeadingZeros   write SetLeadingZeros default False;
       property Alignment  : TAlignment   read FAlignment   write SetAlignment default           taRightjustify;
       property Digits    : byte     read FDigits     write SetDigits default 4;
       property Value    : string   read FValue     write SetValue;
       property BckgndColor  : TColor   read FBckgndColor   write SetBckgndColor;
       property DigitOnColor  : TColor   read FDigitOnColor   write SetDigitOnColor;
       property DigitOffColor  : TColor   read FDigitOffColor   write SetDigitOffColor;
       property TipoVisor   : TTypeVisor  read FTipoVisor    write SetTipoVisor default VNumeric;
  end;

type
  TDisplay3 =class(TPersistent) //Para crear propiedades agrupadas   2/
  private
       FDigits: byte; { Número de digitos a representar }
       FValue: string; { Valor a arepresentar }
       FBckgndColor, FDigitOnColor, FDigitOffColor: TColor; { Colores }
       FAlignment: TAlignment; { Alineación horizontal }
       FLeadingZeros: boolean; { Rellenar con ceros }
       FTipoVisor  :  TTypeVisor;

       procedure setTipoVisor(const Value:TTypeVisor);
       procedure SetDigits(Value: byte);
       procedure SetValue(Value: String);
       procedure SetBckgndColor(Value: TColor);
       procedure SetDigitOnColor(Value: TColor);
       procedure SetDigitOffColor(Value: TColor);
       procedure SetAlignment(Value: TAlignment);
       procedure SetLeadingZeros(Value: boolean);
  published
       property LeadingZeros    : boolean   read FLeadingZeros   write SetLeadingZeros default False;
       property Alignment  : TAlignment   read FAlignment   write SetAlignment default           taRightjustify;
       property Digits    : byte     read FDigits     write SetDigits default 4;
       property Value    : string   read FValue     write SetValue;
       property BckgndColor  : TColor   read FBckgndColor   write SetBckgndColor;
       property DigitOnColor  : TColor   read FDigitOnColor   write SetDigitOnColor;
       property DigitOffColor  : TColor   read FDigitOffColor   write SetDigitOffColor;
       property TipoVisor   : TTypeVisor  read FTipoVisor    write SetTipoVisor default VNumeric;
  end;

type
  TComunes =class(TPersistent) //Para crear propiedades agrupadas   2/
  private
       FComun:    Boolean;  //Usa en los displays las mismas caracteristicas
       FDigits: byte; { Número de digitos a representar }
       FBckgndColor, FDigitOnColor, FDigitOffColor: TColor; { Colores }
       FAlignment: TAlignment; { Alineación horizontal }
       FLeadingZeros: boolean; { Rellenar con ceros }
       FTipoVisor  :  TTypeVisor;
       procedure SetComun(value:Boolean);
       procedure setTipoVisor(const Value:TTypeVisor);
       procedure SetDigits(Value: byte);
       procedure SetBckgndColor(Value: TColor);
       procedure SetDigitOnColor(Value: TColor);
       procedure SetDigitOffColor(Value: TColor);
       procedure SetAlignment(Value: TAlignment);
       procedure SetLeadingZeros(Value: boolean);
  published
       property Comun           : Boolean       read FComun    write SetComun   default False;
       property LeadingZeros    : boolean   read FLeadingZeros   write SetLeadingZeros default False;
       property Alignment  : TAlignment   read FAlignment   write SetAlignment default           taRightjustify;
       property Digits    : byte     read FDigits     write SetDigits default 4;
       property BckgndColor  : TColor   read FBckgndColor   write SetBckgndColor;
       property DigitOnColor  : TColor   read FDigitOnColor   write SetDigitOnColor;
       property DigitOffColor  : TColor   read FDigitOffColor   write SetDigitOffColor;
       property TipoVisor   : TTypeVisor  read FTipoVisor    write SetTipoVisor default VNumeric;
  end;


type
  TEspacio = 0..5;
  TNumbers = 1..3;
  TMultiDisplay = class(TPanel)
  private
      { Private declarations }
      FDisplay1    :TDisplay1;
      FDisplay2    :TDisplay2;
      FDisplay3    :TDisplay3;
      FComunes    :TComunes;
      FSpace     :TEspacio;
      FNumbersDisplays  :TNumbers;
      FDisp1    :TDigitDisplayJL_R; //HAy que tener instalado la unidad UdigiDiplsy
      FDisp2    :TDigitDisplayJL_R;
      FDisp3    :TDigitDisplayJL_R;
      procedure SetSpace(Value:TEspacio);
      procedure SetNumbersDisplays(Value:TNumbers);
  protected
    { Protected declarations }
    procedure Paint; override;
    procedure Resize; override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure clear;
  published
    property Space    :TEspacio    read FSpace    Write SetSpace;
    property NumbersDisplays    :TNumbers        read FNumbersDisplays  write SetNumbersDisplays;
    property Display1    :TDisplay1   read FDisplay1    write FDisplay1;
    property Display2    :TDisplay2   read FDisplay2    write FDisplay2;
    property Display3    :TDisplay3   read FDisplay3    write FDisplay3;
    property Comunes    :TComunes   read FComunes    write FComunes;
    { Published declarations }
  end;

hasta aquí todo bien, el problema surge cuando quiero acceder a un cambio desde por Ejemplo Tdisplay1.value a Disp1.value, investigando en internet he visto en otros componetes que declaran la clase del componente antes de su uso (de que realmente se cree) de la siguiente forma, seria por ejemplo en el TDisplay1

Código Delphi [-]
TMultiDisplay = class;

y luego dentro de mi Tdiplay1 iría las siguientes lineas de código

Código Delphi [-]
uses
  SysUtils, Classes, Controls, ExtCtrls, Graphics,UDiGDisplayJL2;

 TMultiDisplay = class;
type

  TDisplay1 =class(TPersistent) //Para crear propiedades agrupadas   2/
  private
       FDigits: byte; { Número de digitos a representar }
       FMulti :TMultiDisplay;
       FValue: string; { Valor a arepresentar }
       FBckgndColor, FDigitOnColor, FDigitOffColor: TColor; { Colores }
       FAlignment: TAlignment; { Alineación horizontal }
       FLeadingZeros: boolean; { Rellenar con ceros }
       FTipoVisor  :  TTypeVisor;
       procedure setTipoVisor(const Value:TTypeVisor);
       procedure SetDigits(Value: byte);
       procedure SetValue(Value: String);
       procedure SetBckgndColor(Value: TColor);
       procedure SetDigitOnColor(Value: TColor);
       procedure SetDigitOffColor(Value: TColor);
       procedure SetAlignment(Value: TAlignment);
       procedure SetLeadingZeros(Value: boolean);
       procedure SetMulti(value:TMultiDisplay);
  published
       property LeadingZeros    : boolean   read FLeadingZeros   write SetLeadingZeros default False;
       property Alignment  : TAlignment   read FAlignment   write SetAlignment default           taRightjustify;
       property Digits    : byte     read FDigits     write SetDigits default 4;
       property Value    : string   read FValue     write SetValue;
       property BckgndColor  : TColor   read FBckgndColor   write SetBckgndColor;
       property DigitOnColor  : TColor   read FDigitOnColor   write SetDigitOnColor;
       property DigitOffColor  : TColor   read FDigitOffColor   write SetDigitOffColor;
       property TipoVisor   : TTypeVisor  read FTipoVisor    write SetTipoVisor default VNumeric;
       property Multi: TMultiDisplay  read FMulti   write SetMulti;
  end;

Pero me da los siguientes errores

Cita:
[DCC Error] MultiDisplay.pas(10): E2086 Type 'TMultiDisplay' is not yet completely defined
[DCC Error] MultiDisplay.pas(131): E2004 Identifier redeclared: 'TMultiDisplay'
[DCC Error] MultiDisplay.pas(28): E2005 'TMultiDisplay' is not a type identifier
Si me podéis explicar que estoy haciendo mal y cual sería la forma correcta, me ayudaríais mucho.

Como siempre gracias
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
 



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
Como crear un componente sin derivarlo de otra clase? DarkBlue Varios 8 08-11-2011 16:41:04
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
Es posible hacer una nueva clase de componente ?? ilichhernandez OOP 7 05-05-2008 16:01:30
Cuando van habilitar seccion componente leodelca23 La Taberna 1 20-09-2006 14:26:22
Una clase como propiedad de un componente? setry2 OOP 3 30-12-2003 21:30:58


La franja horaria es GMT +2. Ahora son las 21:34:20.


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