IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Rave Discussion :

Impression N° page et nbre pages si rapport de plus d'une page


Sujet :

Rave

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut Impression N° page et nbre pages si rapport de plus d'une page
    Bonjour tout le Monde
    Bonjour Rambo.

    L'intitulé résume la question.

    Comment n'afficher le paramètre :
    Report.CurrentPage+'/'+Report.TotalPages
    que si le rapport comporte plusieurs pages.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    Bonjour ,

    ce n'est pas "Rambo" mais "Rocky" même si c'est le même acteur

    au débotté , je dirais que la solution consiste a :
    - préparer l'état << surtout si état composé
    - ensuite tester le TotalPages
    - pour enfin imprimer/visualiser

    maintenant , as tu essayé via un RaveScript (je sais j'en suis pas fan mais ...)

    Quelque chose du style

    //Zonetext est un RvText
    //l'event est sur le BeforePrint de ZoneText
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (Report.TotalPages=1) 
     zonetext.value:=Report.CurrentPage;
    else
      zonetext.value:=Report.CurrentPage+'/'+Report.Totalpages;
    endif
    désolé , je n'ai pas le temps de tester (pas mal de choses sur le feu actuellement) je j'essaierais en WE si ce n'est toujours pas résolu

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour ,

    ce n'est pas "Rambo" mais "Rocky" même si c'est le même acteur


    maintenant , as tu essayé via un RaveScript (je sais j'en suis pas fan mais ...)

    Quelque chose du style

    //Zonetext est un RvText
    //l'event est sur le BeforePrint de ZoneText
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (Report.TotalPages=1) 
     zonetext.value:=Report.CurrentPage;
    else
      zonetext.value:=Report.CurrentPage+'/'+Report.Totalpages;
    endif
    désolé , je n'ai pas le temps de tester (pas mal de choses sur le feu actuellement) je j'essaierais en WE si ce n'est toujours pas résolu
    Bonjour SergioMaster.

    Pour la première observation, excuse moi j'ai fait un lapsus calame.

    Pour ce qui conserne ta proposition, comme je n'ai jamais travaillé avec les 'Evenement' de Rave, je suis en train de me documenter pour utiliser RvText.

    Merci.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    bonjour,

    Pour l'instant Rocky est KO

    j'ai essayé sans succès plusieurs pistes avec le Ravescripting , le problème est que l'on ne peut pas accéder aux variables d'état avec les scripts ! encore un mauvais point pour Rave

    En fait le Bon script était (est)
    en admettant que la zone pour afficher le numéro de page soit un rvDataText
    avec comme DataField : 'page' & Report.CurrentPage & 'de' & Report.Totalpages

    Round 1
    j'ai essayé sur l'event beforeprint , avant de trouvé sur le net la note de Nevrona indiquant que l'on ne pouvait pas accéder aux variables d'état

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //avec bien sur toutes les variantes : SrtToInt etc...)
     
    IF (Report.TotalPages=1) 
     Self.Visible:=False;
    else
      Self.Visible:=True;
    endif
    Round 2
    je me suis alors orienté vers une solution consistant à utiliser une zone cachée contenant la valeur de Report.TotalPage pour ensuite la tester
    sans résultat

    Round 3
    j'ai tester en ajoutant un paramètre
    problème , comment capturer le nombre total de page , apparemment là aussi Rave bug (j'ai une valeur absurde) , ce qui a d'ailleurs été soulevé dans une discussion sur le net (j'ai pas mémorisé où, mais peu importe)

    Round 4
    ben non , y en a pas eu , après tout c'était déjà dimanche , et , pire il était déjà 16h30 quand j'ai eu un dépannage (non encore fini) à faire !

    mon idée était de passer soit par un pageinitnum (encore que ) , soit , toujours par les paramètres en étudiant soigneusement un des tips de nevrona (pas facile de les trouver il faut tâtonner avec les numéros pour les trouver sur le net http://www.nevrona.com/rave/tips/rvtip1.html à http://www.nevrona.com/rave/tips/rvtip51.html )

    Soit encore de voir ce que l'on peut faire avec le RvSytem directement dans le programme (encore nébuleuse cette piste)

    Bref , prémonitoire ? , Rocky est au tapis faut peut être appeler Rambo

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    bonjour,

    Pour l'instant Rocky est KO

    Soit encore de voir ce que l'on peut faire avec le RvSytem directement dans le programme (encore nébuleuse cette piste)

    Bref , prémonitoire ? , Rocky est au tapis faut peut être appeler Rambo
    Bonjour tout le monde

    Bonjour SergioMaster
    J'ai été privé 48h d'internet

    Si Rocky est au tapis que dois je dire pour moi.

    n'ayant pas trouvé de solutions, j'ai contourné la difficulté en créant deux Etats l'un avec un dataText contenant Report.CurrentPage+'/'+Report( le N° de page et le nombre de page), l'autre sans dataDext.

    je compte le nombre de lignes du fichier à imprimer. Si ce nombre est supérieur au nombre de lignes que peut contenir une page j'exécute l'état avec le datatext sinon j'imprime le second.

    Ce n'est pas élégant mais faute de grives!

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    Bonjour
    je compte le nombre de lignes du fichier à imprimer. Si ce nombre est supérieur au nombre de lignes que peut contenir une page j'exécute l'état avec le datatext sinon j'imprime le second.
    dans ce cas il n'y avait pas besoin , malgré tout , de faire 2 états

    Le nombre de lignes = un RecordCount

    deux solutions (merles):
    - uniquement avec Delphi (perso je préfère)
    Ouvrir le projet
    récupérer le champ datatext
    le mettre à false ou true (selon le recordCount)
    Exécuter l'etat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // il faudra rajouter quelques uses  :   RvProj,RvClass, RvCsStd ,RvCsRpt, RvCsDraw , RvDefine, RvCsData
    // en gras celle dont je suis sûr 
    
    procedure TForm1.RvProject1AfterOpen(Sender: TObject);
    var  MyPage : TRavePage;
          MyRaveData : TRaveDatatext;
    begin
    MyPage := RvProject1.ProjMan.FindRaveComponent('MonEtat.Page1',nil) AS TRavePage;
    myRaveData := RvProject1.ProjMan.FindRaveComponent('NUMEROPAGE',MyPage) AS TRaveDataText;
    if Assigned(MyRaveData) then
    myRaveData.Visible:=MonFichier.RecordCount>20 
    else showmessage('oops raté');   
    ....
    end;
    - avec le RaveScript + Delphi
    ajouter un parametre pour l'état
    sur l'event BeforePrint du Numéro de page faire un test sur le paramètre
    dans delphi , avant d'executer le report mettre la valeur du paramètre

    Code raveScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var i : Integer;
    begin
    i:=StrToInt(Getparam('NomParametre'));
    if i>20 then
      self.visible:=true;
    else
      self.visible:=false; 
    end;
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //après le RvProject1.Open;
    RvProject1.SetParam('NomParametre',intTostr(monFichier.RecordCount));
    // à noter , un paramètre est toujours un string
    //mais avant le RvProject1.Execute('report1')

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut correction citation
    Citation Envoyé par SergioMaster Voir le message
    Bonjour

    dans ce cas il n'y avait pas besoin , malgré tout , de faire 2 états

    Le nombre de lignes = un RecordCount

    deux solutions (merles):
    - uniquement avec Delphi (perso je préfère)
    Ouvrir le projet
    récupérer le champ datatext
    le mettre à false ou true (selon le recordCount)
    Exécuter l'etat
    Bonjour SergioMaster

    ce qui me manquait c'était comment récupérer le datatext et les uses à rajouter et surtout l'événement RvProject1AfterOpen

    je vais tester la première variante.

    merci

  8. #8
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    rebonjour Sergiomaster.

    j'ai testé la première variante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForme.GCabGastroAfterOpen(Sender: TObject);
    var  MyPage : TRavePage;
          MyRaveData : TRaveDatatext;
    begin
    
    // folio nom du dataText Report.CurrentPage+'/'+Report.TotalPages
    
      MyPage := GCabGastro.ProjMan.FindRaveComponent('MaitreDetailOrdoA5.Page1',nil) AS TRavePage;
      myRaveData := GCabGastro.ProjMan.FindRaveComponent('folio',MyPage) AS TRaveDataText;
    
      if Assigned(MyRaveData) then
      myRaveData.Visible:=(GOrdonnanceDetail.RecordCount>12)
      else showmessage('oops raté');
    
    end;
    le message est 'oops raté' et folio apparait dans l'impression

    il reste le même lorsque j'inverse l'inégalité et folio apparait toujours dans l'impression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      if Assigned(MyRaveData) then
      myRaveData.Visible:=(GOrdonnanceDetail.RecordCount<12)
      else showmessage('oops raté');
    A propos je travaile avec Delphi 7 entreprise.

    merci encore pour le temps que tu me consacres.

  9. #9
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    re rebonjour

    j'ai rajouté un bout de code de vérification de l'assignation de MyPage


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      MyPage := GCabGastro.ProjMan.FindRaveComponent('MaitreDetailOrdoA5.Page1',nil) AS TRavePage;
      myRaveData := GCabGastro.ProjMan.FindRaveComponent('folio',MyPage) AS TRaveDataText;
    
      if not Assigned(MyPage) then
      showmessage('page non assignée');
    
      if Assigned(MyRaveData) then
      myRaveData.Visible:=(GOrdonnanceDetail.RecordCount>10)
      else showmessage('oops raté');
    même l'assignation de myPage n'est pas faite en effet le test Assigned(MyPage) affiche 'page non assignée'

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    Bon , je suppose que le nom du report est bien orthographié ? ainsi que le nom de la page (propriété name de la page) ? On est bien d'accord qu'il s'agit du Nom (propriété Name du report, pas FullName) de l'état à l'intérieur du Fichier .rav (je sais , des fois j'enfonce des portes ouvertes) !

    évidement dans ces conditions si Mypage n'est pas Initialisé , alors difficile d'avoir myRavedata !

  11. #11
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    autant pour moi, je n'ai pas fait attention au nom de la page soit
    pageOrdo et non page1.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      MyPage := GCabGastro.ProjMan.FindRaveComponent('MaitreDetailOrdoA5.PageOrdo',nil) AS TRavePage;
      myRaveData := GCabGastro.ProjMan.FindRaveComponent('folio',MyPage) AS TRaveDataText;
     
     
      if Assigned(MyRaveData) then
      myRaveData.Visible:=(GOrdonnanceDetail.RecordCount<9)
      else showmessage('oops raté');
    .

    donc l'assignation se fait maintenant correctement.

    malheureusement que myRaveData soit visible ou pas
    (GOrdonnanceDetail.RecordCount<9 ou GOrdonnanceDetail.RecordCount>9)
    folio nom du dataText soit Report.CurrentPage+'/'+Report.Totalpages s'affiche toujours.

    Merci SergioMaster de ta patience.

  12. #12
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Je ne sais pas ce que ça vaut

    mais en rajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if myRaveData.Visible=false then myRaveData.Destroy;
    le code devient alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      MyPage := GCabGastro.ProjMan.FindRaveComponent('MaitreDetailOrdoA5.PageOrdo',nil) AS TRavePage;
      myRaveData := GCabGastro.ProjMan.FindRaveComponent('folio',MyPage) AS TRaveDataText;
    
      if Assigned(MyRaveData) then
      myRaveData.Visible:=(GOrdonnanceDetail.RecordCount>9)
      else showmessage('oops raté');
      if myRaveData.Visible=false then myRaveData.Destroy;
    cela marche

  13. #13
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    bonjour

    voici la dernière mouture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForme.GCabGastroAfterOpen(Sender: TObject);
    var  MyPage : TRavePage;
         MyRaveData : TRaveDatatext;
    begin
     
      MyPage := GCabGastro.ProjMan.FindRaveComponent('MaitreDetailOrdoA5.PageOrdo',nil) AS TRavePage;
      myRaveData := GCabGastro.ProjMan.FindRaveComponent('folio',MyPage) AS TRaveDataText;
     
    // nbLigne : nombre de ligne dans le cas maître-détail
      if (Assigned(MyRaveData)) and  (nbLigne <= 22) then myRaveData.Destroy;
     
    end;
    c'est bricolé mais ça marche

    merci SergioMaster de ton aide

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    étonnant que tu sois obligé de détruire le RaveData , je suis sur a 90% (tu me mets le doute) que la propriété Visible est la bonne solution (sauf si bien sur Locked est à true ?, car dans ce cas aucune propriété n'est modifiable)
    une autre solution (sans avoir a faire de destroy) serait de changer la valeur de dataField , mais ça , j'ai jamais essayé !

  15. #15
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    bonjour SergioMaster

    Citation Envoyé par SergioMaster Voir le message
    Bonjour,
    étonnant que tu sois obligé de détruire le RaveData , je suis sur a 90% (tu me mets le doute) que la propriété Visible est la bonne solution (sauf si bien sur Locked est à true ?, car dans ce cas aucune propriété n'est modifiable)
    une autre solution (sans avoir a faire de destroy) serait de changer la valeur de dataField , mais ça , j'ai jamais essayé !
    je confirme que Locked et DevLoked sont à false.

    J'aurais voulu changer la valeur de folio ie datafield mais je n'ai pas su le faire.

    pour un TRaveText j'aurais mis myRaveText.text:=''

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    Ennuyé , je viens de faire un essai avec D7-Rave 5.1
    étonné , visible:=False ne fonctionne pas , pourtant j'utilise ce truc pour des images !!! [edit] à ma décharge , c'est toujours sur une bande détail , évent onvalidateRow d'un rvDataConnection)
    agréablement surpris , changer la valeur de datafield fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TDatas.RvProject1AfterOpen(Sender: TObject);
    var myPage : TRavePage;
        myRvData : TRaveDataText;
        myrvtext : TRaveText;
    begin
      myPage:=RvProject1.ProjMan.FindRaveComponent('Report1.Page1',nil) AS TRavePage;
      myRvData := RVproject1.ProjMan.FindRaveComponent('nbpage',MyPage) AS TRaveDataText;
    //  myrvData.Visible:=False;   // fonctionne pas 
      myrvData.DataField:='';    // yes 
      myRvText:=RVproject1.ProjMan.FindRaveComponent('Text1',MyPage) AS TRaveText;
    //  myrvText.Enabled:=False;  // fonctionne pas 
    //  myrvText.Visible:=False;    // fonctionne pas non plus 
      myrvText.Text:='oops';     // je vois mon 'oops' ('toto' dans mon ravereport)
     
    end;
    je vais quand même essayer avec une version supérieure D2010-Rave 7

  17. #17
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    re bonjour SergioMaster

    Citation Envoyé par SergioMaster Voir le message
    Ennuyé , je viens de faire un essai avec D7-Rave 5.1
    étonné , visible:=False ne fonctionne pas , pourtant j'utilise ce truc pour des images !!! [edit] à ma décharge , c'est toujours sur une bande détail , évent onvalidateRow d'un rvDataConnection)
    agréablement surpris , changer la valeur de datafield fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TDatas.RvProject1AfterOpen(Sender: TObject);
    var myPage : TRavePage;
        myRvData : TRaveDataText;
        myrvtext : TRaveText;
    begin
      myPage:=RvProject1.ProjMan.FindRaveComponent('Report1.Page1',nil) AS TRavePage;
      myRvData := RVproject1.ProjMan.FindRaveComponent('nbpage',MyPage) AS TRaveDataText;
    //  myrvData.Visible:=False;   // fonctionne pas 
      myrvData.DataField:='';    // yes 
      myRvText:=RVproject1.ProjMan.FindRaveComponent('Text1',MyPage) AS TRaveText;
    //  myrvText.Enabled:=False;  // fonctionne pas 
    //  myrvText.Visible:=False;    // fonctionne pas non plus 
      myrvText.Text:='oops';     // je vois mon 'oops' ('toto' dans mon ravereport)
     
    end;
    je vais quand même essayer avec une version supérieure D2010-Rave 7
    Je crois que myrvData.DataField règle aussi le problème.

    1) on rend myPage et myrvData plus un String AncValeur variable globale.
    2) dans onAfterOpen on mémorise l'ancienne valeur myrvData.datafield avant modif
    3/ dans onAfterClose on réinitialse myrvData.datafield



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var  MyPage : TRavePage;
                   MyRaveData : TRaveDatatext;
                   AncMyRaveData : String;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure TForme.GCabGastroAfterOpen(Sender: TObject);
    begin
    
      MyPage := GCabGastro.ProjMan.FindRaveComponent('MaitreDetailOrdoA5.PageOrdo',nil) AS TRavePage;
      myRaveData := GCabGastro.ProjMan.FindRaveComponent('folio',MyPage) AS TRaveDataText;
    
      // nbLigne : nombre de ligne dans le cas maître-détail
    
      if (Assigned(MyRaveData)) and  (nbLigne <= 22) then
      begin
    // mémorisation ancienne valeur AncMyRaveData variable globale
        AncMyRaveData:=myRaveData.DataField;    myRaveData.DataField:='';
      end;
    
    
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForme.GCabGastroAfterClose(Sender: TObject);
    begin
      myRaveData.DataField:=AncMyRaveData;
    end;

  18. #18
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    1) on rend myPage et myrvData plus un String AncValeur variable globale.
    2) dans onAfterOpen on mémorise l'ancienne valeur myrvData.datafield avant modif
    3/ dans onAfterClose on réinitialse myrvData.datafield
    Pas besoin , sauf si
    -tu fais une sauvegarde du Rave
    -tu ne fermes pas le rave après édition
    -c'est un ensemble d'états chainés (je doute)

    Je prends toujours soin de faire un Open/Execute/Close

  19. #19
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    bonjour

    Citation Envoyé par SergioMaster Voir le message
    Pas besoin , sauf si
    -tu fais une sauvegarde du Rave
    -tu ne fermes pas le rave après édition
    -c'est un ensemble d'états chainés (je doute)

    Je prends toujours soin de faire un Open/Execute/Close
    tu as tout à fait raison.
    je pensait en assignant une valeur à datafiels, cette valeur était mémorisée.
    ce qui n'est pas le cas je viens de le tester.

    aussi ai je supprimé toute cette gymnastique et suis revenu à la situation ante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForme.GCabGastroAfterOpen(Sender: TObject);
    var MyPage : TRavePage;
        MyRaveData : TRaveDatatext;
    begin
      MyPage := GCabGastro.ProjMan.FindRaveComponent('MaitreDetailOrdoA5.PageOrdo',nil) AS TRavePage;
      myRaveData := GCabGastro.ProjMan.FindRaveComponent('folio',MyPage) AS TRaveDataText;
     
      // nbLigne : nombre de ligne dans le cas maître-détail
      if (Assigned(MyRaveData)) and  (nbLigne <= 22) then  myRaveData.DataField:='';
    end;
    c'est presque parfait.

    merci SergioMaster.
    bye.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impression qui prend plus qu'une page
    Par TrollTop dans le forum C++/CLI
    Réponses: 2
    Dernier message: 29/05/2009, 09h45
  2. Réponses: 3
    Dernier message: 11/10/2007, 14h03
  3. Grand tableau qui prend plus d'une page
    Par Rabie de OLEP dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 1
    Dernier message: 03/01/2007, 22h22
  4. Réponses: 3
    Dernier message: 18/12/2006, 15h15
  5. Ouvrir une fenêtre pop up en plus d'une page normale
    Par Satination dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 17/08/2005, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo