Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   desactivar controles de un form al mostrar... (https://www.clubdelphi.com/foros/showthread.php?t=58780)

peccatum 31-07-2008 18:37:24

desactivar controles de un form al mostrar...
 
Hola

Quiziera saber de qué forma puedo escribir un procedimiento dentro de un Form, de manera que cambie la propiedad "enabled" de todos sus controles a falso (botones, dbEdits, etcétera).

Intenté recorrer entre los componentes del Form y los del dataSource, pero no se de que forma puedo identificar los componentes visuales y los no visuales...

El sentido de ésto es que el form muestra los datos de una tabla(DB), y en el caso que se muestre la tabla en estado dsBrowse dependiendo de donde se llame a Form.show necesito que sus controles internos esten habilitados... o no. Necesitaría implementar algo así como un form.DisableVisibleControls.

Una solución que se me había ocurrido es poner un frame dentro del form y poner todos los controles ahi, entonces dependiendo el contexto lo pongo a disabled o enabled al mostrar, pero preferiría hacerlo por código....

Alguien algúna sugerencia?

Saludos.-

RolphyReyes 31-07-2008 18:40:08

Saludos.

Te recomiendo utilizar RTTI, en la página de Neftalí hay buenos ejemplos.

ContraVeneno 31-07-2008 18:52:13

Código Delphi [-]
For I := 0 to ComponentCount -1 do begin
  if (Components[i] is TEdit) then (Component[i] as TEdit).Text := '';
  (Component[i] as TControl).Enabled := False;
end; //for

RolphyReyes 31-07-2008 19:02:22

Cita:

Empezado por ContraVeneno (Mensaje 304752)
Código Delphi [-]For I := 0 to ComponentCount -1 do begin if (Components[i] is TEdit) then (Component[i] as TEdit).Text := ''; (Component[i] as TControl).Enabled := False; end; //for

Saludos.

Es sencillo el ejemplo y funcional, pero tendrías que estar preguntando por cada tipo de componente existente en tu formulario. Sin embargo con RTTI te evitas eso y tu código es más eficiente.

peccatum 31-07-2008 19:09:15

Gracias!!!

peccatum 31-07-2008 19:23:59

De ésta forma me funcionó de la forma que quiero:

Código Delphi [-]
For I := 0 to ComponentCount -1 do 
     if (Components[i] is Tcontrol)  then   
        (Components[i] as TControl).Enabled :=False;

coso 31-07-2008 19:24:42

Hola, por si aun no lo has resuelto : http://www.clubdelphi.com/foros/show...ighlight=brick

peccatum 31-07-2008 20:13:18

gracias!

tu código me fue de gran inspiración :)

saludos

peccatum 31-07-2008 21:14:36

Estudiaré también RTTI, es interesante (Y)

javier7ar 31-07-2008 21:24:26

Fijate que si usas la propiedad Controls en lugar de Components, recorres solamente los controles, y no tenes que hacer elif (Components[i] is Tcontrol) then

Saludos.

coso 31-07-2008 22:08:07

de nada hombre ;)


La franja horaria es GMT +2. Ahora son las 13:09:28.

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