Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manipular TEdit de un Form desde una Unit (https://www.clubdelphi.com/foros/showthread.php?t=89486)

scigliano 29-11-2015 00:33:23

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 ?? :confused:

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... :rolleyes:

wilcg 29-11-2015 02:46:34

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.

AgustinOrtu 29-11-2015 05:25:55

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.

scigliano 01-12-2015 21:38:55

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

Agradecido!! ^\||/


La franja horaria es GMT +2. Ahora son las 01:57:39.

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