Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Uso de Componente TArtFormula (https://www.clubdelphi.com/foros/showthread.php?t=72867)

Efren2006 16-03-2011 04:55:39

Uso de Componente TArtFormula
 
Me gustaria saber si por este Foro existe alguien que halla trabajador con este Componente
Código:

ArtFormula
el mismo sirve para hacer evaluaciones matematicas, Formulas y Funciones.

Tengo Problemas al Crear mis funciones propias para que el Componente las utilize,, pero me da error de Acceso de Violacion, no se si es un desconocimiento de la Parte de Objeto de Delphi o es que el componente simplemente no sirve para lo que necesito.

Explico Brevemente el proble acon el codigo

Código Delphi [-]

unit UBioDataPerX;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UbioGeneral, DB, Wwdatsrc, formula, IBCustomDataSet, IBQuery,UBioTipos, UGlobal, UBioBusPer, DateUtils, Math, UBioCxCTra;
type
  TDataPer = class(TForm)
   ..
   ..
  public
    { Public declarations }
    Global:ValoresGlobales;
    Variables:array of string;
    Valores:TCalcArray;
    FechaBase:TDateTime;
    Nombre:String;
    Procedure CreaVariables;
    Function  BusSaldoCxp(Numero:String;Tipo:String):Double;
  end;
var
  DataPer: TDataPer;
implementation
{$R *.dfm}
 
procedure TDataPer.FormCreate(Sender: TObject);
begin
   CreaVariables;
   FechaBase:=Dateof(Now);
end;
 
Function TDataPer.BusSaldoCxp(Numero:String;Tipo:String):Double;
Begin
  BusSalCxp.Close;
  BusSalCxp.ParamByName('CODCIA').AsString:=Global.Cia.Codigo;
  BusSalCxp.ParamByName('CODSUC').AsString:=Global.Sede.Codigo;
  BusSalCxp.ParamByName('NUMTRABA').AsString:=Numero;
  BusSalCxp.ParamByName('HASTA').AsDate:=FechaBase;
  BusSalCxp.ParamByName('TIPO').AsString:=Tipo;
  BusSalCxp.Open;
  BusSalCxp.First;
  Result:=BusSalCxpSALDO.AsFloat;
  BusSalCxp.Close;
End;
 
 
 
function SaldoCXP(var Calc : TFormulaCalc):TCalcItem;
var
   V1,V2,V3:String;
   Monto:Double;
begin
   V1 := Calc.ItemS(1); // primer valor
   V2 := Calc.ItemS(0); // segundo valor
   Monto:=DataPer.BusSaldoCxp(V1,V2);
   SetN(result,Monto);
End;
 
 
 
 
Procedure TDataPer.CreaVariables;
begin
 PCalculo.CaseSensitive := False;
 setlength(Variables,100);
 setlength(Valores,100);
 // Variables Del Calculo
 Variables[0]:='CALCULA';
 Variables[1]:='XCANTIDAD';
 Variables[2]:='XMONTO';
 Variables[3]:='TOT_ASIGNACION';
 Variables[4]:='TOT_DEDUCCION';
 Variables[5]:='TOT_DEVENGADO';
 Variables[6]:='TOT_PRESTAMOS';
 Variables[7]:='TOT_ACUMPROM';
 Variables[8]:='TOT_ACUMISLR';
 // Funciones
 PCalculo.AddUserFunction('SaldoCXP',2,SaldoCxP,False);
end;



El error esta cuando mando a ejecutar la funcion SaldoCXP,, cuando en la
Código:

Funcion BusSaldoCxp
Se ejecuta; da el error de Acceso de Violacion,, ya probe incluso en la primera linea de esa funcion algo tan simple como Colocar Código Delphi [-]Nombre:='prueba'

me da el mismo error,, lo unico que funciono es utilizar un objeto Visual del formulario o una propiedad.

Saludos

Neftali [Germán.Estévez] 16-03-2011 11:10:07

Tal vez sería más sencillo que montes un pequeño proyecto de ejemplo (y añadas el componente) y lo subas como adjunto o al FTP para poder probarlo.

Efren2006 16-03-2011 16:57:49

1 Archivos Adjunto(s)
Cita:

Empezado por Neftali (Mensaje 393773)
Tal vez sería más sencillo que montes un pequeño proyecto de ejemplo (y añadas el componente) y lo subas como adjunto o al FTP para poder probarlo.


Amigo Neftali,, aqui genere un pequeño proyecto ,,,

La Direccion Web para bajar el Componenet
http://artsoft.nm.ru/

Gracias por tu tiempo..

Neftali [Germán.Estévez] 16-03-2011 17:25:13

Pues a mi me funciona perfectamente esta función y el proyecto:

Código Delphi [-]
function XDiferencia(var Calc : TFormulaCalc):TCalcItem;
var
   V1,V2,V3:Double;
begin
   Form2.Prueba:='En Esta Linea da el Error,, si quiero accesar ha algo de este formulario (Varibales, Otras Funciones, Otros Objetos,Etc';
   V1 := Calc.ItemN(1);
   V2 := Calc.ItemN(0);
   SetN(result,V1-V2);
end;

Siempre y cuando elimines la primera línea:

Código Delphi [-]
   Form2.Prueba:='...

Puesto que la variable Form2 no está asignada en ese momento. De ahí el AV.

Un saludo.

AÑADO: No conocía este componente y me parece muy bueno. ;-)

Efren2006 16-03-2011 18:34:27

Cita:

Empezado por Neftali (Mensaje 393809)
Pues a mi me funciona perfectamente esta función y el proyecto:


Código Delphi [-]
function XDiferencia(var Calc : TFormulaCalc):TCalcItem;
var
V1,V2,V3:Double;
</SPAN>begin
Form2.Prueba:='En Esta Linea da el Error,, si quiero accesar ha algo de este formulario (Varibales, Otras Funciones, Otros Objetos,Etc';
V1 := Calc.ItemN(1);
V2 := Calc.ItemN(0);
SetN(result,V1-V2);
end;





Siempre y cuando elimines la primera línea:


Código Delphi [-]
Form2.Prueba:='...





Puesto que la variable Form2 no está asignada en ese momento. De ahí el AV.

Un saludo.

AÑADO: No conocía este componente y me parece muy bueno. ;-)



Efectivamente el problema es ese... Necesito Acceder a unas Funciones, Procedures y/o Propiedades de ese formulario, ya que en mi proyecto original debo accesar a Bases de Datos, Valores , Etc.

Gracias

Neftali [Germán.Estévez] 16-03-2011 18:51:27

Cita:

Empezado por Efren2006 (Mensaje 393816)
Efectivamente el problema es ese... Necesito Acceder a unas Funciones, Procedures y/o Propiedades de ese formulario, ya que en mi proyecto original debo accesar a Bases de Datos, Valores , Etc.

En ese caso deberás asegurarte de que el formulario está creado, o crearlo si no lo está.

Efren2006 22-03-2011 17:08:13

Cita:

Empezado por Neftali (Mensaje 393820)
En ese caso deberás asegurarte de que el formulario está creado, o crearlo si no lo está.

Disculpen por el Tiempo ,, estaba fullllllllllllll.

Efectivamente Amigo neftali la ventana si esta creada, pero el problema era que la funcion no la reconoce, entonces para resolver el problema hice lo siguiente;

Cree una Variable del mismo tipo del Formulario;
Código Delphi [-]
 
 
var
  DataPer: TDataPer;
  XDataPer:TDataPer;
implementation
{$R *.dfm}


Luego en la Funcion Coloque esto:

Código Delphi [-]
  
 
 if TComponent(Calc.Parent).Owner is TDataPer then
   Begin
   XDataPer:=TDataPer(TComponent(Calc.parent).Owner);
   ..
   ..
   end;
..

Ya con ese Objeto del mismo tipo de la ventana que lo llama, puedo acceder a todas las funciones y Propiedades del Mismo


La franja horaria es GMT +2. Ahora son las 19:48:50.

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