FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» I Love You
par JL35 Hier à 16:25

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Nouvel objet Diaporama

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 2:17

J'ai fait un diaporama qui affiche des images JPG et BMP, avec une pellicule en bas, contenant des vignettes, et des boutons premier, précédent, suivant et dernier. Chacun de ces boutons affiche l'image choisie et déplace éventuellement la pellicule. Un clic sur une vignette de la pellicule affiche également l'image.

Important:
Le programme utilise KGF.dll pour dimensionner les vignettes.
Chaque diaporama a besoin de 8 numéros d'objets libres consécutifs.


Tout est inclus dans un fichier diaporama_inc.bas. In suffit de l'inclure par #INCLUDE, et on a accès aux deux procédures qui gèrent le diaporama.

Ces deux procédures sont:

CreateDiaporama(no%,p%,x%,y%,w%,h%)
avec
no% = numéro d'objet de départ
p% = parent du diaporama
x%,y% = coin en haut à gauche du diaporama
w%,h% = dimensions du diaporama
Au retour, la variable globale diaporama_resultat% retourne l'identifiant du diaporama créé (1,2,...,20), ou -1 en cas d'erreur.

LoadDiaporama(n%,d$)
avec
n% = numéro du diaporama (valeur retournée par CreateDiaporama)
d$ = chemin vers un dossier
Au retour, la variable diaporama_resultat% contient le nombre d'images du diaporama.
Cette procédure charge toutes les images éligibles du dossier dont le chemin est spécifié.

Pour déterminer le dossier, il suffit de sélectionner un fichier quelconque dans un dossier quelconque. Les lignes suivantes construisent le chemin:
Code:
 open_dialog 11 : filter 11,"Images|*.jpg;*.bmp"
  d$ = file_name$(11)
  d$ = file_extract_path$(f$)

Voici le fichier diaporama_inc.bas:
Code:
' diaporama_inc.bas
'
' Ce module crée un objet Diaporama. On lui charge une liste*
' de fichiers image. L'objet présente une bande de vignettes
' en bas, ainsi que des boutons "<<","<",">" et ">>" pour
' déplacer la bande. Le reste de l'image est rempli par l'affichage
' d'une photo sélectionnée (par défaut, c'est la première). Un clic
' sur une des vignettes de la bande défilante affiche cette photo.

message "Ce module ne peut pas être exécuté directement."
terminate

sub CreateDiaporama(no%,p%,x%,y%,w%,h%)
  if variable("diaporama_no%")=0
    ' premier lancement: créer l'environement diaporama
    ' constantes
      dim diaporama_max%  : diaporama_max% = 20      : ' nombre maxi
      dim diaporama_nobj% : diaporama_nobj% = 8      : ' nombre d'objets requis
      dim diaporama_aff%  : diaporama_aff% = 0       : ' pour picture d'affichage: '
      dim diaporama_prm%  : diaporama_prm% = 1       : ' pour bouton "<<"
      dim diaporama_der%  : diaporama_der% = 2       : ' pour bouton ">>"
      dim diaporama_prc%  : diaporama_prc% = 3       : ' pour bouton "<"
      dim diaporama_sui%  : diaporama_sui% = 4       : ' pour bouton ">"
      dim diaporama_film% : diaporama_film% = 5      : ' pour pellicule
      dim diaporama_list% : diaporama_list% = 6      : ' pour liste des noms de fichiers
      dim diaporama_img%  : diaporama_img% = 7       : ' pour image temporaire
    ' variables
      dim diaporama_no%, diaporama_n%
      dim diaporama_resultat%
      dim diaporama_w%, diaporama_h%, diaporama_x%
      dim diaporama_liste%(diaporama_max%)           : ' liste des objets Diaporama
      dim diaporama_dossier$(diaporama_max%)         : ' liste des dossiers
      dim diaporama_nicons%(diaporama_max%)          : ' nombre de vignettes dans la pellicule
      dim diaporama_acticon%(diaporama_max%)         : ' vignette actuelle dans la pellicule
      dim diaporama_prmicon%(diaporama_max%)         : ' première vignette dans la pellicule
    ' labels
      label diaporama_premier, diaporama_precedent
      label diaporama_suivant, diaporama_dernier
      label diaporama_click
  end_if
  dim_local i%
  diaporama_resultat% = -1 : ' création impossible
  ' tester si le nombre d'objets requis est disponible
  for i%=0 to diaporama_nobj%-1
    if object_exists(no%+i%)=1 then exit_sub
  next i%
  diaporama_n% = diaporama_n% + 1
  diaporama_liste%(diaporama_n%) = no%
  diaporama_w% = w%
  if diaporama_w%<256 then diaporama_w% = 256
  if diaporama_h%<256 then diaporama_h% = 256
  ' création des objets
  ' zone d'affichage
    picture no%+diaporama_aff%
    parent no%+diaporama_aff%,p%
    top no%+diaporama_aff%,y% : left no%+diaporama_aff%,x%
    width no%+diaporama_aff%,diaporama_w% : height no%+diaporama_aff%,diaporama_h%
    color no%+diaporama_aff%,65,155,210
    stretch_on no%+diaporama_aff%
  ' bouton "premier"
    button no%+diaporama_prm%
    parent no%+diaporama_prm%,p%
    top no%+diaporama_prm%,y%+diaporama_h%
    left no%+diaporama_prm%,x%
    width no%+diaporama_prm%,18 : height no%+diaporama_prm%,64
    caption no%+diaporama_prm%,"<<"
    on_click no%+diaporama_prm%,diaporama_premier
    font_bold no%+diaporama_prm%
  ' bouton "précédent"
    button no%+diaporama_prc%
    parent no%+diaporama_prc%,p%
    top no%+diaporama_prc%,y%+diaporama_h%
    left no%+diaporama_prc%,x%+width(no%+diaporama_prm%)
    width no%+diaporama_prc%,14 : height no%+diaporama_prc%,64
    caption no%+diaporama_prc%,"<"
    on_click no%+diaporama_prc%,diaporama_precedent
    font_bold no%+diaporama_prc%
  ' bouton "dernier"
    button no%+diaporama_der%
    parent no%+diaporama_der%,p%
    top no%+diaporama_der%,y%+diaporama_h%
    left no%+diaporama_der%,x%+diaporama_w%-18
    width no%+diaporama_der%,18 : height no%+diaporama_der%,64
    caption no%+diaporama_der%,">>"
    font_bold no%+diaporama_der%
    on_click no%+diaporama_der%,diaporama_dernier
  ' bouton "suivant"
    button no%+diaporama_sui%
    parent no%+diaporama_sui%,p%
    top no%+diaporama_sui%,y%+diaporama_h%
    left no%+diaporama_sui%,left(no%+diaporama_der%)-14
    width no%+diaporama_sui%,14 : height no%+diaporama_sui%,64
    caption no%+diaporama_sui%,">"
    on_click no%+diaporama_sui%,diaporama_suivant
    font_bold no%+diaporama_sui%
  ' pellicule
    picture no%+diaporama_film%
    parent no%+diaporama_film%,p%
    top no%+diaporama_film%,y%+diaporama_h%
    left no%+diaporama_film%,x%+32
    width no%+diaporama_film%,diaporama_w%-(32*2) : height no%+diaporama_film%,64
    color no%+diaporama_film%,0,0,0
    diaporama_nicons%(diaporama_n%) = int(width(no%+diaporama_film%)/64)
    on_click no%+diaporama_film%,diaporama_click
  ' liste des fichiers
    dlist no%+diaporama_list%
  ' image temporaire
    image no%+diaporama_img%
  diaporama_resultat% = diaporama_n%
end_sub

sub LoadDiaporama(n%,d$)
  dim_local s$, actdir$, ext$, i%, ni%, res%
  diaporama_resultat% = -2      : ' chargement impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  s$ = trim$(d$)
  if len(s$)=0 then exit_sub
  if dir_exists(s$)=0 then exit_sub
  cursor_hourglass diaporama_liste%(n%)
  cursor_hourglass diaporama_liste%(n%)+diaporama_film% : display
  actdir$ = dir_current$
  diaporama_dossier$(n%) = f$
  clear diaporama_liste%(n%)+diaporama_list%
  ' charger la liste des noms de fichiers
  dir_change f$
  f$ = file_find_first$
  while f$<>"_"
    ext$ = lower$(file_extract_extension$(f$))
    if (ext$=".jpg") or (ext$=".bmp") then item_add diaporama_liste%(n%)+diaporama_list%,f$
    f$ = file_find_next$
  end_while
  file_find_close
  dir_change actdir$
  ni% = count(diaporama_liste%(n%)+diaporama_list%)
  if ni%=0 then exit_sub
  if ni%>diaporama_nicons%(n%) then ni% = diaporama_nicons%(n%)
  diaporama_acticon%(n%) = 1        : ' vignettes actuelle dans la pellicule
  diaporama_prmicon%(n%) = 1        : ' première vignette dans la pellicule
  for i% = 1 to ni%
    f$ = item_read$(diaporama_liste%(n%)+diaporama_list%,i%)
    res% = dll_call1("LoadAnyImageFile",adr(f$))
    if i%=1 then file_load diaporama_liste%(n%)+diaporama_aff%,item_read$(diaporama_liste%(n%)+diaporama_list%,i%)
    res% = dll_call2("ResizePicture",64,64)
    clipboard_paste diaporama_liste%(n%)+diaporama_img%
    2d_target_is diaporama_liste%(n%)+diaporama_film%
    2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64,0
  next i%
  diaporama_resultat% = 0
  cursor_default diaporama_liste%(n%)
  cursor_default diaporama_liste%(n%)+diaporama_film%
end_sub

sub GetDiaporamaImageCount(n%)
  diaporama_resultat% = -2      : ' exécution impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  diaporama_resultat% = count(diaporama_liste%(n%)+diaporama_list%)
end_sub

diaporama_premier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prm%)
  DisplayDiaporamaPicture(diaporama_resultat%,1)
  cursor_default number_click
  return

diaporama_precedent:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prc%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1-1)
  cursor_default number_click
  return

diaporama_suivant:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_sui%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1+1)
  cursor_default number_click
  return

diaporama_dernier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_der%)
  DisplayDiaporamaPicture(diaporama_resultat%,count(diaporama_liste%(diaporama_resultat%)+diaporama_list%))
  cursor_default number_click
  return

sub IdentifyDiaporama(n%,type%)
  dim_local i%
  for diaporama_resultat%=1 to diaporama_n%
    if n%=(diaporama_liste%(diaporama_resultat%)+type%) then exit_sub
  next diaporama_resultat%
  diaporama_resultat% = 0
end_sub

sub DisplayDiaporamaPicture(n%,p%)
  dim_local nl%, ni%, na%, np%, nact%, i%, m%, res%
  nl% = diaporama_liste%(n%)+diaporama_list%
  if p%<1 then exit_sub
  if p%>count(nl%) then exit_sub
  ni% = diaporama_nicons%(n%)          : ' nombre de vignettes dans la pellicule
  na% = diaporama_acticon%(n%)         : ' vignette actuelle dans la pellicule
  np% = diaporama_prmicon%(n%)         : ' première vignette dans la pellicule
  nact% = np% + na% - 1
  if p%=nact% then exit_sub
  if p%<np%                            : ' image choisie à gauche de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+p%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=1 then file_load diaporama_liste%(n%)+diaporama_aff%,f$
      res% = dll_call2("ResizePicture",64,64)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64,0
    next i%
    diaporama_acticon%(n%) = 1
    diaporama_prmicon%(n%) = p%
    exit_sub
  end_if
  if p%>=(np%+ni%)                     : ' image choisie à droite de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    m% = p% - ni% + 1
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+m%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=ni% then file_load diaporama_liste%(n%)+diaporama_aff%,f$
      res% = dll_call2("ResizePicture",64,64)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64,0
    next i%
    diaporama_acticon%(n%) = ni%
    diaporama_prmicon%(n%) = m%
    exit_sub
  end_if
  i% = p% - np% + 1
  f$ = item_read$(nl%,p%)
  res% = dll_call1("LoadAnyImageFile",adr(f$))
  file_load diaporama_liste%(n%)+diaporama_aff%,f$
  res% = dll_call2("ResizePicture",64,64)
  clipboard_paste diaporama_liste%(n%)+diaporama_img%
  2d_target_is diaporama_liste%(n%)+diaporama_film%
  2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64,0
  diaporama_acticon%(n%) = i%
end_sub

diaporama_click:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_film%)
  diaporama_x% = mouse_x_left_down(diaporama_liste%(diaporama_resultat%)+diaporama_film%)
  diaporama_x% = int(diaporama_x%/64)
  if diaporama_x%<diaporama_nicons%(diaporama_resultat%)
    DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_x%)
  end_if
  cursor_default number_click
  return

Et voici un petit programme test_diaporama.bas qui affiche 2 diaporamas, avec leur bouton de chargement:
Code:
' test_diaporama.bas

dim f$

label charger_1, charger_2

dll_on "KGF.dll"
open_dialog 11 : filter 11,"Images|*.jpg;*.bmp"

width 0,1000

button 1 : top 1,10 : left 1,150 : caption 1,"Charger"
  on_click 1,charger_1
button 2 : top 2,70 : left 2,650 : caption 2,"Charger"
  on_click 2,charger_2

CreateDiaporama(20,0,20,40,400,300)
if diaporama_resultat%<0 then message "Erreur création 1"

CreateDiaporama(40,0,440,100,500,350)
if diaporama_resultat%<0 then message "Erreur création 2"

end

charger_1:
  f$ = file_name$(11)
  f$ = file_extract_path$(f$)
  LoadDiaporama(1,f$)
  if diaporama_resultat%<0 then message "Erreur chargement 1"
  return
  
charger_2:
  f$ = file_name$(11)
  f$ = file_extract_path$(f$)
  LoadDiaporama(2,f$)
  if diaporama_resultat%<0 then message "Erreur chargement 2"
  return

#INCLUDE "diaporama_inc.bas"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
sergeauze

avatar

Nombre de messages : 391
Age : 65
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 2:57

Bonjours
j'ai installé et testé
Les formats un peu costauds ne passent pas( 8920 ko par exemple)

les images sont écrasées en hauteur pour la plupart
Je trouve l’idée originale
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 3:20

Pour l'image proprement dite, il faut que tu adaptes w% et h% dans CreateDiaporama de sorte à correspondre plus ou moins au ratio largeur/hauteur de tes images. Le tassement, c'est l'effet du Stretch_On. Mais on ne peut pas s'en passer, car sinon, on ne visualise que le coin en haut à gauche de l'image.

Pour les vignettes, elles sont volontairement en 64x64 pixels. On a donc systématiquement une déformation, mais l'image reste identifiable, et un clic dessus affiche l'image en haut, selon le ratio largeur/hauteur donné par les paramètres w% et h%.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 27 Fév 2014 - 5:55

Il me semble que l' on (collectif des "forumeurs" ) avait déjà joué avec ce genre de problème.
 scratch

Il me semble que l' on prenait la dimmension la plus grande 
et que l' on jouait sur la taille du picture pour qu'il corresponde à un ratio convenable
int((taille%*x)/100) de facon à ce que le stretch_on soit moins violent à l' oeil.

Mais là je ne saurai dire où que c' est que j' ai mis cela, j' ai la tête dans les RichEdit en ce moment... Laughing 

Pour celui que celà intéresse, fouillez dans mon webdav, j' ai du cacher çà quelque part là dedans... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 11:59

C'est certes une possibilité, mais je perds alors la présentation graphique du diaporama, dont la zone d'affichage changerait au gré des images sélectionnées.

J'ai trouvé une autre solution que je suis en train d'adapter qu diaporama, et ce sera visible bientôt...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 27 Fév 2014 - 14:43

tu peux jouer avec deux pictures
un en fond, fixe, et l' autre qui s' adapte et se replace en se centrant sur le premier.

...et un sprite sur un scene_2d ?... non ?...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 16:12

J'étais justement en train d'explorer cette idée. Voici le résultat, pour l'affichage de l'image sélectionnée sans déformation. J'ai désactivé la commande FILTER, et ainsi, le diaporama peut charger tout type d'image.

test_diaporama.bas:
Code:
' test_diaporama.bas

dim f$

label charger_1, charger_2

dll_on "KGF.dll"
open_dialog 11 : ' filter 11,"Images|*.jpg;*.bmp"

width 0,1000 : height 0,600

button 1 : top 1,10 : left 1,150 : caption 1,"Charger"
  on_click 1,charger_1
button 2 : top 2,70 : left 2,650 : caption 2,"Charger"
  on_click 2,charger_2

CreateDiaporama(20,0,20,40,400,300)
if diaporama_resultat%<0 then message "Erreur création 1"

CreateDiaporama(40,0,440,100,500,350)
if diaporama_resultat%<0 then message "Erreur création 2"

end

charger_1:
  f$ = file_name$(11)
  f$ = file_extract_path$(f$)
  LoadDiaporama(1,f$)
  if diaporama_resultat%<0 then message "Erreur chargement 1"
  return
  
charger_2:
  f$ = file_name$(11)
  f$ = file_extract_path$(f$)
  LoadDiaporama(2,f$)
  if diaporama_resultat%<0 then message "Erreur chargement 2"
  return

#INCLUDE "diaporama_inc.bas"

et diaporama_inc.bas:
Code:
' diaporama_inc.bas
'
' Ce module crée un objet Diaporama. On lui charge une liste*
' de fichiers image. L'objet présente une bande de vignettes
' en bas, ainsi que des boutons "<<","<",">" et ">>" pour
' déplacer la bande. Le reste de l'image est rempli par l'affichage
' d'une photo sélectionnée (par défaut, c'est la première). Un clic
' sur une des vignettes de la bande défilante affiche cette photo.

message "Ce module ne peut pas être exécuté directement."
terminate

sub CreateDiaporama(no%,p%,x%,y%,w%,h%)
  if variable("diaporama_no%")=0
    ' premier lancement: créer l'environement diaporama
    ' constantes
      dim diaporama_max%  : diaporama_max% = 20      : ' nombre maxi
      dim diaporama_nobj% : diaporama_nobj% = 9      : ' nombre d'objets requis
      dim diaporama_aff0% : diaporama_aff0% = 0      : ' pour fond d'affichage: '
      dim diaporama_aff%  : diaporama_aff% = 1       : ' pour picture d'affichage: '
      dim diaporama_prm%  : diaporama_prm% = 2       : ' pour bouton "<<"
      dim diaporama_der%  : diaporama_der% = 3       : ' pour bouton ">>"
      dim diaporama_prc%  : diaporama_prc% = 4       : ' pour bouton "<"
      dim diaporama_sui%  : diaporama_sui% = 5       : ' pour bouton ">"
      dim diaporama_film% : diaporama_film% = 6      : ' pour pellicule
      dim diaporama_list% : diaporama_list% = 7      : ' pour liste des noms de fichiers
      dim diaporama_img%  : diaporama_img% = 8       : ' pour image temporaire
    ' variables
      dim diaporama_no%, diaporama_n%
      dim diaporama_resultat%
      dim diaporama_xm%
      dim diaporama_liste%(diaporama_max%)           : ' liste des objets Diaporama
      dim diaporama_x%(diaporama_max%)               : ' position x des diaporamas
      dim diaporama_y%(diaporama_max%)               : ' position y des diaporamas
      dim diaporama_w%(diaporama_max%)               : ' largeur des diaporamas
      dim diaporama_h%(diaporama_max%)               : ' hauteur des diaporamas
      dim diaporama_dossier$(diaporama_max%)         : ' liste des dossiers
      dim diaporama_nicons%(diaporama_max%)          : ' nombre de vignettes dans la pellicule
      dim diaporama_acticon%(diaporama_max%)         : ' vignette actuelle dans la pellicule
      dim diaporama_prmicon%(diaporama_max%)         : ' première vignette dans la pellicule
    ' labels
      label diaporama_premier, diaporama_precedent
      label diaporama_suivant, diaporama_dernier
      label diaporama_click
  end_if
  dim_local i%
  diaporama_resultat% = -1 : ' création impossible
  ' tester si le nombre d'objets requis est disponible
  for i%=0 to diaporama_nobj%-1
    if object_exists(no%+i%)=1 then exit_sub
  next i%
  diaporama_n% = diaporama_n% + 1
  diaporama_liste%(diaporama_n%) = no%
  diaporama_w%(diaporama_n%) = w%
  diaporama_h%(diaporama_n%) = h%
  diaporama_x%(diaporama_n%) = x%
  diaporama_y%(diaporama_n%) = y%
  if diaporama_w%(diaporama_n%)<256 then diaporama_w%(diaporama_n%) = 256
  if diaporama_h%(diaporama_n%)<256 then diaporama_h%(diaporama_n%) = 256
  ' création des objets
  ' zone d'affichage
    picture no%+diaporama_aff0%
    parent no%+diaporama_aff0%,p%
    top no%+diaporama_aff0%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff0%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff0%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff0%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff0%,65,155,210
    picture no%+diaporama_aff%
    parent no%+diaporama_aff%,p%
    top no%+diaporama_aff%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff%,65,155,210
    stretch_on no%+diaporama_aff%
  ' bouton "premier"
    button no%+diaporama_prm%
    parent no%+diaporama_prm%,p%
    top no%+diaporama_prm%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prm%,diaporama_x%(diaporama_n%)
    width no%+diaporama_prm%,18 : height no%+diaporama_prm%,64
    caption no%+diaporama_prm%,"<<"
    on_click no%+diaporama_prm%,diaporama_premier
    font_bold no%+diaporama_prm%
  ' bouton "précédent"
    button no%+diaporama_prc%
    parent no%+diaporama_prc%,p%
    top no%+diaporama_prc%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prc%,diaporama_x%(diaporama_n%)+width(no%+diaporama_prm%)
    width no%+diaporama_prc%,14 : height no%+diaporama_prc%,64
    caption no%+diaporama_prc%,"<"
    on_click no%+diaporama_prc%,diaporama_precedent
    font_bold no%+diaporama_prc%
  ' bouton "dernier"
    button no%+diaporama_der%
    parent no%+diaporama_der%,p%
    top no%+diaporama_der%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_der%,diaporama_x%(diaporama_n%)+diaporama_w%(diaporama_n%)-18
    width no%+diaporama_der%,18 : height no%+diaporama_der%,64
    caption no%+diaporama_der%,">>"
    font_bold no%+diaporama_der%
    on_click no%+diaporama_der%,diaporama_dernier
  ' bouton "suivant"
    button no%+diaporama_sui%
    parent no%+diaporama_sui%,p%
    top no%+diaporama_sui%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_sui%,left(no%+diaporama_der%)-14
    width no%+diaporama_sui%,14 : height no%+diaporama_sui%,64
    caption no%+diaporama_sui%,">"
    on_click no%+diaporama_sui%,diaporama_suivant
    font_bold no%+diaporama_sui%
  ' pellicule
    picture no%+diaporama_film%
    parent no%+diaporama_film%,p%
    top no%+diaporama_film%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_film%,diaporama_x%(diaporama_n%)+32
    width no%+diaporama_film%,diaporama_w%(diaporama_n%)-(32*2)
    height no%+diaporama_film%,64
    color no%+diaporama_film%,0,0,0
    diaporama_nicons%(diaporama_n%) = int(width(no%+diaporama_film%)/64)
    on_click no%+diaporama_film%,diaporama_click
  ' liste des fichiers
    dlist no%+diaporama_list%
  ' image temporaire
    image no%+diaporama_img%
  diaporama_resultat% = diaporama_n%
end_sub

sub LoadDiaporama(n%,d$)
  dim_local s$, actdir$, ext$, i%, ni%, res%
  diaporama_resultat% = -2      : ' chargement impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  s$ = trim$(d$)
  if len(s$)=0 then exit_sub
  if dir_exists(s$)=0 then exit_sub
  cursor_hourglass diaporama_liste%(n%)
  cursor_hourglass diaporama_liste%(n%)+diaporama_film% : display
  actdir$ = dir_current$
  diaporama_dossier$(n%) = f$
  clear diaporama_liste%(n%)+diaporama_list%
  ' charger la liste des noms de fichiers
  dir_change f$
  f$ = file_find_first$
  while f$<>"_"
    ext$ = lower$(file_extract_extension$(f$))
    if (ext$=".jpg") or (ext$=".bmp") then item_add diaporama_liste%(n%)+diaporama_list%,f$
    f$ = file_find_next$
  end_while
  file_find_close
  dir_change actdir$
  ni% = count(diaporama_liste%(n%)+diaporama_list%)
  if ni%=0 then exit_sub
  if ni%>diaporama_nicons%(n%) then ni% = diaporama_nicons%(n%)
  diaporama_acticon%(n%) = 1        : ' vignettes actuelle dans la pellicule
  diaporama_prmicon%(n%) = 1        : ' première vignette dans la pellicule
  for i% = 1 to ni%
    f$ = item_read$(diaporama_liste%(n%)+diaporama_list%,i%)
    res% = dll_call1("LoadAnyImageFile",adr(f$))
    if i%=1
      AdjustDiaporama(n%)
      clipboard_paste diaporama_liste%(n%)+diaporama_aff%
    end_if
    res% = dll_call2("ResizePicture",64,64)
    clipboard_paste diaporama_liste%(n%)+diaporama_img%
    2d_target_is diaporama_liste%(n%)+diaporama_film%
    2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64,0
  next i%
  diaporama_resultat% = 0
  cursor_default diaporama_liste%(n%)
  cursor_default diaporama_liste%(n%)+diaporama_film%
end_sub

sub AdjustDiaporama(n%)
  dim_local w%, h%, res%, w1%, h1%
  w% = dll_call0("GetClipboardPictureWidth")
  h% = dll_call0("GetClipboardPictureHeight")
  if w%>h%
    h1% = int(Diaporama_h%(n%)*(h%/w%))
    w1% = Diaporama_w%(n%)
  else
    w1% = int(Diaporama_w%(n%)*(w%/h%))
    h1% = Diaporama_h%(n%)
  end_if
  width diaporama_liste%(n%)+Diaporama_aff%,w1%
  height diaporama_liste%(n%)+Diaporama_aff%,h1%
  top diaporama_liste%(n%)+Diaporama_aff%,diaporama_y%(n%)+int((Diaporama_h%(n%)-h1%)/2)
  left diaporama_liste%(n%)+Diaporama_aff%,diaporama_x%(n%)+int((Diaporama_w%(n%)-w1%)/2)
  res% = dll_call2("ResizePicture",w1%,h1%)
end_sub

sub GetDiaporamaImageCount(n%)
  diaporama_resultat% = -2      : ' exécution impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  diaporama_resultat% = count(diaporama_liste%(n%)+diaporama_list%)
end_sub

diaporama_premier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prm%)
  DisplayDiaporamaPicture(diaporama_resultat%,1)
  cursor_default number_click
  return

diaporama_precedent:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prc%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1-1)
  cursor_default number_click
  return

diaporama_suivant:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_sui%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1+1)
  cursor_default number_click
  return

diaporama_dernier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_der%)
  DisplayDiaporamaPicture(diaporama_resultat%,count(diaporama_liste%(diaporama_resultat%)+diaporama_list%))
  cursor_default number_click
  return

sub IdentifyDiaporama(n%,type%)
  dim_local i%
  for diaporama_resultat%=1 to diaporama_n%
    if n%=(diaporama_liste%(diaporama_resultat%)+type%) then exit_sub
  next diaporama_resultat%
  diaporama_resultat% = 0
end_sub

sub DisplayDiaporamaPicture(n%,p%)
  dim_local nl%, ni%, na%, np%, nact%, i%, m%, res%
  nl% = diaporama_liste%(n%)+diaporama_list%
  if p%<1 then exit_sub
  if p%>count(nl%) then exit_sub
  ni% = diaporama_nicons%(n%)          : ' nombre de vignettes dans la pellicule
  na% = diaporama_acticon%(n%)         : ' vignette actuelle dans la pellicule
  np% = diaporama_prmicon%(n%)         : ' première vignette dans la pellicule
  nact% = np% + na% - 1
  if p%=nact% then exit_sub
  if p%<np%                            : ' image choisie à gauche de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+p%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=1
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      res% = dll_call2("ResizePicture",64,64)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64,0
    next i%
    diaporama_acticon%(n%) = 1
    diaporama_prmicon%(n%) = p%
    exit_sub
  end_if
  if p%>=(np%+ni%)                     : ' image choisie à droite de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    m% = p% - ni% + 1
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+m%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=ni%
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      res% = dll_call2("ResizePicture",64,64)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64,0
    next i%
    diaporama_acticon%(n%) = ni%
    diaporama_prmicon%(n%) = m%
    exit_sub
  end_if
  i% = p% - np% + 1
  f$ = item_read$(nl%,p%)
  res% = dll_call1("LoadAnyImageFile",adr(f$))
  AdjustDiaporama(n%)
  clipboard_paste diaporama_liste%(n%)+diaporama_aff%
  diaporama_acticon%(n%) = i%
end_sub

diaporama_click:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_film%)
  diaporama_xm% = mouse_x_left_down(diaporama_liste%(diaporama_resultat%)+diaporama_film%)
  diaporama_xm% = int(diaporama_xm%/64)
  if diaporama_xm%<diaporama_nicons%(diaporama_resultat%)
    DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_xm%)
  end_if
  cursor_default number_click
  return

En plus, je l'ai accéléré légèrement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 17:00

Un essai vite fait: toutes les images de la fenêtre du haut sont en 'cinémascope', étirées en largeur avec des bandes vides haut et bas, et en bas (pellicule) elles sont rétrécies en carré... (mes images font 2650x1920).

Je ne comprends pas l'utilité de cet affichage dupliqué, un peu plus grand et décalé vers le bas pour celui de droite ?

Un petit séparateur (même une seule ligne) serait le bienvenu pour distinguer les images du bas les unes des autres, tout est collé.


Dernière édition par JL35 le Jeu 27 Fév 2014 - 17:08, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 17:06

????????

Voici ce que ça donne chez moi:
[img][/img]

As-tu rechargé test_diaporama.bas et diaporama_inc.bas sur mon post juste ci-dessus ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 17:10

On s'est c9roisés, mais oui, j'ai bien pris le dernier code...
on ne s'en rend pas bien compte ici, mais je t'assure que les images sont étirées. Les personnages sont tassés en hauteur.

Edit: d'ailleurs on voit bien (sur ton exemple également), j'ai mesuré, que les images sont affichées dans le rapport 1,9 alors qu'elles sont en réalité en 1,33 (4/3)


Dernière édition par JL35 le Jeu 27 Fév 2014 - 17:18, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 17:15

Le programme test_diaporama affiche deux diaporamas, mais juste pour montrer qu'on peut en faire plusieurs. On peut évidemment charger des listes différentes d'images, dans chacun de ces diaporamas.

C'est vrai: je n'ai pas fait de séparateur entre les vignettes de la pellicule, ni entre la zond d'affichage et la pellicule. Mais c'est une idée - je vais creuser ça.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 17:20

Voici une version de diaporama_inc.bas, avec une séparation entre la zone d'affichage et la pellicule, ainsi qu'entre les vignettes de la pellicule:
Code:
' diaporama_inc.bas
'
' Ce module crée un objet Diaporama. On lui charge une liste*
' de fichiers image. L'objet présente une bande de vignettes
' en bas, ainsi que des boutons "<<","<",">" et ">>" pour
' déplacer la bande. Le reste de l'image est rempli par l'affichage
' d'une photo sélectionnée (par défaut, c'est la première). Un clic
' sur une des vignettes de la bande défilante affiche cette photo.

message "Ce module ne peut pas être exécuté directement."
terminate

sub CreateDiaporama(no%,p%,x%,y%,w%,h%)
  if variable("diaporama_no%")=0
    ' premier lancement: créer l'environement diaporama
    ' constantes
      dim diaporama_max%  : diaporama_max% = 20      : ' nombre maxi
      dim diaporama_nobj% : diaporama_nobj% = 9      : ' nombre d'objets requis
      dim diaporama_aff0% : diaporama_aff0% = 0      : ' pour fond d'affichage: '
      dim diaporama_aff%  : diaporama_aff% = 1      : ' pour picture d'affichage: '
      dim diaporama_prm%  : diaporama_prm% = 2      : ' pour bouton "<<"
      dim diaporama_der%  : diaporama_der% = 3      : ' pour bouton ">>"
      dim diaporama_prc%  : diaporama_prc% = 4      : ' pour bouton "<"
      dim diaporama_sui%  : diaporama_sui% = 5      : ' pour bouton ">"
      dim diaporama_film% : diaporama_film% = 6      : ' pour pellicule
      dim diaporama_list% : diaporama_list% = 7      : ' pour liste des noms de fichiers
      dim diaporama_img%  : diaporama_img% = 8      : ' pour image temporaire
    ' variables
      dim diaporama_no%, diaporama_n%
      dim diaporama_resultat%
      dim diaporama_xm%
      dim diaporama_liste%(diaporama_max%)          : ' liste des objets Diaporama
      dim diaporama_x%(diaporama_max%)              : ' position x des diaporamas
      dim diaporama_y%(diaporama_max%)              : ' position y des diaporamas
      dim diaporama_w%(diaporama_max%)              : ' largeur des diaporamas
      dim diaporama_h%(diaporama_max%)              : ' hauteur des diaporamas
      dim diaporama_dossier$(diaporama_max%)        : ' liste des dossiers
      dim diaporama_nicons%(diaporama_max%)          : ' nombre de vignettes dans la pellicule
      dim diaporama_acticon%(diaporama_max%)        : ' vignette actuelle dans la pellicule
      dim diaporama_prmicon%(diaporama_max%)        : ' première vignette dans la pellicule
    ' labels
      label diaporama_premier, diaporama_precedent
      label diaporama_suivant, diaporama_dernier
      label diaporama_click
  end_if
  dim_local i%
  diaporama_resultat% = -1 : ' création impossible
  ' tester si le nombre d'objets requis est disponible
  for i%=0 to diaporama_nobj%-1
    if object_exists(no%+i%)=1 then exit_sub
  next i%
  diaporama_n% = diaporama_n% + 1
  diaporama_liste%(diaporama_n%) = no%
  diaporama_w%(diaporama_n%) = w%
  diaporama_h%(diaporama_n%) = h%
  diaporama_x%(diaporama_n%) = x%
  diaporama_y%(diaporama_n%) = y%
  if diaporama_w%(diaporama_n%)<256 then diaporama_w%(diaporama_n%) = 256
  if diaporama_h%(diaporama_n%)<256 then diaporama_h%(diaporama_n%) = 256
  ' création des objets
  ' zone d'affichage
    picture no%+diaporama_aff0%
    parent no%+diaporama_aff0%,p%
    top no%+diaporama_aff0%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff0%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff0%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff0%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff0%,65,155,210
    picture no%+diaporama_aff%
    parent no%+diaporama_aff%,p%
    top no%+diaporama_aff%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff%,65,155,210
    stretch_on no%+diaporama_aff%
  ' bouton "premier"
    button no%+diaporama_prm%
    parent no%+diaporama_prm%,p%
    top no%+diaporama_prm%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prm%,diaporama_x%(diaporama_n%)
    width no%+diaporama_prm%,18 : height no%+diaporama_prm%,64
    caption no%+diaporama_prm%,"<<"
    on_click no%+diaporama_prm%,diaporama_premier
    font_bold no%+diaporama_prm%
  ' bouton "précédent"
    button no%+diaporama_prc%
    parent no%+diaporama_prc%,p%
    top no%+diaporama_prc%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prc%,diaporama_x%(diaporama_n%)+width(no%+diaporama_prm%)
    width no%+diaporama_prc%,14 : height no%+diaporama_prc%,64
    caption no%+diaporama_prc%,"<"
    on_click no%+diaporama_prc%,diaporama_precedent
    font_bold no%+diaporama_prc%
  ' bouton "dernier"
    button no%+diaporama_der%
    parent no%+diaporama_der%,p%
    top no%+diaporama_der%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_der%,diaporama_x%(diaporama_n%)+diaporama_w%(diaporama_n%)-18
    width no%+diaporama_der%,18 : height no%+diaporama_der%,64
    caption no%+diaporama_der%,">>"
    font_bold no%+diaporama_der%
    on_click no%+diaporama_der%,diaporama_dernier
  ' bouton "suivant"
    button no%+diaporama_sui%
    parent no%+diaporama_sui%,p%
    top no%+diaporama_sui%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_sui%,left(no%+diaporama_der%)-14
    width no%+diaporama_sui%,14 : height no%+diaporama_sui%,64
    caption no%+diaporama_sui%,">"
    on_click no%+diaporama_sui%,diaporama_suivant
    font_bold no%+diaporama_sui%
  ' pellicule
    picture no%+diaporama_film%
    parent no%+diaporama_film%,p%
    top no%+diaporama_film%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_film%,diaporama_x%(diaporama_n%)+32
    width no%+diaporama_film%,diaporama_w%(diaporama_n%)-(32*2)
    height no%+diaporama_film%,64
    color no%+diaporama_film%,0,0,0
    diaporama_nicons%(diaporama_n%) = int(width(no%+diaporama_film%)/64)
    on_click no%+diaporama_film%,diaporama_click
  ' liste des fichiers
    dlist no%+diaporama_list%
  ' image temporaire
    image no%+diaporama_img%
  diaporama_resultat% = diaporama_n%
end_sub

sub LoadDiaporama(n%,d$)
  dim_local s$, actdir$, ext$, i%, ni%, res%
  diaporama_resultat% = -2      : ' chargement impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  s$ = trim$(d$)
  if len(s$)=0 then exit_sub
  if dir_exists(s$)=0 then exit_sub
  cursor_hourglass diaporama_liste%(n%)
  cursor_hourglass diaporama_liste%(n%)+diaporama_film% : display
  actdir$ = dir_current$
  diaporama_dossier$(n%) = f$
  clear diaporama_liste%(n%)+diaporama_list%
  ' charger la liste des noms de fichiers
  dir_change f$
  f$ = file_find_first$
  while f$<>"_"
    ext$ = lower$(file_extract_extension$(f$))
    if (ext$=".jpg") or (ext$=".bmp") then item_add diaporama_liste%(n%)+diaporama_list%,f$
    f$ = file_find_next$
  end_while
  file_find_close
  dir_change actdir$
  ni% = count(diaporama_liste%(n%)+diaporama_list%)
  if ni%=0 then exit_sub
  if ni%>diaporama_nicons%(n%) then ni% = diaporama_nicons%(n%)
  diaporama_acticon%(n%) = 1        : ' vignettes actuelle dans la pellicule
  diaporama_prmicon%(n%) = 1        : ' première vignette dans la pellicule
  for i% = 1 to ni%
    f$ = item_read$(diaporama_liste%(n%)+diaporama_list%,i%)
    res% = dll_call1("LoadAnyImageFile",adr(f$))
    if i%=1
      AdjustDiaporama(n%)
      clipboard_paste diaporama_liste%(n%)+diaporama_aff%
    end_if
    res% = dll_call2("ResizePicture",60,60)
    clipboard_paste diaporama_liste%(n%)+diaporama_img%
    2d_target_is diaporama_liste%(n%)+diaporama_film%
    2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64+2,2
  next i%
  diaporama_resultat% = 0
  cursor_default diaporama_liste%(n%)
  cursor_default diaporama_liste%(n%)+diaporama_film%
end_sub

sub AdjustDiaporama(n%)
  dim_local w%, h%, res%, w1%, h1%
  w% = dll_call0("GetClipboardPictureWidth")
  h% = dll_call0("GetClipboardPictureHeight")
  if w%>h%
    h1% = int(Diaporama_h%(n%)*(h%/w%))
    w1% = Diaporama_w%(n%)
  else
    w1% = int(Diaporama_w%(n%)*(w%/h%))
    h1% = Diaporama_h%(n%)
  end_if
  width diaporama_liste%(n%)+Diaporama_aff%,w1%
  height diaporama_liste%(n%)+Diaporama_aff%,h1%
  top diaporama_liste%(n%)+Diaporama_aff%,diaporama_y%(n%)+int((Diaporama_h%(n%)-h1%)/2)
  left diaporama_liste%(n%)+Diaporama_aff%,diaporama_x%(n%)+int((Diaporama_w%(n%)-w1%)/2)
  res% = dll_call2("ResizePicture",w1%,h1%)
end_sub

sub GetDiaporamaImageCount(n%)
  diaporama_resultat% = -2      : ' exécution impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  diaporama_resultat% = count(diaporama_liste%(n%)+diaporama_list%)
end_sub

diaporama_premier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prm%)
  DisplayDiaporamaPicture(diaporama_resultat%,1)
  cursor_default number_click
  return

diaporama_precedent:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prc%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1-1)
  cursor_default number_click
  return

diaporama_suivant:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_sui%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1+1)
  cursor_default number_click
  return

diaporama_dernier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_der%)
  DisplayDiaporamaPicture(diaporama_resultat%,count(diaporama_liste%(diaporama_resultat%)+diaporama_list%))
  cursor_default number_click
  return

sub IdentifyDiaporama(n%,type%)
  dim_local i%
  for diaporama_resultat%=1 to diaporama_n%
    if n%=(diaporama_liste%(diaporama_resultat%)+type%) then exit_sub
  next diaporama_resultat%
  diaporama_resultat% = 0
end_sub

sub DisplayDiaporamaPicture(n%,p%)
  dim_local nl%, ni%, na%, np%, nact%, i%, m%, res%
  nl% = diaporama_liste%(n%)+diaporama_list%
  if p%<1 then exit_sub
  if p%>count(nl%) then exit_sub
  ni% = diaporama_nicons%(n%)          : ' nombre de vignettes dans la pellicule
  na% = diaporama_acticon%(n%)        : ' vignette actuelle dans la pellicule
  np% = diaporama_prmicon%(n%)        : ' première vignette dans la pellicule
  nact% = np% + na% - 1
  if p%=nact% then exit_sub
  if p%<np%                            : ' image choisie à gauche de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+p%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=1
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      res% = dll_call2("ResizePicture",60,60)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64+2,2
    next i%
    diaporama_acticon%(n%) = 1
    diaporama_prmicon%(n%) = p%
    exit_sub
  end_if
  if p%>=(np%+ni%)                    : ' image choisie à droite de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    m% = p% - ni% + 1
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+m%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=ni%
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      res% = dll_call2("ResizePicture",60,60)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*64+2,2
    next i%
    diaporama_acticon%(n%) = ni%
    diaporama_prmicon%(n%) = m%
    exit_sub
  end_if
  i% = p% - np% + 1
  f$ = item_read$(nl%,p%)
  res% = dll_call1("LoadAnyImageFile",adr(f$))
  AdjustDiaporama(n%)
  clipboard_paste diaporama_liste%(n%)+diaporama_aff%
  diaporama_acticon%(n%) = i%
end_sub

diaporama_click:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_film%)
  diaporama_xm% = mouse_x_left_down(diaporama_liste%(diaporama_resultat%)+diaporama_film%)
  diaporama_xm% = int(diaporama_xm%/64)
  if diaporama_xm%<diaporama_nicons%(diaporama_resultat%)
    DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_xm%)
  end_if
  cursor_default number_click
  return

Finalement, c'était simple...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 17:31

Effectivement, ça sépare bien les vignettes, c'est plus clair.

Mais je répète que le format d'image affiché (proportions) n'est pas correct, elles sont bien étirées en largeur.
Ce format d'image affiché (rapport environ 1,9) ne correspond à aucun format classique, qui est en général 4/3 (1,33), ou à la rigueur 16/9 (1,77), mais là c'est du cinémascope.

Les images sont étirées en largeur en haut, et tassées en largeur en bas, donc déformées (je n'ai pas regardé le code, pour le moment je constate, c'est tout).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 17:47

Je vois ce que tu veux dire. Je corrige...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 18:15

J'ai corrigé le dimensionnement dans diaporama_inc.bas. En même temps, j'ai rendu paramétrable la taille des vignettes et la largeur de la séparation entre vignettes et vers la zone d'affichage. Ce sont deix variables dans la zone "constantes" de CreateDiaporama:
Code:
      dim diaporama_isiz% : diaporama_isiz% = 64    : ' taille des icônes
      dim diaporama_ssiz% : diaporama_ssiz% = 2      : ' taille des séparations

Voici diamorama_inc.bas:
Code:
' diaporama_inc.bas
'
' Ce module crée un objet Diaporama. On lui charge une liste*
' de fichiers image. L'objet présente une bande de vignettes
' en bas, ainsi que des boutons "<<","<",">" et ">>" pour
' déplacer la bande. Le reste de l'image est rempli par l'affichage
' d'une photo sélectionnée (par défaut, c'est la première). Un clic
' sur une des vignettes de la bande défilante affiche cette photo.

message "Ce module ne peut pas être exécuté directement."
terminate

sub CreateDiaporama(no%,p%,x%,y%,w%,h%)
  if variable("diaporama_no%")=0
    ' premier lancement: créer l'environement diaporama
    ' constantes
      dim diaporama_max%  : diaporama_max% = 20      : ' nombre maxi
      dim diaporama_nobj% : diaporama_nobj% = 9      : ' nombre d'objets requis
      dim diaporama_aff0% : diaporama_aff0% = 0      : ' pour fond d'affichage: '
      dim diaporama_aff%  : diaporama_aff% = 1       : ' pour picture d'affichage: '
      dim diaporama_prm%  : diaporama_prm% = 2       : ' pour bouton "<<"
      dim diaporama_der%  : diaporama_der% = 3       : ' pour bouton ">>"
      dim diaporama_prc%  : diaporama_prc% = 4       : ' pour bouton "<"
      dim diaporama_sui%  : diaporama_sui% = 5       : ' pour bouton ">"
      dim diaporama_film% : diaporama_film% = 6      : ' pour pellicule
      dim diaporama_list% : diaporama_list% = 7      : ' pour liste des noms de fichiers
      dim diaporama_img%  : diaporama_img% = 8       : ' pour image temporaire
      dim diaporama_isiz% : diaporama_isiz% = 64     : ' taille des icônes
      dim diaporama_ssiz% : diaporama_ssiz% = 2      : ' taille des séparations
    ' variables
      dim diaporama_no%, diaporama_n%
      dim diaporama_resultat%
      dim diaporama_xm%
      dim diaporama_liste%(diaporama_max%)           : ' liste des objets Diaporama
      dim diaporama_x%(diaporama_max%)               : ' position x des diaporamas
      dim diaporama_y%(diaporama_max%)               : ' position y des diaporamas
      dim diaporama_w%(diaporama_max%)               : ' largeur des diaporamas
      dim diaporama_h%(diaporama_max%)               : ' hauteur des diaporamas
      dim diaporama_dossier$(diaporama_max%)         : ' liste des dossiers
      dim diaporama_nicons%(diaporama_max%)          : ' nombre de vignettes dans la pellicule
      dim diaporama_acticon%(diaporama_max%)         : ' vignette actuelle dans la pellicule
      dim diaporama_prmicon%(diaporama_max%)         : ' première vignette dans la pellicule
    ' labels
      label diaporama_premier, diaporama_precedent
      label diaporama_suivant, diaporama_dernier
      label diaporama_click
  end_if
  dim_local i%
  diaporama_resultat% = -1 : ' création impossible
  ' tester si le nombre d'objets requis est disponible
  for i%=0 to diaporama_nobj%-1
    if object_exists(no%+i%)=1 then exit_sub
  next i%
  diaporama_n% = diaporama_n% + 1
  diaporama_liste%(diaporama_n%) = no%
  diaporama_w%(diaporama_n%) = w%
  diaporama_h%(diaporama_n%) = h%
  diaporama_x%(diaporama_n%) = x%
  diaporama_y%(diaporama_n%) = y%
  if diaporama_w%(diaporama_n%)<256 then diaporama_w%(diaporama_n%) = 256
  if diaporama_h%(diaporama_n%)<256 then diaporama_h%(diaporama_n%) = 256
  ' création des objets
  ' zone d'affichage
    picture no%+diaporama_aff0%
    parent no%+diaporama_aff0%,p%
    top no%+diaporama_aff0%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff0%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff0%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff0%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff0%,65,155,210
    picture no%+diaporama_aff%
    parent no%+diaporama_aff%,p%
    top no%+diaporama_aff%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff%,65,155,210
    stretch_on no%+diaporama_aff%
  ' bouton "premier"
    button no%+diaporama_prm%
    parent no%+diaporama_prm%,p%
    top no%+diaporama_prm%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prm%,diaporama_x%(diaporama_n%)
    width no%+diaporama_prm%,18 : height no%+diaporama_prm%,diaporama_isiz%
    caption no%+diaporama_prm%,"<<"
    on_click no%+diaporama_prm%,diaporama_premier
    font_bold no%+diaporama_prm%
  ' bouton "précédent"
    button no%+diaporama_prc%
    parent no%+diaporama_prc%,p%
    top no%+diaporama_prc%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prc%,diaporama_x%(diaporama_n%)+width(no%+diaporama_prm%)
    width no%+diaporama_prc%,14 : height no%+diaporama_prc%,diaporama_isiz%
    caption no%+diaporama_prc%,"<"
    on_click no%+diaporama_prc%,diaporama_precedent
    font_bold no%+diaporama_prc%
  ' bouton "dernier"
    button no%+diaporama_der%
    parent no%+diaporama_der%,p%
    top no%+diaporama_der%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_der%,diaporama_x%(diaporama_n%)+diaporama_w%(diaporama_n%)-18
    width no%+diaporama_der%,18 : height no%+diaporama_der%,diaporama_isiz%
    caption no%+diaporama_der%,">>"
    font_bold no%+diaporama_der%
    on_click no%+diaporama_der%,diaporama_dernier
  ' bouton "suivant"
    button no%+diaporama_sui%
    parent no%+diaporama_sui%,p%
    top no%+diaporama_sui%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_sui%,left(no%+diaporama_der%)-14
    width no%+diaporama_sui%,14 : height no%+diaporama_sui%,diaporama_isiz%
    caption no%+diaporama_sui%,">"
    on_click no%+diaporama_sui%,diaporama_suivant
    font_bold no%+diaporama_sui%
  ' pellicule
    picture no%+diaporama_film%
    parent no%+diaporama_film%,p%
    top no%+diaporama_film%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_film%,diaporama_x%(diaporama_n%)+32
    width no%+diaporama_film%,diaporama_w%(diaporama_n%)-64
    height no%+diaporama_film%,diaporama_isiz%
    color no%+diaporama_film%,0,0,0
    diaporama_nicons%(diaporama_n%) = int(width(no%+diaporama_film%)/diaporama_isiz%)
    on_click no%+diaporama_film%,diaporama_click
  ' liste des fichiers
    dlist no%+diaporama_list%
  ' image temporaire
    image no%+diaporama_img%
  diaporama_resultat% = diaporama_n%
end_sub

sub LoadDiaporama(n%,d$)
  dim_local s$, actdir$, ext$, i%, ni%, res%
  diaporama_resultat% = -2      : ' chargement impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  s$ = trim$(d$)
  if len(s$)=0 then exit_sub
  if dir_exists(s$)=0 then exit_sub
  cursor_hourglass diaporama_liste%(n%)
  cursor_hourglass diaporama_liste%(n%)+diaporama_film% : display
  actdir$ = dir_current$
  diaporama_dossier$(n%) = f$
  clear diaporama_liste%(n%)+diaporama_list%
  ' charger la liste des noms de fichiers
  dir_change f$
  f$ = file_find_first$
  while f$<>"_"
    ext$ = lower$(file_extract_extension$(f$))
    if (ext$=".jpg") or (ext$=".bmp") then item_add diaporama_liste%(n%)+diaporama_list%,f$
    f$ = file_find_next$
  end_while
  file_find_close
  dir_change actdir$
  ni% = count(diaporama_liste%(n%)+diaporama_list%)
  if ni%=0 then exit_sub
  if ni%>diaporama_nicons%(n%) then ni% = diaporama_nicons%(n%)
  diaporama_acticon%(n%) = 1        : ' vignettes actuelle dans la pellicule
  diaporama_prmicon%(n%) = 1        : ' première vignette dans la pellicule
  for i% = 1 to ni%
    f$ = item_read$(diaporama_liste%(n%)+diaporama_list%,i%)
    res% = dll_call1("LoadAnyImageFile",adr(f$))
    if i%=1
      AdjustDiaporama(n%)
      clipboard_paste diaporama_liste%(n%)+diaporama_aff%
    end_if
    res% = dll_call2("ResizePicture",diaporama_isiz%-diaporama_ssiz%*2,diaporama_isiz%-diaporama_ssiz%*2)
    clipboard_paste diaporama_liste%(n%)+diaporama_img%
    2d_target_is diaporama_liste%(n%)+diaporama_film%
    2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*diaporama_isiz%+diaporama_ssiz%,diaporama_ssiz%
  next i%
  diaporama_resultat% = 0
  cursor_default diaporama_liste%(n%)
  cursor_default diaporama_liste%(n%)+diaporama_film%
end_sub

sub AdjustDiaporama(n%)
  dim_local w%, h%, res%, w1%, h1%, rw, rh
  w% = dll_call0("GetClipboardPictureWidth")
  h% = dll_call0("GetClipboardPictureHeight")
  rw = Diaporama_w%(n%)/w%
  w1% = int(w%*rw)
  h1% = int(h%*rw)
  if w1%>Diaporama_w%(n%)
    rw = Diaporama_w%(n%)/w1%
    w1% = Diaporama_w%(n%)
    h1% = int(h1%*rw)
  end_if
  if h1%>Diaporama_h%(n%)
    rh = Diaporama_h%(n%)/h1%
    h1% = Diaporama_h%(n%)
    w1% = int(w1%*rh)
  end_if
  width diaporama_liste%(n%)+Diaporama_aff%,w1%
  height diaporama_liste%(n%)+Diaporama_aff%,h1%
  top diaporama_liste%(n%)+Diaporama_aff%,diaporama_y%(n%)+int((Diaporama_h%(n%)-h1%)/2)
  left diaporama_liste%(n%)+Diaporama_aff%,diaporama_x%(n%)+int((Diaporama_w%(n%)-w1%)/2)
  res% = dll_call2("ResizePicture",w1%,h1%)
  caption 0,str$(w1%)+","+str$(h1%)+"   "+str$(w%)+","+str$(h%)
end_sub

sub GetDiaporamaImageCount(n%)
  diaporama_resultat% = -2      : ' exécution impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  diaporama_resultat% = count(diaporama_liste%(n%)+diaporama_list%)
end_sub

diaporama_premier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prm%)
  DisplayDiaporamaPicture(diaporama_resultat%,1)
  cursor_default number_click
  return

diaporama_precedent:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prc%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1-1)
  cursor_default number_click
  return

diaporama_suivant:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_sui%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1+1)
  cursor_default number_click
  return

diaporama_dernier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_der%)
  DisplayDiaporamaPicture(diaporama_resultat%,count(diaporama_liste%(diaporama_resultat%)+diaporama_list%))
  cursor_default number_click
  return

sub IdentifyDiaporama(n%,type%)
  dim_local i%
  for diaporama_resultat%=1 to diaporama_n%
    if n%=(diaporama_liste%(diaporama_resultat%)+type%) then exit_sub
  next diaporama_resultat%
  diaporama_resultat% = 0
end_sub

sub DisplayDiaporamaPicture(n%,p%)
  dim_local nl%, ni%, na%, np%, nact%, i%, m%, res%
  nl% = diaporama_liste%(n%)+diaporama_list%
  if p%<1 then exit_sub
  if p%>count(nl%) then exit_sub
  ni% = diaporama_nicons%(n%)          : ' nombre de vignettes dans la pellicule
  na% = diaporama_acticon%(n%)         : ' vignette actuelle dans la pellicule
  np% = diaporama_prmicon%(n%)         : ' première vignette dans la pellicule
  nact% = np% + na% - 1
  if p%=nact% then exit_sub
  if p%<np%                            : ' image choisie à gauche de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+p%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=1
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      res% = dll_call2("ResizePicture",diaporama_isiz%-diaporama_ssiz%*2,diaporama_isiz%-diaporama_ssiz%*2)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*diaporama_isiz%+diaporama_ssiz%,diaporama_ssiz%
    next i%
    diaporama_acticon%(n%) = 1
    diaporama_prmicon%(n%) = p%
    exit_sub
  end_if
  if p%>=(np%+ni%)                     : ' image choisie à droite de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    m% = p% - ni% + 1
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+m%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=ni%
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      res% = dll_call2("ResizePicture",diaporama_isiz%-diaporama_ssiz%*2,diaporama_isiz%-diaporama_ssiz%*2)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*diaporama_isiz%+diaporama_ssiz%,diaporama_ssiz%
    next i%
    diaporama_acticon%(n%) = ni%
    diaporama_prmicon%(n%) = m%
    exit_sub
  end_if
  i% = p% - np% + 1
  f$ = item_read$(nl%,p%)
  res% = dll_call1("LoadAnyImageFile",adr(f$))
  AdjustDiaporama(n%)
  clipboard_paste diaporama_liste%(n%)+diaporama_aff%
  diaporama_acticon%(n%) = i%
end_sub

diaporama_click:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_film%)
  diaporama_xm% = mouse_x_left_down(diaporama_liste%(diaporama_resultat%)+diaporama_film%)
  diaporama_xm% = int(diaporama_xm%/diaporama_isiz%)
  if diaporama_xm%<diaporama_nicons%(diaporama_resultat%)
    DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_xm%)
  end_if
  cursor_default number_click
  return


Dernière édition par Klaus le Jeu 27 Fév 2014 - 18:20, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 18:19

Là c'est nettement mieux en effet, les images sont normales.
Les vignettes sont déformées, mais c'est sans doute le prix à payer pour en afficher le maximum...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 18:22

Oui. Les vignettes sont réctangulaires. Je n'ai pas encore fait l'effort de les ajuster. Je verrai ça.

On s'est croisé. Si tu regardes ci-dessus, j'ai ajouté deux paramètres de configuration...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 18:35

Effectivement je n'avais pas fait attention, je vais regarder de plus près.
Mais les vignettes me semblent plus carrées que rectangulaires ? si tu les mettais d'office en 4/3 (même modulables en dimensions) c'est de loin le rapport le plus courant... évidemment il y a les images verticales qui compliquent toujours tout ! j'évite d'en prendre en pensant aux traitements ultérieurs, mais mon épouse s'obstine...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 18:59

Effectivement, elles sont carrées pour le moment - en prévision de l'adaption aux formats portraits et paysage, en gardant le même espacement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 19:02

Ok
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 19:26

Voici une version qui affiche les vignettes également dans leur ratio de dimensions réelles, toujours dans des cases carrées:

diaporama_inc.bas:
Code:
' diaporama_inc.bas
'
' Ce module crée un objet Diaporama. On lui charge une liste*
' de fichiers image. L'objet présente une bande de vignettes
' en bas, ainsi que des boutons "<<","<",">" et ">>" pour
' déplacer la bande. Le reste de l'image est rempli par l'affichage
' d'une photo sélectionnée (par défaut, c'est la première). Un clic
' sur une des vignettes de la bande défilante affiche cette photo.

message "Ce module ne peut pas être exécuté directement."
terminate

sub CreateDiaporama(no%,p%,x%,y%,w%,h%)
  if variable("diaporama_no%")=0
    ' premier lancement: créer l'environement diaporama
    ' constantes
      dim diaporama_max%  : diaporama_max% = 20      : ' nombre maxi
      dim diaporama_nobj% : diaporama_nobj% = 9      : ' nombre d'objets requis
      dim diaporama_aff0% : diaporama_aff0% = 0      : ' pour fond d'affichage: '
      dim diaporama_aff%  : diaporama_aff% = 1      : ' pour picture d'affichage: '
      dim diaporama_prm%  : diaporama_prm% = 2      : ' pour bouton "<<"
      dim diaporama_der%  : diaporama_der% = 3      : ' pour bouton ">>"
      dim diaporama_prc%  : diaporama_prc% = 4      : ' pour bouton "<"
      dim diaporama_sui%  : diaporama_sui% = 5      : ' pour bouton ">"
      dim diaporama_film% : diaporama_film% = 6      : ' pour pellicule
      dim diaporama_list% : diaporama_list% = 7      : ' pour liste des noms de fichiers
      dim diaporama_img%  : diaporama_img% = 8      : ' pour image temporaire
      dim diaporama_isiz% : diaporama_isiz% = 64    : ' taille des icônes
      dim diaporama_ssiz% : diaporama_ssiz% = 2      : ' taille des séparations
    ' variables
      dim diaporama_no%, diaporama_n%
      dim diaporama_resultat%
      dim diaporama_xm%
      dim diaporama_it%, diaporama_il%
      dim diaporama_liste%(diaporama_max%)          : ' liste des objets Diaporama
      dim diaporama_x%(diaporama_max%)              : ' position x des diaporamas
      dim diaporama_y%(diaporama_max%)              : ' position y des diaporamas
      dim diaporama_w%(diaporama_max%)              : ' largeur des diaporamas
      dim diaporama_h%(diaporama_max%)              : ' hauteur des diaporamas
      dim diaporama_dossier$(diaporama_max%)        : ' liste des dossiers
      dim diaporama_nicons%(diaporama_max%)          : ' nombre de vignettes dans la pellicule
      dim diaporama_acticon%(diaporama_max%)        : ' vignette actuelle dans la pellicule
      dim diaporama_prmicon%(diaporama_max%)        : ' première vignette dans la pellicule
    ' labels
      label diaporama_premier, diaporama_precedent
      label diaporama_suivant, diaporama_dernier
      label diaporama_click
  end_if
  dim_local i%
  diaporama_resultat% = -1 : ' création impossible
  ' tester si le nombre d'objets requis est disponible
  for i%=0 to diaporama_nobj%-1
    if object_exists(no%+i%)=1 then exit_sub
  next i%
  diaporama_n% = diaporama_n% + 1
  diaporama_liste%(diaporama_n%) = no%
  diaporama_w%(diaporama_n%) = w%
  diaporama_h%(diaporama_n%) = h%
  diaporama_x%(diaporama_n%) = x%
  diaporama_y%(diaporama_n%) = y%
  if diaporama_w%(diaporama_n%)<256 then diaporama_w%(diaporama_n%) = 256
  if diaporama_h%(diaporama_n%)<256 then diaporama_h%(diaporama_n%) = 256
  ' création des objets
  ' zone d'affichage
    picture no%+diaporama_aff0%
    parent no%+diaporama_aff0%,p%
    top no%+diaporama_aff0%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff0%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff0%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff0%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff0%,65,155,210
    picture no%+diaporama_aff%
    parent no%+diaporama_aff%,p%
    top no%+diaporama_aff%,diaporama_y%(diaporama_n%) : left no%+diaporama_aff%,diaporama_x%(diaporama_n%)
    width no%+diaporama_aff%,diaporama_w%(diaporama_n%)
    height no%+diaporama_aff%,diaporama_h%(diaporama_n%)
    color no%+diaporama_aff%,65,155,210
    stretch_on no%+diaporama_aff%
  ' bouton "premier"
    button no%+diaporama_prm%
    parent no%+diaporama_prm%,p%
    top no%+diaporama_prm%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prm%,diaporama_x%(diaporama_n%)
    width no%+diaporama_prm%,18 : height no%+diaporama_prm%,diaporama_isiz%
    caption no%+diaporama_prm%,"<<"
    on_click no%+diaporama_prm%,diaporama_premier
    font_bold no%+diaporama_prm%
  ' bouton "précédent"
    button no%+diaporama_prc%
    parent no%+diaporama_prc%,p%
    top no%+diaporama_prc%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_prc%,diaporama_x%(diaporama_n%)+width(no%+diaporama_prm%)
    width no%+diaporama_prc%,14 : height no%+diaporama_prc%,diaporama_isiz%
    caption no%+diaporama_prc%,"<"
    on_click no%+diaporama_prc%,diaporama_precedent
    font_bold no%+diaporama_prc%
  ' bouton "dernier"
    button no%+diaporama_der%
    parent no%+diaporama_der%,p%
    top no%+diaporama_der%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_der%,diaporama_x%(diaporama_n%)+diaporama_w%(diaporama_n%)-18
    width no%+diaporama_der%,18 : height no%+diaporama_der%,diaporama_isiz%
    caption no%+diaporama_der%,">>"
    font_bold no%+diaporama_der%
    on_click no%+diaporama_der%,diaporama_dernier
  ' bouton "suivant"
    button no%+diaporama_sui%
    parent no%+diaporama_sui%,p%
    top no%+diaporama_sui%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_sui%,left(no%+diaporama_der%)-14
    width no%+diaporama_sui%,14 : height no%+diaporama_sui%,diaporama_isiz%
    caption no%+diaporama_sui%,">"
    on_click no%+diaporama_sui%,diaporama_suivant
    font_bold no%+diaporama_sui%
  ' pellicule
    picture no%+diaporama_film%
    parent no%+diaporama_film%,p%
    top no%+diaporama_film%,diaporama_y%(diaporama_n%)+diaporama_h%(diaporama_n%)
    left no%+diaporama_film%,diaporama_x%(diaporama_n%)+32
    width no%+diaporama_film%,diaporama_w%(diaporama_n%)-64
    height no%+diaporama_film%,diaporama_isiz%
    color no%+diaporama_film%,0,0,0
    diaporama_nicons%(diaporama_n%) = int(width(no%+diaporama_film%)/diaporama_isiz%)
    on_click no%+diaporama_film%,diaporama_click
  ' liste des fichiers
    dlist no%+diaporama_list%
  ' image temporaire
    image no%+diaporama_img%
  diaporama_resultat% = diaporama_n%
end_sub

sub LoadDiaporama(n%,d$)
  dim_local s$, actdir$, ext$, i%, ni%, res%
  diaporama_resultat% = -2      : ' chargement impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  s$ = trim$(d$)
  if len(s$)=0 then exit_sub
  if dir_exists(s$)=0 then exit_sub
  cursor_hourglass diaporama_liste%(n%)
  cursor_hourglass diaporama_liste%(n%)+diaporama_film% : display
  actdir$ = dir_current$
  diaporama_dossier$(n%) = f$
  clear diaporama_liste%(n%)+diaporama_list%
  ' charger la liste des noms de fichiers
  dir_change f$
  f$ = file_find_first$
  while f$<>"_"
    ext$ = lower$(file_extract_extension$(f$))
    if (ext$=".jpg") or (ext$=".bmp") then item_add diaporama_liste%(n%)+diaporama_list%,f$
    f$ = file_find_next$
  end_while
  file_find_close
  dir_change actdir$
  ni% = count(diaporama_liste%(n%)+diaporama_list%)
  if ni%=0 then exit_sub
  if ni%>diaporama_nicons%(n%) then ni% = diaporama_nicons%(n%)
  diaporama_acticon%(n%) = 1        : ' vignettes actuelle dans la pellicule
  diaporama_prmicon%(n%) = 1        : ' première vignette dans la pellicule
  for i% = 1 to ni%
    f$ = item_read$(diaporama_liste%(n%)+diaporama_list%,i%)
    res% = dll_call1("LoadAnyImageFile",adr(f$))
    if i%=1
      AdjustDiaporama(n%)
      clipboard_paste diaporama_liste%(n%)+diaporama_aff%
    end_if
    AdjustIcon(n%)
    clipboard_paste diaporama_liste%(n%)+diaporama_img%
    2d_target_is diaporama_liste%(n%)+diaporama_film%
    2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*diaporama_isiz%+diaporama_ssiz%+diaporama_il%,diaporama_ssiz%+diaporama_it%
  next i%
  diaporama_resultat% = 0
  cursor_default diaporama_liste%(n%)
  cursor_default diaporama_liste%(n%)+diaporama_film%
end_sub

sub AdjustDiaporama(n%)
  dim_local w%, h%, res%, w1%, h1%, rw, rh
  w% = dll_call0("GetClipboardPictureWidth")
  h% = dll_call0("GetClipboardPictureHeight")
  rw = Diaporama_w%(n%)/w%
  w1% = int(w%*rw)
  h1% = int(h%*rw)
  if w1%>Diaporama_w%(n%)
    rw = Diaporama_w%(n%)/w1%
    w1% = Diaporama_w%(n%)
    h1% = int(h1%*rw)
  end_if
  if h1%>Diaporama_h%(n%)
    rh = Diaporama_h%(n%)/h1%
    h1% = Diaporama_h%(n%)
    w1% = int(w1%*rh)
  end_if
  width diaporama_liste%(n%)+Diaporama_aff%,w1%
  height diaporama_liste%(n%)+Diaporama_aff%,h1%
  top diaporama_liste%(n%)+Diaporama_aff%,diaporama_y%(n%)+int((Diaporama_h%(n%)-h1%)/2)
  left diaporama_liste%(n%)+Diaporama_aff%,diaporama_x%(n%)+int((Diaporama_w%(n%)-w1%)/2)
  res% = dll_call2("ResizePicture",w1%,h1%)
end_sub

sub AdjustIcon(n%)
  dim_local w%, h%, res%, w1%, h1%, rw, rh
  w% = dll_call0("GetClipboardPictureWidth")
  h% = dll_call0("GetClipboardPictureHeight")
  rw = (diaporama_isiz%-diaporama_ssiz%)/w%
  w1% = int(w%*rw)
  h1% = int(h%*rw)
  if w1%>(diaporama_isiz%-diaporama_ssiz%)
    rw = (diaporama_isiz%-diaporama_ssiz%)/w1%
    w1% = diaporama_isiz%-diaporama_ssiz%
    h1% = int(h1%*rw)
  end_if
  if h1%>(diaporama_isiz%-diaporama_ssiz%)
    rh = (diaporama_isiz%-diaporama_ssiz%)/h1%
    h1% = diaporama_isiz%-diaporama_ssiz%
    w1% = int(w1%*rh)
  end_if
  res% = dll_call2("ResizePicture",w1%,h1%)
  diaporama_it% = int((Diaporama_isiz%-diaporama_ssiz%-h1%)/2)
  diaporama_il% = int((Diaporama_isiz%-diaporama_ssiz%-w1%)/2)
end_sub

sub GetDiaporamaImageCount(n%)
  diaporama_resultat% = -2      : ' exécution impossible
  if (n%<1) or (n%>diaporama_n%) then exit_sub
  diaporama_resultat% = count(diaporama_liste%(n%)+diaporama_list%)
end_sub

diaporama_premier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prm%)
  DisplayDiaporamaPicture(diaporama_resultat%,1)
  cursor_default number_click
  return

diaporama_precedent:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_prc%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1-1)
  cursor_default number_click
  return

diaporama_suivant:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_sui%)
  DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_acticon%(diaporama_resultat%)-1+1)
  cursor_default number_click
  return

diaporama_dernier:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_der%)
  DisplayDiaporamaPicture(diaporama_resultat%,count(diaporama_liste%(diaporama_resultat%)+diaporama_list%))
  cursor_default number_click
  return

sub IdentifyDiaporama(n%,type%)
  dim_local i%
  for diaporama_resultat%=1 to diaporama_n%
    if n%=(diaporama_liste%(diaporama_resultat%)+type%) then exit_sub
  next diaporama_resultat%
  diaporama_resultat% = 0
end_sub

sub DisplayDiaporamaPicture(n%,p%)
  dim_local nl%, ni%, na%, np%, nact%, i%, m%, res%
  nl% = diaporama_liste%(n%)+diaporama_list%
  if p%<1 then exit_sub
  if p%>count(nl%) then exit_sub
  ni% = diaporama_nicons%(n%)          : ' nombre de vignettes dans la pellicule
  na% = diaporama_acticon%(n%)        : ' vignette actuelle dans la pellicule
  np% = diaporama_prmicon%(n%)        : ' première vignette dans la pellicule
  nact% = np% + na% - 1
  if p%=nact% then exit_sub
  if p%<np%                            : ' image choisie à gauche de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+p%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=1
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      AdjustIcon(n%)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*diaporama_isiz%+diaporama_ssiz%,diaporama_ssiz%
    next i%
    diaporama_acticon%(n%) = 1
    diaporama_prmicon%(n%) = p%
    exit_sub
  end_if
  if p%>=(np%+ni%)                    : ' image choisie à droite de la pellicule ?
    color diaporama_liste%(n%)+diaporama_film%,0,0,0
    m% = p% - ni% + 1
    for i%=1 to ni%
      f$ = item_read$(nl%,i%+m%-1)
      res% = dll_call1("LoadAnyImageFile",adr(f$))
      if i%=ni%
        AdjustDiaporama(n%)
        clipboard_paste diaporama_liste%(n%)+diaporama_aff%
      end_if
      AdjustIcon(n%)
      clipboard_paste diaporama_liste%(n%)+diaporama_img%
      2d_target_is diaporama_liste%(n%)+diaporama_film%
      2d_image_paste diaporama_liste%(n%)+diaporama_img%,(i%-1)*diaporama_isiz%+diaporama_ssiz%,diaporama_ssiz%
    next i%
    diaporama_acticon%(n%) = ni%
    diaporama_prmicon%(n%) = m%
    exit_sub
  end_if
  i% = p% - np% + 1
  f$ = item_read$(nl%,p%)
  res% = dll_call1("LoadAnyImageFile",adr(f$))
  AdjustDiaporama(n%)
  clipboard_paste diaporama_liste%(n%)+diaporama_aff%
  diaporama_acticon%(n%) = i%
end_sub

diaporama_click:
  cursor_hourglass number_click : display
  IdentifyDiaporama(number_click,diaporama_film%)
  diaporama_xm% = mouse_x_left_down(diaporama_liste%(diaporama_resultat%)+diaporama_film%)
  diaporama_xm% = int(diaporama_xm%/diaporama_isiz%)
  if diaporama_xm%<diaporama_nicons%(diaporama_resultat%)
    DisplayDiaporamaPicture(diaporama_resultat%,diaporama_prmicon%(diaporama_resultat%)+diaporama_xm%)
  end_if
  cursor_default number_click
  return


Dernière édition par Klaus le Jeu 27 Fév 2014 - 19:35, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 19:31

C'est inchangé chez moi, mais tu n'aurais pas dû donner le include plutôt que le test ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 19:35

Oups... C'est corrigé !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10074
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 19:41

J'ai créé un dossier diaporama sur mon WebDav. Les deux modules s'y trouvent. Ce sera plus cohérent ainsi.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Nouvel objet Diaporama    Jeu 27 Fév 2014 - 19:46

D'accord, merci Klaus.

Effectivement, les vignettes sont quand même plus jolies comme ça.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Nouvel objet Diaporama    

Revenir en haut Aller en bas
 
Nouvel objet Diaporama
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» 2.16 du 22 avril 2013: nouvel objet RichEdit
» Comboost : un diaporama hébergé en ligne
» Passer un objet devant les autres (ou derrière)
» Diaporama photos
» diaporama : les vignettes défilantes n'apparaissent pas

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: