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

Composants VCL Delphi Discussion :

Migration de Quickreport vers FastReport


Sujet :

Composants VCL Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 552
    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 552
    Billets dans le blog
    65
    Par défaut Migration de Quickreport vers FastReport
    Bonjour,

    Je tente de migrer mes états QuickReport3 vers FastReport et ce n'est pas sans mal !
    L'outil de migration proposé par FastReport ne fonctionne pas comme je le voudrai (version trop ancienne de QuickReport probablement)
    Je me suis rabattu sur une unité découverte sur le net (cf. PJ) pas très satisfaisante car :
    Je dois modifier la forme pour ajouter la conversion puis je suis obligé de faire pas mal de manipulations par la suite pour obtenir un "gabarit fr3" correct
    Enfin, pour les fiches de types TQuickRep, je dois d'abord passer par une première étape de copie des bandes pour obtenir un quickreport dans un TForm

    Bref, avez-vous connaissance d'un outil plus simple (nécessitant moins de manips) ou une proposition de manip différente ?
    Problématiques posées :
    - Utilisation de code barre (c'est un point qui me fait abandonner QuickReport car je n'ai pas trouvé moyen de migrer le composant QRBarcode, uniquement D3,D4)
    - Quickreport dans une Forme ou dans un TQuickRep
    - Migration de D3 vers D7 avant d'entamer le grand saut vers D11 (à la vitesse ou ça va ce sera peut-être D12 )
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 475
    Par défaut
    salut

    ce ne serait pas plus simple de faire comme le faisait Pragnaan Software
    pour faire du Qr => PsQr
    Il lit le .dfm et le .pas et modifi les fichiers en changeant le nom de la class

    a priori il faut juste remplacer les nom de 1 pour 1

    les class que tu veux remplacer
    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
     
    type
      THackWinControl = class(TWinControl);
      TQRCtrlClass = (ccTQRLabel, ccTQRDBText, ccTQRExpr,
    		ccTQRSysData, ccTQRMemo, ccTQRExprMemo, ccTQRRichText, ccTQRDBRichText,
    		ccTQRLine, ccTQRShape, ccTQRImage, ccTQRDBImage, ccTQRChart,...);
     
    //TQuickRep,TQRBand,TQRSysData,TQRGroup
     
      OldClassNames: array[TQRCtrlClass] of string = ('TGPQRLabel', 'TGPQRDBText',
         'TGPQRExpr', 'TGPQRSysData', 'TGPQRMemo', 'TGPQRExprMemo', 'TGPQRRichText',
         'TGPQRDBRichText', 'TGPQRLine', 'TGPQRShape', 'TGPQRImage', 'TGPQRDBImage',
         'TGPQRChart',...);
     
      NewClassNames: array[TQRCtrlClass] of string = ('TFRLabel', 'TFRDBText',
    	'TPsQRExpr', 'TPsQRSysData', 'TPsQRMemo', 'TPsQRExprMemo', 'TFRRichText',
    		'TFRDBRichText', 'TFRShape', 'TFRShape', 'TFRImage', 'TFRDBImage',
    		'TFRChart',...);
     
     
    .....
    Quelque fonctionw utiles
    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
     
    {------------------------------------------------------------------------------}
    function IsDFMBinary(FileName: string): Boolean;
    var
      F: TFileStream;
      B: Byte;
    begin
      B := 0;
      F := TFileStream.Create(FileName, fmOpenRead);
      try
        F.Read(B, 1);
        Result := B = $FF;
      finally
        F.Free;
      end;
    end;
    {------------------------------------------------------------------------------}
    procedure DFM2TXT(Src, Dest: string);
    var
      SrcS, DestS: TFileStream;
    begin
      SrcS := TFileStream.Create(Src, fmOpenRead);
      DestS := TFileStream.Create(Dest, fmCreate);
      try
        ObjectResourceToText(SrcS, DestS);
      finally
         SrcS.Free;
         DestS.Free;
      end;
    end;
     
    procedure TXT2DFM(Src, Dest: string);
    var
      SrcS, DestS: TFileStream;
    begin
      SrcS := TFileStream.Create(Src, fmOpenRead);
      DestS := TFileStream.Create(Dest, fmCreate);
      try
        ObjectTextToResource(SrcS, DestS);
      finally
        SrcS.Free;
        DestS.Free;
      end;
    end;
    dans le corps de ton programme pour chaque fichier tu
    fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
          if IsDFMBinary(FileName) then
          begin
          	DFM2TXT(FileName, TempFile);
    	ChangeToFr(TempFile, TempFile, progLines, lblLinesLeft,	ChangeCount, ChangeSum);
    	TXT2DFM(TempFile, FileName);
          end
          else
          begin
          	RenameFile(FileName, TempFile);
          	ChangeToFr(TempFile, FileName, progLines, lblLinesLeft,	ChangeCount, ChangeSum);
          end;
    ...
    et la fonction principal qui modifie le code source
    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
     
    procedure ChangeToFr(SrcFile, DestFile: string; AProgressBar: TProgressBar;AProgressLabel: TLabel; var ChangeCount: array of Integer;var ChangeSum: Integer);
    var
      I, Count: Integer;
      C     : TQRCtrlClass;
      S     : string;
      Lines : TStringList;
      .....
    begin
      Lines := TStringList.Create;
      try
        Lines.LoadFromFile(SrcFile);
        .....
        for I := Lines.Count - 1 downto 0 do
        begin
          .....
          S := Lines[I];
          for C := Low(OldClassNames) to High(OldClassNames) do
          begin
          	S := ReplaceString(S, OldClassNames[C], NewClassNames[C], Count);
          	if Count <> 0 then
          	begin
          	  Inc(ChangeSum, Count);
    	  Inc(ChangeCount[Ord(C)], Count);
    	end;
          end;
          Lines[I] := S;
          Application.ProcessMessages;
        end;
      finally
        Lines.SaveToFile(DestFile);
        Lines.Free;
      end;
    end;
    je pense qu'avec ce genre de modification tu as fait l'essentiel de ton transfert
    il va te rester les propriete de objet ... mais bon deja tu aura fait un gros boulot
    Il faut faire quelque petit ajustement

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 552
    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 552
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par anapurna Voir le message
    ce ne serait pas plus simple de faire comme le faisait Pragnaan Software
    pour faire du Qr => PsQr
    Merci. Mais, non, je ne crois pas que ce soit faisable. FastReport contrairement à Quickreport a un design indépendant qui n'est plus inclus dans le Dfm.
    Ou alors j'ai mal compris ta proposition

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 475
    Par défaut
    salut

    effectivement c'etait la modification du point pas et du dfm ....
    il a un fichier de ressource a lui fastReport ?
    c'est peut etre plus simple de recree son fichier de resource dans ce cas la non ?

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 905
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 905
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    FastReport contrairement à Quickreport a un design indépendant qui n'est plus inclus dans le Dfm.
    Si, si ! Un double-clic sur le composant et ce que tu édites là est sauvé dans le dfm.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 552
    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 552
    Billets dans le blog
    65
    Par défaut
    Ah, oui, effectivement, j'oublie toujours que l'on peut inclure le FrxReport dans les sources (propriété StoreInDfm) car j'ai tendance à sauvegarder les "gabarits" (.fr3) dans une base de données.

Discussions similaires

  1. [VB.NET] Conseil migration d'ADO vers ADO.NET
    Par daner06 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2004, 08h57
  2. [Forms]migration forms 6 vers forms 8
    Par anthonychery dans le forum Oracle
    Réponses: 7
    Dernier message: 17/11/2004, 17h54
  3. Demande de conseil pour migration de lignes vers colonnes
    Par ririd dans le forum Administration
    Réponses: 6
    Dernier message: 04/11/2004, 17h02
  4. [SYBASE] migration ASE12.0 vers ASE12.5
    Par sybase dans le forum Sybase
    Réponses: 1
    Dernier message: 25/10/2004, 15h53
  5. Exporter un état QuickReport vers Excel.
    Par abdelghani_k dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/06/2004, 14h22

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