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 19-03-2019
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
Bloquear Edits

buenos dias
tengo esta rutina para bloquear edit dentro de un formulario

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 TDBEdit) then
         TEdit(Form.Components[i]).Enabled := False;
     end;
end;

la pregunta es...
como bloquear otros componentes que no sean edit, como por ejemplo datetimepicker que pregunta debe ir en el if ???
como identifico "el origen" del componente ?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 19-03-2019
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola


Puedes cambiar la comprobacion de TEdit a Twincontrol.


Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #3  
Antiguo 19-03-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Thumbs up

hola

El tema es que la herencia en un TDateTimePicker es asi:

Código:
  TDateTimePicker = class(TCommonCalendar) -->  TCommonCalendar = class(TWinControl)
q
y salvo el TWinControl no tiene nada mas en común con respecto a los TEdit / TDBEdit
Código:
  
  TEdit = class(TCustomEdit) -->   TCustomEdit = class(TWinControl)
 
  TDBEdit = class(TCustomMaskEdit) -->   TCustomMaskEdit = class(TCustomEdit)  -->   TCustomEdit = class(TWinControl)
Una idea como te ha sugerido caminante es preguntar por TWinControl, lo que pasa que si tienes otros componentes que hereden de TWinControl en el form y seguramente si (botones, grids, etc) puedes terminar desabilitando mas de los que realmente te interesan.

Otra opción es buscar solamente los que quieres desabilitar:

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 TCustomEdit) then
      TCustomEdit(Form.Components[i]).Enabled := False
    else if (Form.Components[i] is TDateTimePicker) then
      TDateTimePicker(Form.Components[i]).Enabled := False;
  end;
end;
Responder Con Cita
  #4  
Antiguo 19-03-2019
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
Cita:
Empezado por bucanero Ver Mensaje
hola

El tema es que la herencia en un TDateTimePicker es asi:

Código:
  TDateTimePicker = class(TCommonCalendar) -->  TCommonCalendar = class(TWinControl)
q
y salvo el TWinControl no tiene nada mas en común con respecto a los TEdit / TDBEdit
Código:
  
  TEdit = class(TCustomEdit) -->   TCustomEdit = class(TWinControl)
 
  TDBEdit = class(TCustomMaskEdit) -->   TCustomMaskEdit = class(TCustomEdit)  -->   TCustomEdit = class(TWinControl)
Una idea como te ha sugerido caminante es preguntar por TWinControl, lo que pasa que si tienes otros componentes que hereden de TWinControl en el form y seguramente si (botones, grids, etc) puedes terminar desabilitando mas de los que realmente te interesan.

Otra opción es buscar solamente los que quieres desabilitar:

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 TCustomEdit) then
      TCustomEdit(Form.Components[i]).Enabled := False
    else if (Form.Components[i] is TDateTimePicker) then
      TDateTimePicker(Form.Components[i]).Enabled := False;
  end;
end;


respecto a este ejemplo me aperece este mensaje de error

Cita:
[dcc32 Error] Librerias_u.pas(264): E2015 Operator not applicable to this operand type

la pregunta es, como saber que tipo de componente es el componente actual (de la lista de componentes en el form), para saber si lo deshabilito o no
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 19-03-2019
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
Hola Oscar.

Fijate si te sirve de este modo:
Código Delphi [-]
procedure ControlsOn(AForm: TForm; const Active: Boolean);
var
  i: Integer;
begin
  for i := AForm.ControlCount-1 downto 0 do
    AForm.Controls[i].Enabled := Active;
end;

Ej. de uso:
Código Delphi [-]
begin
  ControlsOn(Form1, False);

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 19-03-2019 a las 17:54:45. Razón: corrección
Responder Con Cita
  #6  
Antiguo 19-03-2019
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
Cita:
Empezado por ecfisa Ver Mensaje
Hola Oscar.

Fijate si te sirve de este modo:
Código Delphi [-]
procedure ControlsOn(AForm: TForm; const Active: Boolean);
var
  i: Integer;
begin
  for i := AForm.ControlCount-1 downto 0 do
    AForm.Controls[i].Enabled := Active;
end;

Ej. de uso:
Código Delphi [-]
begin
  ControlsOn(Form1, False);

Saludos
interesante tu ejemplo pero me bloquea absolutamente todo y quiero que los botones de "Eliminar" y "Cancelar" queden activos
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 19-03-2019
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
Hola de nuevo.
Cita:
Empezado por oscarac Ver Mensaje
interesante tu ejemplo pero me bloquea absolutamente todo y quiero que los botones de "Eliminar" y "Cancelar" queden activos
Entiendo...

Para el control actual podrías usar:
Código Delphi [-]
 
procedure ControlsOn(AForm: TForm; const Active: Boolean);
var
  i: Integer;
begin
  for i := AForm.ControlCount-1 downto 0 do
    if AForm.Controls[i] <> AForm.ActiveControl then
       AForm.Controls[i].Enabled := False;
end;

Pero, al tener que mantener activo mas de un botón ('Cancelar' y 'Eliminar'), seguramente te sirva de este modo:
Código Delphi [-]
type
  TControlExt = class(TControl);

procedure ControlsOn(AForm: TForm; const Active: Boolean);
var
  i: Integer;
  C: TControlExt;
begin
  for i := AForm.ControlCount-1 downto 0 do
  begin
    C := TControlExt(AForm.Controls[i]);
    C.Enabled := TControl(C) is TButton and((C.Caption = 'Cancelar') or (C.Caption = 'Eliminar'));
  end;
end;

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 19-03-2019 a las 18:58:24.
Responder Con Cita
  #8  
Antiguo 19-03-2019
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
Como llevo cierto orden al nombrar los controles lo solucione de esta manera

Código Delphi [-]
Procedure BloquearEdits (Form :TForm);
Var i :Integer;
_name : string;
Begin
  for i := 0 to (Form.ComponentCount - 1) do
  begin
    _name := Form.Components[i].Name;
    if (Form.Components[i] is TCustomEdit) then
      TCustomEdit(Form.Components[i]).Enabled := False;

    if _en('dtp', _name) then   // procedimiento que busca una cadena en otra
      TWinControl(Form.Components[i]).Enabled := False
  end;
end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #9  
Antiguo 20-03-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Otra opción es parametrizar las clases que quieres deshabilitar. Eso sí, deben ser todos los de las clases especificadas. Con esta opción no puedes escoger unos TEdit si y otros no.
Algo así:

Código Delphi [-]
Procedure BloquearComponentes (Form :TForm; arrayClass:array of TComponentClass);
Var
  i :Integer;
  c:TComponentClass;
Begin
  for i := 0 to (Form.ComponentCount - 1) do  begin
    for c in arrayClass do begin
      if (Form.Components[i] is c) then begin
         TWinControl(Form.Components[i]).Enabled := False;
      end;
    end;
  end;
end;

De forma que puedes llamarlo así:

Código Delphi [-]
// Para deshabilitar TEdit y descendientes
BloquearComponentes(Self, [TEdit]);
// Para deshabilitar TEdit, TCheckbox y descendientes...
BloquearComponentes(Self, [TEdit, TCheckbox]);
// ... y así sucesivamente
BloquearComponentes(Self, [TEdit, TCheckbox, TDateTimePicker]);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
sumar edits Kamael OOP 17 12-03-2015 19:18:55
Validar edits lucas05 Varios 3 29-11-2011 15:40:54
filtrar edits pabloloustau Varios 4 26-03-2010 07:04:35
forms y edits Rolando Varios 2 30-09-2003 23:46:02
Edits aitken Varios 7 06-05-2003 14:51:08


La franja horaria es GMT +2. Ahora son las 23:41:02.


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