Toon posts:

[vb6] sub om meerdere plaatjes te wisselen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben momenteel bezig met een interface in vb waarin een heleboel buttons komen en vanwege layout redenen gebruik ik customized buttons.
Nu wil ik een plaatjeswissel toepassen op de mousedown events e.d. en ik wil daar gewoon een subje voor schrijven die je voor elke button kan aanroepen. iets als dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Sub ButtonDown(ByVal Buttonnaam As String)
Dim NieuweNaam As String
NieuweNaam = Buttonnaam & "1.gif" 'het ingedrukte knop plaatje
imgMouseDownNaam.Picture = NieuweNaam
End Sub


Sub ButtonUp(ByVal Buttonnaam As String)
Dim NieuweNaam As String
NieuweNaam = Buttonnaam & "0.gif" 'het gewone plaatje
imgMouseDownNaam.Picture = NieuweNaam
End Sub


Het downplaatje heet dus bijv. Plaatje1.gif en het normale plaatje heet Plaatje0.gif

Hoe geef ik de naam van het mouseevent aanroepende plaatje (in dit script even imgMouseDownNaam genoemd) door aan de sub?

[ Voor 9% gewijzigd door Verwijderd op 25-08-2004 12:09 ]


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Op de volgende manier kan je het doen:
Visual Basic:
1
2
3
4
5
6
Private Sub ButtonDown(ByRef objImage As Image, ByVal ButtonName As String)
  Dim strNewName As String

  strNewName = ButtonName & "1.gif"
  objImage.Picture = strNewName
End Sub

Je geeft dan de image die je wilt laten aanpassen mee als parameter.

Als de routine aanroept dan doe je dat als volgt:
Visual Basic:
1
Call ButtonDown(imgMouseDownNaam, "cmdTest")

[ Voor 4% gewijzigd door Lorn op 25-08-2004 13:17 ]


Verwijderd

Topicstarter
Ik heb wat problemen met je code,
hij blijft compile error: type mismatch geven op
code:
1
objImage.Picture = strNewName


Ik heb al van alles geprobeerd, dacht dat het misschien aan het pad naar het plaatje lag (absoluut pad ipv relatief)

het lijkt mij iets te maken te hebben met het type string ofzo, het kan niet aan het gif type liggen toch?

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Je moet het volgende doen:

code:
1
 objImage.Picture = loadpicture(strNewName)


picture verwacht een plaatje als input en strnewname is een string. Met behulp van LoadPicture kan je dit omzetten....

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
NTGiant schreef op 26 augustus 2004 @ 10:32:
Je moet het volgende doen:

code:
1
 objImage.Picture = loadpicture(strNewName)


picture verwacht een plaatje als input en strnewname is een string. Met behulp van LoadPicture kan je dit omzetten....
Dat moet hem wezen ;)

Verwijderd

Topicstarter
Thnxs , dat werkt idd.

En je moet absolute paden gebruiken heb ik ontdekt.

Hier nog even de volledige code voor als iemand daar interesse voor heeft:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'button_plaatjewissel_mousedown
Public Sub ButtonDown(ByRef objImage As Image, ByVal ButtonName As String)
  Dim strNewName As String

  strNewName = "absoluut pad\" & ButtonName & "1.gif"
  objImage.Picture = LoadPicture(strNewName)
End Sub

'button_plaatjewissel_mouseup
Public Sub ButtonUp(ByRef objImage As Image, ByVal ButtonName As String)
  Dim strNewName As String

  strNewName = "absoluut pad\" & ButtonName & "0.gif"
  objImage.Picture = LoadPicture(strNewName)
  
End Sub


ik heb er publics van gemaakt omdat ik hem overal in het programma wil gebruiken, maar als ik hem in een module zet zegt ie : object required....hij kan hem dus niet vinden..

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Verwijderd schreef op 26 augustus 2004 @ 10:45:
Thnxs , dat werkt idd.

En je moet absolute paden gebruiken heb ik ontdekt.

Hier nog even de volledige code voor als iemand daar interesse voor heeft:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'button_plaatjewissel_mousedown
Public Sub ButtonDown(ByRef objImage As Image, ByVal ButtonName As String)
  Dim strNewName As String

  strNewName = "absoluut pad\" & ButtonName & "1.gif"
  objImage.Picture = LoadPicture(strNewName)
End Sub

'button_plaatjewissel_mouseup
Public Sub ButtonUp(ByRef objImage As Image, ByVal ButtonName As String)
  Dim strNewName As String

  strNewName = "absoluut pad\" & ButtonName & "0.gif"
  objImage.Picture = LoadPicture(strNewName)
  
End Sub


ik heb er publics van gemaakt omdat ik hem overal in het programma wil gebruiken, maar als ik hem in een module zet zegt ie : object required....hij kan hem dus niet vinden..
je moet dan form1.objImage.Picture


EDIT:
beter is het om je declaraties ( Dim strNewName As String) bovenaan te zetten, buiten de subs dus... Hierdoor verkom je dat hij het telkens opnieuw declareert, je programma wordt er dus sneller door ;)

[ Voor 14% gewijzigd door Shuisman op 26-08-2004 10:51 ]


Verwijderd

Topicstarter
ow gast...ben lekker bezig vandaag....ben nog niet helemaal wakker gisteren wezen stappen nl. :)

thnxs

Verwijderd

Topicstarter
iets dergelijks als dit zou op de 1 of andere manier moeten kunnen toch:
code:
1
2
3
4
5
6
7
8
Dim strNewName As String

Public Sub ButtonDown(ByRef objForm As Form, ByRef objImage As Image, ByVal ButtonName As String)
  

  strNewName = "pad\" & ButtonName & "1.gif"
  objForm.objImage.Picture = LoadPicture(strNewName)
End Sub


hij geeft doesn'ts support method

[ Voor 24% gewijzigd door Verwijderd op 26-08-2004 10:59 ]


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Verwijderd schreef op 26 augustus 2004 @ 10:58:
iets dergelijks als dit zou op de 1 of andere manier moeten kunnen toch:
code:
1
2
3
4
5
6
Public Sub ButtonDown(ByRef objForm As Form, ByRef objImage As Image, ByVal ButtonName As String)
  Dim strNewName As String

  strNewName = "pad\" & ButtonName & "1.gif"
  objForm.objImage.Picture = LoadPicture(strNewName)
End Sub


hij geeft doesn'ts support method
waar zegt ie "doesn'ts support method" ff met F8 er langs gaan ;)

[ Voor 10% gewijzigd door Shuisman op 26-08-2004 11:03 ]


Verwijderd

Topicstarter
objForm.objImage.Picture = LoadPicture(strNewName)

thnxs

[ Voor 51% gewijzigd door Verwijderd op 26-08-2004 11:05 ]


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
ik zal ff vb 2005 installen, weet het nu ook zo uit het hoofd niet meer, heb je nu de code in een module ?

Verwijderd

Topicstarter
yep

de error is:

runtime 438

doesn't support property or method

ik snap er niks van ...zou moeten kunnen toch?

[ Voor 96% gewijzigd door Verwijderd op 26-08-2004 11:18 ]


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Verwijderd schreef op 26 augustus 2004 @ 11:06:
yep

de error is:

runtime 438

doesn't support property or method

ik snap er niks van ...zou moeten kunnen toch?
MISSCHIEN kun je loadpicture niet in een module gebruiken, ( lijkt mij vaag BTW)

en als je de zelfde code NIET in een module doet ?, doet ie het dan wel ?, dan weet je misschien iets meer :/

[ Voor 18% gewijzigd door Shuisman op 26-08-2004 11:22 ]


Verwijderd

Topicstarter
nee, als ik hem in hetzelfde form zet doet hij het ook niet, dus misschien kan dit dus echt niet in vb

het gekke is dat als ik ga editten in de statement vb wel suggesties gaat geven wat er achter de . moet komen, een teken dat hij het wel snapt lijkt me

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Verwijderd schreef op 26 augustus 2004 @ 11:26:
nee, als ik hem in hetzelfde form zet doet hij het ook niet, dus misschien kan dit dus echt niet in vb

het gekke is dat als ik ga editten in de statement vb wel suggesties gaat geven wat er achter de . moet komen, een teken dat hij het wel snapt lijkt me
Ik weet denk ik al wat het probleem is, ik denk dat je bijv.

x.y.picture = ....

dat x en y niet een string etc mag zijn


Ik denk dat je alle knopjes in een array moet zetten, button(0)........button(100) Hoeveel heb je er :P

[ Voor 11% gewijzigd door Shuisman op 26-08-2004 11:29 ]


Verwijderd

Topicstarter
stuk of 50 over 10 forms ofzo :)

kunnen die in hetzelfde array komen als ze in andere forms zitten?

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Verwijderd schreef op 26 augustus 2004 @ 11:33:
stuk of 50 over 10 forms ofzo :)
kunnen die in hetzelfde array komen als ze in andere forms zitten?
Volgens mij kan dat niet, want dan krijg je ook weer gezeur met form1.button(1) OF form2.button(1) ??!!

Verwijderd

Topicstarter
zucht

ik ben nu bezig om de naam van het form gewoon als string door te geven, maar dat geeft ook problemen.....

zoiets:
code:
1
2
3
4
5
6
Dim strNewName As String

Public Sub ButtonDown(ByVal FormName As String, ByRef objImage As Image, ByVal ButtonName As String)
  strNewName = "pad\" & ButtonName & "1.gif"
  FormName.objImage.Picture = LoadPicture(strNewName)
End Sub


en dan iets in de trant van die loadpicture ofzo

[ Voor 59% gewijzigd door Verwijderd op 26-08-2004 11:40 ]


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Het beste is denk ik dat je per form een aparte array doet met je knopjes, bij de source doe je dan per form:

code:
1
2
3
4
5
6
7
8
9
Dim strNewName As String
Private Sub Command1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
 strNewName = pad & Index & "a.gif"
 Command1(Index).Picture = LoadPicture(strNewName)
End Sub
Private Sub Command1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
 strNewName = pad & Index & "b.gif"
 Command1(Index).Picture = LoadPicture(strNewName)
End Sub



ik gebruik a voor ingedrukt b voor niet ingedrukt

** wel de index per form ergens anders laten beginnen, anders is de index meerdere keren 0, en dus hetzelfde plaatje

[ Voor 12% gewijzigd door Shuisman op 26-08-2004 11:46 ]


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Verwijderd schreef op 26 augustus 2004 @ 11:38:
zucht

ik ben nu bezig om de naam van het form gewoon als string door te geven, maar dat geeft ook problemen.....

zoiets:
code:
1
2
3
4
5
6
Dim strNewName As String

Public Sub ButtonDown(ByVal FormName As String, ByRef objImage As Image, ByVal ButtonName As String)
  strNewName = "pad\" & ButtonName & "1.gif"
  FormName.objImage.Picture = LoadPicture(strNewName)
End Sub


en dan iets in de trant van die loadpicture ofzo
objimage is ook een string ?!?

Verwijderd

Topicstarter
hmmm, nog even proberen

[ Voor 109% gewijzigd door Verwijderd op 26-08-2004 11:49 ]


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 21-05 17:29
Ik bedoel dat die objimage niet VAST staat, hij kan veranderen, het is een ge-declareert IETS, en je kan niet
code:
1
2
3
x= form1
y = picture1
x.y.picture = ....


^^^ dit gaat niet werken ^^^

in feite doe jij het zelfde , alleen dan via een subje

[ Voor 9% gewijzigd door Shuisman op 26-08-2004 11:53 ]


Verwijderd

Topicstarter
nee dat klopt

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
volgens mij hoef je helemaal die form niet te gebruiken in:

code:
1
form.imagebox.picture


Als je imagebox als Image/PictureBox declareert heeft deze een verwijzing naar je form.

Je functie
code:
1
2
3
4
5
6
Public Sub ButtonDown(ByRef objImage As Image, ByVal ButtonName As String)
  Dim strNewName As String

  strNewName = "absoluut pad\" & ButtonName & "1.gif"
  objImage.Picture = LoadPicture(strNewName)
End Sub


In een form roep je je functie dus als volgt aan:
code:
1
ButtonDown Me.imgBox, Me.imgBox.Name


In een module als volgt:
In een form roep je je functie dus als volgt aan:
code:
1
ButtonDown formName.imgBox, formName.imgBox.Name


Dit zou moeten lukken

edit:

Net even voor je getest en dit werkt gewoon..

[ Voor 7% gewijzigd door DukeMan op 26-08-2004 12:39 ]


Verwijderd

Topicstarter
Dat was hem!

het is altijd veel simpeler dan je denkt!

thnxs!!
Pagina: 1