Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda 'Cambiar colores' (https://www.clubdelphi.com/foros/showthread.php?t=64580)

Cristalero 08-04-2009 09:01:46

Ayuda 'Cambiar colores'
 
Hola a tod@s!

Tengo el siguiente problema. Tengo un formulario principal que abre otro formulario modal llamado fEditor de la siguiente manera:

Código Delphi [-]
var
  fEditor : TfEditor;
begin
  fEditor := TfEditor.Create(Application);
  try
    fEditor.ShowModal;
    uFunciones.editEstado1(); //aquí llamo a la siguiente función que da problemas
  finally
    fEditor.Free;
  end;

- El problema es el siguiente:
Quiero recorrer los controles del segundo formulario modal, lo que hago es recorrer todos los controles del formulario modal 'fEditor' y si el control es de tipo tdbedit que es lo que quiero yo, si el campo está vacío quiero que aparezca en diferente color. La función es la siguiente:

Código Delphi [-]
procedure editEstado1();
var
  i: integer;
begin
  for i := 0 to fEditor.ControlCount-1 do
  begin
    if fEditor.Controls[i] is TDBEdit then
    begin
      if TDBEdit(fEditor.Controls[i]).Text = '' then
      begin
              TDBEdit(fEditor.Controls[i]).Color:=rgb(252,211,135);
      end;
      {...}
    end;
  end;


-No me da ningún error pero no lo realiza. Porque puede ser? Un saludo y gracias de antemano. Xaito!;)

Neftali [Germán.Estévez] 08-04-2009 09:24:36

¿Has probado con las propiedades Components[i] y ComponentCount en lugar de Controls[i] y ControlCount?

A primera vista me parece que el código es correcto.

dec 08-04-2009 09:31:55

Hola,

El problema está en que primero ejecutas el "ShowModal()", pero, ahí se para el proceso, por decirlo así, de modo que la siguiente instrucción no se ejecuta hasta que el formulario "modal" se ha cerrado. Creo que podrías aprovechar el evento "OnShow" del propio formulario que vas a mostrar "modalmente" para hacer lo que dices. Eso o algo parecido, pero, desde luego, tal como lo estás haciendo no puede funcionar, pues, una vez que se ejecuta el "ShowModal()", el proceso se interrumpe hasta que el formulario no deje de tener ese estado (modal).

Cristalero 08-04-2009 09:44:28

He probado con Components y nada de na!
Tambien había pensado en que ShowModal podría ser el problema, pero también lo probé en lanzar antes la función y sigue sin funcionar, incluso escribiendo la función en el mismo formulario 2 'fEditor';.

Lo raro es que no da ninguna excepción ni error.

Otra cosilla que os quería comentar es que:
Porque en un formulario cuando me refiero a un componente no me realizar la acción si le pongo el nombre del form antes? ejemplo:
Form1.Label1.Caption:='Mi Texto'; //De esta manera no me da ningun error pero no funciona.
Label1.Caption:='Mi Texto'; //De esta manera es correcto.

Si alguien se le ocurre algo? Gracias a todos!

Neftali [Germán.Estévez] 08-04-2009 10:13:22

1 Archivos Adjunto(s)
David tiene razón, no me había dado cuenta del ShowModal.
El problema del código inicial es que la llamada a editEstado1 se ejecutará cuando ya hayas cerrado el form.

Yo pondría ese código en el cerrar del form, para que se ejecute antes de cerrarlo.

Creo que más sencillo con un ejemplo; Aquí te adjunto un ejemplo sencillo que es lo que yo haría si he entendido bien lo que quieres.

Cristalero 08-04-2009 10:36:31

Gracias Neftali por el ejemplo. Le paso a mi procedimiento el Form y listo. Aún así hay cosas que no veo muy lógicas, en fin.

Gracias por tu aporte! Un saludo a tod@s!:)

Neftali [Germán.Estévez] 08-04-2009 11:52:27

Cita:

Empezado por Cristalero (Mensaje 344331)
Aún así hay cosas que no veo muy lógicas, en fin.

No te quedes con la duda. ¿Qué es lo que no ves lógico?

Cristalero 08-04-2009 16:36:27

Respecto al tema de antes tengo una pequeña duda y no se por donde seguir.

He decicido cambiar el diseño , por lo tanto los TDBEdit ya no estan en el form secundario sino que los he agrupado en TGroupBox. Como puedo acceder a ellos?

Lo que hago es lo mismo de antes, lo único que antes le indico si es TGroupBox y luego dentro de el quiero referirme a sus componentes pero no se como.

Un saludo a tod@s!

Caro 08-04-2009 16:45:18

Cita:

Empezado por Cristalero (Mensaje 344375)
He decicido cambiar el diseño , por lo tanto los TDBEdit ya no estan en el form secundario sino que los he agrupado en TGroupBox. Como puedo acceder a ellos?

Lo que hago es lo mismo de antes, lo único que antes le indico si es TGroupBox y luego dentro de el quiero referirme a sus componentes pero no se como.

Hola, para recorrer solo lo que tienes en tu GroupBox utiliza Controls pero indicando que son los controles de tu GroupBox.

Código Delphi [-]
 for i := 0 to GroupBox.ControlCount-1 do
   if TDBEdit(GroupBox.Controls[i]).Text = '' then
      begin
   .....................

Saluditos

Neftali [Germán.Estévez] 08-04-2009 17:25:18

1 Archivos Adjunto(s)
Si sólo quieres acceder o comprobar los que están dentro de un GroupBox, puedes comprobar la propiedad Parent de los Edits.

Te paso un segundo ejemplo, similar al de antes, pero sólo tiene en cuenta o revisa que no estén vacíos los componentes del groupBox, el de fuera no lo tiene en cuenta.

NOTA: Además en el de antes, quedaba una referencia a Controls que no había cambiado por Components


La franja horaria es GMT +2. Ahora son las 16:32: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