Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   MainMenu, como cambiar una propiedad a travez de sus items (https://www.clubdelphi.com/foros/showthread.php?t=53834)

Jorge Taveras 02-03-2008 19:18:37

MainMenu, como cambiar una propiedad a travez de sus items
 
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

Código:

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

Código:

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.

Código Delphi [-]
  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 19: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:

Cita:

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:

Código Delphi [-]
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 20: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 20:04:22

Hola Jorge Taveras, tambien puedes usar FindComponent para encontrar el item del MainMenu.

Código Delphi [-]
  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 20: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 20: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..


La franja horaria es GMT +2. Ahora son las 21:26:30.

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