bbsoft
Messages postés4Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention26 juillet 2015 26 juil. 2015 à 12:21
Salutations,
Tout d'abord je te félicite pour ton travail et collaboration énorme que tu fais, je ne sais pas si tu consultes encore tes messages, mais je l'espère bien.
voilà: j'ai développé une application énorme qui m'a pris beaucoup d'années, dans ma fenêtre principale j'avais un menu déroulant style windows. quand j'ai vu tes boutons ++, j'ai eu l'idée de les utiliser comme menu principal.
j'ai beaucoup de bug (fenêtres blanches avec "... a cessé de fonctionner de windows 7".
ma question: est ce que le blocage est-il du aux boutons graphiques, si oui avez-vous une maj qui corrige le problème.
Merci et bonne continuation.
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 6 janv. 2010 à 22:56
bon, avec ces dernieres mises a jour, je trouve que ca a vraiment de la gueule ;)
j'atends vos critiques avec impassience.
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 5 janv. 2010 à 23:23
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 5 janv. 2010 à 13:31
pour le momment j'ai abandonné le principe d'utiliser une PictureBox
je me suis repenché sur le Usercontrol unique
originellement j'utilisait le DC du ".Parent" en fait je viens de voir que le ".Extender.Container" serrait déja mieux ^^
'#######################################################################################
Dim m_t As Long: m_t = UserControl.ScaleY(UserControl.Extender.Top, UserControl.Extender.Container.ScaleMode, vbPixels)
Dim m_l As Long: m_l = UserControl.ScaleX(UserControl.Extender.Left, UserControl.Extender.Container.ScaleMode, vbPixels)
Dim Res1 As Long
Res1 = BitBlt(UserControl.hDC, 0, 0, UserControl.ScaleWidth, UserControl.ScaleHeight, _
UserControl.Extender.Container.hDC, m_l, m_t, _
vbSrcCopy)
'#######################################################################################
la solution que j'envisage n'ai a mon avis pas tres propre mais voyons voir quand même ^^ :
- faire la liste des contrôls contenus par le conteneur.
- trouver les Plans (qui est au dessus de qui)
- récupérer les dc de chacun (pour ceux présents sur la zone souhaitée)
- ajouter chaque dc successivement
Ainsi, on retrouverait bien l'arriere plan
premiere chose sur laquelle je bloque : connaitre les diférentes position (plan) des composants les uns par rapport aux autres. Ceci dans la mesure ou il semblerait que le ZOrder est un "Sub" et non un "Property"
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 5 janv. 2010 à 09:31
pour le fond, le "truc" c'est que le parent ne dessine pas la zone située sous le UserControl.
ca permet de s'economiser cela (voir ClipRegion, pour de la théorie)
tu as bien un moyen, c'est de demander un DC particulier, n'incluant pas de ClipRegion
voir GetDCEx
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 5 janv. 2010 à 09:24
bon ben apparament c'est caduc comme méthode ;(
en effet, on récupère bien le fond uniquement si rien ne recouvre le composant
et justement moi je le recouvre avec une PictureBox ;(
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 5 janv. 2010 à 08:21
'###########################################################################################
Dim DC1 As Long: DC1 = GetDC(0)
Dim DC2 As Long: DC2 = GetDC(0)
Dim vDC As Long: vDC = CreateCompatibleDC(DC1)
Dim vBMP As Long: vBMP = CreateCompatibleBitmap(DC2, Fond.ScaleWidth, Fond.ScaleHeight)
Dim holdBMP As Long: holdBMP = SelectObject(vDC, vBMP)
'###########################################################################################
Dim Res0 As Long
Res0 = BitBlt(vDC, 0, 0, Fond.ScaleWidth, Fond.ScaleHeight, _
UserControl.hDC, 0, 0, _
vbSrcCopy)
'------------------------------------------------------
Dim Res1 As Long
Res1 = BitBlt(Fond.hDC, 0, 0, Fond.ScaleWidth, Fond.ScaleHeight, _
vDC, 0, 0, _
vbSrcCopy)
'###########################################################################################
Call SelectObject(vDC, holdBMP): Call DeleteObject(vBMP)
Call DeleteDC(vDC)
Call ReleaseDC(0, DC2)
Call ReleaseDC(0, DC1)
'###########################################################################################
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 5 janv. 2010 à 07:51
;) une bonne baffe ca remet les idées de temps en temps. merci renfield ^^
je me suis pris la tête toute la soirée a essayer de coder ceci et sans succès :* mettre le Usercontrol transparent (avec maskcolor gris et BackColor gris)
* placer un picturBox nomé fond sur le usercontrol
ainsi, le hDC du Usercontrol devrai contenir exactement ce qu'il y a dessous. (ce que je devrai utiliser pour la transparence)
je redimensionne le "Fond" aux dimensions du Usercontrol puis j'effectue les oppérations graphiques par API. mais rien n'y fait je n'arrive a rien. Le "Fond" reste vierge.
voici le code en question :
'######################################################################################
Dim DC1 As Long: DC1 = GetDC(0)
Dim vDC As Long: vDC = CreateCompatibleDC(DC1)
Dim hOldBmp As Long: hOldBmp = SelectObject(vDC, Fond.Picture.Handle)
Call SelectObject(hDC, hOldBmp)
Call DeleteDC(hDC)
Call ReleaseDC(0, DC1)
'######################################################################################
ce bout de code a pour but de rendre le Fond aussi transparent que le Usercontrol. Pas tres util en soit mais c'est juste pour les tests.
Y a t-il des propriétés a paramétrer ? je pense tout particulierement aux "Autorodraw"
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 5 janv. 2010 à 07:19
"Je doit pouvoir utiliser le Usercontrol.ContainerHwnd mais je ne sais pas comment récupérer le DC avec."
euh... tu utilises GetDC dans ton code, documente toi sur cette fonction ^^
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 4 janv. 2010 à 17:35
bonjour ^^
en effet le double clik n'est pas pris en charge dans la mesure ou c'est un bouton et que personnellement je n'utilise pas de double click dessus ^^
enfin, je l'ajouterais, ca ne devrait pas être trop dur a faire.
"
mets une image dans une picturebox au milieu de ta form
un bouton dans ta box
tada....
tu fais ta transparence avec ce qui est en dessous sans prendre en compte que ce n'est pas forcément la form
résultat left 0 top 0, ce qui est très souvent faux
"
dsl je ne comprends pas ^^
pour faire la transparence je récupère le DC de Usercontrol.Parent et ca ne doit pas être le bon choix. En effent non seulement le .parent.DC n'est pas le conteneur mais le la form d'origine de la hierarchie. Je doit pouvoir utiliser le Usercontrol.ContainerHwnd mais je ne sais pas comment récupérer le DC avec.
deplus, si on y réfléchi, il ne faudrait pas utiliser le DC qui ne concerne qu'un control et non pas tous ce qui est dessus ;(
je suis un petit peut perdu...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 4 janv. 2010 à 15:46
salut,
mets une image dans une picturebox au milieu de ta form
un bouton dans ta box
tada....
tu fais ta transparence avec ce qui est en dessous sans prendre en compte que ce n'est pas forcément la form
résultat left 0 top 0, ce qui est très souvent faux
pas regardé le reste, l'effet de dessin semble très long et le double click ne semble pas pris en compte
ps : une source posté peut être "mise à jour", celle-ci correspondrait non?
26 juil. 2015 à 12:21
Tout d'abord je te félicite pour ton travail et collaboration énorme que tu fais, je ne sais pas si tu consultes encore tes messages, mais je l'espère bien.
voilà: j'ai développé une application énorme qui m'a pris beaucoup d'années, dans ma fenêtre principale j'avais un menu déroulant style windows. quand j'ai vu tes boutons ++, j'ai eu l'idée de les utiliser comme menu principal.
j'ai beaucoup de bug (fenêtres blanches avec "... a cessé de fonctionner de windows 7".
ma question: est ce que le blocage est-il du aux boutons graphiques, si oui avez-vous une maj qui corrige le problème.
Merci et bonne continuation.
6 janv. 2010 à 22:56
j'atends vos critiques avec impassience.
5 janv. 2010 à 23:23
cependant, je ne comprends pas les paramaitres a utiliser .
dois-je me placer du côté du composant en demandant son parent ou bien au niveau du parent et demander les enfants. en tous les cas je n'arrive pas a ne pas avoir le composant lui même.
ce qui au final fait que ca ne marche pas.
5 janv. 2010 à 13:31
je me suis repenché sur le Usercontrol unique
originellement j'utilisait le DC du ".Parent" en fait je viens de voir que le ".Extender.Container" serrait déja mieux ^^
'#######################################################################################
Dim m_t As Long: m_t = UserControl.ScaleY(UserControl.Extender.Top, UserControl.Extender.Container.ScaleMode, vbPixels)
Dim m_l As Long: m_l = UserControl.ScaleX(UserControl.Extender.Left, UserControl.Extender.Container.ScaleMode, vbPixels)
Dim Res1 As Long
Res1 = BitBlt(UserControl.hDC, 0, 0, UserControl.ScaleWidth, UserControl.ScaleHeight, _
UserControl.Extender.Container.hDC, m_l, m_t, _
vbSrcCopy)
'#######################################################################################
la solution que j'envisage n'ai a mon avis pas tres propre mais voyons voir quand même ^^ :
- faire la liste des contrôls contenus par le conteneur.
- trouver les Plans (qui est au dessus de qui)
- récupérer les dc de chacun (pour ceux présents sur la zone souhaitée)
- ajouter chaque dc successivement
Ainsi, on retrouverait bien l'arriere plan
premiere chose sur laquelle je bloque : connaitre les diférentes position (plan) des composants les uns par rapport aux autres. Ceci dans la mesure ou il semblerait que le ZOrder est un "Sub" et non un "Property"
5 janv. 2010 à 09:31
ca permet de s'economiser cela (voir ClipRegion, pour de la théorie)
tu as bien un moyen, c'est de demander un DC particulier, n'incluant pas de ClipRegion
voir GetDCEx
5 janv. 2010 à 09:24
en effet, on récupère bien le fond uniquement si rien ne recouvre le composant
et justement moi je le recouvre avec une PictureBox ;(
5 janv. 2010 à 08:21
Dim DC1 As Long: DC1 = GetDC(0)
Dim DC2 As Long: DC2 = GetDC(0)
Dim vDC As Long: vDC = CreateCompatibleDC(DC1)
Dim vBMP As Long: vBMP = CreateCompatibleBitmap(DC2, Fond.ScaleWidth, Fond.ScaleHeight)
Dim holdBMP As Long: holdBMP = SelectObject(vDC, vBMP)
'###########################################################################################
Dim Res0 As Long
Res0 = BitBlt(vDC, 0, 0, Fond.ScaleWidth, Fond.ScaleHeight, _
UserControl.hDC, 0, 0, _
vbSrcCopy)
'------------------------------------------------------
Dim Res1 As Long
Res1 = BitBlt(Fond.hDC, 0, 0, Fond.ScaleWidth, Fond.ScaleHeight, _
vDC, 0, 0, _
vbSrcCopy)
'###########################################################################################
Call SelectObject(vDC, holdBMP): Call DeleteObject(vBMP)
Call DeleteDC(vDC)
Call ReleaseDC(0, DC2)
Call ReleaseDC(0, DC1)
'###########################################################################################
5 janv. 2010 à 07:51
je me suis pris la tête toute la soirée a essayer de coder ceci et sans succès :* mettre le Usercontrol transparent (avec maskcolor gris et BackColor gris)
* placer un picturBox nomé fond sur le usercontrol
ainsi, le hDC du Usercontrol devrai contenir exactement ce qu'il y a dessous. (ce que je devrai utiliser pour la transparence)
je redimensionne le "Fond" aux dimensions du Usercontrol puis j'effectue les oppérations graphiques par API. mais rien n'y fait je n'arrive a rien. Le "Fond" reste vierge.
voici le code en question :
'######################################################################################
Dim DC1 As Long: DC1 = GetDC(0)
Dim vDC As Long: vDC = CreateCompatibleDC(DC1)
Dim hOldBmp As Long: hOldBmp = SelectObject(vDC, Fond.Picture.Handle)
Call BitBlt(hDC, 0, 0, Fond.Width, Fond.Height, UserControl.hDC, m_top, m_left, vbSrcCopy)
Call SelectObject(hDC, hOldBmp)
Call DeleteDC(hDC)
Call ReleaseDC(0, DC1)
'######################################################################################
ce bout de code a pour but de rendre le Fond aussi transparent que le Usercontrol. Pas tres util en soit mais c'est juste pour les tests.
Y a t-il des propriétés a paramétrer ? je pense tout particulierement aux "Autorodraw"
5 janv. 2010 à 07:19
euh... tu utilises GetDC dans ton code, documente toi sur cette fonction ^^
4 janv. 2010 à 17:35
en effet le double clik n'est pas pris en charge dans la mesure ou c'est un bouton et que personnellement je n'utilise pas de double click dessus ^^
enfin, je l'ajouterais, ca ne devrait pas être trop dur a faire.
"
mets une image dans une picturebox au milieu de ta form
un bouton dans ta box
tada....
tu fais ta transparence avec ce qui est en dessous sans prendre en compte que ce n'est pas forcément la form
résultat left 0 top 0, ce qui est très souvent faux
"
dsl je ne comprends pas ^^
pour faire la transparence je récupère le DC de Usercontrol.Parent et ca ne doit pas être le bon choix. En effent non seulement le .parent.DC n'est pas le conteneur mais le la form d'origine de la hierarchie. Je doit pouvoir utiliser le Usercontrol.ContainerHwnd mais je ne sais pas comment récupérer le DC avec.
deplus, si on y réfléchi, il ne faudrait pas utiliser le DC qui ne concerne qu'un control et non pas tous ce qui est dessus ;(
je suis un petit peut perdu...
4 janv. 2010 à 15:46
mets une image dans une picturebox au milieu de ta form
un bouton dans ta box
tada....
tu fais ta transparence avec ce qui est en dessous sans prendre en compte que ce n'est pas forcément la form
résultat left 0 top 0, ce qui est très souvent faux
pas regardé le reste, l'effet de dessin semble très long et le double click ne semble pas pris en compte
ps : une source posté peut être "mise à jour", celle-ci correspondrait non?