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 :

Accéder au canvas complet d'un TScrollBox


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 60
    Par défaut Accéder au canvas complet d'un TScrollBox
    Bonjour aux delphistes !

    j'ai un TPaintBox dans un TScrollbox. Le dessin peut-être plus grand que ma form, donc je scrolle le PaintBox qui est en alignement Client.
    Le problème est que maintenant je veux l'imprimer ce dessin.
    j'ai essayer pas mal de chose et le CopyRect semble assez bien sauf que le canvas de destination, qui fait la même taille que mon PaintBox, reçoit la partie visible de mon dessin et les contrôles qui sont à côté. Comme si j'avais fait une bete copie d'écran.
    Or voilà ma commande: TraceBitmap.Canvas.CopyRect(TraceRect,PaintTrace.Canvas,PaintTrace.ClientRect);
    PaintTrace étant le PaintBox et TraceBitmap, un récipient temporaire TBitmap.
    Je pensais que le canvas du paintbox contenait tout le dessin et pas que la partie visible .... et ben non .... ou alors je fais une connerie....

    A vos claviers mes amis...
    et merci d'avance

    Peck

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Ben non. L'avantage du TPaintBox (pour la rapidité) c'est justement qu'il ne traite que ce qu'il doit effectivement afficher.

    Reprends le code de PaintBox.OnPaint, et place-le dans une méthode qui accepte le canvas de destination. Puis réutilise cette méthode en lui passant le canvas de TraceBitmap, ou je ne sais quoi d'autre.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 60
    Par défaut
    Merci;

    j'ai donc redirigé mon dessin dans un canvas de tbitmap.
    Il y a un autre souci, lorsque j'exécute le Printer.canvas.draw, c'est blanc.
    j'ai rusé en sauvegardant l'image bmp, la recharger et l'imprimer, et ça marche.
    Il me semble pas normal de faire comme ça. Il doit y avoir un procédure au niveau du tbitmap qui fixe le dessin en mémoire, comme peut faire un 'flush' au niveau des fileStream par exemple. mais je vois pas ça dans l'aide de la classe.

    une idée ?

Discussions similaires

  1. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  2. action APRES chargement complet ...
    Par PinGuy dans le forum Delphi
    Réponses: 7
    Dernier message: 06/07/2006, 17h16
  3. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  4. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37
  5. Réponses: 2
    Dernier message: 17/05/2002, 20h37

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