Limites d'un sous formulaire

Bonsoir

J’utilise un sous formulaire pour afficher des imagettes. J’ai fait plusieurs essais en créant à la volée des lignes de 8, 10 et 12 imagettes. Pour un gros dossier avec près de 1300 photos, l’affichage par 10 ou 12 montre toutes les photos, celui par 8 supprime les dernières photos. En faisant d’autres essais, j’ai eu la surprise de superpositions des dernières images sur les premières.

Est-ce donc qu’un sous formulaires est limité en mémoire ou plutôt en hauteur d’affichage ( car évidemment, quand je mets 10 à 12 imagettes par ligne, elles sont plus petites et donc moins hautes)

Y a-t-il autre chose ? et éventuellement quel est le moyen pour contourner le problème.
Evidemment, les imagettes affichées dans une listbox (entity selection) y sont toutes mais j’aurais voulu une présentation de type planche contact pour plus de lisibilité

Merci de vos réponses

André

Après essais, il semble qu’il y ait une limitation à 32000 pixels. je m’imaginais que le fait d’être en 64bits permettraient d’aller jusqu’à 64000 pixels ???

32000, de mémoire, est la limite du nombre de lignes que l’ascenseur peut gérer dans une listbox tableau - il me semble que c’était une limitation de l’OS, je ne sais pas si elle est toujours d’actualité.
Ton observation semble dire que c’est aussi une limite pour les images, j’imagine encore à cause de l’ascenseur et de l’OS.
Pour faire une planche de contact, je pense que je partirais sur une listbox tableaux, en faisant varier le nombre de colonnes.

merci pour l’idée. Je m’en suis servi (d’une listbox) mais comme un film, en utilisant les entity sélection : c’est ultra-rapide mais on n’a pas l’aspect planche de contact. Je vais essayer avec des tableaux.

J’aurais dû dire listbox collection, plutôt que tableaux, il y a des chances pour que ce soit plus confortable à coder.

Vous avez un (vieux) code qui peut vous donner des idées dans cette base :

Les collections admettent-elles les images ? non, selon la doc, à moins que la R3…

Avec des tableaux 2D images, c’est plus simple :slight_smile:

Jamais essayé une image directement comme élément, mais comme elles admettent les objets qui admettent les images, ça devrait bien finir par faire c’qu’on lui dit d’faire…

Voilà, on peut :

Vous pouvez créer deux types de collections :

  • standard (non partagées), à l’aide de la commande New collection.
    Ces collections peuvent prendre en charge un grand nombre de types de données, y compris les images et les pointeurs.

Oui bien sûr mais dans le cas d’une gestion dynamique du nombre de colonnes d’une list box c’est aujourd’hui encore plus facile de travailler avec des tableaux qu’avec des collections.
Je vais m’attaquer à ce problème un de ces jours.

Un test vite fait pour compléter…

Case of 
	: (Form event=On Load)
		$chemin_t:=Convert path POSIX to system("/Users/arnaud/Desktop/")
		DOCUMENT LIST($chemin_t;$doc_at)
		$image_c:=New collection()
		$motif_t:="Capture d’écran@"
		For ($i_l;1;Size of array($doc_at))
			$doc_t:=$doc_at{$i_l}
			If ($doc_t=$motif_t)
				READ PICTURE FILE(($chemin_t+$doc_t);$image_i)
				CREATE THUMBNAIL($image_i;$imagette_i)
				$obj:=New object
				$obj.nom:=$doc_t
				$obj.image:=$imagette_i
				$image_c.push($obj)
			End if 
		End for 
		Form.LBc:=$image_c 
End case

Salut Vincent,
comme je me demandais pourquoi tu disais ça, j’ai tenté l’exercice (histoire de combler de sérieuses lacunes avec ces listbox collection, aussi). Je ne vois pas de difficulté particulière, je rate un truc ?
Le formulaire et sa listbox sont ceux utilisées plus haut, je ne mets que le code.

Case of 
		
	: (Form event=On Load)
		
		$racine_t:=Convert path POSIX to system("/Users/arnaud/Desktop/")
		ARRAY TEXT($doc_at;0)
		DOCUMENT LIST($racine_t;$doc_at;Absolute path)
		C_COLLECTION($doc_c)
		$doc_c:=New collection
		ARRAY TO COLLECTION($doc_c;$doc_at)
		
		C_COLLECTION($image_c)
		$image_c:=New collection
		For each ($doc_t;$doc_c)
			If ($doc_t=("@Capture d’écran@"))
				READ PICTURE FILE($doc_t;$image_i)
				CREATE THUMBNAIL($image_i;$imagette_i)
				$obj:=New object
				$obj.chemin:=$doc_t
				$obj.image:=$imagette_i
				$image_c.push($obj)
			End if 
		End for each 
		
		$nbreColonnes_l:=4  //à faire varier…
		C_COLLECTION($plancheContact_c)
		$plancheContact_c:=New collection
		
		$i_l:=0
		$ligne_o:=New object
		For each ($image_o;$image_c)
			$i_l:=$i_l+1
			$nomCol:="c"+String($i_l)
			$ligne_o[$nomCol]:=$image_o
			If ($i_l=$nbreColonnes_l)  //nouvelle ligne
				$plancheContact_c.push($ligne_o)
				$ligne_o:=New object
				$i_l:=0
			End if 
		End for each 
		
		If ($ligne_o#Null)  //compléter dernière ligne avec du vent
			C_PICTURE($empty_i)
			For ($i_l;1;$nbreColonnes_l)
				$nomCol:="c"+String($i_l)
				If ($ligne_o[$nomCol]=Null)
					$obj:=New object
					$obj.chemin:=""
					$obj.image:=$empty_i
					$ligne_o[$nomCol]:=$obj
				End if 
			End for 
			$plancheContact_c.push($ligne_o)
		End if 
		
		LISTBOX DELETE COLUMN(*;"LBc";1;LISTBOX Get number of columns(*;"LBc"))
		C_POINTER($dummy_p)
		For ($i_l;1;$nbreColonnes_l)
			$col_t:="c"+String($i_l)
			$header_t:="h"+String($i_l)
			$formule_t:="This."+$col_t+".image"
			$typeDonnee_l:=Is picture
			LISTBOX INSERT COLUMN FORMULA(*;"LBc";$i_l;\
			$col_t;$formule_t;$typeDonnee_l;\
			$header_t;$dummy_p)
		End for 
		
		Form.LBc:=$plancheContact_c
		
End case 

PS1 : l’affichage de code 4D avec ce nouveau forum, c’est pas encore ça…
PS2 : dommage de ne pouvoir joindre de petites bases, comme avec 4DBB

Je dois avouer que je ne n’ai rien sous la main pour essayer ce code. Cela semble tenir la route même après un bon déjeuner de déconfinement en famille :wink: mais je regarde asap. Merci de cet essai. Mon problème est plus la réactivité au redimensionnement.

PS pour les petites bases, je crois que le mieux est de faire un répertoire dans GitHub. Ainsi chacun peut charger, essayer, modifier, et chacun en profite.

Bonne digestion :wink:

Comme les images dans le dialogue Boite à outil/ressources ?
Pour info, j’ai chronométré le code :

  • lecture des images et constitution de $image_c ~ 400ms
  • conversion de $image_c en “listbox planche de contact” ~ 2ms

S’il n’y a pas besoin de relire les images à chaque fois, ça fuse, même sur mon vieux tromblon (mac pro 2008…)

mmmm… ça va finir pas se voir que je suis flemmard :grimacing:

Combien as-tu d’images ?

Avec le tableau d’images, j’ai moins d’une seconde pour 200 images.
Je vais adapter ton code pour comparer.

Pas précisé : ce sont des imagettes, bien sûr, entre 20 et 100 ko.

Le test est fait dans les deux versions ; pour 187 imagettes, il faut :

  • collections 650 ms
  • tableaux 350 ms.
    Je reste dans la version tableaux pour pouvoir afficher des grilles d’images assez importantes.

Bonjour Bernard,
est-ce le temps de lecture des images, de constitution de la box, ou la ∑ des 2 ?