Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
Desabilitar algunos componentes del formulario

He estado buscando como desabilitar algunos componentes del formulario (de momento los TEdit) y solo he encontrado algo parecido pero con Labels. He intentado ajustarlo para que me funcione con los Edits, pero no habido forma de hacerlo funcionar.
Me explico:
dentro del formulario tengo varios paneles con sus componentes correspondientes y lo que quiero conseguir es que cuando el formulario entre en el estado de Consultas, no se pueda tener acceso a unos componentes determinados.
¿Alguna sugerencia de como puedo conseguirlo?.

procedure TFrm1.DesactivarEdit;
var i:Integer;
begin
for I := 0 to ControlCount - 1 do
if Controls[i] is TEdit then
TEdit(Controls[i]).Enabled := False;
end;

Última edición por Thoma fecha: 03-05-2011 a las 16:41:31.
Responder Con Cita
  #2  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
has probado con la propiedad enable ?


Código Delphi [-]
 
Componente.Enable := False;

esto hara que no se pueda tener acceso
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
te he puesto el codigo que tengo y algo debo de tener mal porque no me hace ni caso
Responder Con Cita
  #4  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
ohh ya

prueba de esta manera

Código Delphi [-]
Procedure BloquearEdits (Form :TForm);
Var i :Integer;
Begin
   for i := 0 to (Form.ComponentCount - 1) do
    begin
     if (Form.Components[i]) is TEdit then
         TEdit(Form.Components[i]).Enabled := False;
     end;
end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
perdona, pero no acabo de entender el porque "(Form :TForm)"

y para llamar a la procedure?.. tendria que poner el nombre del formulario ?
Responder Con Cita
  #6  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
es que el procedimiento que te he colocado funciona mas o menos de esta manera

Código Delphi [-]
BloquearEdits(frmDatos)

este procedimiebnto lo tengo en una unidad donde tengo librerias y procedimientos standard
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
me he puesto el procedimiento en la unidad donde tengo las funciones y las procedures.

hago la llamada
BloquearEdits(FrForm1);

y me da el siguiente error:

[DCC Error] FrForm1.pas(238): E2029 '.' expected but ')' found
Responder Con Cita
  #8  
Antiguo 03-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Thoma Ver Mensaje
te he puesto el codigo que tengo y algo debo de tener mal porque no me hace ni caso
Hola Thoma.

El código que adjuntaste funciona bién. Lo único que podría decir es que el cast es innecesario (pero igual funciona) ya que la clase TControl tiene la propiedad Enabled, es decir que podrías hacer:
Código Delphi [-]
procedure TFrm1.DesactivarEdit;
var
   i:Integer;
begin
  for i := 0 to ControlCount - 1 do
    if Controls[i] is TEdit then
        Controls[i].Enabled := False;
end;

Si querés que sólo los TEdits y no sus descendientes se desactiven sería:
Código Delphi [-]
procedure TFrm1.DesactivarEdit;
var
   i:Integer;
begin
  for i := 0 to ControlCount - 1 do
    if Controls[i].ClassType = TEdit then
        Controls[i].Enabled := False;
end;

El código de oscarac también es correcto y funcionará sin errores, revisá si copiaste bién.


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-05-2011 a las 19:01:54.
Responder Con Cita
  #9  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
Tengo que daros las gracias tanto a oscarac como a ecfisa.
Algo debo de tener mal porque no me funciona. Poniendo un punto de ruptura en el bucle me dice que el ControlCount = 1 y parece ser que no es un edit por que se sale de inmediato del bucle. ¿Tendra algo que ver que los TEdit esten dentro de paneles?
Responder Con Cita
  #10  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
podrias colocar el codigo que estas usando?
no te olvides de colocar [delphi] [ /DELPHI] (sin el espacio despues del corchete)
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #11  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
Código Delphi [-]
procedure Frm1.DesactivarEdit;
var
   i:Integer;
begin
  for i := 0 to ControlCount - 1 do
    if Controls[i].ClassType = TEdit then
        Controls[i].Enabled := False;
end;

este es el codigo que estoy usando

el de oscarac me parece mas eficiente porque me podria servir para otros formularios pero no acabo de cogerle el truco.
Responder Con Cita
  #12  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
pero esta claro...
imagina que tienes un formulario llamado frmDatos (ojo el nombre del form no el nombre de la unidad)

dentro de ese formulario tienes varios edits

entonces lo unico que haces es

Código Delphi [-]
BloquearEdits (frmdatos);

y debe funcionar bien

que problemas tienes
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #13  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
Código Delphi [-]
 
unit Rutinas;
const
    sFileDai='C:\file.INI';
  Procedure BloquearEdits (Form :TForm);
implementation
uses frAccesoDatos;
Procedure BloquearEdits (Form :TForm);
Var i :Integer;
Begin
   for i := 0 to (Form.ComponentCount - 1) do
    begin
     if (Form.Components[i]) is TEdit then
         TEdit(Form.Components[i]).Enabled := False;
     end;
end;
........................
unit FrFormulario;
type
  TFrFormulario= class(TForm)
    edtTitulo              : TEdit;
    edtValor               : TCurrencyEdit;
    lblValor               : TsLabel;
 
implementation
uses FrAccesoDatos, Rutinas;
 
procedure TFrFormulario.FormCreate(Sender: TObject);
begin
   BloquearEdits(TFrFormulario);
end;
....................

E2010 Incompatible types: 'TForm' and 'class of TFrmFormulario'

Al compilar me saca este error de incompatibilidad (algo se me escapa de las manos).


el nombre del formulario es "frmFormulario"
si pongo:
BloquearEdits(frmFormulario);

me dice el siguiente error:
E2003 Undeclared identifier: 'FrmFormulario'

Última edición por Thoma fecha: 03-05-2011 a las 20:35:43.
Responder Con Cita
  #14  
Antiguo 03-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Thoma Ver Mensaje
¿Tendra algo que ver que los TEdit esten dentro de paneles?
Por supuesto que si. Al estar dentro de un TPanel el Parent de los Edits no es el form si no el TPanel, en ese caso sería:
Código Delphi [-]
procedure TFrm1.DesactivarEdits(AControl: TWinControl);
var
   i:Integer;
begin
  with AControl do
   for i := 0 to ControlCount - 1 do
    if Controls[i].ClassType = TEdit then
        Controls[i].Enabled := False;
end;

Llamada:
Código Delphi [-]
 DesactivarEdits(TuPanel);


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-05-2011 a las 20:39:21.
Responder Con Cita
  #15  
Antiguo 03-05-2011
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
Cita:
Empezado por Thoma Ver Mensaje
me he puesto el procedimiento en la unidad donde

tengo las funciones y las procedures.

hago la llamada
BloquearEdits(FrForm1);

y me da el siguiente error:

[DCC Error] FrForm1.pas(238): E2029 '.' expected but ')' found
ciertamente esta usando el nombre de la unidad y no el de el formulario

la llamada deberia de ser


Código Delphi [-]
 
BloquearEdits(Frm1);

que es el nombre de el formulario.
Responder Con Cita
  #16  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
ejemplo

te pongo un ejemplo de como lo uso cuando tengo que eliminar un dato

Código Delphi [-]
procedure TfrmIngresoMercaderiaD.btnEliminaClick(Sender: TObject);
begin
  if Not TblDetalle.Eof then
    Begin
      Tbldetalle.edit;
      _Accion := 2;
      frmIngresoMercaderiaDDato := TfrmIngresoMercaderiaDDato.Create(Self);
      frmIngresoMercaderiaDDato.btnOk.Caption := '&Eliminar';
      BloquearEdits (frmIngresoMercaderiaDDato);
      frmIngresoMercaderiaDDato.Show;
    End;
end;

y cuando se activa el form.... todos los edits estan deshabilitados
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #17  
Antiguo 03-05-2011
Avatar de Thoma
Thoma Thoma is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 46
Poder: 0
Thoma Va por buen camino
Buenoooo... por fin.
Gracias ecfisa, de este modo me ha funcionado, repito !!!Gracias¡¡¡

Beginner01, lo habia probado de muchas formas pero ahora ya se que la culpa la tenia el dichoso Tpanel.

¡¡¡ gracias a todos por vuestra paciencia !!!

oscarac. Gracias a ti tambien.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problemas con Delphi XE y algunos componentes Paulao Varios 3 22-03-2011 13:14:45
Algunos componentes desaparecen... mlara Debates 2 03-05-2010 19:39:18
Dudas con Algunos Componentes! eddg Varios 16 08-10-2007 23:21:54
Duda con algunos componentes bosterito Varios 3 01-04-2007 01:23:11
Habilitar/Desabilitar Componentes DANY OOP 0 02-06-2006 01:13:47


La franja horaria es GMT +2. Ahora son las 05:38:41.


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
Copyright 1996-2007 Club Delphi