Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Kuvan top ja left

Sivun loppuun

DaZip [15.02.2004 17:04:32]

#

Tällainen koodi:

If Picture1.Top = Picture2.Top Then
Picture1.Top = Picture2.Top - 33
End If

If Picture1.Left = Picture2.Left Then
Picture1.Left = Picture2.Left - 33
End If


--Mikäs tässä mahtaa olla vikana... En ymmärrä kun luulin että kirjoitin tuon aivan oikein?--

sooda [15.02.2004 17:05:29]

#

mitens ton nyt pitäisi toimia?

petrinm [15.02.2004 17:07:30]

#

Riippuu täysin mikä on tarkoitus.

DaZip [15.02.2004 17:08:32]

#

No siis tarkotus ton olisi estää kuvia pic1 ja 2 pääsemästä päällekkäin mutta... Pitääkös tohon laittaa sulut johkin ton numero arvon takia?

hunajavohveli [15.02.2004 17:10:23]

#

Tuo tarkistaa vain jomman kumman akselin, x:n tai y:n.

Pitäisi olla niin, että ne ovat päällekäin ainoastaan, jos molemmat koordinaatit ovat samat.

Eli
If picture1.Left = picture2.Left And Picture1.Top = Picture2.Top Then

/tähän koodi, joka palauttaa kuvan takaisin entiseen asemaan.

End If

Tämä tosin ei estä kuvia pääsemästä päällekään, vaan ainoastaan niiden vasenta yläkulma osumasta samaan kohtaan. Eli tuo vaikuttaa vain, jos kuvat ovat täsmälleen samassa kohdassa.

DaZip [15.02.2004 17:13:45]

#

No miksiköhän se ei sitten toimi... Tuo on siis juuri tarkoitus. Se valittaa "Method or data member not found" tjsp. Ja sitten viittaa keltasella siihen subiin minkä alla koodi on ja harmaa kohdan .top tuosta picture2 jäljestä... Ymmärsiköhän tuota nyt kukaan...

DaZip [15.02.2004 17:16:58]

#

No perhana... Mitenkäs saan sitten tuon hyppäämään siihen edelliseen asemaansa... Eli kun ongelma on se että mistä tiedän kirjoittaa siihen että hyppääkö se alas ylös vai mihin?

hunajavohveli [15.02.2004 17:18:31]

#

No jos se valittaa siitä subista, niin sitten kyse ei ole tuosta laittamastani koodin pätkästä.

Pistä tähän se rivi, josta se valittaa.

DaZip [15.02.2004 17:20:00]

#

If Picture1.Top = Picture2.Top Then -tuosta se harmaa sen .top kohdan ja laittoipa minkäs subin alle tahansa, se valittaa... Mikähän tässä nyt on...

hunajavohveli [15.02.2004 17:21:02]

#

lainaus:

No perhana... Mitenkäs saan sitten tuon hyppäämään siihen edelliseen asemaansa... Eli kun ongelma on se että mistä tiedän kirjoittaa siihen että hyppääkö se alas ylös vai mihin?

Tallennat ennen uuteen paikkaan siirtymistä muistiin edelliset koordinaatit. Jos uusi paikka on viallinen, lataat uudestaan muistiin tallennetut koordinaatit.

Näin:

vx1 = Picture1.Left
vy1 = Picture1.Top

Jos ollaan samassa kohdassa Then

Picture1.Left = vx1
Picture1.Top = vy1

End If

hunajavohveli [15.02.2004 17:21:57]

#

lainaus:

If Picture1.Top = Picture2.Top Then -tuosta se harmaa sen .top kohdan ja laittoipa minkäs subin alle tahansa, se valittaa... Mikähän tässä nyt on...

Mikä VB sinulla on?

DaZip [15.02.2004 17:23:03]

#

VB 6

hunajavohveli [15.02.2004 17:28:22]

#

Sitten en kyllä käsitä, mikä tuossa koodirivissä voisi olla vikana. Itselläni tuo rivi toimii aivan moitteettomasti jopa VB vitosessa. Ja kopioin sen lisäksi suoraan tästä sivulta, enkä kirjoittanut uudestaan, joten se mitä testasin on täsmälleen sama kuin tuo rivi, jonka annoin sinulle.

DaZip [15.02.2004 17:43:30]

#

Siis juu... En ole tuota sinun koodiasi kokeillutkaan... Puhuin vielä tuosta omastani että ei toimi... :) Mietin vaan miksi? Mutta kiitos kokeilen tuota sinun versiotasi..

setä [15.02.2004 17:58:54]

#

laita vertailu näin:

If Picture1.Top >= Picture2.Top and Picture1.Top <= Picture2.Top + Picture1.Height Then
Picture1.Top = Picture2.Top - 33
End If

ja vastaavasti leveyssuunta

hunajavohveli [15.02.2004 19:43:15]

#

Jep, sedän vinkki ottaa huomioon myös kuvien leveyden ja korkeuden. Näin ollen kuva ei pääse ollenkaan toisen kuvan päälle.

setä [15.02.2004 21:13:49]

#

Nämä asiat pitää miettiä perusteellisesti ennenkuin kirjoittaa mitään. Virheitä tuppaa tulemaan herkästi. Tarkemmin mietittynä tuo vertailu pitääkin kirjoittaa näin:

If Picture1.Top >= Picture2.Top - Picture1.height and _
Picture1.Top <= Picture2.Top + Picture2.Height Then
   Picture1.Top = Picture2.Top - 33
End If

Josko nytkään on aivan oikein. Toivottavasti.

Antti Laaksonen [16.02.2004 00:36:22]

#

Kannattaa hahmotella eri tilanteet vaikka paperille, niin sitten toimivan koodin tekeminen on melko helppoa. Kuvat ovat sivusuunnassa päällekkäin, jos molemmat seuraavat ehdot ovat tosia:

1. Picture1.Left + Picture1.Width > Picture2.Left
(Picture1:n oikean reunan sijainti on suurempi kuin Picture2:n vasemman reunan sijainti)
2. Picture1.Left < Picture2.Left + Picture2.Width
(Picture1:n vasemman reunan sijainti on pienempi kuin Picture2:n oikean reunan sijainti)

Pystysuunnassa ehdot ovat vastaavasti seuraavat:

1. Picture1.Top + Picture1.Height > Picture2.Top
(Picture1:n alareunan sijainti on suurempi kuin Picture2:n yläreunan sijainti)
2. Picture1.Top < Picture2.Top + Picture2.Height
(Picture1:n yläreunan sijainti opn pienempi kuin Picture2:n alareunan sijainti)

Eli kun kaikki edelliset ehdot ovat yhtä aikaa tosia, niin kuvat ovat toistensa päällä. Kuvan paikan muuttamista ennen täytyy tarkistaa, että liikkuminen ei johda tällaiseen tilanteeseen.

zigilii [16.02.2004 16:02:07]

#

käy katsomassa tuolta
https://www.ohjelmointiputka.net/koodivinkit/24150-vb6-törmäys-esteeseen


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta