Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como saber el Numero de Item pulsado de un TPopupMenu (https://www.clubdelphi.com/foros/showthread.php?t=13061)

FNADALO 05-08-2004 11:17:52

Como saber el Numero de Item pulsado de un TPopupMenu
 
Estoy montando la creación de un TPopUpMenu dinamicamente
me veo en la obligación de saber cual es el numero de Item
Seleccionado para pasar a un ActionList el Item para que este ejecute
un Sql donde debo pasarle uno campodebusqueda.Strings[Item Capturado]
porque este se corresponde al campo que busco.

Gracias

marto 05-08-2004 11:38:05

Wop!

Puedes montarte una función que recorra el array de la propiedad Items y retorne el indice. La función tendría que parecerse a esta
Código Delphi [-]
function IndiceItem(Menu, AItem: TMenuItem);
var
  i: integer;
begin
  i := 0;
  while (i < Length(Menu.Item))  and (AItem <> Menu.Item[i]) do
    Inc(i);
  if i < Length(Menu.Item) then
    Result := i
  else
    Result := -1;
end;

Y se usaría así
Código Delphi [-]
  Index := IndiceItem(MiMenu.Item, ItemABuscar);

No me suena que exista alún método o propiedad que te facilite la vida y no tengo ahora al aayuda a mano ;)

FNADALO 05-08-2004 11:41:08

Gracias Marto
 
En que Metodo pondrias la Llamada en el OnChange del TPopUPMenu???

marto 05-08-2004 12:07:40

Wop!

Cita:

Empezado por FNADALO
En que Metodo pondrias la Llamada en el OnChange del TPopUPMenu???

No!!!!!!!!
Cita:

Empezado por Delphi's Help TMenuItem.OnChange
Note: OnChange does not occur when the selected menu item changes.

Yo lo pondría en el onclick de los items que crees. Ahi tienes como Sender el item seleccionado.

FNADALO 05-08-2004 13:39:33

Utilizando TMenuItem para Busquedas
 
Gracias Marto lo solucione asignando la propiedad Tag con un Integer
distinto para cada Item Creado Dinamicamente e interrogandolo Despues.

Paso el Código:

{ Funciones y Acciones para realizar Busquedas }
// ____________________________________________________________________________

procedure TfrmBuscar.TipoBusqueda(Titulo: String; NumeroOrden: Integer);
var
NewItem: TMenuItem;
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := Titulo;
NewItem.OnClick := acBusca.OnExecute; // Llamada al Action.

{ En Está funcion se define NumeroOrden que será el Tag Asignado}
{ como es una propiedad que no se usa en los Items y es la }
{ única por la cual puedo Interrogar cual es el Item Seleccionado }

NewItem.Tag := NumeroOrden;
PopMenu.Items.Add(NewItem);
end;


procedure TfrmBuscar.acBuscaExecute(Sender: TObject);
var strWhere: string;
x:integer;
begin
try
if Sender is TMenuItem then
FiltrandoBusquedas('WHERE ('
+ CamposBusqueda.Strings[TMenuItem(Sender).Tag] +' LIKE '
+quotedStr(trim(txtTexto.Text) +'%')+')');
except
end;

end;


{Nuevo}

procedure TfrmBuscar.FiltrandoBusquedas(AWhere: string);
var
strWhere: string;
begin
Try
ADOQuery1.DisableControls;
ADOQuery1.Close;
strWhere := AWhere;
ADOQuery1.SQL.Strings[1] := strWhere;
ADOQuery1.Open;
ADOQuery1.EnableControls;
lblCoincidencias.Caption := 'Cantidad de coincedencias: '
+ inttostr(ADOQuery1.RecordCount );
gridResultado.Columns[gridResultado.Columns.Count - 1].Color := clSkyBlue;
FormatoGrilla;
except
end;
end;

{ FIN Funciones y Acciones para realizar Busquedas }
// ____________________________________________________________________________

roman 05-08-2004 17:25:18

Bueno pero...

¿qué no sirve la propiedad MenuIndex del item? MenuIndex es el índice del item en el menú que lo contiene.

// Saludos

FNADALO 06-08-2004 13:57:02

Gracias Roman, lo cambie y funciona.
Tema Finalizado.


La franja horaria es GMT +2. Ahora son las 16:59:11.

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