Passage ByRef incompatible

- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 15 nov. 2016 à 20:39
Bonjour,

J'ai actuellement un code VB6 qui me permet de dessiner dans une picturebox.
Voulant généraliser l'ensemble, j'ai créé une SSTAB qui me permet de faire plusieurs pages avec plusieurs pictures box. Cela fonctionne (pour l'insertion de la picturebox) mais je cherche à créer une feuille blanche, et donc de dessiner sur cette picturebox.
Lorsque je fais "ctrl + n", le code appelé est le suivant :
Private Sub New_Page()
Ensembletab.Tabs = Ensembletab.Tabs + 1
Ensembletab.TabCaption(Ensembletab.Tabs - 1) = "Page" & Ensembletab.Tabs
Ensembletab.Tab = Ensembletab.Tabs - 1 ' make new tab the current one

Set DessinEtape = Nothing
Set DessinEtapeIni = Nothing
Set DessinLigne = Nothing
Set DessinRectangle = Nothing
Set DessinTexte = Nothing
Set DessinTrans = Nothing
Set DessinFleche = Nothing
Set PbAfficheur = Controls.Add("VB.Picturebox", "Afficheur" & Ensembletab.Tabs) ' create text1
Set PbAfficheur.Container = Ensembletab ' set the container for Text1

With PbAfficheur ' configure text1 and make it visible
.Height = UserControl.ScaleHeight - HScroll.Height - Toolbar_Dessin.Height
.Width = UserControl.ScaleWidth - VScroll.Width
.BackColor = &H808080
.Top = 360
.Visible = True
.DrawMode = 10
.DrawStyle = vbSolid
End With

DrawWidth = 10
ForeColor = RGB(0, 0, 0) ' Définit la couleur
Afficheur.ScaleMode = 1
NomClient.Texte = "NOM DE L'AFFAIRE"
NomGrafcet.Texte = "Titre du grafcet"
VersionGrafcet.Texte = "Version :"
Redacteur.Texte = "Etabli par :"
NumeroPage.Texte = "Folio :"

Redessiner_Afficheur_General PbAfficheur

Ce qui me créé un nouvel onglet, insert une picturebox et set quelques propriétés.
A la fin, j'appel la fonction "Redessiner_Afficheur_General", et je passe ne paramètre ma picturebox.
Cela doit normalement dessiner dessus un semblant de feuille blanche avec un cartouche (la fonction dessiner cartouche est définie comme ceci :
Private Sub Dessiner_Cartouche(ByRef Destination As Object)

Et voici la fonction Redessiner_afficheur_general :
Private Sub Redessiner_Afficheur_General(ByRef myAfficheur As PictureBox)
Dim Objetl As Variant
Dim PosXl As Single
Dim PosYl As Single
Dim ContextDrawModel As Single
Dim ContextDrawStylel As Single


On Error Resume Next

ContextDrawModel = myAfficheur.DrawMode
ContextDrawStylel = myAfficheur.DrawStyle


myAfficheur.DrawMode = 13
myAfficheur.DrawStyle = vbSolid

Saisie.Visible = False
myAfficheur.Cls

myAfficheur.Line (0, 0)-(LargeurPapier, HauteurPapier), RGB(255, 255, 255), BF
If ChoixGrille Then
PosXl = UniteGrilleX
While PosXl < LargeurPapier
myAfficheur.Line (PosXl, 0)-(PosXl, HauteurPapier), RGB(220, 220, 220)
PosXl = PosXl + UniteGrilleX
Wend

PosYl = UniteGrilleY
While PosYl < HauteurPapier
myAfficheur.Line (0, PosYl)-(LargeurPapier, PosYl), RGB(220, 220, 220)
PosYl = PosYl + UniteGrilleY
Wend
PosXl = UniteGrilleX / 2
PosYl = UniteGrilleY / 2

While PosYl < HauteurPapier

While PosXl < LargeurPapier
myAfficheur.PSet (PosXl, PosYl), RGB(200, 200, 200)
PosXl = PosXl + UniteGrilleX
Wend

PosXl = UniteGrilleX / 2
PosYl = PosYl + UniteGrilleY
Wend
End If
Dessiner_Cartouche myAfficheur
For Each Objetl In Graf
Objetl.Dessiner myAfficheur
Next

myAfficheur.DrawStyle = ContextDrawStylel
myAfficheur.DrawMode = ContextDrawModel

DessinEtape.Dessiner myAfficheur
DessinEtapeIni.Dessiner myAfficheur
DessinLigne.Dessiner myAfficheur
DessinRectangle.Dessiner myAfficheur
DessinTexte.Dessiner myAfficheur
DessinTrans.Dessiner myAfficheur
DessinFleche.Dessiner myAfficheur

If ChoixColler And PaintNow Then
For Each ObjGraf In ObjCopie
ObjGraf.Dessiner myAfficheur
Next
End If
End Sub


L'erreur qui est induite est "Type d'argument ByRef incompatible".
J'ai tout essayé et je ne trouve rien sur Google qui puisse m'aider, même sur les sites anglophones.
Quelqu'un aurait-il une idée ?

Cordialement,
Julien
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
1
Merci
Bonjour,
Je ne vois nulle part une ligne disant (par un Dim PbAfficheur as ....) de quel type est la variable PbAfficheur

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de ucfoutu
0
Merci
Effectivement l'erreur se trouvait bien ici !

Merci pour votre réponse.

Cependant, malgré le passage "ByRef", cela ne modifie pas de façon permanente ma picturebox...

Lorsque je fais ctrl + n, cela créé bien un nouvel onglet, dessine bien mon cadre, mais si je change d'onglet et que je reviens sur l'ancien, ma picture box est toujours la même qu'à l'origine...

Une chose que j'ai mal comprise dans mon code ? (je pars d'un code d'un programme qui existait déjà)
Commenter la réponse de Jugid
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Cependant, malgré le passage "ByRef", cela ne modifie pas de façon permanente ma picturebox...

est une autre question que celle ouverte.
Bon ...
Il semble que tu aies besoin de lire ce qu'est la propriété Autoredraw d'une picturebox et de l'utiliser ...
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.