re modification layout (suite avec vrai code) | |
witzky | 18-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######################### | |
guest2 | 19-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. | |
witzky | 19-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 | |
guest2 | 19-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. | |
Didec | 20-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 | |
witzky | 21-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 ! | |
witzky | 21-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 | |
guest2 | 22-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. | |
guest2 | 22-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. | |
guest2 | 22-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. | |
witzky | 22-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 ! | |
shadwolf | 22-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 | |
shadwolf | 22-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"] | |
witzky | 22-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 ! | |
shadwolf | 23-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. | |
shadwolf | 23-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. | |
shadwolf | 23-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. | |
witzky | 23-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 ! | |
Didec | 23-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 | |
witzky | 23-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######################### | |
guest2 | 23-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. | |
witzky | 23-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] | |
witzky | 23-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 | |
guest2 | 23-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. | |
witzky | 23-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. |