Passage ByRef incompatible

Jugid - 15 nov. 2016 à 10:51
ucfoutu Messages postés 18038 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

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 nov. 2016 à 12:45
Bonjour,
Je ne vois nulle part une ligne disant (par un Dim PbAfficheur as ....) de quel type est la variable PbAfficheur
1
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à)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 nov. 2016 à 20:39
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 ...
0
Rejoignez-nous