Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-09-2019
chinchan chinchan is offline
Miembro
 
Registrado: abr 2006
Posts: 109
Poder: 19
chinchan Va por buen camino
PopupMenu en modo de ejecución

Hola. Tengo un programa en C++ que crea varios paneles en modo de ejecución, pero también quería (en modo de ejecución) crear y asociarles un PopupMenu con tres opciones (opacionA; OpnciónB y OpciónC). Llevo ya varias horas y no doy con la solución; me haríais el favor de echarme una mano?... !cada vez estoy más perdido!. Muchas Gracias!!!
Responder Con Cita
  #2  
Antiguo 20-09-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

¿Dónde encuentras el problema? O sea, en qué punto... Sea como sea, la siguiente unidad, aunque de Delphi, acaso pueda ayudarte:

Código Delphi [-]
unit Unit1;

interface

uses
  Vcl.Forms,
  Vcl.Menus;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    // Manejador del evento click de nuestros items
    procedure MenuItemClick(Sender: TObject);
  private
    // Nuestro PopupMenu
    FPopupMenu: TPopupMenu;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Vcl.Dialogs;

procedure TForm1.FormCreate(Sender: TObject);
var
  MenuItem: TMenuItem;
begin
  // Creamos el PopupMenu
  FPopupMenu := TPopupMenu.Create(nil);

  // Creamos un item
  MenuItem := TMenuItem.Create(FPopupMenu);
  MenuItem.Caption := 'Opción A';
  MenuItem.OnClick := Self.MenuItemClick;
  FPopupMenu.Items.Add(MenuItem);

  // Creamos otro item
  MenuItem := TMenuItem.Create(FPopupMenu);
  MenuItem.Caption := 'Opción B';
  MenuItem.OnClick := Self.MenuItemClick;
  FPopupMenu.Items.Add(MenuItem);

  // Creamos el tercer item
  MenuItem := TMenuItem.Create(FPopupMenu);
  MenuItem.Caption := 'Opción C';
  MenuItem.OnClick := Self.MenuItemClick;
  FPopupMenu.Items.Add(MenuItem);

  // Asignamos al formulario nuestro PopupMenu
  Self.PopupMenu := FPopupMenu;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Destruimos nuestro PopupMenu
  FPopupMenu.Free();
end;

procedure TForm1.MenuItemClick(Sender: TObject);
begin
  // Mostramos el index del item al que se ha hecho click
  ShowMessageFmt('Has pulsado en el item con index: "%d"',
   [FPopupMenu.Items.IndexOf((Sender as TMenuItem))]);
end;

end.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 23-09-2019 a las 13:28:54.
Responder Con Cita
  #3  
Antiguo 21-09-2019
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
dec te ha puesto un ejemplo perfecto en delphi, si te parece y con su permiso, lo lo traduzco a C++ Builder

Código PHP:
 //---------------------------------------------------------------------------  

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
  
TPopupMenu *MyPopupMenu;
  
void __fastcall MenuItemClick(TObject *Sender);
public:        
// User declarations
  
__fastcall TForm1(TComponentOwner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 
Código PHP:
//---------------------------------------------------------------------------  
#include <vcl.h> 
#pragma hdrstop 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
  : 
TForm(Owner)
{
  
TMenuItem *MenuItem;
  
MyPopupMenu = new TPopupMenu(this);
  
// Creamos un item
  
MenuItem = new TMenuItem(MyPopupMenu);
  
MenuItem->Caption "Opción A";
  
MenuItem->OnClick MenuItemClick;
  
MyPopupMenu->Items->Add(MenuItem);

  
// Creamos otro item
  
MenuItem = new TMenuItem(MyPopupMenu);
  
MenuItem->Caption "Opción B";
  
MenuItem->OnClick MenuItemClick;
  
MyPopupMenu->Items->Add(MenuItem);

  
// Creamos el tercer item
  
MenuItem = new TMenuItem(MyPopupMenu);
  
MenuItem->Caption "Opción C";
  
MenuItem->OnClick MenuItemClick;
  
MyPopupMenu->Items->Add(MenuItem);

  
// Asignamos al formulario nuestro PopupMenu
  
PopupMenu MyPopupMenu;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::MenuItemClick(TObject *Sender)
{
  
TMenuItem *MenuItem dynamic_cast<TMenuItem*>(Sender);
  if(
MenuItem)
    
ShowMessageFmt("Has pulsado en el item con index: \"%d\""ARRAYOFCONST((PopupMenu->Items->IndexOf(MenuItem))));
}
//--------------------------------------------------------------------------- 





Saludos.
Responder Con Cita
  #4  
Antiguo 22-09-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Ahora este hilo también sirve para comparar el código de C++ con el de Delphi. Gracias escafandra.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 23-09-2019
chinchan chinchan is offline
Miembro
 
Registrado: abr 2006
Posts: 109
Poder: 19
chinchan Va por buen camino
Hola. Muchísimas gracias.!!!!... todo perfecto y funcionando... y lo que es mejor, creo que lo he entendido.
Responder Con Cita
  #6  
Antiguo 23-09-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Cita:
Empezado por chinchan Ver Mensaje
Hola. Muchísimas gracias.!!!!... todo perfecto y funcionando... y lo que es mejor, creo que lo he entendido.
Eso está bien. Quizás lo que pueda llamar la atención (al menos en el código Delphi...) es que el PopupMenu lo creamos sin "owner", es decir, seremos nosotros quienes tendremos que hacernos cargo de la destrucción del PopupMenu, como lo hacemos en el evento "Destroy" del formulario. Sin embargo, los items sí que tienen "owner", el propio PopupMenu, de modo que dejamos a este que se encargue de su destrucción cuando ya no sean necesarios.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 23-09-2019 a las 16:15:50.
Responder Con Cita
  #7  
Antiguo 23-09-2019
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por dec Ver Mensaje
Hola a todos,



Eso está bien. Quizás lo que pueda llamar la atención (al menos en el código Delphi...) es que el PopupMenu lo creamos sin "owner", es decir, seremos nosotros de hacernos cargo de la destrucción del PopupMenu, como lo hacemos en el evento "Destroy" del formulario. Sin embargo, los items sí que tienen "owner", el propio PopupMenu, de modo que dejamos a este que se encargue de su destrucción cuando ya no sean necesarios.
Ocurre lo mismo en C++ Builder. No fui completamente fiel en la traducción y preferí una destrucción automática. Podemos escribir esto, pero tendremos que destruirlo luego explicitamente:
Código PHP:
MyPopupMenu = new TPopupMenu(0); 
Y para destrir en C++
Código PHP:
delete MyPopupMenu 

Saludos.
Responder Con Cita
  #8  
Antiguo 23-09-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cita:
Empezado por escafandra Ver Mensaje
Ocurre lo mismo en C++ Builder. No fui completamente fiel en la traducción y preferí una destrucción automática. Podemos escribir esto, pero tendremos que destruirlo luego explicitamente:
Código PHP:
MyPopupMenu = new TPopupMenu(0); 
Y para destrir en C++
Código PHP:
delete MyPopupMenu 

Saludos.
__________________
David Esperalta
www.decsoftutils.com
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambio de BD en Modo Ejecución FelipeDiaz Conexión con bases de datos 2 28-05-2007 05:18:46
Detectar modo de diseño y ejecución dec Trucos 0 29-06-2006 23:34:46
Modo diseño y modo ejecución buildero_d OOP 3 11-09-2005 06:45:00
crear popupmenu en tiempo de ejecución karocs Varios 4 08-10-2004 18:51:46
Reporte en modo de ejecucion CARSOFT_AR Impresión 1 28-04-2004 15:59:37


La franja horaria es GMT +2. Ahora son las 06:04:26.


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