PDA

Ver la Versión Completa : MainMenu, como cambiar una propiedad a travez de sus items


Jorge Taveras
02-03-2008, 18:18:37
Buenas tengan amigos foristas.

Espero esten todos bien y que me puedan dar una manita sobre esto.
ya he buscado en google y en el foro y algunos libros de delphi que poseo
(la bilia de delphi 5,6). Este es un ejemplo para no alargar las cosas

Tengo una tabla que contiene 5 campo


Consulta1
Consulta2
consulta3
consulta4
consulta5


todos son integer default 0

Tengo un programa que posee un mainmenu cuyos items los he nombrado igual que mis campos en la tabla


mainmenu.consulta1
mainmenu.consulta2
mainmenu.consulta3
mainmenu.consulta4
mainmenu.consulta5


lo que intento hacer es leer todos los campos
en la tabla y si el valor es 0 habilitar esta
opcion del menu, y si es 1 desabilitarla.


accesos.Open;
for x:=0 to Accesos.FieldCount - 1 do
Begin
str1 := Accesos.Fields[x].FieldName;
if Accesos.fieldbyname(str1).value = 0 then
with MenuStandard.Items do
begin
name := str1;
visible := true;
end
else
with MenuStandard.Items do
begin
name := str1;
visible := false;
end;
end;
Accesos.close;


este proceso me aplica bien el if, osea realmente logro examinar el valor del nombre del campo. Lo que no logro es asignar el valor true o false a los items del mainmenu Espero por favor su cordial ayuda

ixMike
02-03-2008, 18:39:26
Hola.

Lo primero, utiliza las etiquetas DELPHI para poner código, se hará más fácil de leer. También ayuda utilizar sangría (o sangrado). Edito: gracias dec ;)

Lo segundo, no te inventes código de forma intuitiva:


with MenuStandard.Items do
begin
name := str1;
visible := true;
end


¿Qué es eso? Además, ¿el menú no se llamaba MainMenu?

Bueno, no puedes cambiar el nombre de los componentes en tiempo de ejecución, lo que sí puedes hacer es esto:


accesos.Open;
for x:=0 to Accesos.FieldCount - 1 do
Begin
str1 := Accesos.Fields[x].FieldName;
MenuStandard.Item[x].Visible:=Boolean(Accesos.fieldbyname(str1).value);
end;
Accesos.close;


También podrías usar la propiedad Enabled en vez de Visible.

Salu2 :)

Jorge Taveras
02-03-2008, 19:02:54
Gracias por las observaciones y correciones, trataré de no repetirlo.
ahora bien.. quiero que me ayudes con esta linea.

MenuStandard.Items[x].Visible:=
Boolean(dmado.DSMapas.fieldbyname(str1).value);

MenuStandard.Items[x].visible hace referencia a un indice dentro del
MenuStandard. Lo que quisiera poder hacer es acceder a la propiedad
a travez de su nombre. fijate que puse solo 5 opciones pero pueden ser N..
y yo referirme a esas 5 en particular. En la tabla que cree, los campos
lleban el mismo nombre que los del menustandard.

A ver si me das algo de luz

Caro
02-03-2008, 19:04:22
Hola Jorge Taveras, tambien puedes usar FindComponent para encontrar el item del MainMenu.


accesos.Open;
for x:=0 to Accesos.FieldCount - 1 do
Begin
str1 := Accesos.Fields[x].FieldName;
if Accesos.fieldbyname(str1).value = 0 then
TMenuItem(FindComponent(str1)).Visible := True
else
TMenuItem(FindComponent(str1)).Visible := False;
end;
Accesos.close;




Saluditos

ixMike
02-03-2008, 19:25:04
Bueno, mientras los tengas ordenados no pasa nada.

Pero me gusta más la opción de Caro. ;)



Salu2 :)

Jorge Taveras
02-03-2008, 19:33:32
Gracias Caro, eso es precisamente lo que queria lograr.
No conocia la opcion de buscar componentes dentro del menuitems.

A IX Mike y todos los que visitaron, por su esfuerzo gracias..