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 :

Comment copier un Panel dans la PressePapier [Trucs & Astuces]


Sujet :

C++Builder

  1. #1
    Membre habitué
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Points : 136
    Points
    136
    Par défaut [RESOLU]Comment copier un Panel dans la PressePapier
    J'ai un Panel comprenant des boutons et images et je voudrais copier cet ensemble dans la Clipboard (en image). Quelqu'un peut me donner un coup de main,

    Merci d'avance

  2. #2
    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
    Je crois qu'il faut recopier à la main le contenu du TPanel dans un bitmap et faire un Assign du bitmap pour le clipboard.

    Mettez un bouton à côté du Panel, sur clic du bouton, on recopie le contenu du TPanel sous forme de bitmap dans le ClipBoard. Vous pouvez ensuite le coller par exemple sous Word en tant qu'image.

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int i, j , x , y , w ,h, dw, dh;
    Graphics::TBitmap* BM;
    HDC Ecran;
     
    dw=Form1->Width-Form1->ClientWidth-4;
    dh=Form1->Height-Form1->ClientHeight-4;
     
    x=Form1->Left+Panel1->Left+dw;
    y=Form1->Top+Panel1->Top+dh;
    w=Panel1->Width;
    h=Panel1->Height;
     
    Ecran = GetWindowDC(GetDesktopWindow()) ;
    BM=new Graphics::TBitmap();
    BM->Width=w;
    BM->Height=h;
     
    for(i=0;i<w;i++)
    for(j=0;j<h;j++)
    BM->Canvas->Pixels[i][j] = (TColor)GetPixel(Ecran,x+i,y+j);
     
    Clipboard()->Assign(BM);
    delete BM;
    }
    Il y a un petit réglage à faire. Si on recopie la forme entière, les coordonnées Form1->Left et Form1->Top sont fiables mais s'il l'on cherche les coordonnées exactes d'un composant dans la forme, il y a un petit décalage. Il y a déjà une différence entre Width et ClientWidth mais ça ne suffit pas, j'ai dû ajuster avec -4 pixels (dw, delta width, et idem pour height).

    À bientôt
    Gilles

  3. #3
    Membre habitué
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Points : 136
    Points
    136
    Par défaut
    Merci, ça marche !

    Je me permets de remplacer les copies Pixels par:

    BitBlt(BM->Canvas->Handle, 0, 0, w, h, GetDC(GetDesktopWindow()), x, y, SRCCOPY);

    Visiblement, ça va plus vite (je ne sais pas s'l y a des inconvénients).

  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
    Oui, c'est bien plus élégant, je ne connaissais pas BitBlt, c'est très efficace. Merci à vous pour cette information.

    À bientôt
    Gilles

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

Discussions similaires

  1. Comment copier un TGraphicField dans un TImage ?
    Par psidonio dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/10/2005, 16h31
  2. [Système] Comment copier un fichier dans le presse papier ?
    Par le y@m's dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 19/09/2005, 12h03
  3. Réponses: 4
    Dernier message: 17/06/2005, 10h09
  4. Comment Copier une table dans un fichier?
    Par thx2003 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2003, 12h09
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

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