re modification layout (suite avec vrai code)
witzky18-Apr-2009/14:36:48+2:00
je m'excuse mais afin de faciliter l'aide que l'on voudra bien m'apporter je mets le code simplifié.

Toutes les images cliquées produisent le même numéro ??????
alors que dump-face indique bien la présence de photos différentes !

Qui veut bien m'aider ? merci


rebol [title: "Visualisateur"]

;###################### affichage photos planche-lay########################
afficher: does [
clear planche-lay/pane
   a: 1
b: 0
   ofst: 20x20
   foreach file files[         
   b: b + 1
   if b = 13 [break]               
   img: join rep file         
   img: load img       
   append planche-lay/pane make-face/spec 'image [image: img offset: ofst size: 162x140 text: form b
   action: [print dump-face planche-lay prin "numéro de photo:" print text]         
   ] ;append      
   ofst: ofst + (180 * 1x0)   
   a: a + 1      
   if a = 5 [ofst: 20x175]   
   if a = 9 [ofst: 20x340]
   ]; for each
   
   show planche-lay
   ]; does
;###################### fin affichage photos planche##########################

;###################### création layout planche###############################
visu_planche: does [view/new/offset planche-lay: layout [
   size 730x490   
   ] planche-offset: 150x150]
;###################### fin création layout planche#######################
   
;###################### préparation affichage#############################
affichage: does [;préparation etlecture des images
   image-file?: func ["Returns true if file is an image" file] [
find [%.bmp %.jpg %.jpeg %.gif %.png] find/last file "."]
   files: read rep ;-- Read local file list, but want just image files...
   while [not tail? files] [
either image-file? first files [files: next files][remove files]]   
files: head files
   if empty? files [
inform layout [backdrop 140.0.0 text bold "No images found"]
do-events quit]   
;affiche le contenu des photos du path choisi
   clear texte_liste/data
   append texte_liste/data files
   show texte_liste]   
   ;###################### fin préparation affichage###########################

   
   ;###################### création fenêtre principale#########################
fen: [
   return
   texte_liste: text-list 350x250    
   button 350x24 "Stocker dans ce répertoire" [rep2: request-dir "select" rep_destination/text: copy rep2
   show rep_destination]

   rep_destination: area 350x20 ""   
   button 350x24 "choisir un répertoire" [rep: request-dir "select" rep_travail/text: copy rep
   show rep_travail
   affichage ]
   rep_travail: area 350x20 "" ; suite de l'interface 1
   button 350x24 "OK !" forest [visu_planche afficher ]
         
   ]
   fen: layout fen
   view center-face fen
   ;###################### fin création fenêtre principale#########################
guest219-Apr-2009/1:37:37+2:00
Utilise les balises [code][/code] ou indente correctement
ton code, parce que là c'est illisible, ça donne pas envie.

Tu viens de Python ?
Arf, c'est un peu brouillon cette façon de faire.
En gros ton truc, c'est compliqué pour pas grand chose.

A ton niveau, je te conseille d'utiliser uniquement VID.
N'essaye pas de mélanger du dialecte VID avec des faces créées à la volée avec make.

Sinon ton problème vient du bloc action qui est global au lieux d'être local à la face que tu crées.
Bref, utilise VID et lis bien la doc, la clé pour créer des sous-layouts dynamique c'est l'utilisation du style panel.
witzky19-Apr-2009/8:11:56+2:00
Merci pour les conseils !
Je vais m'appliquer à soigner l'indentation !
Pour le reste je ne vois pas dans la doc comment afficher des images (boucle foreach) dans un layout existant et effacé (clear) sans utiliser make-face ???????.

merci de ton aide
guest219-Apr-2009/9:58:28+2:00
La Doc, c'est une façon de parler.
Ca veut dire, utilise toutes les sources d'info avant de réinventer la roue.
Ton problème a été traité de nombreuses fois, ici même, sur www.rebol.org, ou la mailing list.

N'utilise pas make-face à moins de comprendre pleinement ce que ça fait, ce qui vu ton problème, n'est pas le cas.

Construits des blocs de dialecte VID dynamiquement, puis reconstruits tes faces en utilisant le fonction layout, c'est le plus simple.
Didec20-Apr-2009/14:59:08+2:00
Comme l'a dit Guest2 pour mettre du code il y a des balises à mettre : je te conseille le bouton "Help", là haut avec les autres !

Maintenant, pour éclairer les conseils de Guest2, un petit exemple avec des boutons. Je te laisse le soin de l'adapter aux images.

rebol []
; début du contenu de la fenêtre en VID
lay: [title "Des boutons!" below]

; parcours des élements à ajouter
foreach n ["Un" "Deux" "Trois"] [
    ; ajout à la description de la fenêtre en VID
    append lay compose[button (n) [print face/text]]
]
; fin de description de la fenêtre
append lay [btn "Quitter" [quit]]
; création et affichage de la fenêtre
view layout lay
witzky21-Apr-2009/13:30:25+2:00
merci beaucoup didec c'est vraiment sympa !

J'ai 63 ans et ce n'est pas toujours évident !
witzky21-Apr-2009/13:40:30+2:00
salut Dicec
J'ajoute pourtant que sur ce canevas mon vrai problème est d'effacer le lay et de repartir pour un nouvel affichage.

J'ai essayé en récreant un nouveau lay mais très vite (80 photos par lat de 10) : not enough memory !!!!

Merci merci beaucoup
guest222-Apr-2009/6:06:34+2:00
Hum... Oui c'est vrai qu'avec VID toutes les images restent en cache (la faute à load-image).
Pour éviter ça, il ne faut pas mettre le nom du fichier dans le layout mais une variable contenant l'image.

pas ça:
layout [image %img.jpg]


mais ça:
img1: load %img.jpg
layout [image img1]


Après fais bien gaffe de réinitialiser à none les variables que tu n'utilises plus et fait un recycle aussi.
guest222-Apr-2009/6:06:51+2:00
Hum... Oui c'est vrai qu'avec VID toutes les images restent en cache (la faute à load-image).
Pour éviter ça, il ne faut pas mettre le nom du fichier dans le layout mais une variable contenant l'image.

pas ça:
layout [image %img.jpg]


mais ça:
img1: load %img.jpg
layout [image img1]


Après fais bien gaffe de réinitialiser à none les variables que tu n'utilises plus et fait un recycle aussi.
guest222-Apr-2009/6:07:14+2:00
Hum... Oui c'est vrai qu'avec VID toutes les images restent en cache (la faute à load-image).
Pour éviter ça, il ne faut pas mettre le nom du fichier dans le layout mais une variable contenant l'image.

pas ça:
layout [image %img.jpg]


mais ça:
img1: load %img.jpg
layout [image img1]


Après fais bien gaffe de réinitialiser à none les variables que tu n'utilises plus et fait un recycle aussi.
witzky22-Apr-2009/8:11:48+2:00
salut, c'est pépé
Avec des profs comme vous on progresse vite ! merci

suite de mes soucis donc :

chargement: does [...je charge des images. 1. 2. 3. 4.. dans files]

affichage: does[
block: []
b: 0            
foreach file files [         
img: join rep file            
append block [icon img text form b [alert " form b"]]
print img
]; for each

lay: layout block   
view lay   
]


block: []
append block [button red " effacer tout"[clear lay/pane show lay chargement affichage ]]
lay: layout block
view lay

qui me dira pourquoi j'ai 4 fois la dernière image à l'affichage alors que "print image" donne 4 images différentes ?????
merci de vos compétences

Je précise que sur vos conseils je réécris à chaque fois mon petit visionneur ....pour apprendre !
shadwolf22-Apr-2009/10:59:11+2:00
le probleme viens d'ici ->

append block [icon img text form b [alert " form b"]]

alors pour expliquer les chose simplement tu charges bien tes images dans la variable img, cependant tu mets dans tes 4 faces un pointeur et non le contenu de limage du coup toutes face on contiennent le même pointeur vers la derniere images qui a été mise dans le pointeur img.

une méthode pas elegante mais qui assure qu'on ait vraiement le contenu de l'image qu'on veut et pas un pointeur c'est la fonction compose
append block compose/deep [icon (img) text form (b) [alert join " form " to string! (b)]]
avec compose tu t'assure que ce qui est mis dans ta création de block dynamique c'est le contenu des variables mises entre parathèses et non le pointeur vers les données.

une variable en rebol c'est un pointeur
donc si tu as 4 lignes avec .... img....b... b et img pour les 4 lignes contiendront la dernière valeur injectée dans img et b. (puisqu'en fait on ne va aller chercher le contenu "réel" de ces variables qu'au momment de l'affichage et non au momment ou tu crée le block.

imaginons tu as 2 lignes dans ton block layout
[ icon img ...
icon img ...
]
a la premiere injecttion img contenait %monrep/toto.jpg
a la deuxieme injection img contenait monrep/titi.jpg mais comme tu as inject le référent et pas le contenu tes deux icon se retrouvent une fois affichés avec la meme image qui en plus est la derniere que tu as traitée dans ta boucle foreach qui a construit ton block layout.

avec compose tu t'assure que ton block layout contient effectivement
[ icon %monrep/toto.jpg
icon %monrep/titi.jpg
] comme ca quand tu feras ton view layout tes icon seront chargé avec les bonne images

une derniere chose l'argument que tu donnes a icon est de type path! et pas de type string! les variable des rébol n'étant pas typée ca peut posé un problème. il ne faut pas oublier en cas de saisie par l'utilisateur du chemin des fichier de reconvertir les string issues de la saisie en path! avec l'instruction to-path.
Un autre truc pour "examiner" le contenu de tes variables au lieu d'utiliser print utilise plutot probe. la différence c'est que print imprime les données convertie en string! c'est possible alors que probe les laissent telquels ce qui permet de savoir précisément le type.

plutot que block: [] utilise clear block comme ca tu réutilise le meme espace mémoire pour le prochain contenu de ta variable block plutot que de réserver un nouvel contenu en mémoire.
block: [] -> reserve de la mémoire en adresse mémoire
clear block -> vide le contenu précédent du block et utilise toujour comme adresse de début l'adresse déja reservée en mémoire.

un autre conseil plus prosaïque évite d'appeler tes variables du noms de type! de donné rebol appel block layout-blk par example ou contenu-de-ma-fenetre
shadwolf22-Apr-2009/11:14:42+2:00
voici une petite démonstration ce ce principe

>> img: %toto.jpg
== %toto.jpg
>> block: [] append block [icon img text "text"]
== [icon img text "text"]
>> probe block
[icon img text "text"]
== [icon img text "text"]
>> block: [] append block compose [icon (img) text "text"]
== [icon %toto.jpg text "text"]
>> probe block
[icon %toto.jpg text "text"]
== [icon %toto.jpg text "text"]
witzky22-Apr-2009/16:50:30+2:00
Salut shadwolf !
Epoustouflant ! Quel pro !
Voilà ce que j'aurais aimé trouvé dans un manuel !
Que de conseils en peu de lignes !
Ca fait plaisir ! Et Ca réconcilie avec les blogs car bien sûr ces sujets ont été traités. Mais s'il faut se farcir 100 topics ! plus ou moins sur le même sujet.
Et puis moi je ne comprend qu'en faisant. Exemple les pointeurs.
Allez à la prochaine !
shadwolf23-Apr-2009/7:35:13+2:00
Il y a un très bon livre sur rebol écris par Olivier Averlot
C'est une très bonne initiation aux monde rebol.
Je le recommande fortement.


Une autre méthode sans "compose" mais qui force a faire un peu attention a ce qu'on écrit c'est :

>> block: [] insert insert insert insert tail block 'icon img 'text "montext"
== []
>> probe block
[icon %toto.jpg text "montext"]
== [icon %toto.jpg text "montext"]

Cette ligne est divisée en 2 parties et a comme pivot (point de symétrie on peut dire) les mot tail block.
A partir de ces mots ce qui se trouve a gauche (les insert donc) doivent etre aussi nombreux que ce qui se trouve a droite de "tail block" tout les mots qui se trouvent a droite s'il ne contienent pas un ' au debut de leur nom est remplacé par leur véritable valeur. Ou du moins rebol essaiera de les remplace par la valeur réelle qui leur est attribuée.
shadwolf23-Apr-2009/7:42:16+2:00
Documentation en anglais


http://www.rebol.com/docs/changes.html#section-2.2

y a des examples avec de courtes exaplications.
shadwolf23-Apr-2009/7:42:37+2:00
Documentation en anglais


http://www.rebol.com/docs/changes.html#section-2.2

y a des examples avec de courtes exaplications.
witzky23-Apr-2009/8:00:57+2:00
Bonjour à tous ! shadwolf,guest2,

Hier soir , groz dézeption..... sur le canevas
append block compose/deep [icon (img) text form (b) [alert join " form " to string! (b)]]

au bout de 9 rechargements de block précédés de clear block
not enough memory
! ?????

Il n'y a pas un seul load image !


pour afficher des icons par 10 ma fonction d'affichage s'appelle elle-même ?????
est-ce que ça a quelque chose à voir ???

finalement le seul problème c'est la gestion mémoire !

merci pour tout !
Didec23-Apr-2009/11:12:47+2:00
Pourrais tu nous poster le code complet (entre balises [ code ], voir le bouton"Help") pour nous permettre de voir le problème exact.

En attendant cela, une petite question : d'où proviennent tes images ?

Si, comme je le suppose, il s'agit de photos numériques, alors se sont de grosses images (5 Megapixel au moins).

Rappel, 1 Megapixel = 4 Mo minimum (3 octets par pixels + 1 pour la transparence).

Donc, 10 photos chargées = 50 Mpx = 200 Mo mini.

Hors actuellement, si l'image est affichée en taille réduite, elle est tout de même pleine et entière en mémoire, et donc plus il y en a et plus ça croque ta RAM !!

Le but étant de faire des icones (ou miniatures) de ces images, je te propose de ne charger les images qu'une par une et des les réduires aussitôt. Ainsi, la RAM n'est pas bouffée.

rebol []

; taille des vignettes a créer
img-sz: 100x100
; emplacement des images
dossier-images: to-rebol-file "E:\Mes documents\_PERSO_\Photos\2008_01_19\"

; fonction pour créer une vignette d'une image
creer-timbre: func [fichier [file!] taille [pair!] /local img ratio] [
	fichier: load fichier
	ratio: fichier/size/x / fichier/size/y
	either ratio > 1 [
		taille/y: taille/y / ratio
	] [
		taille/x: taille/x * ratio
	]
	draw taille compose [image-filter bilinear image (fichier) 0x0 taille]
]


; lecture liste des fichiers
liste-images: read dossier-images

; layout de base : on redefini le style icon à la taille que l'on veut
lay-blk: [
	across
	style icon icon img-sz + 4x20 with [
		append init [if 'fit = self/pane/effect [self/pane/effect: 'aspect]]
	]
]
; compteur d'image
cpt: 0

; parcours de la liste des fichiers
foreach img liste-images [
	; l'extension du fichier est celle d'une image
	if find [%.jpg %.jpeg %.png %.gif %.bmp] find/last img "." [
	
		; on prévient, car ça peut être long
		print ["Chargement (" cpt "): " img]
		
		; chemin complet de l'image
		img: join dossier-images img
		; incrementation du compteur
		cpt: cpt + 1
		
		; ajout au block VID en creant un timbre poste de l'image au passage
		append lay-blk compose/deep [icon (creer-timbre img img-sz) (form cpt) [alert join "form " (cpt)]]
		
		; on fait des lignes de 4 icones
		if cpt // 4 = 0 [append lay-blk 'return]
	]
]

; affichage
view layout lay-blk
witzky23-Apr-2009/15:19:02+2:00
Je suis confus et j'ai honte !
Je ne sais à quoi correspond le bouton help ?
Je joins donc mon code qui marche mais s 'arrête au bout de 78 photo (par 10]

J'ai ma première version finie avec make-face qui elle marche sans que je sache pourquoi !

version avec problèmes mémoire

rebol [title: "Visualisateur" ]
   fourchette_B: 0
   fourchette_H: 0

   
;######################## show picked ###################################   
diapo: func [photo]
[
phot: photo
photo: join rep photo

image: load photo
largeur: image/size/x
hauteur: image/size/y
either largeur > hauteur
[ ;top either
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 800x600 effect [aspect]
edge [size 5x5 color: 200.150.200 effect: [bevel]]
[ ;top action
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo
] ; ;layout
] ; end either 1
[ ; top either 2
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 450x600 effect [aspect]
[ ; top action
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo
] ; ;layout
] ;end either 2
] ;end func   
;#########################show picked###################################   
   
;#########################fix slider###################################   
fix-slider: func [faces [object! block!]] [
foreach list to-block faces [
list/sld/redrag list/lc / max 1 length? head list/lines
]
]
;#########################fix slider###################################      
         
;###################### affichage photos planche##############################

incrust: func [signal][
;recycle/on

;foreach elem lay/pane [
;foreach facet remove first elem [
;set in elem facet none
;]
;]
;block: []
signal: form signal
clear block
print length? lay/pane
;show lay
;block: []

;_____________________________________________
   a: 0
b: 0
c: 0
;prin " valeur 1 de c " print c
   
   
   switch signal [
   "plus" [fourchette_B: fourchette_H + 1
   fourchette_H: fourchette_B + 10]
   "moins" [fourchette_B: fourchette_B - 11
fourchette_H: fourchette_B + 10]
   "first" [fourchette_B: 1
fourchette_H: 11]
   "end" [fin: length? files
   fourchette_B: fin - 10
fourchette_H: fin]

]
   
   if fourchette_B < 0 [
   fourchette_B: 1
   fourchette_H: 11   
   ]

   ofst: 20x20
   foreach file files[         
   c: c + 1
   b: b + 1      
   if c = 1 [ofst: 20x20]
   if all [b >= fourchette_B b <= fourchette_H] [            
   
   img: join rep file   
      
   tab: 'across
   a: a + 1      
   ;if a = 1 [tab: 'across]
   if a = 5 [tab: 'return]   
   if a = 9 [tab: 'return]
   
   if error? try [
   
   ;if hauteur > largeur [ofst: ofst +(30 * 1x0)]
   
   append block compose/deep [   
   (tab) icon (img)172x150 [alert to string! (img)] text form (b) ]

   

]; fin "if error try"
   
   [; top volet 2 try
   print "erreur"
   
   
    ];end deuxième volet try   
   ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   
   
   ]; if b >10
   
   if b = fourchette_H [break]
   
   
   ];end for each
   image: none
   gauche: %left2.jpg
   droite: %right2.jpg
   append block compose/deep [   
   at 650x340 arrow 50x50 left gold [incrust["moins"]]
   at 720x340 arrow 50x50 right gold [incrust["plus"]]
   at 650x410 image (gauche) 50x50 gold [alert join " form " to string! (b)]
   at 720x410 image (droite) 50x50 gold [alert join " form " to string! (b)]
    ]
   ;chemin: what-dir
   
   
   lay: layout block   
view lay
   
;_____________________________________________
   
   ]; does
;###################### affichage photos planche##############################
   ;###################### affichage photos planche##############################
;###################### fin affichage photos planche##########################


;###################### création layout planche###############################
   visu_planche: does [
   block:[size 740x490 backcolor forest]
   append block compose [
    at 90x225 text "Chargement ! Patience !" font-size 52 gold
   
   ]
   lay: layout block
      
   view lay
   ]
;###################### fin création layout planche#######################
   
;###################### préparation affichage#############################
affichage: does [;préparation etlecture des images
   image-file?: func ["Returns true if file is an image" file] [
find [%.bmp %.jpg %.jpeg %.gif %.png] find/last file "."]
   files: read rep ;-- Read local file list, but want just image files...
   while [not tail? files] [
either image-file? first files [files: next files][remove files]]   
files: head files
   if empty? files [
inform layout [backdrop 140.0.0 text bold "No images found"]
do-events quit]   
;affiche le contenu des photos du path choisi
   clear texte_liste/data
   append texte_liste/data files
   fix-slider texte_liste
   liste: array[500]
   liste2: array[500]
   b: 0
   foreach file files[         
   b: b + 1                  
   img: join rep file   
   ;poke liste b img ; inscrit dans la position b l'image img      
   ;poke liste2 b file ; inscrit le nom de la photo   
]
   show texte_liste]
   
   
   ;###################### fin préparation affichage###########################
;###################### création fenêtre principale#########################
fen: [
   return
   ;backdrop effect [gradient 0x1 50.120.100 0.30.0]
   backdrop effect [luma -80 emboss gradcol 1x0 0.0.255 255.0.0 gradmul 0x1 0.255.255 141.200.0]
   ;backcolor forest
   texte_liste: text-list 350x250 [

   ligne_pickée: form texte_liste/picked

diapo [ligne_pickée]
]
   button effect [gradient 0x1 150.30.200 0.30.0] 350x24 "1 Choisir un répertoire" [rep: request-dir "select"   
   either rep = none
   [exit]
   [rep_travail/text: copy rep]
   show rep_travail affichage ]
   rep_travail: area 350x20 ""    
   button effect [gradient 0x1 150.30.200 0.30.0] 350x24 "2 Stocker mon choix dans ce répertoire" [rep2: request-dir "select"    
   either rep2 = none
   [exit]
   [rep_destination/text: copy rep2
   show rep_destination
   ]   
   ]
   rep_destination: area 350x20 ""   
   button effect [gradcol 1x0 0.0.255 222.245.0 gradient 1x1 153.221.225 157.20.255]350x24 "3 Visualiser les photos !" [
   either rep_travail/text <> "" [visu_planche incrust ["plus"]] [Alert "Choississez un répertoire en 1 !" ]
   ]      
   ]      
   fen: layout fen
   view center-face fen      
   ;###################### fin création fenêtre principale#########################






version sans problèmes mémoire


rebol [title: "Visualisateur" ]
   fourchette_B: 0
   fourchette_H: 0

   
;######################## show picked ###################################   
diapo: func [photo]
[
phot: photo
photo: join rep photo
image: load photo
largeur: image/size/x
hauteur: image/size/y
   
either largeur > hauteur
[ ;top either
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 800x600 effect [aspect]
edge [size 5x5 color: 200.150.200 effect: [bevel]]


[ ;top action
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo
] ; ;layout

] ; end either 1
[ ; top either 2
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 450x600 effect [aspect]
[ ; top action
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo
] ; ;layout


] ;end either 2
] ;end func   
;#########################show picked###################################   
   
;#########################fix slider###################################   
fix-slider: func [faces [object! block!]] [
foreach list to-block faces [
list/sld/redrag list/lc / max 1 length? head list/lines
]
]
;#########################fix slider###################################      
   

;###################### affichage photos planche##############################
incrust: func [signal][
signal: form signal
clear planche-lay/pane
   a: 0
b: 0
c: 0
   switch signal [
   "plus" [fourchette_B: fourchette_H + 1
   fourchette_H: fourchette_B + 10]
   "moins" [fourchette_B: fourchette_B - 11
fourchette_H: fourchette_B + 10]
   "first" [fourchette_B: 1
fourchette_H: 11]
   "end" [fin: length? files
   fourchette_B: fin - 10
fourchette_H: fin]

]
   
   if fourchette_B < 0 [
   fourchette_B: 1
   fourchette_H: 11   
   ]   
   ofst: 20x20
   foreach file files[         
   c: c + 1
   b: b + 1      
   if c = 1 [ofst: 20x20]
   
   ;prin " valeur 2 de c " print c
   if all [b >= fourchette_B b <= fourchette_H] [            
   
   img: join rep file   
      
   ofst: ofst + (180 * 1x0)   
   
   ;prin "valeur efficace de c " print c
   a: a + 1      
   if a = 1 [ofst: 20x20]
   if a = 5 [ofst: 20x175]   
   if a = 9 [ofst: 20x335]
   
   
   if error? try [
   img: load img    
   largeur: img/size/x
   hauteur: img/size/y
   if hauteur > largeur [ofst: ofst +(30 * 1x0)]
   
   append planche-lay/pane make-face/spec 'icon [image: img size: either largeur > hauteur [162x142] [102x142 ] offset: ofst text: form b
   
   if hauteur > largeur [ofst: ofst -(30 * 1x0)]
   feel: make feel [detect: func [event] [z: to-integer text event]]   
   show planche-lay   
   ;form b = to string ou str c'est le numéro de la photo en texte   
   
   action: [
   print text   
   photo: pick liste z
   photo2: pick liste2 z   
   
   vue: load photo
   largeur: vue/size/x
   hauteur: vue/size/y
      
   view/new layout/size[at 0x0 image 800x600 photo effect [aspect]
   [ ; clic gauche
   if rep_destination/text = "" [unview planche-lay alert "Renseignez le répertoire de destination" files: none exit]
   photo3: join rep2 photo2
   write/binary photo3 read/binary photo alert "Photo enregistrée !"
   ] ; fin clic gauche
   ;[ ; clic droit sur aggrandissement photo
   ;unview planche-lay
   ;view/new layout/size[at 0x0 image 800x600 photo effect [rotate 90 aspect][alert "Clic droit pour continuer à tourner !"][alert " a tourner"]] either largeur < hauteur [800x600] [450x600
   ;];fin layout
   
   ;]; fin clic droit sur aggrandissement photo
   button "nicol"
    ]; fin layout
either largeur > hauteur [800x600] [450x600]; size layout
   image: none   
   
   ]; fin action icon   
   ]; fin make-face
   ]; fin "if error try"
   
   [; top volet 2 try
   append planche-lay/pane make-face/spec 'icon [
   ;message: join "Photo de mauvais format : " form pick liste2 b alert message
   image: load %alias.jpg size: 162x140 effect: [aspect] offset: ofst text: form pick liste2 b]
   show planche-lay      
    ];end deuxième volet try   
   
   ]; if b >10
   
   if b = fourchette_H [break]      
   ]; for each
   image: none   
   append planche-lay/pane make-face/spec 'arrow [size: 50x50 offset: 580x340 data: 'left color: gold action: [incrust ["moins"] ]]
   append planche-lay/pane make-face/spec 'arrow [size: 50x50 offset: 650x340 data: 'right color: gold action: [incrust ["plus"] ]]
   ;print what-dir
   chemin: what-dir
   
   gauche: load %left2.jpg
   droite: load %right2.jpg
   append planche-lay/pane make-face/spec 'button [image: gauche size: 50x50 offset: 580x410 color: gold action: [incrust ["first"] ]]
   append planche-lay/pane make-face/spec 'button [image: droite size: 50x50 offset: 650x410 color: gold action: [incrust ["end"] ]]   
   show planche-lay   
   ]; does

;###################### fin affichage photos planche##########################


;###################### création layout planche###############################
visu_planche: does [view/new/offset planche-lay: layout [    
backcolor forest
size 740x490 at 90x225 text "Chargement ! Patience !" font-size 52 gold    
] planche-offset: 150x150
]
;###################### fin création layout planche#######################
   

;###################### préparation affichage#############################
affichage: does [;préparation etlecture des images
   image-file?: func ["Returns true if file is an image" file] [
find [%.bmp %.jpg %.jpeg %.gif %.png] find/last file "."]
   files: read rep ;-- Read local file list, but want just image files...
   while [not tail? files] [
either image-file? first files [files: next files][remove files]]   
files: head files
   if empty? files [
inform layout [backdrop 140.0.0 text bold "No images found"]
do-events quit]   
;affiche le contenu des photos du path choisi
   clear texte_liste/data
   append texte_liste/data files
   fix-slider texte_liste
   liste: array[500]
   liste2: array[500]
   b: 0
   foreach file files[         
   b: b + 1               
   img: join rep file   
   poke liste b img ; inscrit dans la position b l'image img      
   poke liste2 b file ; inscrit le nom de la photo   
]
   show texte_liste]      
   ;###################### fin préparation affichage###########################

   
   ;###################### création fenêtre principale#########################
fen: [
   return
   ;backdrop effect [gradient 0x1 50.120.100 0.30.0]
   backdrop effect [luma -80 emboss gradcol 1x0 0.0.255 255.0.0 gradmul 0x1 0.255.255 141.200.0]
   ;backcolor forest
   texte_liste: text-list 350x250 [

   ligne_pickée: form texte_liste/picked
diapo [ligne_pickée]
]         
   button effect [gradient 0x1 150.30.200 0.30.0] 350x24 "1 Choisir un répertoire" [rep: request-dir "select"   
   either rep = none
   [exit]
   [rep_travail/text: copy rep]
   show rep_travail affichage ]
   rep_travail: area 350x20 ""       
   button effect [gradient 0x1 150.30.200 0.30.0] 350x24 "2 Stocker mon choix dans ce répertoire" [rep2: request-dir "select"          
   either rep2 = none
   [exit]
   [rep_destination/text: copy rep2
   show rep_destination
   ]   
   ]
   rep_destination: area 350x20 ""      
   button effect [gradcol 1x0 0.0.255 222.245.0 gradient 1x1 153.221.225 157.20.255]350x24 "3 Visualiser les photos !" [
   either rep_travail/text <> "" [visu_planche incrust ["plus"]] [Alert "Choississez un répertoire en 1 !" ]
   ]      
   ]   
   fen: layout fen
   view center-face fen
   ;###################### fin création fenêtre principale#########################
guest223-Apr-2009/15:36:11+2:00
ok, pour que ton code soit visible, tu dois le mettre entre
les 2 balises [ code] [ /code]
(attention pas d'espaces)

Sinon, y'a ton problème de mémoire...
TU SAIS LIRE OU PAS ?
j'ai posté 3 fois de suite le même message pour te dire de
ne pas insérer de nom de fichier image dans le layout mais de précharger l'image dans une variable.

Remarque pour ta défense, t'es pas le seul à pas m'avoir lu, Shadwolf continue de te donner le conseil inverse dans ses explications.
witzky23-Apr-2009/15:46:32+2:00
indulgence please ! je débute !
Code avec problème mémoire

 
rebol [title: "Visualisateur" ]
   	fourchette_B: 0
	fourchette_H: 0

	
;######################## show picked ###################################	
diapo: func [photo]
[
phot: photo
photo: join rep photo

image: load photo
largeur: image/size/x
hauteur: image/size/y
either largeur > hauteur
[ ;top either
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 800x600 effect [aspect]
edge [size 5x5 color: 200.150.200 effect: [bevel]]
[ ;top action
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo 
] ; ;layout
] ; end either 1
[ ; top either 2
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 450x600 effect [aspect]
[ ; top action 
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo 
] ; ;layout
] ;end either 2
]  ;end func	
;#########################show picked###################################	
	
;#########################fix slider###################################	
fix-slider: func [faces [object! block!]] [
        foreach list to-block faces [
                list/sld/redrag list/lc / max 1 length? head list/lines
        ]
]
;#########################fix slider###################################		
			
;###################### affichage photos planche##############################

 incrust: func [signal][  
  ;recycle/on
 
 ;foreach elem lay/pane [
 ;foreach facet remove first elem [
 ;set in elem facet none
 ;]
 ;]
 ;block: []  
  signal: form signal
 clear block
 print length? lay/pane
 ;show lay
  ;block: []
                                                                                                                                                                                                                                                                                                            
   ;_____________________________________________
   	a: 0
    b: 0
    c: 0
    ;prin " valeur 1 de c " print c
	
	
	switch signal [
	"plus" [fourchette_B: fourchette_H + 1
	fourchette_H: fourchette_B + 10]
	"moins" [fourchette_B: fourchette_B - 11
    fourchette_H: fourchette_B + 10]
	"first" [fourchette_B: 1
    fourchette_H: 11]
	"end" [fin: length? files
	fourchette_B: fin - 10
    fourchette_H: fin]
    
    ]
	
	if fourchette_B < 0 [
	fourchette_B: 1
	fourchette_H: 11	
	]

	ofst: 20x20
	foreach file files[			
	c: c + 1
	b: b + 1		
	if c = 1 [ofst: 20x20]
	if all [b >= fourchette_B  b <= fourchette_H] [				
	
	img: join rep file	
		
	tab: 'across
	a: a + 1		
	;if a = 1   [tab: 'across]
	if a = 5  [tab: 'return]	
	if a = 9  [tab: 'return]
	
	if error? try [
	
	;if hauteur > largeur [ofst: ofst +(30 * 1x0)]
	
	append block compose/deep [	
	(tab) icon (img)172x150  [alert to string! (img)] text form (b)  ]
   
	
    
    ]; fin "if error try"
	
	[; top volet 2 try
	print "erreur"
	
	
	 ];end deuxième volet try	
	;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	
	
	]; if b >10
	
	if b = fourchette_H [break]
	
	
	];end  for each
   	image: none
	gauche:  %left2.jpg
	droite:  %right2.jpg
   	append block compose/deep [	
	at 650x340 arrow 50x50 left gold [incrust["moins"]]
	at 720x340 arrow 50x50 right gold [incrust["plus"]]
	at 650x410 image (gauche) 50x50  gold [alert join " form " to string! (b)]
	at 720x410 image (droite) 50x50  gold [alert join " form " to string! (b)]
	   ]   
	;chemin: what-dir
	
	
	lay: layout block	
    view lay
   	
   ;_____________________________________________
	
	]; does
   ;###################### affichage photos planche############################## 
	;###################### affichage photos planche##############################
   ;###################### fin affichage photos planche##########################
   
   
   ;###################### création layout planche###############################
   	visu_planche: does [
   	block:[size 740x490 backcolor forest]
  	append block compose [
  	 at 90x225 text "Chargement ! Patience !" font-size 52 gold  
	
	]
	lay: layout block
		
	view lay
	]
    ;###################### fin création layout planche#######################
	
    ;###################### préparation affichage#############################
    affichage: does [;préparation etlecture  des images
	image-file?: func ["Returns true if file is an image" file] [
    find [%.bmp %.jpg %.jpeg %.gif %.png] find/last file "."]
	files: read rep  ;-- Read local file list, but want just image files...
	while [not tail? files] [
    either image-file? first files [files: next files][remove files]]	   
    files: head files 
	if empty? files [
    inform layout [backdrop 140.0.0 text bold "No images found"]
    do-events quit]	
    ;affiche le contenu des photos du path choisi
	clear texte_liste/data 
	append texte_liste/data files
	fix-slider texte_liste
	liste: array[500]
	liste2: array[500]
	b: 0
	foreach file files[			
	b: b + 1						
	img: join rep file	
	;poke liste b img ; inscrit dans la position b l'image img		
	;poke liste2 b file ; inscrit le nom de la photo	
]
	show texte_liste]
	
	
	;###################### fin préparation affichage###########################
    ;###################### création fenêtre principale#########################  
    fen: [
	return 
	;backdrop effect [gradient 0x1 50.120.100 0.30.0]
	backdrop effect [luma -80 emboss gradcol 1x0 0.0.255 255.0.0 gradmul 0x1 0.255.255 141.200.0]
	;backcolor forest
	texte_liste: text-list  350x250  [
           
	ligne_pickée: form texte_liste/picked
            
            diapo [ligne_pickée]
        ]
	button effect [gradient 0x1 150.30.200 0.30.0] 350x24  "1  Choisir un répertoire"  [rep: request-dir "select"	
	either rep = none
	[exit]
	[rep_travail/text: copy rep]
	show rep_travail affichage ]
	rep_travail: area 350x20 "" 	
	button effect [gradient 0x1 150.30.200 0.30.0] 350x24  "2  Stocker mon choix dans ce répertoire" [rep2: request-dir "select" 	
	either rep2 = none
	[exit]
	[rep_destination/text: copy rep2
	show rep_destination
	]	
	]
	rep_destination: area 350x20 ""	
	button effect [gradcol 1x0 0.0.255 222.245.0 gradient 1x1 153.221.225 157.20.255]350x24 "3  Visualiser les photos !" [
	either rep_travail/text <> "" [visu_planche incrust ["plus"]] [Alert "Choississez un répertoire en 1 !" ]
	]		
	]		
	fen: layout fen
	view center-face fen		
	;###################### fin création fenêtre principale#########################



[ code]
rebol [title: "Visualisateur" ]
   fourchette_B: 0
   fourchette_H: 0

   
;######################## show picked ###################################   
diapo: func [photo]
[
phot: photo
photo: join rep photo
image: load photo
largeur: image/size/x
hauteur: image/size/y
   
either largeur > hauteur
[ ;top either
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 800x600 effect [aspect]
edge [size 5x5 color: 200.150.200 effect: [bevel]]


[ ;top action
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo
] ; ;layout

] ; end either 1
[ ; top either 2
view/new center-face layout [ backdrop effect [gradient 0x1 50.120.100 0.30.0] image load photo 450x600 effect [aspect]
[ ; top action
photo3: join rep2 phot
write/binary photo3 read/binary photo alert "Photo enregistrée !"
] ; action photo
] ; ;layout


] ;end either 2
] ;end func   
;#########################show picked###################################   
   
;#########################fix slider###################################   
fix-slider: func [faces [object! block!]] [
foreach list to-block faces [
list/sld/redrag list/lc / max 1 length? head list/lines
]
]
;#########################fix slider###################################      
   

;###################### affichage photos planche##############################
incrust: func [signal][
signal: form signal
clear planche-lay/pane
   a: 0
b: 0
c: 0
   switch signal [
   "plus" [fourchette_B: fourchette_H + 1
   fourchette_H: fourchette_B + 10]
   "moins" [fourchette_B: fourchette_B - 11
fourchette_H: fourchette_B + 10]
   "first" [fourchette_B: 1
fourchette_H: 11]
   "end" [fin: length? files
   fourchette_B: fin - 10
fourchette_H: fin]

]
   
   if fourchette_B < 0 [
   fourchette_B: 1
   fourchette_H: 11   
   ]   
   ofst: 20x20
   foreach file files[         
   c: c + 1
   b: b + 1      
   if c = 1 [ofst: 20x20]
   
   ;prin " valeur 2 de c " print c
   if all [b >= fourchette_B b <= fourchette_H] [            
   
   img: join rep file   
      
   ofst: ofst + (180 * 1x0)   
   
   ;prin "valeur efficace de c " print c
   a: a + 1      
   if a = 1 [ofst: 20x20]
   if a = 5 [ofst: 20x175]   
   if a = 9 [ofst: 20x335]
   
   
   if error? try [
   img: load img    
   largeur: img/size/x
   hauteur: img/size/y
   if hauteur > largeur [ofst: ofst +(30 * 1x0)]
   
   append planche-lay/pane make-face/spec 'icon [image: img size: either largeur > hauteur [162x142] [102x142 ] offset: ofst text: form b
   
   if hauteur > largeur [ofst: ofst -(30 * 1x0)]
   feel: make feel [detect: func [event] [z: to-integer text event]]   
   show planche-lay   
   ;form b = to string ou str c'est le numéro de la photo en texte   
   
   action: [
   print text   
   photo: pick liste z
   photo2: pick liste2 z   
   
   vue: load photo
   largeur: vue/size/x
   hauteur: vue/size/y
      
   view/new layout/size[at 0x0 image 800x600 photo effect [aspect]
   [ ; clic gauche
   if rep_destination/text = "" [unview planche-lay alert "Renseignez le répertoire de destination" files: none exit]
   photo3: join rep2 photo2
   write/binary photo3 read/binary photo alert "Photo enregistrée !"
   ] ; fin clic gauche
   ;[ ; clic droit sur aggrandissement photo
   ;unview planche-lay
   ;view/new layout/size[at 0x0 image 800x600 photo effect [rotate 90 aspect][alert "Clic droit pour continuer à tourner !"][alert " a tourner"]] either largeur < hauteur [800x600] [450x600
   ;];fin layout
   
   ;]; fin clic droit sur aggrandissement photo
   button "nicol"
    ]; fin layout
either largeur > hauteur [800x600] [450x600]; size layout
   image: none   
   
   ]; fin action icon   
   ]; fin make-face
   ]; fin "if error try"
   
   [; top volet 2 try
   append planche-lay/pane make-face/spec 'icon [
   ;message: join "Photo de mauvais format : " form pick liste2 b alert message
   image: load %alias.jpg size: 162x140 effect: [aspect] offset: ofst text: form pick liste2 b]
   show planche-lay      
    ];end deuxième volet try   
   
   ]; if b >10
   
   if b = fourchette_H [break]      
   ]; for each
   image: none   
   append planche-lay/pane make-face/spec 'arrow [size: 50x50 offset: 580x340 data: 'left color: gold action: [incrust ["moins"] ]]
   append planche-lay/pane make-face/spec 'arrow [size: 50x50 offset: 650x340 data: 'right color: gold action: [incrust ["plus"] ]]
   ;print what-dir
   chemin: what-dir
   
   gauche: load %left2.jpg
   droite: load %right2.jpg
   append planche-lay/pane make-face/spec 'button [image: gauche size: 50x50 offset: 580x410 color: gold action: [incrust ["first"] ]]
   append planche-lay/pane make-face/spec 'button [image: droite size: 50x50 offset: 650x410 color: gold action: [incrust ["end"] ]]   
   show planche-lay   
   ]; does

;###################### fin affichage photos planche##########################


;###################### création layout planche###############################
visu_planche: does [view/new/offset planche-lay: layout [    
backcolor forest
size 740x490 at 90x225 text "Chargement ! Patience !" font-size 52 gold    
] planche-offset: 150x150
]
;###################### fin création layout planche#######################
   

;###################### préparation affichage#############################
affichage: does [;préparation etlecture des images
   image-file?: func ["Returns true if file is an image" file] [
find [%.bmp %.jpg %.jpeg %.gif %.png] find/last file "."]
   files: read rep ;-- Read local file list, but want just image files...
   while [not tail? files] [
either image-file? first files [files: next files][remove files]]   
files: head files
   if empty? files [
inform layout [backdrop 140.0.0 text bold "No images found"]
do-events quit]   
;affiche le contenu des photos du path choisi
   clear texte_liste/data
   append texte_liste/data files
   fix-slider texte_liste
   liste: array[500]
   liste2: array[500]
   b: 0
   foreach file files[         
   b: b + 1               
   img: join rep file   
   poke liste b img ; inscrit dans la position b l'image img      
   poke liste2 b file ; inscrit le nom de la photo   
]
   show texte_liste]      
   ;###################### fin préparation affichage###########################

   
   ;###################### création fenêtre principale#########################
fen: [
   return
   ;backdrop effect [gradient 0x1 50.120.100 0.30.0]
   backdrop effect [luma -80 emboss gradcol 1x0 0.0.255 255.0.0 gradmul 0x1 0.255.255 141.200.0]
   ;backcolor forest
   texte_liste: text-list 350x250 [

   ligne_pickée: form texte_liste/picked
diapo [ligne_pickée]
]         
   button effect [gradient 0x1 150.30.200 0.30.0] 350x24 "1 Choisir un répertoire" [rep: request-dir "select"   
   either rep = none
   [exit]
   [rep_travail/text: copy rep]
   show rep_travail affichage ]
   rep_travail: area 350x20 ""       
   button effect [gradient 0x1 150.30.200 0.30.0] 350x24 "2 Stocker mon choix dans ce répertoire" [rep2: request-dir "select"          
   either rep2 = none
   [exit]
   [rep_destination/text: copy rep2
   show rep_destination
   ]   
   ]
   rep_destination: area 350x20 ""      
   button effect [gradcol 1x0 0.0.255 222.245.0 gradient 1x1 153.221.225 157.20.255]350x24 "3 Visualiser les photos !" [
   either rep_travail/text <> "" [visu_planche incrust ["plus"]] [Alert "Choississez un répertoire en 1 !" ]
   ]      
   ]   
   fen: layout fen
   view center-face fen
   ;###################### fin création fenêtre principale#########################
[ /code]
witzky23-Apr-2009/15:55:14+2:00
OK ! guest 2
Aussitôt posté j'ai modifié en chargeant l'image dans une variable c'est ok ! un peu lent ??? mais ok
je peux lire 300 400 images sans problèmes
merci pour tout
Je vais continuer !
pour le code je regrette il ne passe pas deux jeux de balises
guest223-Apr-2009/19:47:06+2:00
Mais si ça passe, faut juste virer les foutus espaces dans les balises (ça aussi je l'ai dit).
Tu débutes ok, mais ça n'explique pas pourquoi tu n'écoutes que la moitié de ce qu'on te dit.

Autre chose, ton code est très mal indenté même avec les balises. Un peu de pitié pour nos yeux, essaye de respecter des standards quand tu codes. Va visionner des scripts sur www.rebol.org si tu ne comprends pas ce qu'est qu'indenter du code proprement.

Sinon je te conseille d'utiliser la fonction RECYCLE à chaque fois que tu reconstruits ton layout, ça aide à purger la mémoire.

Tiens bon, si tu survis à cette journée, je commencerai à faire moins de critique.
Ca se mérite de faire partie de l'élite Rebolienne, ahah.
witzky23-Apr-2009/21:45:35+2:00
ok guest !
Je survivrai !
Des coups de pied au cul ça ne fait pas de mal !
Mais je ne joue pas dans la cour des grands moi!
Rebol me fascine pour son élégance !

Merci a Didec pour son script qui correspond bien à ce que je veux faire

Bonsoir et merci à tous

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2