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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
Duda creacion de componentes vcl

Hola a todos, el problema que tengo es que mi componente tiene que crear en tiempo de ejecucion un menu (quando se abra el formulario que lo contenga). No tengo ni idea de como decirle en tiempo de ejecucion. A ver si me podeis ayudar, gracias
Responder Con Cita
  #2  
Antiguo 21-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Podrías reescribir el constructor de tu clase

Código:
public
  constructor Create(aOwner: TComponent); override;
  destructor Destroy; overryde;

implementation

constructor MiClase.Create(aOwner: TComponent);
begin
  inherited;

  // Aquí creas el menú
end;

destructor MiClase.Destroy;
begin
  // Aquí destruyes el menú

  inherited;
end;
No te olvides de los inherited
Responder Con Cita
  #3  
Antiguo 21-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
Este es mi trozo de codigo:

constructor TNegus.Create(AOwner : TComponent);
var
x : integer;
NuevoItem : Tmenuitem;
ExisteMenu : boolean;
Menu : TMainMenu;
begin
inherited;
ExisteMenu:=false;
//ShowMessage(AOwner.ClassName);
NuevoItem:=TMenuItem.Create(AOwner);
NuevoItem.Caption := 'Modo seguridad';
//NuevoItem.OnClick := AbrirNegusFrm;
For x:=0 to Self.ComponentCount-1 do
if (Self.Components[x] is TMainMenu) then
begin
TMainMenu(Self.Components[x]).Items.Add(NuevoItem);
ExisteMenu:=true;
end;
if not ExisteMenu then
begin
Menu:=TMainMenu.Create(AOwner);
Menu.Items.Add(NuevoItem);
end;

end;

Pero me crea el menu en tiempo de diseño, yo lo quiero en tiempo de ejecucion.
Responder Con Cita
  #4  
Antiguo 21-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por Roger
Pero me crea el menu en tiempo de diseño, yo lo quiero en tiempo de ejecucion.
Normal, cuando pegas tu componente en el form, tambien se dispara el Create
Una pregunta. El menú estará visible durante TODA la vida del formulario? O se podrá esconder?
Si es que sí, que más da que en diseño veas el menú?
Si es que no, tendrás que crearte un método y, cuando quieras, invocar al método en cuestión

Código:
public
  destructor Destroy; override;
  procedure CreaMenu;

implementation

constructor MiClase.CreaMenu;
begin
  // Aquí creas el menú
end;

destructor MiClase.Destroy;
begin
  // Aquí destruyes el menú si está creado Puedes compararlo con nil por ejemplo

  inherited;
end;
PD: te recomiendo el uso de etiquetas [ code ] y [ /code ] (sin espacios) para poner código Delphi
Responder Con Cita
  #5  
Antiguo 21-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No tienes que crear ningún método aparte para que el menú se cree sólo en la ejecución. Lo que tienes que hacer es que tu código distinga si estás en modo de diseño o en ejecución:

Código:
if not (csDesigning in ComponentState) then
begin
  creas el menú 
end;
// Saludos
Responder Con Cita
  #6  
Antiguo 21-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola. En primer lugar te recomiendo que uses la etiqueta code para hacer que el código que pegues sea mas legible.

De la forma que creas el menú, estará disponible tanto en tiempo de diseño como en tiempo de ejecución. Si a pesar de todo no queres que aparezca en tiempo de diseño, simplemente encerrá el código de creación del menu en un if como este:

Código:
  if not (csDesigning in ComponentState) Then
  Begin
    CreacionDeMenu;
  End;
Estoy asumiendo que tu clase hereda de TComponent... si no, esto no te valdrá...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 21-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por roman
Código:
if not (csDesigning in ComponentState) then
begin
  creas el menú 
end;
Pos esto no lo sabía
Responder Con Cita
  #8  
Antiguo 22-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
Gracias por todo compáñeros
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


La franja horaria es GMT +2. Ahora son las 06:20: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