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.... :)
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
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.
Toinen kysymys: https://www.ohjelmointiputka.net/keskustelu/528-vb-kysymys
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"
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.....
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
Ainakin VB6:ssa on mahdollista hyödyntää Controls-objektia.
s$ = "Image1" Controls(s$).Top = y Controls(s$).Left = x
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.