Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-11-2015
scigliano scigliano is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 10
Poder: 0
scigliano Va por buen camino
Unhappy Manipular TEdit de un Form desde una Unit

Hola, un saludo a todos...

Les comento que tengo una Unit que utilizo para guardar los procedimientos y funciones que son comunes a varios formularios de la aplicacion.

El hecho es que estoy tratando de mover a esta Unit (que la he llamado UGlobal), un procedimiento que tengo en el Formulario que me permite pasar a Enabled:=False todos los Edit que encuentra en el Formulario.

En el Formulario, el procedimiento que tengo es el siguiente: (Funciona bien)

Código:
procedure TfrmGrupoUsuario.InactivarCampo;
var
   i: Word;
begin
   //*** Desactiva los campos del formulario
   for i := 0 to self.ComponentCount - 1 do
   begin
      if (self.Components[i] is TEdit) then
         TEdit(self.Components[i]).Enabled := False;
   end;
end;

Cuando coloco el procedimiento anterior en la Unit y lo llamo desde el Formulario, arroja un error de Access Violation, sin mas detalles, intente pasarle el Name del Formulario como parametro, pero sigue el mismo error.
Pregunta: Que estoy haciendo mal ??

Código:
procedure InactivarCampo(NameForm:TForm);
var
   i: Word;
begin
   //*** Desactiva los campos del formulario
   for i := 0 to NameForm.ComponentCount - 1 do
   begin
      if (NameForm.Components[i] is TEdit) then
         TEdit(NameForm.Components[i]).Enabled := False;
   end;
end;
Gracias anticipadas por sus comentarios...
Responder Con Cita
  #2  
Antiguo 29-11-2015
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
wilcg Va por buen camino
Hola scigliano,
Para lo que quieres hacer, yo lo hago de esta manera espero te sirva.

OPCION 1
- Habilitar y desabilitar los controles deseados del FORM

Código Delphi [-]
procedure TFode.OnOfCtrl(const Enabled: Boolean; Ctrls: array of TControl);
var
  i: Integer;
begin
  for i:= Low(Ctrls) to High(Ctrls) do
    Ctrls[i].Enabled:= Enabled;
end;

USO:
Habilitar
Código Delphi [-]
Fode.OnOfCtrl(True,[Edit1,Edit2,Edit3,.....]);
Desabilitar
Código Delphi [-]
Fode.OnOfCtrl(False,[Edit1,Edit2,Edit3,.....]);

OPCION 2
Habilitar & desabilitar todos los controles que hay en un FORM

Código Delphi [-]
procedure TFode.OnOfForms( Enabled: Boolean; F :TForm );
var
  Lista: TList;
  i :integer;
begin
  Lista := TList.Create;
  try

    F.GetTabOrderList(Lista);
    for i := 0 to Lista.Count - 1 do
      if TWinControl(Lista[i]) is TEdit then
        TEdit(Lista[i]).Enabled := Enabled
      else
      if TWinControl(Lista[i]) is TcxTextEdit then
        TcxTextEdit(Lista[i]).Enabled := Enabled
      else
      // mas..... Aqui indica con que controles quieres que funcione

  finally
    Lista.Free;
  end;
end;

USO:
Habilitar
Código Delphi [-]
Fode.OnOfForms( True, Form1 );
Desabilitar
Código Delphi [-]
Fode.OnOfForms( False, Form1 );

Puedes adaptarle a lo que necesitas, espero sea útil.
Responder Con Cita
  #3  
Antiguo 29-11-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Este es un tipico caso de herencia.. donde todos tus forms tienen que hacer lo mismo..

Podrias hacer algo asi:


Código Delphi [-]
unit UBaseForm;

interface

uses
  Forms,
  Controls;

type
  TBaseForm = class(TForm)
  public
    procedure ToggleControls(const IsEnabled: Boolean); overload; virtual;
    procedure ToggleControls(const IsEnabled: Boolean; const ControlClass: TControlClass); overload; virtual;
  end;

implementation

{ TBaseForm }

procedure TBaseForm.ToggleControls(const IsEnabled: Boolean);
var
  I: Integer;
begin
  for I := 0 to ControlCount - 1 do
    Controls[i].Enabled := IsEnabled;
end;

procedure TBaseForm.ToggleControls(const IsEnabled: Boolean; const ControlClass: TControlClass);
var
  I: Integer;
begin
  for I := 0 to ControlCount - 1 do
    if Controls[i].ClassType = ControlClass then
      Controls[i].Enabled := IsEnabled;
end;

Ejemplo de uso:


Código Delphi [-]
unit Main;

interface

uses
  UBaseForm,
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type
  TForm1 = class(TBaseForm) // --> Ahora tu ancestro es TBaseForm
    Edit1: TEdit;
    Memo1: TMemo;
    btnDisable: TButton;
    btnEnable: TButton;
    Button1: TButton;
    Edit2: TEdit;
    procedure btnDisableClick(Sender: TObject);
    procedure btnEnableClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnDisableClick(Sender: TObject);
begin
  // deshabilitar todos los controles
  ToggleControls(False);

  // este boton lo dejo siempre habilitado, sino no puedo hacer mas nada
  btnEnable.Enabled := True;
end;

procedure TForm1.btnEnableClick(Sender: TObject);
begin
  // Habilitar todos los controles
  ToggleControls(True);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // solo Edits, invertir el valor
  ToggleControls(not Edit1.Enabled, TEdit);
end;

end.
Responder Con Cita
  #4  
Antiguo 01-12-2015
scigliano scigliano is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 10
Poder: 0
scigliano Va por buen camino
Thumbs up

Gracias a los amigos Wilcg y AgustinOrtu, era justo lo que necesitaba...
Ya tengo las ideas mucho mas claras...

Agradecido!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Manipular objetos desde otro objeto en otro form Nicolas_2011 Delphi para la web 8 17-11-2012 18:12:51
Problemas al manipular form reivaj_bo Varios 1 16-11-2009 16:28:35
Leer mensajes, solo desde la unit del Form? paubar Varios 2 22-08-2007 23:52:39
Saber el nombre de la form desde una unit nueva richi Varios 3 07-11-2006 10:14:28
Escribir algo en un Tedit desde otro form taru Varios 9 20-07-2006 15:43:52


La franja horaria es GMT +2. Ahora son las 22:35:21.


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