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
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
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.
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).
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; }
À bientôt
Gilles
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).
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager