III - Les fonctions
    31- Introduction :
    Comme tous bons générateurs d'états (et FR en fait parti), on dispose d'un évaluateur d'expression mathématique ou  logique.
    Dans ce chapitre, on tient compte des modifications apportées à FR avec le patch 1.2.

    Le générateur d'expressions est comme vous pourrez le voir légèrement inspiré de celui de QR (dans sa forme, mais pas dans le fond). Ce générateur est la petite pierre que j'apporte à ce travail colossal qu'est FR.

    32- Ce qui est disponible en standard
    32.1-Les opérateurs
     
    Type
    Logique  >,<, OR, AND, NOT , = , <>, >=, <=
    Mathématique -, *, +,/, MOD, DIV

    Pour les néophites, MOD correspond à MODulo et DIV, correspond à une division dont le résultat est un nombre entier.
     

    32.2-Les fonctions
    32.21-Description dans le fichier FR.LNG
        Pour que le générateur d'expression fonctionne correctement, il faut que les fonctions utilisables par FR soient en plus  décrites dans le fichier FR.LNG pour la simple raison que cela va lui permettre d'afficher une aide (très sommaire) sur la fonction sélectionnée, une aide sur les paramètres qui sert également pour savoir quand lancer l'éditeur de paramètres et en fin, de permettre à l'éditeur de trier les fonctions par catégorie.

    Pour cela, il suffit d'ajouter au fichier FR.LNG la ligne suivante :

    FCT  = CATEGORIE  |  FCT(<X>,<Y>,<Z>) | Aide sur la fonction
    avec :

    •   FCT, c'est le nom de la fonction
    •  CATEGORIE, c'est le nom de la catégorie dont dépend la fonction.
    •  FCT(<X>,<Y>,<Z>), c'est la visualisation des paramètres nécessaires avec 3 paramètres maximum nommés X,Y et Z.
    •  Aide .. ,c'est une petite aide qui doit permettre à l'utilisateur de comprendre le but de la fonction.
    | (AltGr+6) correspond aux séparateurs.
     

    32.22-Les fonctions standards.

    Chaque paramètre est séparé par une virgule et  peut être une expression, une constantes, une variable, un champ de donnée, ...
    Les constantes de type alphanumérique doivent être bornée par un caractère " .
    Les variables sont bornées par '[' et ']'.
    Les champs de données sont bornées comme les variables et on le format suivant :  Nom_dataset."Nom_de_champ"

    Fonctions de statistiques

    • SUM(<X>) : Retourne la somme des valeurs prisent par <X>. <X> est généralement un champ de données.
    • AVG(<X>) :  Retourne la moyenne des valeurs prisent par <X>. <X> est généralement un champ de données.
    • COUNT     :  Compteur.
    • MIN(<X>) : Retourne la valeur minimum des valeurs prisent par <X>. <X> est généralement un champ de données.
    • MAX(<X>) :  Retourne la valeur maximum des valeurs prisent par <X>. <X> est généralement un champ de données.


    Fonctions sur les dates

    • FORMATDATETIME(<X>,<Y>) : Retourne la date compressée (TDateTime) <Y> dans le format <X>. <X> utilise la description standard de delphi pour les formats.
    • FORMATFLOAT(<X>,<Y>) : Retourne le numérique <Y> dans le format <X>. <X> utilise la description standard de delphi pour les formats.
    • STRTODATE(<X>) : Retourne la représentation numérique (TDateTime) de la chaîne <X>. <X> doit respecter le format des dates.
    • STRTOTIME(<X>) : Retourne la représentation numérique (TDateTime) de la chaîne <X>. <X> doit respecter le format des heures.


    Fonctions sur les chaînes de caractères

    • LOWERCASE(<X>) : Retourne la chaîne <X> en minuscule.
    • UPPERCASE(<X>) : Retourne la chaîne <X> en majuscule.
    • NAMECASE(<X>) : Retoune la chaîne <X> en minuscule avec la première lettre en majuscule.
    • COPY(<X>,<Y>,<Z>) : Retourne une sous-chaîne de <X> depuis la position <Y> et d'une longueur <Z>.


    Fonctions sur les numériques

    • FRAC(<X>) : Retourne la partie décimale du numérique <X>.
    • INT(<X>) : Retourne la partie entière du numérique <X>.
    • ROUND(<X>) : Retourne un entier correspondant à l'arrondie de <X>.
    • STR(<X>) : Retourne une chaîne en convertissant le numérique <X>.


    Fonctions logiques

    • IF(<X>,<Y>,<Z>) : Retourne <Y> si l'expression <X> est vérifiée sinon <Z>.
    33 - Ajouter vos fonctions
    C'est d'une simplicité déconcertante !

    Voici un code source pour ajouter les fonctions, POS et SQRT :
     

    {*******************************************}
    {                                           }
    {            FastReport v2.2                }
    {                                           }
    { Exemple de création de fonctions          }
    { (C) Guilbaud Olivier                      }
    {        golivier@bigfoot.com               }
    {                                           }
    { FastReport :(c) 1998-99 by Tzyganenko A.  }
    {                                           }
    { Merci de transmettre vos commantaires &   }
    { modifications                             }
    {Ceci est un FREEWARE il peut être utilisé  }
    {librement.                                 }
    {*******************************************}
    {Histo :                                    }
    { 03/06/99 : Création                       }
    
    unit FR_OGFct;
    
    interface
    
    
    implementation
    Uses FR_Pars,FR_Class; // Déclaration minimum
    
    Type
      // Déclaration de notre objet
      TfrOGFunctionLibrary = class(TfrFunctionLibrary)
      public
       constructor Create; override;
       procedure DoFunction(FNo:Integer; p1,p2,p3:Variant; var val:String); override;
      end;
    
    //**************************
    //* TfrOGFunctionLibrary
    //**************************
    constructor TfrOGFunctionLibrary.Create;
    begin
      inherited Create;
    
      // Ici, on déclare toutes les fonctions
      // que l'on va traiter (attention 3 caractères mini)
      with List do
      begin
        Add('POS');
        ADD('SQRT');
      end;
    end;
    
    // Ici on traite les fonctions
    procedure TfrOGFunctionLibrary.DoFunction(FNo:Integer; p1,p2,p3:Variant;
      var val:String);
    Var Par1,Par2: Variant;
        Resultat : Variant;
    begin
     Try
      Case FNo of  //FNo représente le N° d'index de la fct
                   //déclarée dans Create;
       0 : Begin   //Traitement de la fonction POS
             Par1:=VarToStr(Parser.Calc(p1)); //On utilise Parser car Px
             Par2:=VarToStr(Parser.Calc(P2)); // est peut être une expression
             Resultat:=Pos(Par1,Par2);
           end;
       1 : Resultat:=SQRT(Parser.Calc(P1));  //Traitement de la fonction SQRT
      end;
     Except
      // Chaîne retournée en cas d'erreur
      Resultat:='Erreur fonction '+List.Strings[FNo];
     end;
    
     Val:=VarToStr(Resultat); // Le résultat est une chaîne
    end;
    
    //********************************
    // Initialisation des fonctions pour qu'elles soient
    // prisent en charge par F.R.
    // ATTENTION : La méthode pour enregistrer les librairies de fonctions
    // limite (!!) le nombre à 31
    Procedure DoInit;
    Begin
      frRegisterFunctionLibrary(TfrOGFunctionLibrary);
    end;
    
    initialization
      DoInit;
    end.

    Puis dans le fichier FR.LNG, vous ajoutez les deux lignes suivantes :

    SQRT   = Math & Trigo | SQRT(<X>) | Retrourne la racine carré de <X>
    POS     = Chaînes      | POS(<X>,<Y>) | Retourne la position de la chaîne <X> dans <Y>

    Et voilà, le tour est joué ! donc maintenant, j'attends vos oeuvres ..

    Cliquez ici pour télécharger le source


        Page précedente                     Page suivante              Table des matières