PDA

Ver la Versión Completa : Añadir a un Popup Contextual nuevas opciones


Critter
18-09-2006, 21:14:00
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 (http://www.clubdelphi.com/foros/showthread.php?t=25927) y el último (http://www.clubdelphi.com/foros/showthread.php?t=19502) que dan la misma solución.

Espero te sirva,

Saludos

Critter
19-09-2006, 16:44:27
Hola Critter, has echado un vistazo a los resultado que te aparecen al pie de ésta página, en especial el primero (http://www.clubdelphi.com/foros/showthread.php?t=25927) y el último (http://www.clubdelphi.com/foros/showthread.php?t=19502) 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:


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
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
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