Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Añadir a un Popup Contextual nuevas opciones (https://www.clubdelphi.com/foros/showthread.php?t=35696)

Critter 18-09-2006 21:14:00

Añadir a un Popup Contextual nuevas opciones
 
a ver si me podeis echar una manita nuevamente, pues tengo el siguiente problema:

Dispongo de una serie de TDBEdits, y como sabeis el TPopupMenu desplega el clasico "deshacer, Copiar, pegar, seleccionar todo", pues bien yo querria que al final del popupmenu en cuestion poder añadir mis opciones particulares, sin perder las predefinidas.

Gracias.

Bicho 19-09-2006 08:38:37

Hola Critter, has echado un vistazo a los resultado que te aparecen al pie de ésta página, en especial el primero y el último que dan la misma solución.

Espero te sirva,

Saludos

Critter 19-09-2006 16:44:27

Cita:

Empezado por Bicho
Hola Critter, has echado un vistazo a los resultado que te aparecen al pie de ésta página, en especial el primero y el último que dan la misma solución.

Espero te sirva,

Saludos

Lo he mirado, pero ... lo malo es que utilizo Delphi 3 y hablan de Delphi 7.
Si alguien puede pasarme algo de codigo e indicarme un poco el camino.

gracias.

Crandel 26-09-2006 00:15:50

En verdad es bastante simple, como todo cuando se tiene la solución :D

La idea es crear un nuevo objeto del tipo TMenuItem y darle los valores que necesitas, ej:

Código Delphi [-]
procedure TForm1.AgregarOpcion;
var
  NewItem: TMenuItem;
begin
  NewItem := TMenuItem.Create(PopupConstruir);
  PopupMenu1.Items.Add(NewItem);
  NewItem.Caption := 'Opcion 1';  // texto que aparece
  NewItem.OnClick := EventoClick; // le asignas el método que queres que se ejecute cuando se genere el evento
end;

Critter 26-09-2006 08:17:25

Cita:

Empezado por Crandel
En verdad es bastante simple, como todo cuando se tiene la solución :D

La idea es crear un nuevo objeto del tipo TMenuItem y darle los valores que necesitas, ej:

Creo que no me has entendido, lo que pretendo es no rehacer el popup estandard de windows, sino añadirle mas opciones.

de todas maneras gracias por haber contestado.

ixMike 26-09-2006 19:09:02

Bueno, eso de añadir cosas al Popup de Windows, pues es algo complicado (digo yo, nunca lo he hecho). Pero podías poner tú mismo tu propio Popup, poniendo las opciones de Deshacer, Copiar, Cortar, Pegar y Seleccionar todo (más las que tú quieras). Implementar el código no es tan difícil. En cada caso sería:

Pegar: DBEdit1.PasteFromClipboard;
Copiar: DBEdit1.CopyFromClipboard;
Cortar: DBEdit1.CutToClipboard;
Seleccionar todo: DBEdit1.SelectAll;
Deshacer: DBEdit1.Perform(EM_UNDO,0,0);


Espero que esto te sirva, y hasta la próxima ;) !!!

roman 26-09-2006 20:13:35

Realmente creo que esta opción de ixMike es lo mejor. He intentado algunas cosas para añadir elementos al menú estándar sin éxito y he buscado en algunos lugares pero no he visto alguna solución.

Eso sí, para que esta opción quede bonita hay que trabajarle un poco para poder presentar las opciones correctamente, esto es, habilitar o inhabilitarlas según corresponda:
  • Deshacer - se habilita o inhabilita según el valor de Edit.CanUndo
  • Cortar, Copiar, Eliminar - se habilitan o inhabilitan según si Edit.SelLength es mayor que 0
  • Seleccionar todo - se habilita sólo si Edit.Text no está vacío
  • Pegar - se habilita o inhabilita según si hay algo o no que pegar. Esto último creo que se puede averiguar usando ClipboardHasFormat(CF_TEXT)

Por cierto, al menos en Delphi 7, los Edit ya tiene el método Undo que equivale al mensaje EM_UNDO.

Habilitar o inhabiltra las opciones podría hacerse en el evento OnPopup del PopupMenu, que se ejecuta justo antes de desplegarse.

// Saludos

roman 26-09-2006 21:00:39

1 Archivos Adjunto(s)
Si requieres usar el mismo menú para varios Edits, te servirá la propiedad PopupComponent del PopupMenu para sobre que control se despliega.

Otra opción es usar un ActionList al que agregas las acciones de edición estándar, y éstas las asignas a la propiedad Action de los MenuItem. Con esta opción no tienes que programar nada ya que las acciones estándar se encargan de todo.

Adjunto dos ejemplos, uno programando cada ítem y el otro usando acciones.

// Saludos


La franja horaria es GMT +2. Ahora son las 18:31:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi