Salut!
Est-il possible de récupérer le dessin contenu dans une fenêtre sans que celle-ci soit obligatoirement au 1er plan ?
Si oui, comment ?
Merci d'avance
Salut!
Est-il possible de récupérer le dessin contenu dans une fenêtre sans que celle-ci soit obligatoirement au 1er plan ?
Si oui, comment ?
Merci d'avance
C'est juste une piste
Tu peux chercher du coté de GetDC( HandleHote)
pour obtenir le handle de la zone de dessin,
et après... je sais pas, mais je pense que c'est une piste
Section Delphi
La mine d'or: La FAQ, les Sources
Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
Notre revanche ? l'inverse est aussi vrai ;-)
et après... Tu affectes ce DC à la propriété Handle d'un TCanvas créé manuellement. Ne pas oublier d'appeler ReleaseDC lorsque ton travail est terminé.
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.
Merci pour vos réponses.
Le problème est que j'obtiens une "capture" du bureau de la fenêtre, c'est-à- dire que si une autre fenêtre la superpose, je me retrouve avec une image contenant les 2 fenêtres. Je recherche le moyen de récupérer l'image d'une fenêtre dont je connais le handle même si celle-ci est cachée par une autre, j'espère simplement que cela soit possible au moins.
Merci
Bonjour,
Je pense que dans ce cas il est préférable d'utiliser GetDCEx qu'il permet d'éviter les problèmes de clipping sur la zone client.
A lire chez MSDN:
http://msdn.microsoft.com/library/de...vcons_76wo.asp
@+ Claudius
Merci Claudius40 ! Ça semble être le fonction recherchée excepté que je n'arrive pas à l'utiliser comme il faudrait. J'ai essayé plusieurs paramètres, rien n'y fait...![]()
Le code ci-dessous fonctionne bien excepté qu'il capture aussi les fenêtres qui sont superposées... Pourtant, j'utilise la fonction CopyWindowRectToBitmap qui a été donnée plus haut :
Merci de votre aide!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TForm1.Timer1Timer(Sender: TObject); var bmp : TBitmap; begin bmp:=TBitmap.Create; bmp.Width := form1.Width; bmp.Height := form1.Height; bmp.PixelFormat := pf32bit; CopyWindowRectToBitmap(windowFromPoint(mouse.CursorPos), bmp); form1.Canvas.Draw(0,0,bmp); bmp.Free; end;
Je me suis permis de "retravailler" ton projet, la capture d'écran fonctionne maintenant.
La technique n'est pas aussi sophistiquée que la tienne mais elle fonctionne pour tout les Windows depuis Windows95![]()
J'aurais bien aimer utiliser ta méthode, mais lorsqu'on éxécute plusieurs fois ton programme et qu'on déplace une fenêtre sur une autre, la partie "transparence" devient opaque...![]()
Peut-être aurais-tu une solution pour ce problème.
Salut!
Je suis enfin arrivé à qq chose en m'inspirant de ton code, seulement ça saccade... En tous les cas, la loupe fonctionne cette fois et la fenêtre est bien restaurer si une autre fenêtre modifie le canvas :
http://sub0.developpez.com/delphi/alphaform4.zip
J'espère trouver le moyen d'accélerer le traitement tout en conservant le fonctionnement.
Merci
Je crois bien que tu devrais utiliser
BitBlt avec le parametre CAPTUREBLT avec ton programme de loupe....
je crois même qu'il nous faudra tous changer nos facons de faireEnvoyé par MSDN
des captures d'écran de cette facon ...
puisque la semi-transparence deviendra à la mode...
c'est notre désignerBill et l'arrivé de vista qui nous y forcera un peu...
![]()
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
Partager