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 :

Retourner de 90° contenu [Edit] ou [Label] pour impression


Sujet :

Composants VCL Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Retourner de 90° contenu [Edit] ou [Label] pour impression
    Title : Retourner de 90° contenu Edit ou Label lors de l'impression


    Bonsoir,

    Après bien des recherches diverses, je ne trouve pas un p'tit bout de code afin de "retourner" seulement lors de la phase de printage le contenu d'un Edit ou bien d'un Label.

    Je me suis inspiré du tuto - lien ci-dessous - de Jean-Luc que je salue amicalement au passage.

    http://alphomega.developpez.com/imprimer/?page=page_3

    Mais je n'arrive pas à trouver la syntaxe exacte pour éviter cette ligne d'erreur :
    [Erreur] Main.pas(112): Types incompatibles : 'TCanvas' et 'Integer'

    Voici le bloc de code en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    AngleTextOut(
     Millimetres2PixelsX(32) - NonImprimableHorizPixelsX)
     Millimetres2PixelsY(21) - NonImprimableVertiPixelsY, E);
    ...
    Merci de me dire si ce transtypage est possible.

    Et encore merci à Jean-Luc de ses super tutos.

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Personne a une petite idée ?

    Millimetres2PixelsX(32) - NonImprimableHorizPixelsX)
    Une précision, lorsque je referme la parenthèse du (32) j'ai une bulle qui arrive et me montre le chemin de la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CV: TCanvas; const sText: String; x: Integer; angle: Integer
    C'est seulement au niveau de ce CV: TCanvas que je ne sais pas quoi saisir.

    Merci de vos idées.

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 874
    Points : 11 363
    Points
    11 363
    Billets dans le blog
    6
    Par défaut
    AngleTextOut(image1.canvas, 'INCLINE', round(image1.width / 4), image1.Height, 90);
    dans cet exemple, l'écriture se fait dans le canevas du TImage Image1 ;
    comme tu veux à l'impression, tu peux construire directement ta page dans le canevas de l'imprimante (initialisation par Printer.BeginDoc et impression par Printer.EndDoc)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AngleTextOut(Printer.canvas,  // tu écris dans le canevas de la page à imprimer
                                  'INCLINE',  // le texte que tu veux
                                  Millimetres2PixelsX(32) - NonImprimableHorizPixelsX), // où tu veux
                                  Millimetres2PixelsY(21) - NonImprimableVertiPixelsY);

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Encore merci à toi Tourlourou 8)

    Oui oui , je printerais dans un TImage au final, là pas de blème.

    Mais justement puisque dans ce TImage, je ne peux placer hyper précisément les champs à printer que je me tourne vers les lignes de codes à Jean-Luc.

    Tu me disais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AngleTextOut(Printer.canvas,  // tu écris dans le canevas de la page à imprimer
                                  'INCLINE',  // le texte que tu veux
                                  Millimetres2PixelsX(32) - NonImprimableHorizPixelsX), // où tu veux
                                  Millimetres2PixelsY(21) - NonImprimableVertiPixelsY);
    Là... nous avançons, car la compil n'a pas grogné au passage de ton Printer.canvas, par contre la compil me place le message suivant :
    [Erreur] Main.pas(118): Pas assez de paramètres originaux

    Juste après la parenthèse refermante du ...PixelsX) :
    Millimetres2PixelsX(32) - NonImprimableHorizPixelsX) <========
    Alors là, encore une fois je ne sais et ne vois pas quoi ajouter...

    Je dois dire que j'utilise super bien les functions en question, mais là c'est l'histoire du Canvas qui complique tout.

    Si ça passe, ce serait super...

    ========================
    Oupsss : en virant cette parenthèse refermante, la compile passe cette ligne, mas me donne le même message d'erreur à la fin de la ligne suivante
    Millimetres2PixelsY(21) - NonImprimableVertiPixelsY;

    ========================
    Re oupssssss, ça me demande un type Integer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Millimetres2PixelsY(21) - NonImprimableVertiPixelsY, 22);
    Or, je ne vois pas à ce dont il correspond, puisque tout semble déjà paramétré...

    Mais en tous les cas, ça se compile impec !

    Je cherche aussi ;o)

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 874
    Points : 11 363
    Points
    11 363
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AngleTextOut(Printer.canvas,  // tu écris dans le canevas de la page à imprimer 
                                  'INCLINE',  // le texte que tu veux 
                                  Millimetres2PixelsX(32) - NonImprimableHorizPixelsX [b])[/b] , // pas de parenthèse !
                                  Millimetres2PixelsY(21) - NonImprimableVertiPixelsY[b])[/b] ; // pas de parenthèse !
    NonImprimableVertiPixelsY n'a pas de paramètre => pas de parenthèse ou () pour montrer qu'elle n'attend rien !

  6. #6
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re tourlourou,

    Je cherchais à quoi pouvait bien corespondre le "Integer" de fin de la seconde ligne ======> le degré de rotation !

    Merci, je regarde ce que tu viens de me donner...

    @+

  7. #7
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Je viens de voir, oui, oui j'avais fini par tâtonnement par virer les parenthèses.

    Par contre à la fin, je ne vois pas ne rien ajouter, sauf erreur de la part ; le fameux angle de rotation.

    Un peu plus clair :

    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
     
     
    procedure TForm1.BtnPrintClick(Sender: TObject);
      begin
          with Printer do
      begin
     
         BeginDoc; 
     
        Canvas.Font.Name  := 'Arial';
        Canvas.font.Size  := 9;
        Canvas.font.Style := [fsBold]; 
     
    AngleTextOut(Printer.canvas, 'Bonjour tout le monde!',
                                  Millimetres2PixelsX(32) - NonImprimableHorizPixelsX,
                                  Millimetres2PixelsY(21) - NonImprimableVertiPixelsY, 90);
     
            EndDoc;  
        end;
    end;
    Ça se compile impec, ça printe, mais...

    J'ai pourtant en principe affecté une Fonte TT et je vois au rendu du printage des pattes de mouche = du microscopique = du MicroPrintage.

    Quelle marche ai-je encore raté ?

    @+ et merci pour tout, bientôt le but 8)

    ===========================
    Oupsss, suite :

    Je viens de donner one new affectation à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Canvas.font.Size  := 20;
    Et au printage, là je vois, enfin oui mais tout de même avec une bonne loupe lol

    Je vais changer de Fonte pour voir...

    ============================

    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Canvas.Font.Name  := 'MS Sans Serif';   // 'Arial';
        Canvas.font.Size  := 20;
        Canvas.font.Style := [fsBold];
    La string dito (Bonjour tout le monde!) représente en tout et pour tout 15 millimètres lol

    Comment faire pour les valeurs en "vertical" soit les mêmes qu'en standard 'horizontal" ?

    Mais ça devient bon lol

    ============================

    Avec du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Canvas.font.Size  := 60;
    Là, ça commence à devenir normal...

  8. #8
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Hummm, en regardant ceci qui gère le rendu graphique sur un TImage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AngleTextOut(image1.canvas, E, round(image1.width / 2.5), image1.Height, 90);
    // AngleTextOut(image1.canvas, '          texte', round(image1.width / 2.5), image1.Height, 90);
    AngleTextOut(Image1.Canvas, Label2.Caption, round(image1.Width / 4), image1.Height, 90);
    Je subodore que d'autres paramètres doivent entrer en ligne de compte, à savoir :
    Height et width...

    Oui, oui, je sais, sur le bloc ci-dessus, les proportions de fonte sont bonnes.

    Alors il suffirait ensuite de printer ce TImage ; ce que d'ailleurs j'avais prévu.

    Mais là avec ce printage "à la volée", ce serait du luxe 8)

    @+

  9. #9
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    C'est juste que tu utilises des tailles de police trop petites.
    Une impromante bas de gamme fait 300 point par pouce, je te laisse imaginer le nombre de pixels WidthxHeight.

    De plus cette valeur change suivant le modèle d'imprimante, le driver, la config, etc...

    Quand je fais un impression directe via le canevas je fais toujours un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base = Canvas.Width / 200; // pour une base de 200 lignes par page
    Puis je change la taille de police en fonction de Base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Canvas.Font.Size := Base; // Taille normale
    Canvas.Font.Size := (Base*3) Div 2; // Taille intermédiaire
    Canvas.Font.Size := Base*2; // Taille double
    Comme cela tu dépend beaucoup moins de l'imprimante.

  10. #10
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Merci Nono, nous sommes sur le bon chemin alors !

    Mais je ne suis pas fichu de déclarer convenablement cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base = Canvas.Width / 200; // pour une base de 200 lignes par page
    J'ai tenté en Var de la déclarer ce Base en Integer ; Longint ; Double ; etc.

    Ensuite le compilateur stoppe sur le Canvas. , le Width ne passe pas, snifff

    @+

  11. #11
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Bonjour,

    J'avais tapé un peu vite et de tête... Regarde ici pour une solution plus juste :
    http://nono40.developpez.com/sources/source0014/

  12. #12
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonsoir Nono,

    Puisque cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base = Canvas.Width / 200;
    est mystérieuse, j'effectue sur ton super source sur le mot Width ou bien Canvas mais je trouve que dalle de probant.



    J'ai bien vu la variable Base à déclarer en Integer, aussi l'initialisation de cette variable à zéro, mais pas grand chose d'autre par rapport à cette fameuse ligne que tu as tapé de tête.

    En tous les cas, des tas de choses dans ton source à apprendre, merci !

    Mais si tu me dis que je vais trouver ce que je cherche dans ton zip, j'y fonce

    @+


    =========================

    Je viens de 'lancer' ton appli, oupssss, quel travail !

    Chapeau bas pour le code, des tas de trucs à récolter.

    Tiens au fait, pour ma question juste ci-dessus, je pense avoir résolu le blème justement en ayant regardé ton code et initialisé tout simplement la variable Base à :


    ==========================

    J'y reviens... lol

    J'ai tenté un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base := Canvas.TextWidth / 200;
    Mais pôô assez de paramètres...

    Suis-je dans le vrai ?

  13. #13
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Dans le code j'ai tapé trop vite. C'est Div ( division entière ) au lieu de / ( division réelle ). D'autre part c'est Printer.PageHeight qu'il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base := Printer.PageHeight Div 100;

  14. #14
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonsoir,

    Merci Nono, super !

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

Discussions similaires

  1. [Débutant] exporter le contenu d'un DATAGRIDVIEW pour impression
    Par bucabuca dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/06/2013, 02h10
  2. Réponses: 9
    Dernier message: 01/09/2006, 14h55
  3. comment récupérer le contenu d'un label comme image?
    Par valentinb dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 09/08/2006, 21h51
  4. Récupérer le contenu d'un champs pour un calcul ?
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2006, 10h25
  5. Edition de masque pour les TMaskEdit
    Par bakaneko dans le forum C++Builder
    Réponses: 1
    Dernier message: 30/08/2005, 18h09

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