PDA

Ver la Versión Completa : Evento OnPaint


Rc96
16-11-2017, 16:03:51
Buenos dias :) veran hace unos dias llevo presentando un problemita que no se si es normal o es un error xD el caso es que cuando ejecuto el Report Builder con la sentencia ppReport.print para imprimir el reporte del sistema me pide iniciar sesion del usuario (PARA ELLO USO EL COMPONENTE USERCONTROL) y la verdad es que es muy molesto. Lo extraño es que en el evento OnPaint del formulario principal es donde llamo el modulo de iniciar seccion. Osea literalmente es como si al dar clic para ver el reporte ejecutara el evento OnPaint del formulario principal. Espero sepan algo y puedan ayudarme.

roman
16-11-2017, 16:18:43
Bueno, es que el evento OnPaint es el menos adecuado para poner código como el que mencionas. El evento OnPaint, como su nombre indica, se ejecuta cada vez que el S.O. necesita pintar la ventana, lo cual sucede muchas veces.

En todo caso, el evento OnShow del formulario sería más adecuado, aunque, para inicio de sesión, lo mejor sería un formulario que se abra antes del formulario principal.

LineComment Saludos

Rc96
16-11-2017, 16:28:27
Hola roman si tienes razon pero el problemita que tengo es que al colocar mi codigo en el onShow que es el siguiente
procedure Tfrmvp.FormShow(Sender: TObject);
var
DriverID,DB,User,Pass,Server,Port: String;
begin
//Se obtinen los parametros de conexion del archivo .INI y se conecta a la base de datos
if FileExists('ConexionBD.ini') then
begin
FDPhysPgDriverLink1.VendorLib:='libpq.dll';
FDConnection1.Params.Clear;
FDConnection1.Connected:=false;
FDConnection1.Params.DriverID:='PG';
Conexion:=Tinifile.Create(ExtractFilePath(Application.ExeName)+'ConexionBD.ini');
with Conexion do
begin
DB:= Conexion.ReadString('Conexion', 'DataBase', '');
User:= Conexion.ReadString('Conexion', 'User_Name', '');
Pass:= Conexion.ReadString('Conexion', 'Password', '');
Server:= Conexion.ReadString('Conexion', 'Server', '');
Port:= Conexion.ReadString('Conexion', 'Port', '');
end;
with Conexion do
begin
FDConnection1.Params.Add( 'Server=' + Server );
FDConnection1.Params.Database:=DB;
FDConnection1.Params.UserName:=User;
FDConnection1.Params.Password:=Pass;
FDConnection1.Connected:=True;
end;
Usercontrol1.Logoff;
end
else
begin
// {En caso de no existir ConexionBD.ini}
if FileExists('Orig_ConexionBD.ini') then
begin
FDPhysPgDriverLink1.VendorLib:='libpq.dll';
FDConnection1.Params.Clear;
FDConnection1.Connected:=false;
FDConnection1.Params.DriverID:='PG';
Conexion:=Tinifile.Create(ExtractFilePath(Application.ExeName)+'Orig_ConexionBD.ini');
with Conexion do
begin
DB:= Conexion.ReadString('Conexion', 'DataBase', '');
User:= Conexion.ReadString('Conexion', 'User_Name', '');
Pass:= Conexion.ReadString('Conexion', 'Password', '');
Server:= Conexion.ReadString('Conexion', 'Server', '');
Port:= Conexion.ReadString('Conexion', 'Port', '');
end;
with Conexion do
begin
FDConnection1.Params.Add( 'Server=' + Server );
FDConnection1.Params.Database:=DB;
FDConnection1.Params.UserName:=User;
FDConnection1.Params.Password:=Pass;
FDConnection1.Connected:=True;
end;
Usercontrol1.Logoff;
end
else
begin
// {Se mostrara el modulo de conexion de la base datos
// en caso de no existir el archivo .ini}
ShowMessage('BIENVENIDO');
FrmConfig.ShowModal;
end;
end;

end;


Veras cuando existe el archivo ini con los parametros de conexion todo bien pero cuando no existe deberia mandarme al formalario donde especifico los parametros pero me sale este error https://ibb.co/njbktR :eek: :confused: cosa que en el onPaint no me da.
https://image.ibb.co/cpTb06/2017_11_16_11_21_21_Cv_Cof_Delphi_10_2_Unit_Vp_Built.png