OVH Cloud OVH Cloud

Suppression de shape

8 réponses
Avatar
TouTi
Bonjour

Dans mon projet, je crée des shapes avec des index de valeurs aléatoires (1,
10, 55.........) et je ne peux pas faire autrement...(j'utilise la commande
load shape(x))

Comment toutes les supprimer sans problème ???

J'ai essayé avec :
for i = 1 to shape.count
unload shape.item(i)
next i

Malheureusement la propriété item est la même chose qu'à l'index donc
certaines shapes ne sont pas supprimées....

merci de me renseigner...

--

8 réponses

Avatar
Thierry BERTRAND
unload shape(i) modifie la valeur de shape.count
donc au premier passage, shape.count vaut 100 (par exemple)
et après le unload de shape(1), il ne vaut plus que 99
Donc tu ne décharge que la moitié de tes shape.

donc en général quand j'effectue des unload de controles, je le fais en
décrémentant

dim Nb as integer
dim I as integer

nb=shape.count
for i=nb to 1 step -1
unload shape(i)
next i

essaye-s-y et dis nous.



"TouTi" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message de news:
421aff0f$0$3131$
Bonjour

Dans mon projet, je crée des shapes avec des index de valeurs aléatoires


(1,
10, 55.........) et je ne peux pas faire autrement...(j'utilise la


commande
load shape(x))

Comment toutes les supprimer sans problème ???

J'ai essayé avec :
for i = 1 to shape.count
unload shape.item(i)
next i

Malheureusement la propriété item est la même chose qu'à l'index donc
certaines shapes ne sont pas supprimées....

merci de me renseigner...

--





Avatar
TouTi
Bonjour Thierry

donc en général quand j'effectue des unload de controles, je le fais en
décrémentant
dim Nb as integer
dim I as integer
nb=shape.count
for i=nb to 1 step -1
unload shape(i)
next i



J'avais essayé mais cela ne fonctionne pas car la valeur de certain index
sont supérieurs à la valeur du nombre de shape

exemple :
* Je dois créer une série de shape : shape(10), shape(150), shape(257)
* Si je détermine le nombre total de shape : shape.count = 3
* La bouche "for" me renvoie les valeurs 1, 2, 3 qui ne correspondent pas à
mes index de shape

Ce qui m'intéresserait c'est d'atteindre chaque shape quelque soit
l'index...
Avatar
Thierry BERTRAND
Si les index ne se suivent pas, il ne reste qu'une seule solution, stocker
les index des shapes créées pour pouvoir ensuite les détruires.

Définit une table pour mémoriser les index.

Dim tblIndex() as integer


dans le form load ou dans la proc main faire

redim tblindex(0)

pour intialiser la table à l'indice 0, cela facilite ensuite

definir une proc LoadShape et une autre UnloadShape

Public sub LoadShape(byval index as integer)
load shape(index)
redim preserve tblindex(ubound(tblindex)+1)
tblindex(ubound(tblindex))=index
end sub

Public sub UnloadShape(byval index as integer)
Dim I as integer

if index=0 then
for i=1 to ubound(tblindex)
unload shape(tblindex(i))
next i
redim tblindex(0)
else
unload shape(tblindex(index))
for i=index to ubound(tblindex)-1
tblindex(i)=tblindex(i+1)
next i
redim preserve tblindex(ubound(tblindex)-1)
end if
end sub



remplacer toutes les instructions load shape(i) par LoadShape(i)
et pour détruire les shapes,
soit faire UnloadShape(0) -> elles seront toutes supprimées
soit faire UnloadShape(i) -> la ieme uniquement sera supprimée




"TouTi" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message de news:
421b0a9d$0$3125$
Bonjour Thierry

> donc en général quand j'effectue des unload de controles, je le fais en
> décrémentant
> dim Nb as integer
> dim I as integer
> nb=shape.count
> for i=nb to 1 step -1
> unload shape(i)
> next i

J'avais essayé mais cela ne fonctionne pas car la valeur de certain index
sont supérieurs à la valeur du nombre de shape

exemple :
* Je dois créer une série de shape : shape(10), shape(150), shape(257)
* Si je détermine le nombre total de shape : shape.count = 3
* La bouche "for" me renvoie les valeurs 1, 2, 3 qui ne correspondent pas


à
mes index de shape

Ce qui m'intéresserait c'est d'atteindre chaque shape quelque soit
l'index...





Avatar
TouTi
Thierry

Si les index ne se suivent pas, il ne reste qu'une seule solution, stocker
les index des shapes créées pour pouvoir ensuite les détruires.
Définit une table pour mémoriser les index.



En fait c'est ce que j'ai déjà : J'ai une table qui contient un grand de
valeurs (entre autre les index des shapes). Malheureusement le temps de
traitement est trop long...

Peut être un autre moyen : Je me rappelle qu'il existe un moyen de
gérer(compter, récupérer les name...) des contrôles d'une form mais je ne
sais plus comment faire...

Merci pour ton aide...
Avatar
Thierry BERTRAND
Je ne pense pas que cela accélèrera le truc.

je ne vois que l'enum controls.

dim Ctrl as control

for each ctrl in form.controls
if ctrl.name = "xx" then
...
end if
next

Si tu n'a pas plus de quelques dizaines de shape, je ne pense pas qu'une
table pour gérer les shapes soit très lent.
De toutes façon, le nombre d'éléments dans la liste "controls" sera tout
aussi important. Tu économises peut être des temps de redim et de décalage
d'index, mais à voir si c'est plus facile.


"TouTi" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message de news:
421b1265$0$3140$
Thierry

> Si les index ne se suivent pas, il ne reste qu'une seule solution,


stocker
> les index des shapes créées pour pouvoir ensuite les détruires.
> Définit une table pour mémoriser les index.

En fait c'est ce que j'ai déjà : J'ai une table qui contient un grand de
valeurs (entre autre les index des shapes). Malheureusement le temps de
traitement est trop long...

Peut être un autre moyen : Je me rappelle qu'il existe un moyen de
gérer(compter, récupérer les name...) des contrôles d'une form mais je ne
sais plus comment faire...

Merci pour ton aide...






Avatar
ng
Salut,

* Je dois créer une série de shape : shape(10), shape(150), shape(257)


Pour le but de l'indexation est qu'elle se fasse dans l'ordre de facon a
pouvoir parcourir les controles facilement et rapidement (car un for each
sur l'ensemble des controles n'est pas forcément rapide). Sinon il faut
créé un tableau affectant à chaque index un autre index mais dans l'odre :

Dim tblRefIndex() As Integer

'//on le redimensionne a chaque fois en attribuant les index de manière a ce
que tblRefIndex(0) = 10, tblRefIndex(1) = 150...

ensuite pour la suppression il suffit de boucler sur le tableau et de faire
un Call Unload( MaShape(tblRefIndex(i)) )... à tester.


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
Pascal B.
Voici LA solution:

Do Until Shape.Count = 1
unload Shape(Shape.Ubound)
loop

Cordialement
Pascal B.

"TouTi" <gelapplication[Nospam]@tiscali.fr> wrote in message news:421aff0f$0$3131$
| Bonjour
|
| Dans mon projet, je crée des shapes avec des index de valeurs aléatoires (1,
| 10, 55.........) et je ne peux pas faire autrement...(j'utilise la commande
| load shape(x))
|
| Comment toutes les supprimer sans problème ???
|
| J'ai essayé avec :
| for i = 1 to shape.count
| unload shape.item(i)
| next i
|
| Malheureusement la propriété item est la même chose qu'à l'index donc
| certaines shapes ne sont pas supprimées....
|
| merci de me renseigner...
|
| --
|
|
|
Avatar
TouTi
> Do Until Shape.Count = 1
unload Shape(Shape.Ubound)
loop



Ca a l'air pas mal... je vais voir cela de plus prêt...