Dessiner dans une PitcureBox

yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012 - 5 janv. 2012 à 07:15
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012 - 30 janv. 2012 à 14:43
Bonjour à tous,
J'ai une question sur mon application VB6.

Au jour d'aujourd'hui je bosse sur une application VB6 ou il y a une
fonction visuel pour voir une pièce en cours d'usinage.

Enfaîte on voit un brut "une pièce brut" puis un outil de coupe et en tant
réel la pièce se fait grignoter.



Tout se petit monde est représenté dans une PictureBox et à chaque déplacement je fais un clear puis je redessine la pièce, le brut, les traits d'axes etc... Vue que je fais cette manip des millions de fois je vous laisse imaginer comment l'appli ralenti.

Vous avez une autre solution sans faire un clear ? histoire de garder des choses fixes sans tout redessiner ?

Je ne peux pas utiliser direct X OpenGL ou autre car le pc ou l'appli tourne n'est pas assez puissant.

Merci de votre aide.

35 réponses

yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 07:34
La pas de soucis :


mais la :
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 07:36
Vue comme ça vous allez me dire de passer le fond de l'image en bleu ciel
mais il faut savoir que pour usiner je passe par dessus le fond gris mais
pas sur toute l'image donc je ne peux pas me permettre d'avoir une coloration
de fond :(

J'ai cherché sur le net et j'ai l'impression que c'est un problème connu
mais je n'ai pas trouvé de solutions :(
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 07:40
J'ai oublié de dire que mon image est en .gif avec de la transparence
mais VB ne je gère pas, si j'arrive a trouver comment faire de la transparence je suis sauvé
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 janv. 2012 à 07:41
Je m'orienterais vers le GDI+ et le PNG

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 07:55
J'en ai entendu parler, mais je ne trouve pas d'infos pour VB6 :(
C'est facile a utiliser ??
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 janv. 2012 à 08:38
oui, relativement simple.
puissant, en tous cas

voir :

http://www.vbfrance.com/codes/EXEMPLE-UTILISATION-GDI-DANS-VB6_39804.aspx


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 08:41
Merci bien
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 09:47
C'est chaud de se retrouver dans un exemple, il n'y a aucuns tutoriels ?
Ou personnes peut me donner un bout de code juste pour la transparence ?

Merci.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 janv. 2012 à 10:08
tu n'a pas grand chose a faire...
regarde mieux l'exemple en question:

DrawImage

permet de dessiner une image (PNG) a l'endroit voulu, en appliquant un degré de translucidité et un angle de rotation, eventuellement...

tu as juste a ajouter le ModImage.bas a ton projet
ajouter un peu de code pour initialiser GDI+

Et c'est tout... DrawImage bosse même a partir d'un hDC, il créé lui même directement le Graphics, ca fait deja ca a faire en moijns....


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 11:38
Ok, j'avais vue le cou de DrawImage mais c'est vrai que j'avais peur
de me mélanger les pinceaux... Merci pour l'explication je vais me plonger sur la question.
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 14:09
Bon je viens de réussir comme tu m'as dis de faire (sur une appli basic)
juste une chose, quand je stop le run de l'appli j'ai vb qui plante...
Je pense que je coupe pas le GDI c'est ça ?

dans mon code j'ai :

Dim hGdipToken As Long

Public Sub Boot_Main()
'Dim hGdipToken As Long
Dim lpSI As GdiplusStartupInput
    '# On allume GDI+
    '# Si on n'active/désactive pas GDI+ comme il faut, quand il faut, vous allez faire crasher votre VB.
    lpSI.GdiplusVersion = 1
    GdiplusStartup hGdipToken, lpSI
    Form1.Show vbModal
   ' GdiplusShutdown hGdipToken
End Sub

Public Sub shutdown()
'Dim hGdipToken As Long
GdiplusShutdown hGdipToken
End Sub

0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 janv. 2012 à 14:17
c'est même un peu plus complexe

c'est ton appli VB6 (vb6.exe) qui démarre GDI+
il n'a a le faire qu'une fois, même entre deux lancements de ton appli a toi

du coup, et pour faire simple (j'ai bien une solution, avec une creation de fenetre démon, avec injection Assembleur pour qu'elle gère le jeton gdi+ etc...)

il vaut mieux, dans ton cas, tant que ton appli n'est pas compilée, allumer et eteindre GDI+ a chaque fois que tu appelles DrawImage (ou dans le code de DrawImage)



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 14:19
Quand je vais compiler mon appli je ne vais pas avoir de plantage alors ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 janv. 2012 à 14:30
non...

Comme je te l'ai dit, lorsque tu allumes GDI+, un jeton est lié à VB6.exe

quand tu fais STOP, ca coupe tout direct

pas d'appel à :
GdiplusShutdown hGdipToken

quand tu relances, tu tentes de créer a nouveau un token GDI+
et là, pouf, tu risques de tout faire s'écrouler (assez certain, meme)

une possibilité est de récupérer le hWnd de la fenetre principale VB6.exe et de stoker (SetProp) le token dans une property

au 'second' lancement, tu checkes cette Property (GetProp) et tu regardes s'il faut ou non démarrer GDI+

un peu brutal, mais efficace, et finallement assez propre
(penser au SetProp /0 ou RemoveProp quand tu coupe GDI+...)


Assures toi bien au final a avoir ton appel a
GdiplusShutdown hGdipToken

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
yostone Messages postés 30 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 13 septembre 2012
30 janv. 2012 à 14:43
Merci
0
Rejoignez-nous