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

C++Builder Discussion :

Impression et lecture fichier journaliere.


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Impression et lecture fichier journaliere.
    Voila,

    j'ai un problème avec une impression.

    Pour imprimer je recupère le texte d'un memo (lier à une db Access)


    Voici le code:

    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
    Printer()->BeginDoc();
    Printer()->Canvas->Rectangle(720.712,150,1668.568,348.755);
    Printer()->Canvas->Font->Name="Times New Roman";
    Printer()->Canvas->Font->Size=16;
    Printer()->Canvas->TextOutA(805.712,210,"SERVICE MAINTENANCE");
    Printer()->Canvas->Font->Name="Times New Roman";
    Printer()->Canvas->Font->Size=14;
    AnsiString Texte = LbEntMemo->Caption;
    Printer()->Canvas->TextOutA(250,450,Texte);
    int y =250+Printer()->Canvas->TextWidth(Texte);
    Printer()->Canvas->MoveTo(250,517.225); Printer()->Canvas->LineTo(y,517.225);
    AnsiString Texte1 = DBEditNomMach->Text;
    int w =1928.836+Printer()->Canvas->TextWidth(Texte1);
    Printer()->Canvas->Rectangle(1877.164,438.755,w,528.715);
    Printer()->Canvas->TextOutA(1900,450,Texte1);
    Printer()->Canvas->Font->Name="Times New Roman";
    Printer()->Canvas->Font->Size=12;
    Printer()->Canvas->TextOutA(250,575,"Nom de l'opérateur :.................................");
    Printer()->Canvas->TextOutA(250,650,"Date d'éxecution des travaux :......../......../........");
    Printer()->Canvas->Rectangle(250,800,2150,2777.75);
    Printer()->Canvas->Font->Name="Times New Roman";
    Printer()->Canvas->Font->Size=10;
    // --------------------------
    // récupération du texte
    //
    AnsiString Texte2 = DBMemoEnt->Text;
    Printer()->Canvas->TextOutA(307.14,833.735,Texte2);
    // --------------------------
    AnsiString Texte3 = "Remarque et/ou travaux à éffectuer";
    Printer()->Canvas->TextOutA(250,2833.975,Texte3);
    int z =250+Printer()->Canvas->TextWidth(Texte3);
    Printer()->Canvas->MoveTo(250,2890.2); Printer()->Canvas->LineTo(z,2890.2);
    Printer()->EndDoc();
    J'ai executer mon prog avec un arrêt pour vérifier ce qui se trouvais dans ma variable texte2 et j'ai bien mon texte avec a chaque fin de phrase mon saut de ligne et mon retour a la ligne mais lors de l'impression tout est imprimer sur une ligne!!

    En ce qui concerne la lecture du fichier j'aimerrai mettre ma db a jour une fois par jour existe t'il une fonction que je pourrai définir à 9h00 du matin tous les jour par exemple.

    Voila merci d'avance.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ben voila pour mon impression j'ai 4 carré qui remplace mon saut de ligne et mon retour à la ligne si cela peut aider quelqu'un a me donner une solution

    Exemple:

    Salut,□□□□comment allez-vous?□□□□ à la place de

    Salut,

    Comment allez-vous?

    Voila si vous avez une idée je suis preneur car moi je nage dans la semoule

    Merci d'avance.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Salut,
    Je me demande si le problème ne vient pas de la gestion des retours à la ligne?? Tu utilises des \n je suppose pour faire des retours à la lignes ?Je vais voir si je retrouve quelquechose pour t'aider car la comme ça je ne me souviens plus.

    ---
    Christophe.

  4. #4
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Il semble que vous ne puissiez pas imprimer directement le contenu d'un composant s'il a plusieurs lignes, par exemple un Memo, contrairement à un exemple donné dans la documentation, sinon, effectivement, vous obtenez quatre carrés à la place de chaque retour chariot.

    La documentation donne un autre exemple (TPrinter : Utilisation TPrinter) que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::Button1Click(TObject *Sender)
     
    {
      TPrinter *Prntr = Printer();
      TRect r = Rect(200,200,Prntr->PageWidth-200,Prntr->PageHeight-200);
      Prntr->BeginDoc();
      for( int i = 0; i < Memo1->Lines->Count; i++)
        Prntr->Canvas->TextOut(200,200+(i*Prntr->Canvas->TextHeight(Memo1->Lines->Strings[i])),Memo1->Lines->Strings[i]);
      Prntr->Canvas->Brush->Color = clBlack;
      Prntr->Canvas->FrameRect(r);
      Prntr->EndDoc();
    }
    Cet exemple imprime le contenu d'un Memo sur clic d'un bouton. Comme vous le voyez, on procède ligne après ligne et on calcule la coordonnée en y en fonction de la hauteur de chaque ligne. Ce n'est sans doute pas parfait car il peut y avoir des caractères de différentes hauteurs dans une ligne mais du moins cela montre qu'il faut faire du ligne à ligne.

    À bientôt
    Gilles

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Effectivement il me semble que la seule solution est de faire du ligne à ligne comme la préciser Gilles, c'est la méthode que j'utilise pour faire des rapports dans mes logiciels.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ok merci a tous pour ces réponse je vais essayer directement.

    Et pour effectué une action une seule fois dans la journée, avez-vous une idée?

    Exemple:

    j'ai une table que je veux mettre a jour une seule fois dans la journée disons que a 3h00 je veux ouvrir un fichier lire ligne par ligne son contenu et mettre à jour ma db (Access). Pour la gestion des fichier aucun problème très bien expliquer dans la faq mais comment éffectué une procédure une seule fois dans la journée? y a t'il un composant partculier a utilisé?

    Merci d'avance pour vos réponses.

  7. #7
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    tu peux utiliser un TTimer qui vient scruter l'heure toutes les secondes ... c'est ce que je fais en général ...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut a tous pour l'impression j'y arrive maintenant il me reste juste a definir les marge doite et gauche de ma page ainsi que le pied de page.

    Enfin ce qui m'interesse maintenant ce serait de voir comment freeze emplois un TTimer car je ne trouve pas trop d'explication dans l'aide de C++.

    Voila merci d'avance.

  9. #9
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    Tu poses un timer sur ta fiche ( ou tu le créé en dynamique ) ... avec une intervalle de 1000 ms ... et une variable bool EnCours .
    Sur l'évenement OnTimer tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (FormatDateTime("hh:mm:ss",Now())==TonHeure)
    {
       if (!EnCours)
          ExecuteAction();
    }
    else
       EnCours=false;

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

Discussions similaires

  1. Lecture fichier Word et remplacement paramètre
    Par Pfeffer dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/02/2005, 17h30
  2. [ifstream] pb lecture fichier non sequentielle
    Par bludo dans le forum SL & STL
    Réponses: 3
    Dernier message: 10/02/2005, 21h30
  3. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 19h22
  4. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 18h53
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

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