PDA

Ver la Versión Completa : Como saber el Numero de Item pulsado de un TPopupMenu


FNADALO
05-08-2004, 11:17:52
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

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í

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
En que Metodo pondrias la Llamada en el OnChange del TPopUPMenu???

marto
05-08-2004, 12:07:40
Wop!


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


No!!!!!!!!

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