PDA

Ver la Versión Completa : Compilador Delphi 2006 salta sentencias


joan_mvf
15-03-2007, 23:46:18
Hola a todos, tengo el siguiente problema, he instalado delphi 2006, y me esta dando el siguiente problema, delphi me salta sentencias, o mejor dicho el compilador, me brinca lineas de codigo. Cosas que yo quiero ke yo haga mi programa no me las hace, pero si la linea de codigo le pongo un action break o un trace como le kieran llamar, si me ejecuta la sentencia.

por ejemplo esta es una linea de codigo ke no me ejecuta, si le pongo el trace si lo hace.

out_articulos_alquiler.Enabled:=True;


alguno ke me ayude con esto, un amigo mio me dijo ke se resolvia reinstalando a delphi, pero ya lo he instalado como 3 veces y sigue con el problema.

maeyanes
15-03-2007, 23:52:32
Y si pones más código? Para que podamos hacernos una idea de por que te podría saltar esas líneas de código...

A veces por optimización de código, Delphi elimina ciertas líneas por que en realidad no se usan o no afectan en nada... ese podría ser tu caso..



Saludos...

joan_mvf
16-03-2007, 00:05:12
Por ejemplo yo tengo un formulario llamado out_articulos_alquiler que es el de consulta y otro in_articulos_alquiler, que es el de entrada, cuando yo etoy en el de consulta y quiero hacer una nueva entrada, en el evento FormPaint de in_articulos_aquiler yo hago eso, solamente tengo esa linea de codigo ahi

out_articulos_alquiler.enabled:=false;

desabilito el formulario de consulta y luego cuando termino de trabajar con la edicion, en el evento FormClose de in_articulos_alquiler vuelvo y activo el formulario de consulta, tengo solamente la siguiente linea de codigo

out_articulos_alquiler.Enabled:=True;
Action:=cafree;
in_articulos_alquiler:=nil;

joan_mvf
16-03-2007, 00:10:36
este es otro formulario, pero con el mismo problema, te agrego las lineas de codigo del formulario de consulta y de entrada, eso es todo lo que tnego en los dos formularios.

formulario consulta out_paises

procedure Tout_paises.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
out_paises:=nil;
end;

procedure Tout_paises.gridDblClick(Sender: TObject);
var
sql:string;
begin
nuevo_registro:=false;
if validar_grid(ds)then
begin
Application.CreateForm(Tin_paises,in_paises);
sql:='select * from pais where codigo='+ds.DataSet.fieldbyname('codigo').AsString;
crear_query_live(in_paises,dm.Database,in_paises.ds,sql);
in_paises.ds.DataSet.Edit;
in_paises.show;
end;
end;

procedure Tout_paises.nuevoClick(Sender: TObject);
var
sql:string;
begin
nuevo_registro:=true;
Application.CreateForm(Tin_paises,in_paises);
sql:='select * from pais limit 0';
crear_query_live(in_paises,dm.Database,in_paises.ds,sql);
in_paises.ds.DataSet.Append;
in_paises.show;
end;

procedure Tout_paises.buscarClick(Sender: TObject);
var
sql:string;
begin
sql:='Select * from Pais';
crear_query(out_paises,dm.database,ds,sql);
end;

procedure Tout_paises.cancelarClick(Sender: TObject);
begin
close;
end;

formulario entrada in_paises

procedure Tin_paises.cancelarClick(Sender: TObject);
begin
close;
end;

procedure Tin_paises.FormClose(Sender: TObject; var Action: TCloseAction);
begin
out_paises.Enabled:=True;
Action:=cafree;
in_paises:=nil;
end;

procedure Tin_paises.FormPaint(Sender: TObject);
begin
out_paises.enabled:=false;
end;

procedure Tin_paises.FormShow(Sender: TObject);
begin
if out_paises.nuevo_registro=false then
s2:='¿Desea guardar los cambios?'
else
s2:='¿Desea salvar este registro?';
end;

procedure Tin_paises.salvarClick(Sender: TObject);
var
ok:integer;
begin
if validar_dbedit(descripcion,'Digite la Descripcion...!!')then
begin
ok:=mensaje_aviso(s2,'&Si','&No');

IF ok=1 Then
begin
ejecutar_query(dm.Database,'BEGIN WORK');
if codigo.Text='' then
begin
codigo.Text:='0';
ds.dataset.post;
end
else
ds.DataSet.post;
out_paises.buscar.ButtonClick;
ejecutar_query(dm.Database,'COMMIT WORK');
close;
END
else
if ok=2 then close;
end;
end;

//Lo edite para poner las etiquetas Delphi

egostar
16-03-2007, 00:24:41
Yo creo que el problema esta aqui


procedure Tin_paises.FormPaint(Sender: TObject);


No seria mejor usar el evento OnShow???

Saludos.

basti
16-03-2007, 01:52:04
Tengo Delphi 7 y no aparece ese evento en el form, pero por el nombre supongo que será un nuevo evento que se ejecuta cuando la ventana hace un Paint.

El Paint no se hace siempre, sólo si es necesario redibujar el formulario. Por ejemplo cuando minimizas la ventana y la vuelves a restaurar, entonces se ejecuta paint. O cuando abres otra ventana que oculta parcialmente tu formulario y luego lo vuelves a mostrar.

Cuando haces un debug en Delphi, ocultas tu formulario con el propio Delphi, por eso pasa por esa línea, porque es necesario volver a redibujar la ventana para mostrarla.

Mejor solución es, como bien dice egostar, usar el evento OnShow.
Aunque si no es necesario usar un evento, ¿para que usarlo?, esto es lo que yo haría

procedure Tout_paises.nuevoClick(Sender: TObject);
var
sql:string;
begin
nuevo_registro:=true;
Application.CreateForm(Tin_paises,in_paises);
sql:='select * from pais limit 0';
crear_query_live(in_paises,dm.Database,in_paises.ds,sql);
in_paises.ds.DataSet.Append;
in_paises.show;
enabled:=false;
end;


Aunque podrías probar con formularios Modales, quizás te sirvan y te ahorrarían código

procedure Tout_paises.nuevoClick(Sender: TObject);
var
sql:string;
begin
nuevo_registro:=true;
Application.CreateForm(Tin_paises,in_paises);
sql:='select * from pais limit 0';
crear_query_live(in_paises,dm.Database,in_paises.ds,sql);
in_paises.ds.DataSet.Append;
in_paises.showModal;
end;