FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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
|
#2
|
|||
|
|||
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; |
#3
|
|||
|
|||
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. |
#4
|
|||
|
|||
Cita:
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; |
#5
|
||||
|
||||
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; |
#6
|
||||
|
||||
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; Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
|||
|
|||
Cita:
|
#8
|
|||
|
|||
Gracias por todo compáñeros
|
|
|
|