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

Lazarus Pascal Discussion :

Information à propos de Lazreport et l'exception "SIGSEGV" version 1.44 ou 1.6 de Lazarus [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Patrick25300
    Homme Profil pro
    Retraité en technicien de maintenance et méthodes
    Inscrit en
    Février 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité en technicien de maintenance et méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 156
    Par défaut Information à propos de Lazreport et l'exception "SIGSEGV" version 1.44 ou 1.6 de Lazarus
    J'utilise LazReport dans mon application sous WindowsXP, je n'ai aucun souci si j'utilise LazReport en
    déposant le composant "TfrReport" sur la forme de l'application.
    Avec par exemple le code ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.ButtonPrint1(Sender: TObject);
    begin
     Data.SQLQuery1.DisableControls;
     frDBDataSet1.DataSet := Data.SQLQuery1;
     frDBDataSet1.DataSource := Data.DataSource1;
     frReport1.LoadFromFile(CheminImpressions+'rangements.lrf');
     frReport1.ShowReport;
     Data.SQLQuery1.EnableControls;
    end;
    Mais, si je veux utiliser LazReport en programmation direct suivant cette exemple ci-dessous, sans utiliser le composant déposé sur la forme.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    procedure TForm1.ImpressionRequete;
    var
     frViewA: TfrView;
     frPageA: TfrPage;
     frBandViewA: TfrBandView;
     frReportA: TfrReport;
     Gauche,Bas, OffBas,Largeur,Hauteur, HauteurChar:integer;
    begin
     
    Gauche := 10;
    Bas:=32;
    Largeur:=740;
    Hauteur:=40;
    HauteurChar := 16;
    OffBas := 5;
     
    frReportA := TfrReport.Create(Self);
    frReportA.Pages.Clear;
    frReportA.Pages.Add;
    frPageA:=frReportA.Pages[0];
     
     
     frBandViewA := TfrBandView(frCreateObject(gtBand, '',frPageA));
     frBandViewA.SetBounds(Gauche,Bas,Largeur,Hauteur);
     frBandViewA.BandType := btReportTitle;
     frPageA.Objects.Add(frBandViewA);
     
     frViewA := TfrView(frCreateObject(gtMemo, '',frPageA));
     frViewA.SetBounds(Gauche,Bas+OffBas,Largeur,HauteurChar);
     frViewA.Memo.Add('Requête du: '+DateToStr(Date));
     
     TfrMemoView(frViewA).Font.Size := 10;
     TfrMemoView(frViewA).Font.Bold := True;
     TfrMemoView(frViewA).Alignment := taCenter;
     frPageA.Objects.Add(frViewA);
     
     Bas := Bas*3;
     
     frBandViewA := TfrBandView(frCreateObject(gtBand, '',frPageA));
     frBandViewA.SetBounds(Gauche,Bas,Largeur,Hauteur div 2);
     frBandViewA.BandType := btMasterData;
     frBandViewA.DataSet:='frDBDataSet1';
     frPageA.Objects.Add(frBandViewA);
     
     frViewA := TfrView(frCreateObject(gtMemo, '',frPageA));
     frViewA.SetBounds(Gauche,Bas+OffBas,Largeur,HauteurChar);
     frViewA.Memo.Add('[Data.SQLQuery1."ART_REFERENCE"]');
     frPageA.Objects.Add(frViewA);
     
     
     frViewA := TfrView(frCreateObject(gtMemo, '',frPageA));
     frViewA.SetBounds(Gauche+300,Bas+OffBas,Largeur,HauteurChar);
     frViewA.Memo.Add('[Data.SQLQuery1."ART_REFERENCE"]');
     frPageA.Objects.Add(frViewA);
     
     frReportA.ShowReport;
     
    end;
    Ce message d'erreur 'classe 'exception "External:SIGSEGV" s'affiche lors de la sortie de l'application

    Nom : ErreurSIGSEGV.jpg
Affichages : 389
Taille : 9,8 Ko

    Par contre en modifiant le fichier "LR_Class.pas" en commentant la ligne 9742 "FPages.free" je n'ai plus aucun souci.

    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
     
    destructor TfrReport.Destroy;
    begin
      if CurReport=Self then
        CurReport:=nil;
      FVal.Free;
      FVars.Free;
      FEMFPages.Free;
      FEMFPages := nil;
    //  FPages.Free;  
      FComments.Free;
      FreeAndNil(FDetailReports);
      FreeAndNil(FScript);
      inherited Destroy;
    end;
    Je comprends que "FPages.free" a déja été exécuté, je n'ai pas pour l'instant approfondi le problème.

  2. #2
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Patrick25300 Voir le message
    Mais, si je veux utiliser LazReport en programmation directe suivant cette exemple ci-dessous, sans utiliser le composant déposé sur la forme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    procedure TForm1.ImpressionRequete;
    [...]
    frReportA := TfrReport.Create(Self);
    Je comprends que "FPages.free" a déja été exécuté, je n'ai pas pour l'instant approfondi le problème.
    Bonjour,

    Ici, le problème tient à la création elle-même. En fournissant Self comme paramètre, on rend la fiche principale propriétaire du composant et par conséquent responsable de sa libération. Or, il semblerait que le rapport s'autodétruise après utilisation : il y a donc bien deux appels à Free.
    La solution est d'utiliser le paramètre nil et tout rentre dans l'ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    frReportA := TfrReport.Create(nil);
    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Membre confirmé Avatar de Patrick25300
    Homme Profil pro
    Retraité en technicien de maintenance et méthodes
    Inscrit en
    Février 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité en technicien de maintenance et méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 156
    Par défaut
    Merci gvasseur58 effectivement ça marche bien avec le paramètre "nil", c'est résolu

  4. #4
    Membre confirmé Avatar de Patrick25300
    Homme Profil pro
    Retraité en technicien de maintenance et méthodes
    Inscrit en
    Février 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité en technicien de maintenance et méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 156
    Par défaut
    Bonjour

    Désolé ça ne suffit pas, en fait le paramètre "nil"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    frReportA := TfrReport.Create(nil);
    empêche la bande Master d'imprimer les données, si je remets le commentaire devant "// FPages.Free;"
    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
     
    destructor TfrReport.Destroy;
    begin
      if CurReport=Self then
        CurReport:=nil;
      FVal.Free;
      FVars.Free;
      FEMFPages.Free;
      FEMFPages := nil;
    //  FPages.Free;  
      FComments.Free;
      FreeAndNil(FDetailReports);
      FreeAndNil(FScript);
      inherited Destroy;
    end;
    et "self" comme paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    procedure TForm1.ImpressionRequete;
    [...]
    frReportA := TfrReport.Create(Self);
    ça fonctionne, je vais utiliser "self", mais, mettre un commentaire dans mon code afin de ne pas oublier ce problème.

  5. #5
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Patrick25300 Voir le message
    Bonjour

    Désolé ça ne suffit pas, en fait le paramètre "nil"
    Désolé .
    Je n'ai pas essayé cette bibliothèque, car elle est toujours en développement intensif et semble poser quelques problèmes. Mais là, la manipulation est élémentaire : je vais essayer de me renseigner et faire quelques tests supplémentaires.

    Bon courage !

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Membre confirmé Avatar de Patrick25300
    Homme Profil pro
    Retraité en technicien de maintenance et méthodes
    Inscrit en
    Février 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité en technicien de maintenance et méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 156
    Par défaut
    Bonjour

    Merci gvasseur58 de tes réponses.

    LazReport qui est issu de FastReport est bien plus intéressant à mon gout que Rave Reports Borland Edition ou quickReport le plus c'est que l'utilisateur à la possibilité de modifier les rapports d'impression, aussi il est assez simple d'utilisation, merci à l'équipe de Lazarus.

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

Discussions similaires

  1. [db4o] Quelles informations à propos de cet SGBDO ?
    Par diesel dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 05/12/2006, 09h59

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