[ Aleksandar Vasic @ 02.03.2008. 15:29 ] @
Pozdrav svima ;)

ovako imam jedan Shape (krug),e sad klikom na dugme on mi stvori na formi npr 5 istih takvih shape-ova na formi a pozicija novog shape-a je random,to znam da uradim samo mi je problem kako kopirati ves postojeci Shape.Kao u wordu sto ima CTRL + D ;)

ako nije jasno recite

TNX
[ stefanpn @ 02.03.2008. 16:38 ] @
Moras prvo da stavis da ti prvi shape(krug) od koga svi drugi nastaju ima index 0
pa posle jednostavno stavis load shape za 5 krugova:
Code:

dim shape2 as shape
for t = 1 to 5
load shape2
next t

E sad ja sam ovo radio davno pa ako ne radi isprobavaj malo, ali je ta logika. Radio sam to kada sam pravio neki server za komunikaciju a sada nemam instaliran VB pa toliko od mene.
[ Aleksandar Vasic @ 02.03.2008. 17:10 ] @
hvala ;)
[ Aleksandar Vasic @ 02.03.2008. 17:27 ] @
ako sam dobro shvatio,trebalo bi ovako,medjutim ne radi...

Code:
Dim Y As Integer, X As Integer
Dim X as Integer,Y as Integer
Dim shape2 As Shape
For I = 1 To 30
Randomize
Y = Int((5040 * Rnd) + 120)
X = Int((6960 * Rnd) + 240)
Load shape2
shape2.Left = X
shape2.Top = Y
shape2.Shape = 0
shape2.Width = 135
shape2.Height = 135
Next I


"Object Variable or With block Not Set" se javlja na "Load shape2"
[ Aleksandar Ružičić @ 02.03.2008. 17:50 ] @
ne mozes sa Load shape2, ovako dinamicki dodajes kontrole:
Code:

Dim newShape As Shape
Set newShape = Me.Controls.Add("VB.Shape", "dynshape")
newShape.move(10, 10, 100, 100)
newShape.Visible = TRue


a ako hoces to u petlji onda ovako nesto:
Code:

Dim newShape As Shape
Dim i As Long

For i = 1 To 10
   Set newShape = Me.Controls.Add("VB.Shape", "dynshape" & i)
   newShape.move(10, 10 * i, 100, 100)
   newShape.Visible = TRue
Next
[ stefanpn @ 02.03.2008. 18:27 ] @
Ne niste uhvatili poentu, ili bar ja nisam dobro objasnio.

Prvo taj Shape od koga svi ostali nastaju mora biti sa indexom. To ti je ono da kad kopiras taj shape1 on nije shape2 nego shape1(1).
Prvo moras da stavis DIM SHAPE1(X) AS OBJECT ' X je max broj objekata
Sa komandom Load ti samo ucitavas objekt, sto znaci da ce on kad se ucita imati preslikana podesavanja od onog shape1 od kog je nastao. Samo pazi da ne preteras sa brojem objekata jer ces prepuniti memoriju. Za "izbacivanje" objekata iz memorije moras koristiti Unload Shape1(X)

Ako ti ni sada nije jasno napisi, pa cu da instaliram VB pa da napisem primer, pa da ti postavim...
Pozdrav.

Zapravo evo vec instaliram VB.... Stize primer....
[ stefanpn @ 02.03.2008. 19:06 ] @
Evo ga primer:

Radi 100%! Testirano ...

Code:

dim shape(255) as object
Private Sub Form_Load()
    For t = 0 To 5
        Set shape(t) = Shape1
    Next t
End Sub

I posle svaki shape(t) mozes da koristis, bez ikakvih problema, kao da si ga nacrtao...
[ Aleksandar Ružičić @ 02.03.2008. 19:12 ] @
tako vec moze, mada primer koji sam ja dao ne zahteva da na formi postoji objekat, mada je kod ovog tvog primera event-handling mnogo laksi (ako se koristi metod koji sam ja naveo mora da se pravi dodatna klasa za svaki tip objekta ako hoces da imash event handlere) ali je meni ipak ovaj sa Controls.Add elegantniji :)
[ stefanpn @ 03.03.2008. 01:32 ] @
I ovde ne mora da postoji objekt ali onda ide:
Code:

Dim Shape1 As VB.Shape

ispred svega. Samo sto onda svi parametri tog objekta moraju da se postavljaju rucno, znaci lakse je kad vec postoji jedan.
[ Aleksandar Vasic @ 03.03.2008. 12:19 ] @
Radi ;)

Hvala vam puno :D