FORMES EN DÉGRADÉES

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 6 mai 2010 à 09:50
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017 - 17 mai 2010 à 21:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51729-formes-en-degradees

artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
17 mai 2010 à 21:22
Bonsoir FLOCREATE,

Tu as contribué à mettre une pierre sur mon goban. C'est une situation de Ko.

Cordialement, JML
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
17 mai 2010 à 21:06
bien au contraire j'en suis très honoré ^_^
pour information le personnage représenté par mon avatar se nomme saï (Hikaru No Go)
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
17 mai 2010 à 17:39
Re-FLOCREATE

Je viens de mettre à jour le programme sur le site. Je me suis permis de faire un clin d'œil graphique dans l'interface te concernant. Si d'aventure tu souhaite que je retire ce que j'ai fait, pas de problème.

Cordialement, JML
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
17 mai 2010 à 15:19
Bonjour FLOCREATE,

Je me doutais un peu de la réponse, j'ai effectivement passé les paramètres en dur...... Bon je vais corriger cela.

Cordialement, JML
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
17 mai 2010 à 07:47
et bien, cette API permet de connaitre la position sur l'ecran et la dimension d'un contrôle a partir de son handle et ceci en Pxl.

je ne sais pas ce que tu as mis comme parametres en appel à ma fonction, mais si tu as mis des valeurs en dur en te disant que ce serra toujours comme ca, il y a des chances pour que ca ne marche pas sur tous les PC.
En effet, il suffit que l'utilisateur deplace la fenetre ou ai une résolution diférente de la tienne pour que ce ne soit plus en phase.
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
16 mai 2010 à 23:05
Bonsoir FLOCREATE

J'ai copié ton travail dans l'application actuelle, PARFAIT pour l'utilisation que j'en fait actuellement. Aucun problème de fonctionnement.D'autre part, je n'ai pas utilisé l'API getwindowRect(hwnd), pour l'instant je n'en vois pas l'utilité ou tout simplement à quoi elle peut bien servir!!

Cordialement, JML

PS: J'ai trouvé ceci sur le NET, mais j'imagine que cela n'a pas de secret pour toi : http://docvb.free.fr/api.php
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
15 mai 2010 à 17:05
a ba voui, les shappes ne sont pas dessinées dans le pictureBox mais dessus...
donc tu peux utiliser la fonction que je t'ai donnée
pour avoir la position de ta picture box utilise l'API getwindowRect(hwnd)

enfin, maintenant que tu es au taquet sur les DCs et les Bitmaps, tu peux refaire ta partie de déssin uniquement avec les API de Device context et du coup tout serra contenu par la picturebox

bonne continuation ^^
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
14 mai 2010 à 16:25
Euh!!! Coup,coup, FLOCREATE,

J'ai bien un pictureBox : PctDessin dans lequel je dessine des Shapes avec effets de couleurs ou non. Le but est de placer uniquement le résultat final le l'objet pictureBox dans le presse-papier. La commande Clipboard.SetData ne prend en compte uniquement l'image placée dans celle-ci à la création ou en cour d'exécution en ayant soin de donner la source.

Est-ce que ça t'éclaire???? JML :)
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
14 mai 2010 à 15:41
Toujours pour FLOCREATE,

Bon après ces nombreuses informations vous n'allez pas me voir beaucoup, tout cela me donne un boulot considérable pour mes petits neurones. (J'ai trouvé dans certains sources des explications en français sur 20 API dont certaines que tu utilise)

Encore MERCI de ta générosité.

Cordialement, JML
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 15:21
bon, pour en revenir à ton programme (parsque avec mes grands chevaux je me suis un peu éloigné ^^)

toi tu as un pictureBox : PctDessin
Tu souhaite mettre quoi dans le presse papier exactement ?
Si tu souhaite mettre toute l'image de la picturebox, tu as juste besoin de l'a fonction déja gérée par VB :
VB.Clipboard.SetData (PctDessin.Picture)
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 15:04
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 14:56
miss, g oublié de retiré la partie de debug ou j'utilisai une picturebox ^^
il faut retirer

'copier l'image sur la picture box
res = BitBlt(P.hdc, 0, 0, W, H, DC, x, y, vbSrcCopy)
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 14:54
bon ben voila la solution "qui marche"

Option Explicit

'déclaration des API pour le Device Context
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

'déclaration des API pour le presse papier
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Const CF_BITMAP = 2
Private Declare Function CloseClipboard Lib "user32" () As Long

Public Function Copier_Presse_Papier(x As Long, y As Long, W As Long, H As Long, hwnd As Long) As Boolean
On Error GoTo erreur

'initialisation pour les API de Device Context
Dim DC As Long
DC = GetDC(0)
If (DC = 0) Then GoTo erreur

Dim vDC As Long
vDC = CreateCompatibleDC(DC)
If (vDC = 0) Then GoTo erreur

Dim BMP As Long
BMP = CreateCompatibleBitmap(DC, W, H)
If (BMP = 0) Then GoTo erreur

Dim holdBMP As Long
holdBMP = SelectObject(vDC, BMP)
'----------------------------------------------

'copier l'image depuis l'écran (DC(0) dans le bitmap
Dim res As Long
res = BitBlt(vDC, 0, 0, W, H, DC, x, y, vbSrcCopy)
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué

'copier l'image sur la picture box
res = BitBlt(P.hdc, 0, 0, W, H, DC, x, y, vbSrcCopy)
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué

'mettre l'image dans le press papier
res = OpenClipboard(hwnd)
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué
res = EmptyClipboard
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué
res = SetClipboardData(CF_BITMAP, BMP)
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué
res = CloseClipboard
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué

'destruction propre pour les API de Device Context
Call SelectObject(vDC, holdBMP)
Call DeleteObject(BMP)
Call DeleteDC(vDC)
Call ReleaseDC(0, DC)
'----------------------------------------------

Copier_Presse_Papier = True
Exit Function
erreur:
Copier_Presse_Papier = False
End Function

exemple d'appelle de la contion :
Call Copie_presse_papier(0,0,100,100,Me.hwnd) 'depuis une fenêtre évidement
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 14:30
'déclaration des API utiles pour le Device Context
'http://edais.mvps.org/Tutorials/GDI/DC/index.html
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Public Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Public Declare Function BitBlt Lib "gdi32" ( _
ByVal hDestDC As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal dwRop As Long _
) As Long

Public Function Copier_Presse_Papier(X As Long, Y As Long, W As Long, H As Long, P As PictureBox) As Boolean
'On Error GoTo erreur

'initialisation pour les API de Device Context
Dim DC As Long
DC = GetDC(0)
Dim vDC As Long
vDC = CreateCompatibleDC(DC)
Dim BMP As Long
BMP = CreateCompatibleBitmap(DC, W, H)
Dim holdBMP As Long
holdBMP = SelectObject(vDC, BMP)
'----------------------------------------------

'copier l'image depuis l'écran (DC(0) dans le bitmap
Dim res As Long
res = BitBlt(vDC, 0, 0, W, H, DC, X, Y, vbSrcCopy)
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué

'copier l'image sur la picture box
res = BitBlt(P.hDC, 0, 0, W, H, DC, X, Y, vbSrcCopy)
If (res = 0) Then GoTo erreur 'l'appel de l'API a échoué

'mettre l'image dans le press papier
Dim iP As New StdPicture
iP.Handle = BMP
VB.Clipboard.SetData iP
Set iP = Nothing

'destruction propre pour les API de Device Context
Call SelectObject(vDC, holdBMP)
Call DeleteObject(BMP)
Call DeleteDC(vDC)
Call ReleaseDC(0, DC)
'----------------------------------------------



' Dim P As IPictureDisp
' Call VB.Clipboard.SetData(P)


Copier_Presse_Papier = True
Exit Function
erreur:
Debug.Assert False 'point d'arret pour le debugage
Copier_Presse_Papier = False
End Function

bon avec ca ca commence a marcher. (la picture box doit avoir autoredraw pour que ce soit affiché.
il ne manque plus qu'a savoir comment a partir de mon handl BMP je le met dans le presse papier. Je pense qu'il va falloir passer par un IpictureDisp ou un StdPicture
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 14:28
cette blague ^^ je les ai encore d'ouvert au format PDF
je te les ai uploadés ici (sur toute demande des "ayant droit" la copie serra retirée):
https://www.zumodrive.com/share/5hzxMTE0Ym?source=yahoo
https://www.zumodrive.com/share/5hzwNGQ2Nj?source=yahoo
https://www.zumodrive.com/share/5hzyYzJhYm?source=yahoo
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
14 mai 2010 à 14:10
Re-bonjour FLOCREATE,

Aprés avoir testés tous tes liens voilà la réponse:

Service Unavailable

Bon je vais patienter...................................... 8)
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
14 mai 2010 à 14:01
Bonjour FLOCREATE,

Merci pour ta réponse, je vais aller voir tes liens et j'utiliserais Google traduction pour avoir une petite idées.
Dans tous les cas je me doutais que c'était avec les API(s) de "vingt doses". Bon j'y vais.

Cordialement, JML
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 13:30
A j'ai enfin retrouvé les liens (forcément c pas eDay mais eDais ^^)

le sommaire :
http://edais.mvps.org/

les DC :
http://edais.mvps.org/Tutorials/GDI/DC/index.html

les DDB :
http://edais.mvps.org/Tutorials/GDI/DDB/index.html

les DIBs :
http://edais.mvps.org/Tutorials/GDI/DIB/index.html

je suis désolé mais c en anglais ^^
ceci dit c'est super intéressant (de toute façon moi tout m'intéresse alors ^^).
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2010 à 13:21
bonjour a tous,
je n'ai pas été la pendant quelques temps ^^ désolé

Je ne suis pas certain de ce que j'avance mais il me semble que le print screen prends l'image de l'écran, le met sous forme de bitmap et le met dans le clipboard.

L'idée que je te propose est de faire le boulot à sa place : à savoir faire toi même le bitmap et le mettre dans le presse papier.

Maintenant, en ce qui concerne les Device Context et les bitmap, c'est l'utilisation d'API windows. Il y a une suite de tutoriel très bien faits "eDays Device Context" mais je n'arrive pas à mettre la main dessus.

Dès que j'ai remis la main sur ces PDF je te donne les adresses.
De toutes les manières, je vais plancher sur le sujet. Tu as mis mon moi en émois. Je vais essayer de faire une source permetant de mettre dans le presse papier l'image que l'on veut.
A très bientôt
cs_gridha Messages postés 28 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 23 septembre 2010
11 mai 2010 à 19:49
merci pour le zip
l'application est interessante
a voir comment l'integrer dans une application vb6
bonne continuation
gridha
YahyaHajji Messages postés 5 Date d'inscription lundi 29 décembre 2008 Statut Membre Dernière intervention 19 juillet 2010
11 mai 2010 à 02:06
Merci Beaucoup
C'est réglé pour le zip
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
10 mai 2010 à 21:38
Bonsoir YAHYAHAJJI et GRIDHA

Je suis comme vous je ne comprend pas ce qui se passe?
Mais je vais refaire immédiatement un ZIP. Me prévenir et prévenir un administrateur si le problème persiste.
A tout de suite.......

Cordialement, JML

Ps: désolé pour ce désagrément.
cs_gridha Messages postés 28 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 23 septembre 2010
10 mai 2010 à 21:13
salut artgile
je ne peux pour le moment ni donner un avis ni mettre en application à défaut de zip
prière mettre le zip ou détailler le code
je n'arrive pas a le recopier sur le presse papier
merci de ta contribution
YahyaHajji Messages postés 5 Date d'inscription lundi 29 décembre 2008 Statut Membre Dernière intervention 19 juillet 2010
10 mai 2010 à 20:06
Salut
où est le fichier zip?
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
7 mai 2010 à 10:19
Bonjour FLOCREATE

J'ai recherché des infos sur ton "Device context" elles sont expliquées pour le langage C++ et non en VB6. Alors dit moi comment tu fais dans VB6!!!!

Cordialement, JML
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
6 mai 2010 à 19:54
Pour SHAYW

Concernant la copie d'écran, j'utilise depuis toujours cette fabuleuse touche "PrtSc" qui d'une part, ne nécessite aucune ligne de programmation et d'autre part facilement utilisable dans toutes les applications reconnaissant la séquence des touches "Ctrl V". Moyennant inévitablement un simple Paint, cela est désopilant.
Certe, presque génial, mais des-lors que l'on souhaite mettre une cerise sur le gâteau dans une application, la chose devient plus complexe,ardue pour un juvénile comme moi. Dans tous les cas de figure, en graphisme par exemple, il y a une très grande manipulation des images, alors alors, alors et bien, c'est pour le FUN, comme disent les Jeun's.

Cordialement, JML

Ps: j'attends malgré tout une information assez détaillée, dont, j'en suis certain, viendra avant le couchant...
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
6 mai 2010 à 16:16
Bonjour FLOCREATE,

Tout d'abord, merci de prendre le temps de répondre.....
Concernant tes conseils, si j'ai bien compris, c'est un rectangle élastique dans la zone de travail. Bien, bien, bien
je suis un bleu de chez bleu, qu'est-ce "Device Context"????
Comment manipuler du "BitMap", je n'est jamais réalisé cela, je ne sais quelle syntaxe utilisé , les mots pour l'écrire, etc, etc...Bref je suis une crêpe Bretonne (d'ailleurs il fait gris en ce moment en Bretagne).

Tu as, sans aucun doute, une excellente réponse à me faire à ce sujet......UN DIT QUELQUE CHOSE

Cordialement, JML

Ps: je vais allé voir ton travail...GnenGnenGnenGnen
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
6 mai 2010 à 15:10
Pour ma part je te déconsceil l'emploie du print screen.
Je te consceillerai plutôt de jouer avec des Device Context & BitMap afin de saisir uniquement ce qui t'intéresse et ensuite de le passer dans le clipbord

Comme si tu étais dans "msPaint". Tu ne copie que ce qui est sélectionné. ^^
Sinon, c'est un bon travail.
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 mai 2010 à 14:53
Pourquoi pas tout simplement appuyé la touche prntscrn
et ensuite avec le passer au paint
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
6 mai 2010 à 14:18
Cher SHAYW

C'est super, oui vraiment SUUUUUUUPEEEEER, MAIS je ne connais pas l'anglais, tu comprends ? (*$š£kIU_"'_èdjhf°), même en devinant cela reste très risqué. C'était sympa d'essayer.

Cordialement, JML
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 mai 2010 à 12:50
A propos de la copie d'écran ta question à déja été posée
http://www.codenewsgroups.net/group/microsoft.public.vb.general.discussion/topic12811.aspx
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 mai 2010 à 11:03
A propos de minimize ta form est défini avec bordersytle = none donc si j'écris FrmGene.WindowState = vbMinimized
la form va etre minimisé mais le border ne va pas apparaitre
en bas de l'écran.J'ai vérifié en changeant le frGen.bordersyle
= fixed single ou sizable.
A propos de copie d'écran je n'ai pas encore de réponse
artgile Messages postés 61 Date d'inscription mercredi 20 janvier 2010 Statut Membre Dernière intervention 26 juin 2017
6 mai 2010 à 10:16
Bonjour SHAYW,

Concernant le premier point je vais voir ce que je ferais. Mais je souhaite garder cette entrée en matière pour le plaisir.

Pour le deuxième point, là je ne vois pas comment résoudre ce problème, car moi tout se passe bien.

D'autre part, connais-tu le moyen de réaliser une copie d'écran de la zone de travail uniquement. Il s'agit d'un objet Image dans lequel les objets Shapes sont crées.

Cordialement, JML

Ps: Merci de ton attention
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 mai 2010 à 09:50
1 C'est pas mal mais ça serait mieux si les tools bar apparaissaient directement sans cliquer sur l'ellipse
2 Le minimize ne fonctionne pas je ne vois pas l'indicateur
en bas de l'écran
Rejoignez-nous