Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error en validacion (https://www.clubdelphi.com/foros/showthread.php?t=43907)

ilichhernandez 23-05-2007 19:39:02

Error en validacion
 
Estimados, tengo un error mientras intento validar por intermedio de recorres los componentes de mi formulario

La idea es recorrer los componentesw Edit y verificar los que tengan tag = 88, entonces esos componentes validarlos que tengan algo escrito.

Código Delphi [-]
Procedure Validar_edit();
var n : integer;
    form10 : TForm10;
    Componentes : TComponent;
Begin
    for n:= 0 to Form10.ComponentCount -1 do
        Begin
             Componentes := Form10.Components[n];
             If ((Componentes is Tedit) and (TEdit(Componentes).Tag = 88)) then
                 Begin
                    If TEdit(componentes).text = '' then
                        Begin
                           TEdit(componentes).color := clred;
                        end;
                 end;
        end;
Showmessage('Los campos en Rojo se deben revisar y completar');
end;

El error que me arroja dice lo siguiente Project1.exe raised exception class EAccessViolation with message "Access violation at address 004270FF in module "project1'.

Si alguien sabe de que se trata este error o ve algun error importante en mi codigo seria tan amable de decirme, gracias desde ya.

Atentamente
Ilich Hernandez.

delphi.com.ar 23-05-2007 23:02:45

¿Dónde se carga form10?... Porque aparentemente se trata de una variable local, que nunca fue iniciada...

ilichhernandez 23-05-2007 23:06:04

Form10 es el formulario donde estoy trabajando..... necesito inicializarlo ??

luisgutierrezb 23-05-2007 23:13:25

para mi que el error es esto:
(TEdit(Componentes).Tag = 88))

porque estas forzando a un componente a TEdit, en el mismo if donde revisas si es un TEdit, aqui mas bien se requieren 2 ifs, el primero para revisar si es TEdit y el segundo donde ya hagas el Cast

ilichhernandez 23-05-2007 23:24:32

Voy a probar lo que me dices a ver si mejora esto.... gracias

jacanche 24-05-2007 03:18:09

Como bien dice Delphi.com.ar, es un error por que estas queriendo acceder a las propiedades de un objeto que no ha sido inicializado o creado. Puedes usar la variable global de tu forma o asignarle a Form10 la variable global de tu forma o mejor aun, haz que validar_edit, sea un metodo del objeto forma para que tu codigo quede mas o menos asi.

Código Delphi [-]
Procedure TForm10.Validar_edit();
var n : integer;
    Componentes : TComponent;
Begin
    for n:= 0 to ComponentCount -1 do
        Begin
             Componentes := Components[n];
             If ((Componentes is Tedit) and (TEdit(Componentes).Tag = 88)) then
                 Begin
                    If TEdit(componentes).text = '' then
                        Begin
                           TEdit(componentes).color := clred;
                        end;
                 end;
        end;
Showmessage('Los campos en Rojo se deben revisar y completar');
end;

aprendiz2 24-05-2007 07:08:50

Código Delphi [-]
Procedure Validar_edit();
var n : integer;
     form10 : TForm10;

    Componentes : TComponent;
Begin
    for n:= 0 to Form10.ComponentCount -1 do
Si Form10 es el formulario con el que estas trabajando,no necesitas volver a declararlo dentro de las VAR LOCALES a esteprocedimiento, ya que ocultas el verdadero Form10, que seguramenteesta definido mas arriba en tu programa. Prueba quitar la declaracion del Form10 de las VAR de esteprocedimiento... Saludos, ojala te sirva...

aprendiz2 24-05-2007 07:25:01

Short Circuit Boolean Evaluation
 
Código Delphi [-]
 If ((Componentes is Tedit) and (TEdit(Componentes).Tag = 88)) then


Tambien es bueno asegurarse que la configuracion del compilador tenga la variable ShortCirtcuit Boolean Evaluation en TRUE, para que no de problemas evaluaciones como la de arriba. ( Si lo pones en falso, la misma pregunta con Componentes que no son TEdit podria dar problemas impredecibles..., en la parte que sigue al AND, y el debugger no te ayudaria mucho en detectarlo ). Para mi es mejor no confiar en el ShortCircuit boolean evaluation, y escribir de forma segura )

Quizas mas seguro poner..

Código Delphi [-]
if Componentes is TEdit then
     if TEdit( Componentes ).tag = 88 then

parece lo mismo... pero no lo es... !! ( estando el ShortCirtuit en false o true, con esta forma de preguntar no hay ningun problema ).

Saludos !! Espero le sirva a alguien !


La franja horaria es GMT +2. Ahora son las 14:52:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi