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

Delphi Discussion :

Assigné des Canvas de type différents.


Sujet :

Delphi

  1. #1
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut Assigné des Canvas de type différents.
    Bonjour à tous,

    Ma question, concèrne l'impression de mon projet en générale...J'aimerais savoir si il est possible d'utiliser la fonction "assign" ou une astuce équivalente afin de passer le canvas de ma paintbox au MetafileCanvas(pour le redimentionnement et l'exportation vers le presse-papier) ou/et vers le Canvas du Priter (pour l'impression).

    Actuellement j'ai un message d'erreur du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Impossible d'assigner TcontrolCanvas à TPrinterCanvas...
    Merci pour votre aide,

    A+.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 576
    Points : 25 216
    Points
    25 216
    Par défaut
    Si la fonction assign ou assignto des deux classes n'est pas prévu, c'est fort difficile, sinon, reste toujours le passage via un TBitMap temporaire ? cela reste le format le plus "standard" qui doit pouvoir être utiliser comme intermédiaire

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    A noter que l'objet canvas possede une var Handle modifiable.

    On peut donc creer dynamiquement un objet TCanvas, lui affecter un handle graphique et manipuler ce canvas.

    Il ne me semble donc pas impossible de lier 2 canvas a la meme zone graphique en affectant les handles.

    Sinon dans ton cas, peut etre qu'un simple copyrect ou strechdraw d'un canvas sur l'autre devrais faire l'affaire pour copier le contenu d'un canvas sur l'autre.

    Les property ne sont pas copiées, mais le contenu du canvas (dessin) oui. Ce qui me semble est l'essentiel ....

  4. #4
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Merci pour ta réponse,

    mais j'avoue avoir du mal avec tout ce qui est draw...
    Voici mon code, pour que vous compreniez mon blocage...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If printdialog1.Execute then
      Begin
        Printer.Orientation := poLandscape;
        aRect.Right:= Printer.PageWidth;
        aRect.Bottom:= Printer.PageHeight;
        aRect.Left:= 0;
        aRect.Top:= 0;
        Printer.BeginDoc;
        Printer.Canvas.StretchDraw(aRect,PaintBox1.????); => ici on me demande un TGraphic
        Printer.EndDoc;
      End;
    Merci encore pour le temps passé à étudier mon problème,

    A+.

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Printer.Canvas.StretchDraw(aRect, bmp);
    ... ça marche avec un bmp TBitMap, et pour créer ce BitMap suffit de le créer au préalable en traçant dessus la même chose que sur ta PaintBox1 c'est à dire avec un routine qui contient des instructions quasiment identiques à celles de ta méthode onPaint du PaintBox1. D'ailleurs pour me simplifier la vie je crée toujours le bmp indépendamment du truc sur lequel je veux ensuite l'utiliser ce qui me permet d'envoyer le bmp sur n'importe quel canvas : canvas du printer, canvas d'une image ... ou de l'envoyer dans le presse-papier avec Clipboard.Assign(Bmp) ... c'est à dire que j'utilise le bmp dans l'univers de l'image comme on ballade un String d'un endroit à l'autre dans l'univers du texte et des caption, et quand Finally on n'en a plus besoin alors Bmp.Free.

  6. #6
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Effectivement, d'habitude j'écris directement sur mon Canvas (passé en paramètre de ma fonction dessin).

    Le problème c'est que mon prédécésseur à dessiner des objets sans utiliser de facteur d'échelle, et pour éviter de refaire toutes ses fonctions, j'aurais préféré la méthode: récupérer le canvas de ma paintbox, l'agrandir par strechdraw et le copier dans mon Printer.

    Mais si cela est impossible, alors je vais me lancer dans la reprise de code...

    Merci pour votre aide,

    A+.

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Var Canvas : TCanvas;
    Canvas := TCanvas.Create;
    Canvas.handle := MonComposant.handle;

  8. #8
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Ou sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Var bmp : TBitmap;
    bmp := TBitmap.Create;
    bmp.width := PaintBox.width;
    bmp.height := PaintBox.Height;
    bmp.canvas.copyrect(PaintBox.canvas.Cliprect, PaintBox.Canvas, PaintBox.canvas.Cliprect);
    Printer.canvas.StretchDraw(bmp.Canvas.clipRect, bmp);
    bmp.Free;

  9. #9
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Merci beaucoup pour ton aide,

    c'est exactement ce que je souhaitais obtenir.

    A+.

  10. #10
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    J'y pense : Tu as une tres bonne unitee que j'ai trouvé sur torry.net.
    ALGraphic qui est tres bien pour gerer le redimenstionnement d'image avec alogs de lissage (un bon paquet au choix) tres legere et tres simple a utilisée, sans une multitude d'options dont on a rien a faire (cf Graphic32)

  11. #11
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Encore merci, j'y jeterais un coup d'oeil à l'occasion.

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    petite précision sur les canvas, ce ne sont que des outils pour dessiner, on ne peut donc pas assigner un canvas à un autre.

    quand on parle d'un Bitmap on se dit qu'il est possible de récupérer l'image...C'est vrai, mais c'est le bitmap qu'on copie, pas son canvas...essayez donc de recopier la page imprimée via le canvas de l'imprimante

    le principe est donc d'écrire un code qui s'appuie sur un canvas et de lui soumettre un canvas d'imprimante ou de bitmap ou de fiche selon l'endroit ou on veux écrire.

    j'ai par exemple un projet de SIG qui propose le dessin en temps réel -le canvas d'une fiche- ou pas, dessin sur le canvas d'un bitmap offline qui est ensuite directement recopié sur la fiche (même principe que le DoubleBuffered, sauf que je déclare le bitmap moi même pour éviter de le redessiner à chaque Paint).

  13. #13
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    c'est effectivement une des piste vers lequelles je me tourne a certains moments.

    A partir du moment ou le handle du canves peut etre attribué, j'ai compris que ce la liait l'objet canvas a la zone graphique de l'objet dont on transmet le Handle. Du coup, l'objet canvas ne contient pas le contenu graphique mais sert de boite a outils pour travailler sur une zone graphique.

    j'ai encore besoin d'un peu de temps pour effectuer quelques tests et comprendre un peu meux le shmilblick
    C'est encore nouveau comme approche pour moi

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

Discussions similaires

  1. créer une table avec des colonnes de types différents
    Par d_hazem dans le forum Composants
    Réponses: 1
    Dernier message: 15/01/2009, 15h23
  2. Jointure entre 2 tables avec des champs de types différents
    Par qltmi dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/11/2008, 20h58
  3. itération sur des objets de types différents ?
    Par jc63 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/09/2007, 08h19
  4. Réponses: 7
    Dernier message: 13/03/2006, 08h56
  5. stocker des valeurs de type différent
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2005, 09h36

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