Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Agrupar Objetos y Modificar Propiedades (https://www.clubdelphi.com/foros/showthread.php?t=90864)

sa_pirata 22-09-2016 22:35:36

Agrupar Objetos y Modificar Propiedades
 
Estimados, buenas tardes a todos, desde ya, gracias por las respuestas que me puedan dar.

Primero les explico el escenario:
Estoy programando un sistema TPV en Delphi 7 (Amo esta versión) y quiero hacerlo bien genérico para amoldarse a cualquier cliente (esto no es gran problema, casi que está resuelto), y se me dio por querer hacerlo también, algo personalizable, es decir, que se le pueda cambiar los colores de fondo a los formularios, colores de fuente, cuadros de texto, etc; hasta aquí ni un problema, he creado dos archivos *.ini que en uno (ConfigColor.ini) tengo los parámetros y distintas paletas con los colores ya configurados y tengo el otro archivo (ActiveColor.ini) con el color activo en el sistema. He probado que funcionen y anda todo perfecto.

El Conflicto:
Pero, como puedo hacer para poder agrupar objetos tipo TEdit (en el caso de los cuadros de texto) o de tipo TLabel, para poder modificarlos a todos de una sola vez (por supuesto, modificar todos los que sean de un mismo tipo a la vez). Como información, mis objetos tienen una nomenclatura particular, dependiendo del objeto y la función, por ejemplo un TEdit que funciona como campo para algún filtro, tiene por nombre "txt_filtro", o un botón que sea para cerrar el formulario actual se llama "btn_cerrar".

No soy un experimentado programador, he hecho uno que otro trabajito pero siempre cosas simples, y estoy queriendo llevar mi experiencia y mis proyectos a otro nivel, y la verdad no tengo muchos (nadie) a quien recurrir físicamente por ayuda.

Saludos!

Luis M. 23-09-2016 00:01:11

Hola.
Agruparlos no lo se, pero podrías hacer algo así para tratar todos los DBEdits

Código Delphi [-]
 for I:= 0 to ControlCount - 1 do
    begin
      if Controls[i] is TDBEdit then
      begin
        TDBEdit(Controls[i]).ReadOnly := True;
        TDBEdit(Controls[i]).TabStop := False;
        TDBEdit(Controls[i]).Color := clMoneyGreen;
        TDBEdit(Controls[i]).StyleElements := [seFont,seBorder];
      end;
    end;

sa_pirata 23-09-2016 00:18:11

Cita:

Empezado por Luis M. (Mensaje 509030)
Hola.
Agruparlos no lo se, pero podrías hacer algo así para tratar todos los DBEdits

Código Delphi [-]
 for I:= 0 to ControlCount - 1 do
    begin
      if Controls[i] is TDBEdit then
      begin
        TDBEdit(Controls[i]).ReadOnly := True;
        TDBEdit(Controls[i]).TabStop := False;
        TDBEdit(Controls[i]).Color := clMoneyGreen;
        TDBEdit(Controls[i]).StyleElements := [seFont,seBorder];
      end;
    end;

Muchas, gracias, voy a probar y aviso a ver que tal sale todo!

sa_pirata 23-09-2016 01:55:57

Cita:

Empezado por Luis M. (Mensaje 509030)
Hola.
Agruparlos no lo se, pero podrías hacer algo así para tratar todos los DBEdits

Código Delphi [-]
 for I:= 0 to ControlCount - 1 do
    begin
      if Controls[i] is TDBEdit then
      begin
        TDBEdit(Controls[i]).ReadOnly := True;
        TDBEdit(Controls[i]).TabStop := False;
        TDBEdit(Controls[i]).Color := clMoneyGreen;
        TDBEdit(Controls[i]).StyleElements := [seFont,seBorder];
      end;
    end;

Me funcionó mejor que perfecto.
Muchisimas gracias Luis M.
Saludos!

AgustinOrtu 23-09-2016 04:46:39

Metes los objetos en una lista (esto seria lo que vos llamas agrupar) cuando los vas creando; o si los creaste todos en tiempo de diseño, al crear tu Form (por ejemplo en el evento FormCreate) los agregas a dicha lista

Luego, recorres la lista, para cada elemento de la lista, modificas la propiedad con el valor correspondiente

Ej:

Código Delphi [-]
procedure TForm1.Edits_SetEnabled(const Value: Boolean);
var
  I: Integer;
  Each: TEdit;
begin
  for I := 0 to EditList.Count - 1 do
  begin
    Each := TEdit(EditList[i]);
    Each.Enabled := Value;
  end;
end;

Donde EditList seria una variable privada de tu Form de tipo TList, que si no me falla la memoria, en Delphi 7 esta definida en la unidad Classes

Aca hay un poco de informacion y ejemplos de uso de la clase TList

El codigo anterior se puede mejorar y escribir mas generico de manera tal que puedas pasar la propiedad a modificar dinamicamente, es decir, podrias escribir este tipo de cosas:

Código Delphi [-]
  ...
  Edits_SetValue('Enabled', True);

Pero tendrias que hacer uso de RTTI para buscar la propiedad y asignar el valor correspondiente

Saludos :)


La franja horaria es GMT +2. Ahora son las 17:52:40.

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