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?--
mitens ton nyt pitäisi toimia?
Riippuu täysin mikä on tarkoitus.
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?
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.
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...
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?
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.
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...
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
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?
VB 6
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.
Siis juu... En ole tuota sinun koodiasi kokeillutkaan... Puhuin vielä tuosta omastani että ei toimi... :) Mietin vaan miksi? Mutta kiitos kokeilen tuota sinun versiotasi..
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
Jep, sedän vinkki ottaa huomioon myös kuvien leveyden ja korkeuden. Näin ollen kuva ei pääse ollenkaan toisen kuvan päälle.
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.
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.
käy katsomassa tuolta
https://www.ohjelmointiputka.net/koodivinkit/
Aihe on jo aika vanha, joten et voi enää vastata siihen.