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
  #7  
Antiguo 27-03-2010
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola,

He hecho algunas pruebas y sí que se consigue crear ambos tipos de componentes, aunque he detectado algún problema con el componente NO Visual en versiones antiguas de Delphi (la 4 en concreto, en Delphi 6 no pasa). Ocurre que cuando se crea dicho componente NO visual, al no poder tener una representación en pantalla, el icono de éste no aparece, pero sí que está. Si guardo el formulario y lo vuelvo a abrir, ahí está, en la esuqina superior izquierda. Con los controles no sucede pues cuando le asignas el Parent enseguida aparece situado dentro de dicho Parent.

Deberías mirar si en la declaración de componentes del formulario te aparece dicho componente NO Visual (aunque para eso le tienes que haber asignado un nombre, cosa que el IDE hace por defecto cuando soltamos un componente desde la paleta pero que debes realizar tú en este caso). Si te aparece es que todo ha ido bien, aunque, claro, lo que tú querrías es que apereciera su icono sobre el formulario automáticamente para poderle asignar propiedades (ésto es lo que falla en la versión 4 y supongo que en anteriores, y que no he conseguido solucionar).

Te pongo un componente que he utilizado de pruebas, para que lo revises. Este código hace uso de la función GetParentForm para obtener el formulario padre a partir del AOwner (en caso de que éste sea un TControl). También te pongo una función FindUniqueName que sirve para asignarle un nombre automáticamete y que no esté repetido.

Código Delphi [-]
unit CompPrueba;

interface

uses Classes, SysUtils, Controls, Forms, StdCtrls, DB, ADODB;

type
  TComponentePrueba = class(TComponent)
  private
    MyADOConexion : TADOConnection;  // Componente No Visual
    MyLabel : TLabel;            // Componente Visual
  public
    constructor Create(AOwner: TComponent);   override;
  end;

  function FindUniqueName(AOwner: TComponent; const BaseName: string): string;

  procedure Register;

implementation

procedure register;
begin
  RegisterComponents('Pruebas', [TComponentePrueba]);
end;

// Esta función nos ayuda a dar nombre a un componente evitando que esté repetido
function FindUniqueName(AOwner: TComponent; const BaseName: string): string;
var
  i : Integer;
begin
  i := 1;
  repeat
    result := Format('%s%d', [BaseName, i]);
    Inc(i);
  until AOwner.FindComponent(result) = nil;
end;

{ TComponentePrueba }

constructor TComponentePrueba.Create(AOwner: TComponent);
var
  AForm : TCustomForm;
begin
  inherited Create(AOwner);
  // Sólo creamos los componentes "adjuntos" si AOwner no es nil y si no estamos
  // cargando el formulario de un Stream
  if Assigned(AOwner) AND NOT (csLoading in AOwner.ComponentState) then
  begin
  // CREACION DE UN Componente NO visual
    MyADOConexion := TADOConnection.Create(AOwner);
    MyADOConexion.Name := FindUniqueName(AOwner, MyADOConexion.ClassName);

  // CREACION DE UN Componente visual (TControl) ==> Hay que asignar el Parent,
  // que puede ser el formulario u otro control descendiente de TWinControl
    MyLabel := TLabel.Create(AOwner);
    MyLabel.Name := FindUniqueName(AOwner, MyLabel.ClassName);
    MyLabel.Caption := 'Label de prueba';
    AForm := nil;
    if AOwner is TControl then AForm := GetParentForm(TControl(AOwner));
    if AForm <> nil then MyLabel.Parent := AForm;
  end;
end;

end.

Saludos
__________________
Guía de Estilo
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
No veo, en tiempo de diseño los nombres de los componentes QuarkBcn Varios 3 19-12-2007 09:38:31
eventos en tiempo de diseño jar OOP 0 27-01-2007 22:09:11
Indices En Tiempo De Diseño?? amadis Conexión con bases de datos 0 12-04-2006 20:22:01
Diseño en tiempo de ejecucion Nelson Alberto Impresión 2 26-01-2006 09:34:12
Instalar componentes solo en tiempo de diseño DarKraZY Varios 0 19-08-2003 16:47:37


La franja horaria es GMT +2. Ahora son las 07:45:04.


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