liste de bouton / icon
sebastien11-Jun-2007/13:52:07+2:00
JE desire créer un explorateur pour les fichiers images
et je desire afficher les images dans des boutons
je voudrais savoir si il est possible de creer un boucle qui crée le même nombre de bouton que d image pour les afficher
guest211-Jun-2007/15:56:08+2:00
ben tu peux utiliser le style 'list pour gérér une liste d'images:

REBOL []

;repertoire des images
path: %./

image-list: []
; construction de la liste
foreach image read path [
	if find ["png" "bmp" "gif" "jpeg"] last parse image "." [
		append/only image-list reduce [image form image]
	]
]


view layout [
	vh2 "Images:"
	list 54x450 [
		origin 0 space 0
		below
		image 50x50 [print txt/text]
		txt: text blue 50
	] data image-list 

]
halt
Didec11-Jun-2007/16:31:17+2:00
Evidemment, c'est même une force de Rebol.

Code et données étant la même chose, il suffit de construire un bloc d'instructions VID que tu fera interpréter par LAYOUT ensuite.

Voilà un bon début à étudier et améliorer (attention : mangeur de mémoire si beaucoup et grosses images)
rebol []

dir: request-file/only
if none? dir [quit]
dir: first split-path dir

; Est-ce une image ? Oui si l'extension est bonne
image?: func [file [file!]] [
	found? find [%.jpg %.gif %.png %.bmp] find/last file #"."
]


cpt: 0
make-button-panel: func [dir /local lay dir-f emit] [
	; le block que l'on créé, avec le style de bouton par défaut
	lay: copy [
		origin 4x4 space 4x4 across
		style but button 70x50
	]
	; petite fonction utilitaire pour ajouter au layout
	emit: func [blk] [
		append lay compose/deep blk
	]
	
	; parcours des fichiers
	foreach f read dir [

		dir-f: join dir f
		; c'est un répertoire : récursion dans une nouvelle fenêtre si on clic
		either dir? dir-f [
			emit [but (form f) [view/new layout make-button-panel (dir-f)]]
		] [
			; c'est une image
			either image? f [
				emit [but (form f) (dir-f) [print (dir-f)]]
			] [
				; c'est autre chose
				emit [but (form f)]
			]
		]
		; on met pas plus de 10 boutons par ligne
		cpt: cpt + 1
		if 0 = (cpt // 10) [emit [return]]
	]
	lay
]

view layout make-button-panel dir
guest211-Jun-2007/17:07:13+2:00
Une solution pour ne pas manger de la mémoire, c'est de réduire les images avant de les passer au layout.


...
			; c'est une image
			either image? f [
				; réduction de l'image au format icone (pour sauver de la mémoire)
				img: to-image make get-style 'image [offset: 0x0 image: load dir-f size: 70x50]
				
				emit [but (form f) (img) [print (dir-f)]]
			] [
				; c'est autre chose
				emit [but (form f)]
			]
...
Didec11-Jun-2007/17:21:10+2:00
Je laissais cet exercice au lecteur
guest211-Jun-2007/17:23:31+2:00
c'est ton côté prof ça
guest215-Jun-2007/23:20:03+2:00
Pas de nouvelles, bonnes nouvelles.
Enfin, il parait...

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2