Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Liikuteltavat objektit *vb5*

Sivun loppuun

juhaz [23.09.2003 18:30:06]

#

Sori että aloittelen tänään lähes kymmeniä uusia viestejä, mutta laitanpahan nyt kuitenkin tämän viestin....

Tiedän kyllä kuinka saadaan yksi objekti liikkumaan, kun vaikkapa hiiren kakkosnappia painaa, mutta kuinka onnistuu valinta mikä objekti liikuu?
Jos nyt vaikka form1:ssä olisi label1 ja label2 niin, kun ensin klikkaisi vaikkapa label1:stä niin, että se tulisi jotenkin valituksi tai inputboxilla käyttäjältä kysyttäisiin mikä objekti tulee valituksi niin sitten, kun hiirtä siirtää niin tämä objekti liikuu hiiren mukana ja käyttäjä voi asettaa sen uudelle paikalle ja tämän jälkeen hän pystyisi siirtämään myös muita objekteja, kunhan hän vain kertoisi mitä haluaa siirtää?

s = inputbox("")
s.top = y
s.left = x

ei ainakaan toimi.... :)

juhaz [23.09.2003 19:03:32]

#

Unohtakaa eka kysymys, mutta sitten toinen kysymys....
Kuinka lisätään ajon aikana objekteja? Esimerkiksi jos käyttäjä antaa jonkin komennon, että form1:lle ilmestyisi image2 objekti niin se sitten ilmestyisi ja tätä voitaisiin toteuttaa niin kauan kuin käyttäjä haluaa eli siellä voisi olla tuon image2:n lisäksi myös image3, image4, image5, image6... jne

Antti Laaksonen [23.09.2003 19:03:49]

#

Ratkaisu on harvinaisen yksinkertainen. Laita niiden kontrollien, joiden haluat olevan liikuteltavia, DragDrop-ominaisuuden arvoksi 1. Lisää vielä seuraava koodi formin DragDrop-tapahtumaan:

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
    Source.Left = X
    Source.Top = Y
End Sub

Nyt kontrolleja pystyy siirtämään ympäri formia valitsemalla ne hiirellä ja pitämällä hiiren vasenta nappia alhaalla siirron ajan. Tämän tekniikan nimi on 'drag and drop' - vedä ja pudota.

Antti Laaksonen [23.09.2003 19:06:23]

#

Toinen kysymys: https://www.ohjelmointiputka.net/keskustelu/528-vb-kysymys

juhaz [23.09.2003 19:19:20]

#

joo tuon ekan selvitin jo itse, mutta toka kysymys on vielä vähän auki.

Olen tekemässä form1:stä jonkinsortin työpöytää... tjs eli sen pitäisi käyttäytyä kuten mikä tahansa oikea desktop esimerkiksi windowsissa ja sen takia siellä pitää olla mahdollisuus liikuttaa, poistaa ja lisätä objekteja.

https://www.ohjelmointiputka.net/keskustelu/528-vb-kysymys löytyvistä esimerkeistä vain sinun esimerkki toimi Antti L, mutta se ei ole ihan se mitä mä haluan... no hitusen, mutta ei kuitenkaan... Seuraavassa koodiesimerkissä taas vb 5 valitti riviä

Set btnTesti = Controls.Add("vb.commandbutton", "btnTesti")

Edit:
Valitukset
"Run-time error '438':
Object doesn't support this property or method"

juhaz [24.09.2003 17:41:40]

#

Entäs jos niitä liikuteltavia objekteja on enemmän kuin yksi? Nyt en ole vielä oikein löytänyt keinoa pystyä siirtämään vaikkapa kymmenestä objektista juuri sitä mitä itse haluaa vaan se vähän sattuu siirtämään sen mikä on koodissa laitettu...

image1.top = y
image1.left = x

Onko tapaa olemassa, jolla tuon image1:n saa tuosta laitettua tyyliin

s$ = "image1"
's$ = mikä tahansa, jonka käyttäjä asettaa
'sillä hetkellä
s$.top = y
s$.left = x

näin se ei ainakaan toimi.....

Blaze [26.09.2003 22:53:13]

#

Just nyt en keksi parempaa kuin

Dim muuli As String

muuli = "image1"

Select Case LCase(muuli)
  Case "image1"
    image1.top = y
    image1.left = x
...
End Select

Antti Laaksonen [26.09.2003 22:57:17]

#

Ainakin VB6:ssa on mahdollista hyödyntää Controls-objektia.

s$ = "Image1"
Controls(s$).Top = y
Controls(s$).Left = x

juhaz [26.09.2003 23:04:54]

#

private sub form_load()
Open "C:\cshell.001" For Input As #1
Input #1, rootdir$
Close #1

'kuvakkeet
Open rootdir$ + "sys\desk\mycomp.obj" For Input As #1
Input #1, ico$, cstat$, Namee$
Close #1

Open rootdir$ + "sys\desk\trash.obj" For Input As #1
Input #1, i$, tstat$, nam$
Close #1

Open rootdir$ + "sys\desk\term.obj" For Input As #1
Input #1, ic$, estat$, na$
Close #1

Open rootdir$ + "sys\desk\kuv0.obj" For Input As #1
Input #1, t$, kuva$, tatus$, nimi$
Close #1

Open rootdir$ + "sys\desk\kuv1.obj" For Input As #1
Input #1, toi$, kuv$, tatu$, nim$
Close #1

Open rootdir$ + "sys\desk\kuv2.obj" For Input As #1
Input #1, toim$, ku$, tat$, ni$
Close #1

Open rootdir$ + "sys\desk\kuv3.obj" For Input As #1
Input #1, toimi$, k$, ta$, n$
Close #1
'kuvakkeiden asetukset... ym
If cstat$ = "true" Then Image1.Visible = True
Image1.Picture = LoadPicture(App.Path + "\sys\pic" + ico$)
Image1.ToolTipText = Namee$
If tstat$ = "true" Then Image3.Visible = True
Image3.Picture = LoadPicture(App.Path + "\sys\pic\" + i$)
Image3.ToolTipText = nam$
If estat$ = "true" Then Image2.Visible = True
Image2.Picture = LoadPicture(App.Path + "\sys\pic\" + ic$)
Image2.ToolTipText = na$
If tatus$ = "true" Then Image4.Visible = True
Image4.ToolTipText = nimi$
If tatu$ = "true" Then Image5.Visible = True
Image5.ToolTipText = nim$
If tat$ = "true" Then Image6.Visible = True
Image6.ToolTipText = ni$
If ta$ = "true" Then Image7.Visible = True
Image7.ToolTipText = n$

'autoexec
autoexec$ = rootdir$ + "autox.bas"
StatusBar1.Panels(1).ToolTipText = Date$

Shell rootdir$ + "bin\qbasic.exe /run " + autoexec$, vbNormalFocus
End Sub

Tuollainen (tai oikeastaan mulla on useampikin Image2.Picture = LoadPicture(App.Path + "\sys\pic\" + ic$), mutta mä ilmeisesti menin poistaa ja tallentamaan... no mutta kuitenkin) on mulla tällä hetkellä form_load (form1:n) koodiosuus ja mitä tahansa tekee niin justiinsa tälläinen rivi

Image2.Picture = LoadPicture(App.Path + "\sys\pic\" + ic$)

valittaa vähän mistä vain, kuten tiedostoa ei löydy, oikeutta ei ole muokata/lukea tiedostoa.... ym....

App.path:n tilalla olen kokeillut myös tuota rootdir$, mutta en saa toimimaan vaikka mitä tekisi.


Sivun alkuun

Vastaus

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

Tietoa sivustosta