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
» Panoramic et ses curiosités
par Jean Claude Aujourd'hui à 21:48

» Synedit Parameters
par Jean Claude Aujourd'hui à 21:15

» Utilitaire de suppression de fichiers
par Jean Claude Aujourd'hui à 21:11

» Code à vérifier SVP (Oups ! résolu)
par Jean Claude Hier à 21:16

» Compilateur FBPano
par jean_debord Hier à 9:56

» Bienvenue à Virtualalan !
par UltraVox Hier à 9:18

» Concours de Morpions
par jjn4 Hier à 0:04

» ShortName$(F) [Cloturé]
par papydall Mer 21 Juin 2017 - 16:19

» Remplacer espace par tiret dans noms des dossiers / fichiers
par papydall Mer 21 Juin 2017 - 15:27

» Menu personalisé avec icones et menu contextuel
par Laurent (Minibug) Mer 21 Juin 2017 - 12:44

» La liste des choses à faire ...
par Jack Mar 20 Juin 2017 - 22:49

» Quoi de neuf à propos de Goric 3D ? (@Jack)
par UltraVox Mar 20 Juin 2017 - 21:06

» Nom court et anti fenetre dos
par silverman Mar 20 Juin 2017 - 18:31

» Ludothèque Panoramic
par jjn4 Mar 20 Juin 2017 - 18:09

» Proposition à la communauté
par Yannick Mar 20 Juin 2017 - 15:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2017
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
2627282930  
CalendrierCalendrier

Partagez | 
 

 Outils couleurs

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

avatar

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

MessageSujet: re   Dim 21 Mai 2017 - 19:03

Je vais faire mieux.
Je vais te mettre le dossier de travail complet.
Heu...je vais y faire ménage avant, une chatte n' y retrouverait pas ses petits.
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 21 Mai 2017 - 19:08

C' est fait.
Tu le trouveras à "Outils couleurs.zip" sur la page d' entrée.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc37



Nombre de messages : 441
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Outils couleurs   Dim 21 Mai 2017 - 19:15

Merci !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 21 Mai 2017 - 20:21

@ Marc 37,

Le problème vient du calcul de X dans la procédure TSL > RGB
Les résultats sont très bizarres.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc37



Nombre de messages : 441
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Outils couleurs   Dim 21 Mai 2017 - 20:33

Je travaille en pointillés... Désolé !

Là, je pars manger. Je reprendrai ce soir si je peux.

En tout cas, tu as un oubli dans le cas ou le calcul de la teinte devient négatif : il faut lui ajouter impérativement 360°

Si TSL_T est négatif, il faut ajouter +360.

Ajoute la ligne :

IF TSL_T < 0 then TSL_T = TSL_T + 360

juste après la ligne 382.

Bon appétit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Outils couleurs   Dim 21 Mai 2017 - 20:45

Il suffit d'utiliser la fonction WRAP_VALUE
Exemple :

Code:

print wrap_value(-30) : ' <---- 330

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

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

MessageSujet: re   Dim 21 Mai 2017 - 20:50

Re Merci Papydall !
Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 21 Mai 2017 - 20:59

Même si je n' ai pas tout compris, Papydall vient de me sauver la mise.

La formule de calcule prise sur le lien a un défaut pour le calcul de X
dans le sens TSL > RGB

la page dit : C*mod(i,2)

sur une autre qui calcule à peu près de la même façon j' ai trouvé ceci

que Papydal m' a gentillement traduit en Panoramic et cela donne :

X = c*(1-abs(mod(i,2)-1))

et là les résultats sont cohérent même si il y a toujours un petit écart du aux arrondis.

Un grand merci à Papydall et Marc 37 et tous les autres pour leur aide sur cet outils.
cheers


Dernière édition par Yannick le Dim 21 Mai 2017 - 21:08, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 21 Mai 2017 - 21:07

Le source de l' outils qui affiche ce qu' on lui demande :

Code:
 dim no%,i%
dim r%,g%,b%
dim EtatStandByPalette%
dim ColPerso%(16)
     
dim FenPaletteCouleur% : no%=no%+1 : FenPaletteCouleur%=no%
dim ContPalette%      : no%=no%+1 : ContPalette%=no%
dim PictPalWindows%(48): for i%=1 to 48 : no%=no%+1 : PictPalWindows%(i%)=no% : next i%
dim AlphPalette%(2)    : for i%=1 to 2  : no%=no%+1 : AlphPalette%(i%)=no%    : next i%
dim PictPalPerso%(16)  : for i%=1 to 16 : no%=no%+1 : PictPalPerso%(i%)=no%  : next i%
dim PictPalette%      : no%=no%+1 : PictPalette%=no%
dim PictChxPalette%    : no%=no%+1 : PictChxPalette%=no%
dim SpnPalette%(3)    : for i%=1 to 3  : no%=no%+1 : SpnPalette%(i%)=no%    : next i%
dim AlphPalConvert%(3) : for i%=1 to 3  : no%=no%+1 : AlphPalConvert%(i%)=no% : next i%
dim PictTSVpalette%    : no%=no%+1 : PictTSVpalette%=no%

label MouseMoveCadre
label MouseMovePalette
label ClicBtn
label ClicPalWindows
label ClicPalPerso
label DClicPictChxPalette
label DClicPalPerso
label Change
 
button 9999
top 9999,10
left 9999,10
caption 9999,"Outils couleurs"
on_click 9999,ClicBtn
end

sub FormPalette()
  dim_local i%,l%,t%,x%,y%,V$
 
  if object_exists(FenPaletteCouleur%)=1
      show FenPaletteCouleur%
  else
      create_hide
      form FenPaletteCouleur%
      border_small FenPaletteCouleur%
      height FenPaletteCouleur%,305
      width FenPaletteCouleur%,450
      top FenPaletteCouleur%,(screen_y-height(FenPaletteCouleur%))/2
      left FenPaletteCouleur%,(screen_x-width(FenPaletteCouleur%))/2
      caption FenPaletteCouleur%,"Outils couleurs"
     
      font_name FenPaletteCouleur%,"Arial"
      font_size FenPaletteCouleur%,8
      font_color FenPaletteCouleur%,85,85,127
     
      container ContPalette%
      parent ContPalette%,FenPaletteCouleur%
      height ContPalette%,height_client(FenPaletteCouleur%)-5
      width ContPalette%,width_client(FenPaletteCouleur%)-10
      top ContPalette%,0
      left ContPalette%,5
      on_mouse_move ContPalette%,MouseMoveCadre
     
      alpha AlphPalette%(1)
      parent AlphPalette%(1),ContPalette%
      top AlphPalette%(1),15
      left AlphPalette%(1),5
      caption AlphPalette%(1),"Couleurs Windows :"
     
      l%=5     
      for x%=1 to 8
        t%=top(AlphPalette%(1))+height(AlphPalette%(1))+5     
        for y%=1 to 6
            i%=i%+1           
            picture PictPalWindows%(i%)
            parent PictPalWindows%(i%),ContPalette%
            height PictPalWindows%(i%),20
            width PictPalWindows%(i%),20
            top PictPalWindows%(i%),t%
            left PictPalWindows%(i%),l%
            read V$
            color PictPalWindows%(i%),hex(mid$(v$,1,2)),hex(mid$(v$,3,2)),hex(mid$(v$,5,2))
            cursor_point PictPalWindows%(i%)
            on_click PictPalWindows%(i%),ClicPalWindows
            t%=t%+25             
        next y%
        l%=l%+25 
      next x%
     
      alpha AlphPalette%(2)
      parent AlphPalette%(2),ContPalette%
      top AlphPalette%(2),top(PictpalWindows%(48))+height(PictpalWindows%(48))+10
      left AlphPalette%(2),5
      caption AlphPalette%(2),"Couleurs Personnalisées :"     

      l%=5
      i%=0     
      for x%=1 to 8
        t%=top(AlphPalette%(2))+height(AlphPalette%(2))+5     
        for y%=1 to 2
            i%=i%+1           
            picture PictPalPerso%(i%)
            parent PictPalPerso%(i%),ContPalette%
            height PictPalPerso%(i%),20
            width PictPalPerso%(i%),20
            top PictPalPerso%(i%),t%
            left PictPalPerso%(i%),l%
            color PictPalPerso%(i%),0,0,0
            cursor_point PictPalPerso%(i%)
            hint PictPalPerso%(i%),"Clic pour sélectionner"+chr$(13)+"Double clic pour effacer"
            on_click PictPalPerso%(i%),ClicPalPerso
            on_double_click PictPalPerso%(i%),DClicPalPerso
            t%=t%+25             
        next y%
        l%=l%+25 
      next x%

      picture PictPalette%
      parent PictPalette%,ContPalette%
      height PictPalette%,128
      width PictPalette%,158
      top PictPalette%,top(AlphPalette%(1))+height(AlphPalette%(1))+5
      left PictPalette%,left(PictPalWindows%(48))+width(PictPalWindows%(48))+30
      file_load PictPalette%,"palette.bmp"
      cursor_cross PictPalette%
      on_mouse_move PictPalette%,MouseMovePalette
      on_click PictPalette%,ClicBtn
    
      picture PictTSVpalette%
      parent PictTSVpalette%,ContPalette%
      height PictTSVpalette%,128
      width PictTSVpalette%,15
      top PictTSVpalette%,top(PictPalette%)
      left PictTSVpalette%,left(PictPalette%)+width(PictPalette%)+5
      ColorPictTSVpalette(0,0,0)
          
      picture PictChxPalette%
      parent PictChxPalette%,ContPalette%
      height PictChxPalette%,22
      width PictChxPalette%,22
      top PictChxPalette%,top(PictPalette%)+height(PictPalette%)+5
      left PictChxPalette%,left(PictPalette%)
      color PictChxPalette%,0,0,0
      cursor_point PictChxPalette%
      hint PictChxPalette%,"Cliquer pour convertir"+chr$(13)+"Double clic pour sauvegarder dans les couleurs personnalisées"
      on_click PictChxPalette%,ClicBtn
      on_double_click PictChxPalette%,DClicPictChxPalette
     
      t%=top(PictChxPalette%)
      l%=left(PictChxPalette%)+width(PictChxPalette%)+5
      for i%=1 to 3
        spin SpnPalette%(i%)
        parent SpnPalette%(i%),ContPalette%
        width SpnPalette%(i%),45
        top SpnPalette%(i%),t%
        left SpnPalette%(i%),l%
        l%=l%+width(SpnPalette%(i%))+5
        font_color SpnPalette%(i%),255,255,255
        min SpnPalette%(i%),0
        max SpnPalette%(i%),255           
      next i%
      color SpnPalette%(1),255,0,0
      color SpnPalette%(2),0,180,0
      color SpnPalette%(3),0,0,255
     
      alpha AlphPalConvert%(1)
      parent AlphPalConvert%(1),ContPalette%
      caption AlphPalConvert%(1),"RGB => "
      top AlphPalConvert%(1),top(SpnPalette%(1))+height(SpnPalette%(1))+10
      left AlphPalConvert%(1),left(PictChxPalette%)
     
      alpha AlphPalConvert%(2)
      parent AlphPalConvert%(2),ContPalette%
      caption AlphPalConvert%(2),"HTML => "
      top AlphPalConvert%(2),top(AlphPalConvert%(1))+height(AlphPalConvert%(1))+5
      left AlphPalConvert%(2),left(PictChxPalette%)
     
      alpha AlphPalConvert%(3)
      parent AlphPalConvert%(3),ContPalette%
      caption AlphPalConvert%(3),"KGF => "
      top AlphPalConvert%(3),top(AlphPalConvert%(2))+height(AlphPalConvert%(2))+5
      left AlphPalConvert%(3),left(PictChxPalette%)
      create_show
      top FenPaletteCouleur%,(screen_y-height(FenPaletteCouleur%))/2
      left FenPaletteCouleur%,(screen_x-width(FenPaletteCouleur%))/2
      show_all    
  end_if
 
  for i%=1 to 16
      if ColPerso%(i%)<>0
        r%= bin_and(ColPerso%(i%),255)
        g%= bin_and(int(ColPerso%(i%)/256),255)
        b%= bin_and(int(ColPerso%(i%)/(256*256)),255)
        color PictPalPerso%(i%),r%,g%,b%
      end_if
  next i%
end_sub

Change:
  if number_change>(SpnPalette%(1)-1) and number_change<(SpnPalette%(3)+1)
      if position(number_change)>255 or position(number_change)<0
        message "Valeur incorrecte !"+chr$(13)+"Valeur de 0 et 255"
        position number_change,255
        return
      end_if
      color PictChxPalette%,position(SpnPalette%(1)),position(SpnPalette%(2)),position(SpnPalette%(3))
      return
  end_if
return

MouseMovePalette:
  off_mouse_move PictPalette%
      if mouse_x_position(PictPalette%)<0 or mouse_y_position(PictPalette%)<0
       return
     end_if
      if object_exists(SpnPalette%(1))=1 : off_change SpnPalette%(1) : end_if
      if object_exists(SpnPalette%(2))=1 : off_change SpnPalette%(2) : end_if
      if object_exists(SpnPalette%(3))=1 : off_change SpnPalette%(3) : end_if
      r%=color_pixel_red(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
      g%=color_pixel_green(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
      b%=color_pixel_blue(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
      color PictChxPalette%,r%,g%,b%
      position SpnPalette%(1),r%
      position SpnPalette%(2),g%
      position SpnPalette%(3),b%
  on_mouse_move PictPalette%,MouseMovePalette 
return

MouseMoveCadre:
  if object_exists(SpnPalette%(1))=1 : on_change SpnPalette%(1),Change : end_if
  if object_exists(SpnPalette%(2))=1 : on_change SpnPalette%(2),Change : end_if
  if object_exists(SpnPalette%(3))=1 : on_change SpnPalette%(3),Change : end_if
return

ClicBtn:
  if number_click = 9999
      FormPalette()
      return
  end_if
  if number_click = PictPalette%
      if EtatStandByPalette%=0
        EtatStandByPalette%=1
        off_mouse_move PictPalette%
        ColorPictTSVpalette(R%,G%,B%)
        cursor_default PictPalette%
      else
        EtatStandByPalette%=0
        on_mouse_move PictPalette%,MouseMovePalette
        cursor_cross PictPalette%     
      end_if
      return
  end_if
  if number_click = PictChxPalette%
      r%=color_pixel_red(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
      g%=color_pixel_green(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
      b%=color_pixel_blue(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
      ConvertChxPalette(r%,g%,b%)
      return
  end_if
return

DClicPictChxPalette:
  r%=color_pixel_red(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
  g%=color_pixel_green(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
  b%=color_pixel_blue(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
  SaveColorPerso(r%,g%,b%)
return

sub SaveColorPerso(r1%,g1%,b1%)
  dim_local i%
 
  for i%=1 to 16
      if ColPerso%(i%)=0
          ColPerso%(i%)=(b1%*256+g1%)*256+r1%
          color PictPalPerso%(i%),r1%,g1%,b1%
          exit_for
      end_if
  next i%
end_sub

ClicPalWindows:
  off_change SpnPalette%(1)
  off_change SpnPalette%(2)
  off_change SpnPalette%(3)
  r%=color_pixel_red(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
  g%=color_pixel_green(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
  b%=color_pixel_blue(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
  ColorPictTSVpalette(R%,G%,B%)
  color PictChxPalette%,r%,g%,b%
  position SpnPalette%(1),r%
  position SpnPalette%(2),g%
  position SpnPalette%(3),b% 
return

ClicPalPerso:
  if mouse_left_down(number_click)=1
      off_change SpnPalette%(1)
      off_change SpnPalette%(2)
      off_change SpnPalette%(3)
      r%=color_pixel_red(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
      g%=color_pixel_green(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
      b%=color_pixel_blue(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
      ColorPictTSVpalette(R%,G%,B%)
      color PictChxPalette%,r%,g%,b%
      position SpnPalette%(1),r%
      position SpnPalette%(2),g%
      position SpnPalette%(3),b%
  else
      message "Raté !!"
  end_if
return

DClicPalPerso:
  color number_double_click,0,0,0
  InitColPerso()
return

sub InitColPerso()
  dim_local i%
 
  for i%=1 to 16
      if number_double_click = PictPalPerso%(i%)
      ColPerso%(i%)=0
      end_if
  next i%
end_sub

sub ConvertChxPalette(R1%,G1%,B1%)
  dim_local RH$,GH$,BH$,KGFc$
   
  RH$ = Hex$(R1%) : if R1% < 16 then RH$ = "0" + RH$
  GH$ = Hex$(G1%) : if G1% < 16 then GH$ = "0" + GH$
  BH$ = Hex$(B1%) : if B1% < 16 then BH$ = "0" + BH$
 
  KGFc$ = str$((B1%*256+G1%)*256+R1%)
  caption AlphPalConvert%(1),"RGB  => "+str$(R1%)+","+str$(G1%)+","+str$(B1%)
  caption AlphPalConvert%(2),"HTML => "+RH$+GH$+BH$
  caption AlphPalConvert%(3),"KGF  => "+KGFc$     
end_sub

sub ColorPictTSVpalette(R1%,V1%,B1%)
  dim_local i%,T,S,L,R%,V%,B%,x%

  R%=R1% : V%=V1% : B%=B1% 
  RGBtoTSL(R%,V%,B%)
  T=TSL_T : S=TSL_S
  cls
  2d_target_is PictTSVpalette%
  for i%=1 to 127
      if i%>100
        L=100
      else
        L=i%
      end_if
      TSLtoRGB(T,S,L)     
     if RGB_R%>-1 and RGB_G%>-1 and RGB_B%>-1
       if RGB_R%<256 and RGB_G%<256 and RGB_B%<256
              2d_pen_color RGB_R%,RGB_G%,RGB_B%
              2d_line 1,i%,15,i%
            end_if
     end_if
  next i%
end_sub

sub RGBtoTSL(R%,V%,B%)
  dim_local i%,Mx%,Mx1%,Mn%,Mn1%,C%,t$,x%
 
  if variable("TSL_T")=0 then dim TSL_T
  if variable("TSL_S")=0 then dim TSL_S
  if variable("TSL_L")=0 then dim TSL_L
 
  Mx1% = Max(R%,V%)
  if Mx1% = R% : Mx% = Max(R%,B%) : else : Mx% = Max(V%,B%) : end_if
  Mn1% = Min(R%,V%)
  if Mn1% = R% : Mn% = Min(R%,B%) : else : Mn% = Min(V%,B%) : end_if
  C% = Mx%-Mn% 
  if Mx% = R%
      if C%>0 : TSL_T = 60*mod(((V%-B%)/C%),6) : else : TSL_T = 60*mod((V%-B%),6) : end_if
  else
      if Mx% = V%
        if C%>0 : TSL_T = 60*(((B%-R%)/C%)+2) : else : TSL_T = 60*((B%-R%)+2) : end_if
      else
        if C%>0 : TSL_T = 60*(((R%-V%)/C%)+4) : else : TSL_T = 60*((R%-V%)+4)  : end_if
      end_if
  end_if
  if TSL_T<0 : TSL_T=wrap_value(TSL_T) : end_if
 
 
  if C%>0  : TSL_S = 100*(C%/Mx%) : else : TSL_S = 0 : end_if
  t$=str$(frac(TSL_S))+"00"
  t$=left$(t$,2)
  if val(t$)>50
      TSL_S=int(TSL_S)+1 : else : TSL_S=int(TSL_S)
  end_if
     
  if Mx%>0 : TSL_L = 100*(Mx%/255): else : TSL_L = 0 : end_if
  t$=str$(frac(TSL_L))+"00"
  t$=left$(t$,2)
  if val(t$)>50
      TSL_L=int(TSL_L)+1 : else : TSL_L=int(TSL_L)
  end_if     
end_sub

sub TSLtoRGB(T,S,L)
    dim_local i,Mx,Mm,C,X

  if variable("RGB_R%")=0 then dim RGB_R%
  if variable("RGB_G%")=0 then dim RGB_G%
  if variable("RGB_B%")=0 then dim RGB_B%
   
  Mx = L*255/100
  Mm = (100-S)*L*(255/10000)
  C = Mx-Mm
  i = T/60
  X = C*(1-abs(mod(i,2)-1)) 
  if i<1
      RGB_R% = int(C+Mm)
      RGB_G% = int(X+Mm)
      RGB_B% = int(Mm)
  else
      if i>0.99 and i<2
        RGB_R% = int(X+Mm)
        RGB_G% = int(C+Mm)
        RGB_B% = int(Mm)    
      else
        if i>1.99 and i<3
            RGB_R% = int(Mm)
            RGB_G% = int(C+Mm)
            RGB_B% = int(X+Mm)       
        else
            if i>2.99 and i<4
              RGB_R% = int(Mm)
              RGB_G% = int(X+Mm)
              RGB_B% = int(C+Mm)         
            else
              if i>3.99 and i<5
                  RGB_R% = int(X+Mm)
                  RGB_G% = int(Mm)
                  RGB_B% = int(C+Mm)            
              else
                  RGB_R% = int(C+Mm)
                  RGB_G% = int(Mm)
                  RGB_B% = int(X+Mm)            
              end_if
            end_if
        end_if
      end_if    
  end_if
end_sub

DATA "FF8080","FFFF80","80FF80","00FF80","80FFFF","0080FF","FF80C0","FF80FF"
DATA "FF0000","FFFF00","80FF00","00FF40","00FFFF","0080C0","8080C0","FF00FF"
DATA "804040","FF8040","00FF00","008080","004080","8080FF","800040","FF0080"
DATA "800000","FF8000","008000","008040","0000FF","0000A0","800080","8000FF"
DATA "400000","804000","004000","004040","000080","000040","400040","400080"
DATA "000000","808000","808040","808080","408080","C0C0C0","400040","FFFFFF"

Reste plus qu' à coder la récupération d' une couleur sur cette barre de luminosité.
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 21 Mai 2017 - 22:18

Avec la sélection possible dans la barre de luminosité.

Code:
 dim no%,i%
dim r%,g%,b%
dim EtatStandByPalette%
dim EtatStandByTSL%
dim ColPerso%(16)
     
dim FenPaletteCouleur% : no%=no%+1 : FenPaletteCouleur%=no%
dim ContPalette%      : no%=no%+1 : ContPalette%=no%
dim PictPalWindows%(48): for i%=1 to 48 : no%=no%+1 : PictPalWindows%(i%)=no% : next i%
dim AlphPalette%(2)    : for i%=1 to 2  : no%=no%+1 : AlphPalette%(i%)=no%    : next i%
dim PictPalPerso%(16)  : for i%=1 to 16 : no%=no%+1 : PictPalPerso%(i%)=no%  : next i%
dim PictPalette%      : no%=no%+1 : PictPalette%=no%
dim PictChxPalette%    : no%=no%+1 : PictChxPalette%=no%
dim SpnPalette%(3)    : for i%=1 to 3  : no%=no%+1 : SpnPalette%(i%)=no%    : next i%
dim AlphPalConvert%(3) : for i%=1 to 3  : no%=no%+1 : AlphPalConvert%(i%)=no% : next i%
dim PictTSVpalette%    : no%=no%+1 : PictTSVpalette%=no%
dim Puce%              : no%=no%+1 : Puce%=no%

label MouseMoveCadre
label MouseMovePalette
label ClicBtn
label ClicPalWindows
label ClicPalPerso
label DClicPictChxPalette
label DClicPalPerso
label Change
label MouseMoveTSVpalette
 
button 9999
top 9999,10
left 9999,10
caption 9999,"Outils couleurs"
on_click 9999,ClicBtn
end

sub FormPalette()
  dim_local i%,l%,t%,x%,y%,V$
 
  if object_exists(FenPaletteCouleur%)=1
      show FenPaletteCouleur%
  else
      create_hide
      form FenPaletteCouleur%
      border_small FenPaletteCouleur%
      height FenPaletteCouleur%,305
      width FenPaletteCouleur%,450
      top FenPaletteCouleur%,(screen_y-height(FenPaletteCouleur%))/2
      left FenPaletteCouleur%,(screen_x-width(FenPaletteCouleur%))/2
      caption FenPaletteCouleur%,"Outils couleurs"
     
      font_name FenPaletteCouleur%,"Arial"
      font_size FenPaletteCouleur%,8
      font_color FenPaletteCouleur%,85,85,127
     
      container ContPalette%
      parent ContPalette%,FenPaletteCouleur%
      height ContPalette%,height_client(FenPaletteCouleur%)-5
      width ContPalette%,width_client(FenPaletteCouleur%)-10
      top ContPalette%,0
      left ContPalette%,5
      on_mouse_move ContPalette%,MouseMoveCadre
     
      alpha AlphPalette%(1)
      parent AlphPalette%(1),ContPalette%
      top AlphPalette%(1),15
      left AlphPalette%(1),5
      caption AlphPalette%(1),"Couleurs Windows :"
     
      l%=5     
      for x%=1 to 8
        t%=top(AlphPalette%(1))+height(AlphPalette%(1))+5     
        for y%=1 to 6
            i%=i%+1           
            picture PictPalWindows%(i%)
            parent PictPalWindows%(i%),ContPalette%
            height PictPalWindows%(i%),20
            width PictPalWindows%(i%),20
            top PictPalWindows%(i%),t%
            left PictPalWindows%(i%),l%
            read V$
            color PictPalWindows%(i%),hex(mid$(v$,1,2)),hex(mid$(v$,3,2)),hex(mid$(v$,5,2))
            cursor_point PictPalWindows%(i%)
            on_click PictPalWindows%(i%),ClicPalWindows
            t%=t%+25             
        next y%
        l%=l%+25 
      next x%
     
      alpha AlphPalette%(2)
      parent AlphPalette%(2),ContPalette%
      top AlphPalette%(2),top(PictpalWindows%(48))+height(PictpalWindows%(48))+10
      left AlphPalette%(2),5
      caption AlphPalette%(2),"Couleurs Personnalisées :"     

      l%=5
      i%=0     
      for x%=1 to 8
        t%=top(AlphPalette%(2))+height(AlphPalette%(2))+5     
        for y%=1 to 2
            i%=i%+1           
            picture PictPalPerso%(i%)
            parent PictPalPerso%(i%),ContPalette%
            height PictPalPerso%(i%),20
            width PictPalPerso%(i%),20
            top PictPalPerso%(i%),t%
            left PictPalPerso%(i%),l%
            color PictPalPerso%(i%),0,0,0
            cursor_point PictPalPerso%(i%)
            hint PictPalPerso%(i%),"Clic pour sélectionner"+chr$(13)+"Double clic pour effacer"
            on_click PictPalPerso%(i%),ClicPalPerso
            on_double_click PictPalPerso%(i%),DClicPalPerso
            t%=t%+25             
        next y%
        l%=l%+25 
      next x%

      picture PictPalette%
      parent PictPalette%,ContPalette%
      height PictPalette%,128
      width PictPalette%,158
      top PictPalette%,top(AlphPalette%(1))+height(AlphPalette%(1))+5
      left PictPalette%,left(PictPalWindows%(48))+width(PictPalWindows%(48))+30
      file_load PictPalette%,"palette.bmp"
      cursor_cross PictPalette%
      on_mouse_move PictPalette%,MouseMovePalette
      on_click PictPalette%,ClicBtn
    
      picture PictTSVpalette%
      parent PictTSVpalette%,ContPalette%
      height PictTSVpalette%,128
      width PictTSVpalette%,15
      top PictTSVpalette%,top(PictPalette%)
      left PictTSVpalette%,left(PictPalette%)+width(PictPalette%)+5
      ColorPictTSVpalette(0,0,0)
      on_mouse_move PictTSVpalette%,MouseMoveTSVpalette
      on_click PictTSVpalette%,ClicBtn
     
      picture Puce%
      parent Puce%,ContPalette%
      height Puce%,9
      width Puce%,5
      top Puce%,top(PictTSVpalette%)-4
      left Puce%,left(PictTSVpalette%)+width(PictTSVpalette%)+1
      file_load Puce%,"puce1.bmp"
          
      picture PictChxPalette%
      parent PictChxPalette%,ContPalette%
      height PictChxPalette%,22
      width PictChxPalette%,22
      top PictChxPalette%,top(PictPalette%)+height(PictPalette%)+5
      left PictChxPalette%,left(PictPalette%)
      color PictChxPalette%,0,0,0
      cursor_point PictChxPalette%
      hint PictChxPalette%,"Cliquer pour convertir"+chr$(13)+"Double clic pour sauvegarder dans les couleurs personnalisées"
      on_click PictChxPalette%,ClicBtn
      on_double_click PictChxPalette%,DClicPictChxPalette
     
      t%=top(PictChxPalette%)
      l%=left(PictChxPalette%)+width(PictChxPalette%)+5
      for i%=1 to 3
        spin SpnPalette%(i%)
        parent SpnPalette%(i%),ContPalette%
        width SpnPalette%(i%),45
        top SpnPalette%(i%),t%
        left SpnPalette%(i%),l%
        l%=l%+width(SpnPalette%(i%))+5
        font_color SpnPalette%(i%),255,255,255
        min SpnPalette%(i%),0
        max SpnPalette%(i%),255           
      next i%
      color SpnPalette%(1),255,0,0
      color SpnPalette%(2),0,180,0
      color SpnPalette%(3),0,0,255
     
      alpha AlphPalConvert%(1)
      parent AlphPalConvert%(1),ContPalette%
      caption AlphPalConvert%(1),"RGB => "
      top AlphPalConvert%(1),top(SpnPalette%(1))+height(SpnPalette%(1))+10
      left AlphPalConvert%(1),left(PictChxPalette%)
     
      alpha AlphPalConvert%(2)
      parent AlphPalConvert%(2),ContPalette%
      caption AlphPalConvert%(2),"HTML => "
      top AlphPalConvert%(2),top(AlphPalConvert%(1))+height(AlphPalConvert%(1))+5
      left AlphPalConvert%(2),left(PictChxPalette%)
     
      alpha AlphPalConvert%(3)
      parent AlphPalConvert%(3),ContPalette%
      caption AlphPalConvert%(3),"KGF => "
      top AlphPalConvert%(3),top(AlphPalConvert%(2))+height(AlphPalConvert%(2))+5
      left AlphPalConvert%(3),left(PictChxPalette%)
      create_show
      top FenPaletteCouleur%,(screen_y-height(FenPaletteCouleur%))/2
      left FenPaletteCouleur%,(screen_x-width(FenPaletteCouleur%))/2
      show_all    
  end_if
 
  for i%=1 to 16
      if ColPerso%(i%)<>0
        r%= bin_and(ColPerso%(i%),255)
        g%= bin_and(int(ColPerso%(i%)/256),255)
        b%= bin_and(int(ColPerso%(i%)/(256*256)),255)
        color PictPalPerso%(i%),r%,g%,b%
      end_if
  next i%
end_sub

Change:
  if number_change>(SpnPalette%(1)-1) and number_change<(SpnPalette%(3)+1)
      if position(number_change)>255 or position(number_change)<0
        message "Valeur incorrecte !"+chr$(13)+"Valeur de 0 et 255"
        position number_change,255
        return
      end_if
      color PictChxPalette%,position(SpnPalette%(1)),position(SpnPalette%(2)),position(SpnPalette%(3))
      return
  end_if
return

MouseMovePalette:
  off_mouse_move PictPalette%
      if mouse_x_position(PictPalette%)<0 or mouse_y_position(PictPalette%)<0
       return
     end_if
      if object_exists(SpnPalette%(1))=1 : off_change SpnPalette%(1) : end_if
      if object_exists(SpnPalette%(2))=1 : off_change SpnPalette%(2) : end_if
      if object_exists(SpnPalette%(3))=1 : off_change SpnPalette%(3) : end_if
      r%=color_pixel_red(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
      g%=color_pixel_green(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
      b%=color_pixel_blue(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
      color PictChxPalette%,r%,g%,b%
      position SpnPalette%(1),r%
      position SpnPalette%(2),g%
      position SpnPalette%(3),b%
  on_mouse_move PictPalette%,MouseMovePalette 
return

MouseMoveCadre:
  if object_exists(SpnPalette%(1))=1 : on_change SpnPalette%(1),Change : end_if
  if object_exists(SpnPalette%(2))=1 : on_change SpnPalette%(2),Change : end_if
  if object_exists(SpnPalette%(3))=1 : on_change SpnPalette%(3),Change : end_if
return

ClicBtn:
  if number_click = 9999
      FormPalette()
      return
  end_if
  if number_click = PictPalette%
      if EtatStandByPalette%=0
        EtatStandByPalette%=1
        off_mouse_move PictPalette%
        ColorPictTSVpalette(R%,G%,B%)
        cursor_default PictPalette%
      else
        EtatStandByPalette%=0
        on_mouse_move PictPalette%,MouseMovePalette
        cursor_cross PictPalette%     
      end_if
      return
  end_if
  if number_click = PictChxPalette%
      r%=color_pixel_red(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
      g%=color_pixel_green(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
      b%=color_pixel_blue(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
      ConvertChxPalette(r%,g%,b%)
      return
  end_if
  if number_click = PictTSVpalette%
      if EtatStandByTSL% = 0
        EtatStandByTSL% = 1
        off_mouse_move PictTSVpalette%
        cursor_point PictTSVpalette%
      else
        EtatStandByTSL% = 0
        on_mouse_move PictTSVpalette%,MouseMoveTSVpalette
        cursor_arrow PictTSVpalette%
      end_if
      return
  end_if
return

DClicPictChxPalette:
  r%=color_pixel_red(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
  g%=color_pixel_green(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
  b%=color_pixel_blue(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
  SaveColorPerso(r%,g%,b%)
return

sub SaveColorPerso(r1%,g1%,b1%)
  dim_local i%
 
  for i%=1 to 16
      if ColPerso%(i%)=0
          ColPerso%(i%)=(b1%*256+g1%)*256+r1%
          color PictPalPerso%(i%),r1%,g1%,b1%
          exit_for
      end_if
  next i%
end_sub

ClicPalWindows:
  off_change SpnPalette%(1)
  off_change SpnPalette%(2)
  off_change SpnPalette%(3)
  r%=color_pixel_red(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
  g%=color_pixel_green(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
  b%=color_pixel_blue(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
  ColorPictTSVpalette(R%,G%,B%)
  color PictChxPalette%,r%,g%,b%
  position SpnPalette%(1),r%
  position SpnPalette%(2),g%
  position SpnPalette%(3),b% 
return

ClicPalPerso:
  if mouse_left_down(number_click)=1
      off_change SpnPalette%(1)
      off_change SpnPalette%(2)
      off_change SpnPalette%(3)
      r%=color_pixel_red(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
      g%=color_pixel_green(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
      b%=color_pixel_blue(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
      ColorPictTSVpalette(R%,G%,B%)
      color PictChxPalette%,r%,g%,b%
      position SpnPalette%(1),r%
      position SpnPalette%(2),g%
      position SpnPalette%(3),b%
  else
      message "Raté !!"
  end_if
return

DClicPalPerso:
  color number_double_click,0,0,0
  InitColPerso()
return

sub InitColPerso()
  dim_local i%
 
  for i%=1 to 16
      if number_double_click = PictPalPerso%(i%)
      ColPerso%(i%)=0
      end_if
  next i%
end_sub

sub ConvertChxPalette(R1%,G1%,B1%)
  dim_local RH$,GH$,BH$,KGFc$
   
  RH$ = Hex$(R1%) : if R1% < 16 then RH$ = "0" + RH$
  GH$ = Hex$(G1%) : if G1% < 16 then GH$ = "0" + GH$
  BH$ = Hex$(B1%) : if B1% < 16 then BH$ = "0" + BH$
 
  KGFc$ = str$((B1%*256+G1%)*256+R1%)
  caption AlphPalConvert%(1),"RGB  => "+str$(R1%)+","+str$(G1%)+","+str$(B1%)
  caption AlphPalConvert%(2),"HTML => "+RH$+GH$+BH$
  caption AlphPalConvert%(3),"KGF  => "+KGFc$     
end_sub

sub ColorPictTSVpalette(R1%,V1%,B1%)
  dim_local i%,T,S,L,R%,V%,B%,x%

  R%=R1% : V%=V1% : B%=B1% 
  RGBtoTSL(R%,V%,B%)
  T=TSL_T : S=TSL_S
  cls
  2d_target_is PictTSVpalette%
  for i%=1 to 127
      if i%>100
        L=100
      else
        L=i%
      end_if
      TSLtoRGB(T,S,L)     
     if RGB_R%>-1 and RGB_G%>-1 and RGB_B%>-1
       if RGB_R%<256 and RGB_G%<256 and RGB_B%<256
              2d_pen_color RGB_R%,RGB_G%,RGB_B%
              2d_line 1,i%,15,i%
            end_if
     end_if
  next i%
end_sub

sub RGBtoTSL(R%,V%,B%)
  dim_local i%,Mx%,Mx1%,Mn%,Mn1%,C%,t$,x%
 
  if variable("TSL_T")=0 then dim TSL_T
  if variable("TSL_S")=0 then dim TSL_S
  if variable("TSL_L")=0 then dim TSL_L
 
  Mx1% = Max(R%,V%)
  if Mx1% = R% : Mx% = Max(R%,B%) : else : Mx% = Max(V%,B%) : end_if
  Mn1% = Min(R%,V%)
  if Mn1% = R% : Mn% = Min(R%,B%) : else : Mn% = Min(V%,B%) : end_if
  C% = Mx%-Mn% 
  if Mx% = R%
      if C%>0 : TSL_T = 60*mod(((V%-B%)/C%),6) : else : TSL_T = 60*mod((V%-B%),6) : end_if
  else
      if Mx% = V%
        if C%>0 : TSL_T = 60*(((B%-R%)/C%)+2) : else : TSL_T = 60*((B%-R%)+2) : end_if
      else
        if C%>0 : TSL_T = 60*(((R%-V%)/C%)+4) : else : TSL_T = 60*((R%-V%)+4)  : end_if
      end_if
  end_if
  if TSL_T<0 : TSL_T=wrap_value(TSL_T) : end_if
 
 
  if C%>0  : TSL_S = 100*(C%/Mx%) : else : TSL_S = 0 : end_if
  t$=str$(frac(TSL_S))+"00"
  t$=left$(t$,2)
  if val(t$)>50
      TSL_S=int(TSL_S)+1 : else : TSL_S=int(TSL_S)
  end_if
     
  if Mx%>0 : TSL_L = 100*(Mx%/255): else : TSL_L = 0 : end_if
  t$=str$(frac(TSL_L))+"00"
  t$=left$(t$,2)
  if val(t$)>50
      TSL_L=int(TSL_L)+1 : else : TSL_L=int(TSL_L)
  end_if     
end_sub

sub TSLtoRGB(T,S,L)
    dim_local i,Mx,Mm,C,X

  if variable("RGB_R%")=0 then dim RGB_R%
  if variable("RGB_G%")=0 then dim RGB_G%
  if variable("RGB_B%")=0 then dim RGB_B%
   
  Mx = L*255/100
  Mm = (100-S)*L*(255/10000)
  C = Mx-Mm
  i = T/60
  X = C*(1-abs(mod(i,2)-1)) 
  if i<1
      RGB_R% = int(C+Mm)
      RGB_G% = int(X+Mm)
      RGB_B% = int(Mm)
  else
      if i>0.99 and i<2
        RGB_R% = int(X+Mm)
        RGB_G% = int(C+Mm)
        RGB_B% = int(Mm)    
      else
        if i>1.99 and i<3
            RGB_R% = int(Mm)
            RGB_G% = int(C+Mm)
            RGB_B% = int(X+Mm)       
        else
            if i>2.99 and i<4
              RGB_R% = int(Mm)
              RGB_G% = int(X+Mm)
              RGB_B% = int(C+Mm)         
            else
              if i>3.99 and i<5
                  RGB_R% = int(X+Mm)
                  RGB_G% = int(Mm)
                  RGB_B% = int(C+Mm)            
              else
                  RGB_R% = int(C+Mm)
                  RGB_G% = int(Mm)
                  RGB_B% = int(X+Mm)            
              end_if
            end_if
        end_if
      end_if    
  end_if
end_sub

MouseMoveTSVpalette:
  off_mouse_move PictTSVpalette%
  if object_exists(SpnPalette%(1))=1 : off_change SpnPalette%(1) : end_if
  if object_exists(SpnPalette%(2))=1 : off_change SpnPalette%(2) : end_if
  if object_exists(SpnPalette%(3))=1 : off_change SpnPalette%(3) : end_if
  top puce%,top(PictTSVpalette%)+mouse_y_position(PictTSVpalette%)-4
  r%=color_pixel_red(PictTSVPalette%,mouse_x_position(PictTSVPalette%),mouse_y_position(PictTSVPalette%))
  g%=color_pixel_green(PictTSVPalette%,mouse_x_position(PictTSVPalette%),mouse_y_position(PictTSVPalette%))
  b%=color_pixel_blue(PictTSVPalette%,mouse_x_position(PictTSVPalette%),mouse_y_position(PictTSVPalette%))
  color PictChxPalette%,r%,g%,b%
  position SpnPalette%(1),r%
  position SpnPalette%(2),g%
  position SpnPalette%(3),b%   
  on_mouse_move PictTSVpalette%,MouseMoveTSVpalette
return

DATA "FF8080","FFFF80","80FF80","00FF80","80FFFF","0080FF","FF80C0","FF80FF"
DATA "FF0000","FFFF00","80FF00","00FF40","00FFFF","0080C0","8080C0","FF00FF"
DATA "804040","FF8040","00FF00","008080","004080","8080FF","800040","FF0080"
DATA "800000","FF8000","008000","008040","0000FF","0000A0","800080","8000FF"
DATA "400000","804000","004000","004040","000080","000040","400040","400080"
DATA "000000","808000","808040","808080","408080","C0C0C0","400040","FFFFFF"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Lun 22 Mai 2017 - 15:43

Voilà le visuel de l' outils couleurs final intégré dans Basic Editor :


Pour intégrer cet objet dans n' importe quel programme, je vais en faire deux fichiers
à intégrer avec la directive #INCLUDE. Le premier contenant tous les appels et l' autre
les labels et procédures.

Pensez que cet objet ait sa place dans le Mag ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Laurent (Minibug)

avatar

Nombre de messages : 2344
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Outils couleurs   Lun 22 Mai 2017 - 16:56

Citation :
Pensez que cet objet ait sa place dans le Mag ?

Bah bien sûr qu'il a sa place !!! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Jeu 25 Mai 2017 - 13:21

@ Silverman,

Ta méthode d' affichage comporte un gros problème : "Show_all".
lorsque tu as plusieurs fenêtres qui se retrouve cachées par une fermeture par la croix
ou un choix délibéré du programmeur par un bouton, lorsque tu ouvre une fenêtre 
elle sont toutes affichées. affraid
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 444
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Outils couleurs   Jeu 25 Mai 2017 - 18:41

J'ai mis 'SHOW_ALL' parceque je n'ai pas étudié ton code. Remplace le par une série de SHOW obj... L'idée ne t'a pas effleuré?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Jeu 25 Mai 2017 - 19:22

Autant ne pas faire de hide, les objets vont s' afficher les uns après les autres.

Je vais tester une chose, create_hide et create_show avant et après  form et show form en fin de création des objets.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Sam 10 Juin 2017 - 18:31

Suite à des explications de Klaus et une base de Silverman,
j' ai réussi à rendre mon "outils couleurs" indépendant.

Le programme appelant lance l' outils et lorsque que l' utilisateur valide une couleur
l' outils la renvoie au programme appelant et se ferme.

Le source de l' outils :
Code:
hide 0
Variables()
Constantes()
Labels()
Init()
Gui()
show 0
end

sub Variables()
 dim ReceiveHnd% : ReceiveHnd% = val(Param_value$(1))
 dim no%
 dim Langue%
 dim r%,g%,b%
 dim EtatStandByPalette%
 dim EtatStandByTSL%
 dim ColPerso%(16)
 dim event_index%
 dim user32%
end_sub

sub Constantes()
 dim_local i%
 ' DOSSIERS
 dim Path$ : Path$ = dir_current$
 if right$(Path$,1)="" : Path$ = left$(Path$,len(path$)-1) : end_if
 Path$ = Path$+""
 ' FICHIERS
 dim Palette$        : Palette$ = Path$+"Palette.bmp"
 dim Palette2$       : Palette2$ = Path$+"Palette2.bmp"
 dim ImgBtnPalette$  : ImgBtnPalette$ = Path$+"Write.bmp"
 ' OBJETS
 dim FenPaletteCouleur% : FenPaletteCouleur%=0
 dim ContPalette%       : no%=no%+1 : ContPalette%=no%
 dim PictPalWindows%(48): for i%=1 to 48 : no%=no%+1 : PictPalWindows%(i%)=no% : next i%
 dim AlphPalette%(2)    : for i%=1 to 2  : no%=no%+1 : AlphPalette%(i%)=no%    : next i%
 dim PictPalPerso%(16)  : for i%=1 to 16 : no%=no%+1 : PictPalPerso%(i%)=no%   : next i%
 dim PictPalette%       : no%=no%+1 : PictPalette%=no%
 dim PictChxPalette%    : no%=no%+1 : PictChxPalette%=no%
 dim SpnPalette%(3)     : for i%=1 to 3  : no%=no%+1 : SpnPalette%(i%)=no%     : next i%
 dim ContOptCOnvert%    : no%=no%+1 : ContOptCOnvert%=no%
 dim AlphPalConvert%(3) : for i%=1 to 3  : no%=no%+1 : AlphPalConvert%(i%)=no% : next i%
 dim BtnPalConvert%     : no%=no%+1 : BtnPalConvert%=no%
 dim PictTSVpalette%    : no%=no%+1 : PictTSVpalette%=no%
 dim Puce%              : no%=no%+1 : Puce%=no%
end_sub

sub Labels()
 label MouseMoveCadre
 label MouseMovePalette
 label MouseMoveTSVpalette
 label ClicBtn
 label ClicPalWindows
 label ClicPalPerso
 label DClicPictChxPalette
 label DClicPalPerso
 label Change
end_sub

sub Init()

end_sub

sub Gui()
 dim_local i%,l%,t%,x%,y%,V$

 border_small FenPaletteCouleur%
 height FenPaletteCouleur%,320
 width FenPaletteCouleur%,450
 top FenPaletteCouleur%,(screen_y-height(FenPaletteCouleur%))/2
 left FenPaletteCouleur%,(screen_x-width(FenPaletteCouleur%))/2
      
 font_name FenPaletteCouleur%,"Arial"
 font_size FenPaletteCouleur%,8
 font_color FenPaletteCouleur%,85,85,127
  
 container ContPalette%
 parent ContPalette%,FenPaletteCouleur%
 height ContPalette%,height_client(FenPaletteCouleur%)-5
 width ContPalette%,width_client(FenPaletteCouleur%)-10
 top ContPalette%,0
 left ContPalette%,5
 on_mouse_move ContPalette%,MouseMoveCadre
      
 alpha AlphPalette%(1)
 parent AlphPalette%(1),ContPalette%
 top AlphPalette%(1),15
 left AlphPalette%(1),5
      
 l%=5      
 for x%=1 to 8
 t%=top(AlphPalette%(1))+height(AlphPalette%(1))+5      
 for y%=1 to 6
 i%=i%+1            
 picture PictPalWindows%(i%)
            parent PictPalWindows%(i%),ContPalette%
            height PictPalWindows%(i%),20
            width PictPalWindows%(i%),20
            top PictPalWindows%(i%),t%
            left PictPalWindows%(i%),l%
            read V$
            color PictPalWindows%(i%),hex(mid$(v$,1,2)),hex(mid$(v$,3,2)),hex(mid$(v$,5,2))
            cursor_point PictPalWindows%(i%)
            on_click PictPalWindows%(i%),ClicPalWindows
            t%=t%+25              
 next y%
 l%=l%+25  
 next x%
      
 alpha AlphPalette%(2)
 parent AlphPalette%(2),ContPalette%
 top AlphPalette%(2),top(PictpalWindows%(48))+height(PictpalWindows%(48))+10
 left AlphPalette%(2),5      

 l%=5
 i%=0      
 for x%=1 to 8
 t%=top(AlphPalette%(2))+height(AlphPalette%(2))+5      
 for y%=1 to 2
 i%=i%+1            
            picture PictPalPerso%(i%)
            parent PictPalPerso%(i%),ContPalette%
            height PictPalPerso%(i%),20
            width PictPalPerso%(i%),20
            top PictPalPerso%(i%),t%
            left PictPalPerso%(i%),l%
            color PictPalPerso%(i%),0,0,0
            cursor_point PictPalPerso%(i%)
            on_click PictPalPerso%(i%),ClicPalPerso
            on_double_click PictPalPerso%(i%),DClicPalPerso
            t%=t%+25              
 next y%
 l%=l%+25  
 next x%

 picture PictPalette%
 parent PictPalette%,ContPalette%
 height PictPalette%,128
 width PictPalette%,158
 top PictPalette%,top(AlphPalette%(1))+height(AlphPalette%(1))+5
 left PictPalette%,left(PictPalWindows%(48))+width(PictPalWindows%(48))+30
 file_load PictPalette%,Palette2$
 cursor_cross PictPalette%
 on_mouse_move PictPalette%,MouseMovePalette
 on_click PictPalette%,ClicBtn
  
 picture PictTSVpalette%
 parent PictTSVpalette%,ContPalette%
 height PictTSVpalette%,128
 width PictTSVpalette%,15
 top PictTSVpalette%,top(PictPalette%)
 left PictTSVpalette%,left(PictPalette%)+width(PictPalette%)+5
 ColorPictTSVpalette(0,0,0)
 on_mouse_move PictTSVpalette%,MouseMoveTSVpalette
 on_click PictTSVpalette%,ClicBtn
      
 picture Puce%
 parent Puce%,ContPalette%
 height Puce%,9
 width Puce%,5
 top Puce%,top(PictTSVpalette%)-4
 left Puce%,left(PictTSVpalette%)+width(PictTSVpalette%)+1
 file_load Puce%,"puce1.bmp"
      
 picture PictChxPalette%
 parent PictChxPalette%,ContPalette%
 height PictChxPalette%,22
 width PictChxPalette%,22
 top PictChxPalette%,top(PictPalette%)+height(PictPalette%)+5
 left PictChxPalette%,left(PictPalette%)
 color PictChxPalette%,0,0,0
 cursor_point PictChxPalette%
 on_click PictChxPalette%,ClicBtn
 on_double_click PictChxPalette%,DClicPictChxPalette
      
 t%=top(PictChxPalette%)
 l%=left(PictChxPalette%)+width(PictChxPalette%)+9
 for i%=1 to 3
 spin SpnPalette%(i%)
 parent SpnPalette%(i%),ContPalette%
 width SpnPalette%(i%),45
 top SpnPalette%(i%),t%
 left SpnPalette%(i%),l%
 l%=l%+width(SpnPalette%(i%))+9
 font_color SpnPalette%(i%),255,255,255
 min SpnPalette%(i%),0
 max SpnPalette%(i%),255            
 next i%
 color SpnPalette%(1),255,0,0
 color SpnPalette%(2),0,180,0
 color SpnPalette%(3),0,0,255
      
 container_option ContOptCOnvert%
 parent ContOptCOnvert%,ContPalette%
 height ContOptCOnvert%,80
 width ContOptCOnvert%,155
 top ContOptCOnvert%,top(SpnPalette%(1))+height(SpnPalette%(1))
 left ContOptCOnvert%,left(PictChxPalette%)
  
 option AlphPalConvert%(1)
 parent AlphPalConvert%(1),ContOptCOnvert%
 width AlphPalConvert%(1),140
 caption AlphPalConvert%(1),"RGB => "
 top AlphPalConvert%(1),10
 left AlphPalConvert%(1),5
 mark_on AlphPalConvert%(1)
      
 option AlphPalConvert%(2)
 parent AlphPalConvert%(2),ContOptCOnvert%
 width AlphPalConvert%(2),140
 caption AlphPalConvert%(2),"HTML => "
 top AlphPalConvert%(2),top(AlphPalConvert%(1))+height(AlphPalConvert%(1))+5
 left AlphPalConvert%(2),5
      
 option AlphPalConvert%(3)
 parent AlphPalConvert%(3),ContOptCOnvert%
 width AlphPalConvert%(3),140
 caption AlphPalConvert%(3),"KGF => "
 top AlphPalConvert%(3),top(AlphPalConvert%(2))+height(AlphPalConvert%(2))+5
 left AlphPalConvert%(3),5
  
 button_picture BtnPalConvert%
 parent BtnPalConvert%,ContPalette%
 height BtnPalConvert%,height(ContOptCOnvert%)-10
 width BtnPalConvert%,24
 top BtnPalConvert%,top(ContOptCOnvert%)+7
 left BtnPalConvert%,left(ContOptCOnvert%)+width(ContOptCOnvert%)+5
 cursor_point BtnPalConvert%
 file_load BtnPalConvert%,ImgBtnPalette$
 on_click BtnPalConvert%,ClicBtn
  
 top FenPaletteCouleur%,(screen_y-height(FenPaletteCouleur%))/2
 left FenPaletteCouleur%,(screen_x-width(FenPaletteCouleur%))/2
 show FenPaletteCouleur%  

  
 if Langue% = 0
 caption FenPaletteCouleur%,"Outils - Couleurs"
 caption AlphPalette%(1),"Couleurs Windows :"
 caption AlphPalette%(2),"Couleurs Personnalisées :"
 for i%=1 to 16
 hint PictPalPerso%(i%),"Clic pour sélectionner"+chr$(13)+"Double clic pour effacer"
 next i%
 hint PictChxPalette%,"Cliquer pour convertir"+chr$(13)+"Double clic pour sauvegarder dans les couleurs personnalisées"
 hint BtnPalConvert%,"Insérer dans le source"
 else
 caption FenPaletteCouleur%,"Tools - Colors"
 caption AlphPalette%(1),"Windows colors :"
 caption AlphPalette%(2),"Personnal colors :"
 for i%=1 to 16
 hint PictPalPerso%(i%),"Click to select"+chr$(13)+"Double click to clear"
 next i%
 hint PictChxPalette%,"Click to convert"+chr$(13)+"Double click to save personnal colors"
 hint BtnPalConvert%,"Insert in source file"
 end_if
  
 for i%=1 to 16
 if ColPerso%(i%)<>0
 r%= bin_and(ColPerso%(i%),255)
 g%= bin_and(int(ColPerso%(i%)/256),255)
 b%= bin_and(int(ColPerso%(i%)/(256*256)),255)
 color PictPalPerso%(i%),r%,g%,b%
 end_if
 next i%
end_sub

' ! Clic
ClicBtn:
 if number_click = PictPalette%
 if EtatStandByPalette%=0
 EtatStandByPalette%=1
 off_mouse_move PictPalette%
 ColorPictTSVpalette(R%,G%,B%)
 cursor_default PictPalette%
 else
 EtatStandByPalette%=0
 on_mouse_move PictPalette%,MouseMovePalette
 cursor_cross PictPalette%      
 end_if
 return
 end_if
 if number_click = PictChxPalette%
 r%=color_pixel_red(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
 g%=color_pixel_green(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
 b%=color_pixel_blue(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
 ConvertChxPalette(r%,g%,b%)
 return
 end_if
 if number_click = BtnPalConvert%
 Send_Color()
 Terminate
 return
 end_if
 if number_click = PictTSVpalette%
 if EtatStandByTSL% = 0
 EtatStandByTSL% = 1
 off_mouse_move PictTSVpalette%
 cursor_point PictTSVpalette%
 else
 EtatStandByTSL% = 0
 on_mouse_move PictTSVpalette%,MouseMoveTSVpalette
 cursor_arrow PictTSVpalette%
 end_if
 return
 end_if
return

ClicPalWindows:
 off_change SpnPalette%(1)
 off_change SpnPalette%(2)
 off_change SpnPalette%(3)
 r%=color_pixel_red(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
 g%=color_pixel_green(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
 b%=color_pixel_blue(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
 ColorPictTSVpalette(R%,G%,B%)
 color PictChxPalette%,r%,g%,b%
 position SpnPalette%(1),r%
 position SpnPalette%(2),g%
 position SpnPalette%(3),b%  
return

ClicPalPerso:
 if mouse_left_down(number_click)=1
 off_change SpnPalette%(1)
 off_change SpnPalette%(2)
 off_change SpnPalette%(3)
 r%=color_pixel_red(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
 g%=color_pixel_green(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
 b%=color_pixel_blue(number_click,mouse_x_position(number_click),mouse_y_position(number_click))
 ColorPictTSVpalette(R%,G%,B%)
 color PictChxPalette%,r%,g%,b%
 position SpnPalette%(1),r%
 position SpnPalette%(2),g%
 position SpnPalette%(3),b%
 else
 message "Raté !!"
 end_if
return
' -
' ! Change
Change:
 if number_change>(SpnPalette%(1)-1) and number_change<(SpnPalette%(3)+1)
 if position(number_change)>255 or position(number_change)<0
 message "Valeur incorrect !"+chr$(13)+"Valeur de 0 et 255"
 position number_change,255
 return
 end_if
 color PictChxPalette%,position(SpnPalette%(1)),position(SpnPalette%(2)),position(SpnPalette%(3))
 return
 end_if
return
' -
' ! DClic
DClicPictChxPalette:
 r%=color_pixel_red(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
 g%=color_pixel_green(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
 b%=color_pixel_blue(PictChxPalette%,mouse_x_position(PictChxPalette%),mouse_y_position(PictChxPalette%))
 SaveColorPerso(r%,g%,b%)
return

DClicPalPerso:
 color number_double_click,0,0,0
 InitColPerso()
return
' -
' ! Mouse move
MouseMovePalette:
 off_mouse_move PictPalette%
 if mouse_x_position(PictPalette%)<0 or mouse_y_position(PictPalette%)<0
 return
 end_if
 if object_exists(SpnPalette%(1))=1 : off_change SpnPalette%(1) : end_if
 if object_exists(SpnPalette%(2))=1 : off_change SpnPalette%(2) : end_if
 if object_exists(SpnPalette%(3))=1 : off_change SpnPalette%(3) : end_if
 r%=color_pixel_red(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
 g%=color_pixel_green(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
 b%=color_pixel_blue(PictPalette%,mouse_x_position(PictPalette%),mouse_y_position(PictPalette%))
 color PictChxPalette%,r%,g%,b%
 position SpnPalette%(1),r%
 position SpnPalette%(2),g%
 position SpnPalette%(3),b%
 on_mouse_move PictPalette%,MouseMovePalette  
return

MouseMoveCadre:  
 if object_exists(SpnPalette%(1))=1 : on_change SpnPalette%(1),Change : end_if
 if object_exists(SpnPalette%(2))=1 : on_change SpnPalette%(2),Change : end_if
 if object_exists(SpnPalette%(3))=1 : on_change SpnPalette%(3),Change : end_if
return

MouseMoveTSVpalette:
 off_mouse_move PictTSVpalette%
 if object_exists(SpnPalette%(1))=1 : off_change SpnPalette%(1) : end_if
 if object_exists(SpnPalette%(2))=1 : off_change SpnPalette%(2) : end_if
 if object_exists(SpnPalette%(3))=1 : off_change SpnPalette%(3) : end_if
 top puce%,top(PictTSVpalette%)+mouse_y_position(PictTSVpalette%)-4
 r%=color_pixel_red(PictTSVPalette%,mouse_x_position(PictTSVPalette%),mouse_y_position(PictTSVPalette%))
 g%=color_pixel_green(PictTSVPalette%,mouse_x_position(PictTSVPalette%),mouse_y_position(PictTSVPalette%))
 b%=color_pixel_blue(PictTSVPalette%,mouse_x_position(PictTSVPalette%),mouse_y_position(PictTSVPalette%))
 color PictChxPalette%,r%,g%,b%
 position SpnPalette%(1),r%
 position SpnPalette%(2),g%
 position SpnPalette%(3),b%    
 on_mouse_move PictTSVpalette%,MouseMoveTSVpalette
return
' -

' mise en mémoire des couleurs personnalisées
sub SaveColorPerso(r1%,g1%,b1%)
   dim_local i%
  
   for i%=1 to 16
       if ColPerso%(i%)=0
          ColPerso%(i%)=(b1%*256+g1%)*256+r1%
          color PictPalPerso%(i%),r1%,g1%,b1%
          exit_for
       end_if
   next i%
end_sub

' initialisation des couleurs personnalisées
sub InitColPerso()
   dim_local i%
  
   for i%=1 to 16
      if number_double_click = PictPalPerso%(i%)
      ColPerso%(i%)=0
      end_if
   next i%
end_sub
 
' convertion des couleurs dans l' outils couleurs
sub ConvertChxPalette(R1%,G1%,B1%)
   dim_local RH$,GH$,BH$,KGFc$
    
   RH$ = Hex$(R1%) : if R1% < 16 then RH$ = "0" + RH$
   GH$ = Hex$(G1%) : if G1% < 16 then GH$ = "0" + GH$
   BH$ = Hex$(B1%) : if B1% < 16 then BH$ = "0" + BH$
  
   KGFc$ = str$((B1%*256+G1%)*256+R1%)
   caption AlphPalConvert%(1),"RGB  => "+str$(R1%)+","+str$(G1%)+","+str$(B1%)
   caption AlphPalConvert%(2),"HTML => "+RH$+GH$+BH$
   caption AlphPalConvert%(3),"KGF  => "+KGFc$      
end_sub

' remplissage de la barre de luminosité de l' outils palette
sub ColorPictTSVpalette(R1%,V1%,B1%)
   dim_local i%,T,S,L,R%,V%,B%,x%

   R%=R1% : V%=V1% : B%=B1%  
   RGBtoTSL(R%,V%,B%)
   T=TSL_T : S=TSL_S
   cls
   2d_target_is PictTSVpalette%
   for i%=1 to 127
      if i%>100
         L=100
      else
         L=i%
      end_if
      TSLtoRGB(T,S,L)      
  if RGB_R%>-1 and RGB_G%>-1 and RGB_B%>-1
     if RGB_R%<256 and RGB_G%<256 and RGB_B%<256
               2d_pen_color RGB_R%,RGB_G%,RGB_B%
               2d_line 1,i%,15,i%
             end_if
  end_if
   next i%
end_sub

' convertion RGB > TSL
sub RGBtoTSL(R%,V%,B%)
   dim_local i%,Mx%,Mx1%,Mn%,Mn1%,C%,t$,x%
  
   if variable("TSL_T")=0 then dim TSL_T
   if variable("TSL_S")=0 then dim TSL_S
   if variable("TSL_L")=0 then dim TSL_L
  
   Mx1% = Max(R%,V%)
   if Mx1% = R% : Mx% = Max(R%,B%) : else : Mx% = Max(V%,B%) : end_if
   Mn1% = Min(R%,V%)
   if Mn1% = R% : Mn% = Min(R%,B%) : else : Mn% = Min(V%,B%) : end_if
   C% = Mx%-Mn%  
   if Mx% = R%
      if C%>0 : TSL_T = 60*mod(((V%-B%)/C%),6) : else : TSL_T = 60*mod((V%-B%),6) : end_if
   else
      if Mx% = V%
         if C%>0 : TSL_T = 60*(((B%-R%)/C%)+2) : else : TSL_T = 60*((B%-R%)+2) : end_if
      else
         if C%>0 : TSL_T = 60*(((R%-V%)/C%)+4) : else : TSL_T = 60*((R%-V%)+4)  : end_if
      end_if
   end_if
   if TSL_T<0 : TSL_T=wrap_value(TSL_T) : end_if
  
  
   if C%>0  : TSL_S = 100*(C%/Mx%) : else : TSL_S = 0 : end_if
   t$=str$(frac(TSL_S))+"00"
   t$=left$(t$,2)
   if val(t$)>50
      TSL_S=int(TSL_S)+1 : else : TSL_S=int(TSL_S)
   end_if
      
   if Mx%>0 : TSL_L = 100*(Mx%/255): else : TSL_L = 0 : end_if
   t$=str$(frac(TSL_L))+"00"
   t$=left$(t$,2)
   if val(t$)>50
      TSL_L=int(TSL_L)+1 : else : TSL_L=int(TSL_L)
   end_if      
end_sub

' convertion TSL > RGB
sub TSLtoRGB(T,S,L)
    dim_local i,Mx,Mm,C,X

   if variable("RGB_R%")=0 then dim RGB_R%
   if variable("RGB_G%")=0 then dim RGB_G%
   if variable("RGB_B%")=0 then dim RGB_B%
 
   Mx = L*255/100
   Mm = (100-S)*L*(255/10000)
   C = Mx-Mm
   i = T/60
   X = C*(1-abs(mod(i,2)-1))  
   if i<1
      RGB_R% = int(C+Mm)
      RGB_G% = int(X+Mm)
      RGB_B% = int(Mm)
   else
      if i>0.99 and i<2
         RGB_R% = int(X+Mm)
         RGB_G% = int(C+Mm)
         RGB_B% = int(Mm)  
      else
         if i>1.99 and i<3
            RGB_R% = int(Mm)
            RGB_G% = int(C+Mm)
            RGB_B% = int(X+Mm)  
         else
            if i>2.99 and i<4
               RGB_R% = int(Mm)
               RGB_G% = int(X+Mm)
               RGB_B% = int(C+Mm)
            else
               if i>3.99 and i<5
                  RGB_R% = int(X+Mm)
                  RGB_G% = int(Mm)
                  RGB_B% = int(C+Mm)
               else
                  RGB_R% = int(C+Mm)
                  RGB_G% = int(Mm)
                  RGB_B% = int(X+Mm)
               end_if
            end_if
         end_if
      end_if  
   end_if
end_sub

' envoi de la couleur au programme appelant
sub Send_Color()
 dim_local i%,typ%,value%

 for i%=1 to 3
 if checked(AlphPalConvert%(i%))=1
 typ% = i%
 exit_for
 end_if  
 next i%
 
 value% = (b%*256+g%)*256+r%

 event_index%=4024
 user32%=2   :' event_index% doit toujours avoir la valeur 4024
 LIBRARY user32%,"user32.dll"
 command "call_user_event","SendMessageA",user32%,"IIII","stdcall"
    ' déclenche l'événement
    call_user_event ReceiveHnd%,event_index%,typ%,value%    
    end_sub

' ! DATA
DATA "FF8080","FFFF80","80FF80","00FF80","80FFFF","0080FF","FF80C0","FF80FF"
DATA "FF0000","FFFF00","80FF00","00FF40","00FFFF","0080C0","8080C0","FF00FF"
DATA "804040","FF8040","00FF00","008080","004080","8080FF","800040","FF0080"
DATA "800000","FF8000","008000","008040","0000FF","0000A0","800080","8000FF"
DATA "400000","804000","004000","004040","000080","000040","400040","400080"
DATA "000000","808000","808040","808080","408080","C0C0C0","400040","FFFFFF"
' -

Un programme appelant :

Code:
Application_title "ProgAppel"

dim prg$
dim event_index%
dim user32%
dim r%,g%,b%
dim Col$

label Clic
label Traite_User_Event

On_User_Event Traite_User_Event

font_name 0,"Arial"
font_size 0,8
font_bold 0
caption 0,"ProgAppel"

button 1
top 1,10
left 1,10
width 1,120
caption 1,"Outils couleurs"
on_click 1,Clic

alpha 2
top 2,50
left 2,10
caption 2,"Réponse : "

alpha 3
top 3,80
left 3,10


end

Clic:
 Prg$ = "C:\Users\Yannick\Desktop\Outils_Couleurs\PanoColorSelect.exe"+chr$(32)+str$(Handle_form("ProgAppel"))
 Execute_wait Prg$
return

Traite_User_Event:
 Off_User_Event
 select USER_EVENT_LPARAM
 case 1
    ConvertRGB(USER_EVENT_WPARAM)
 font_color 3,r%,g%,b%
 caption 3,"Couleur RGB = "+str$(R%)+","+str$(G%)+","+str$(B%)
 case 2
    ConvertRGB(USER_EVENT_WPARAM)
 ConvertHTML(R%,G%,B%)
 font_color 3,r%,g%,b%
 caption 3,"Couleur HTML = "+Col$
 case 3
    ConvertRGB(USER_EVENT_WPARAM)
 font_color 3,r%,g%,b%
 caption 3,"Couleur KGF = "+str$(USER_EVENT_WPARAM)
 end_select
 On_User_Event Traite_User_Event
return

sub ConvertRGB(C%)
 R% = bin_and(C%,255)
 G% = bin_and(int(C%/256),255)
 B% = bin_and(int(C%/(256*256)),255)
end_sub

sub ConvertHTML(R%,G%,B%)
   dim_local RH$,GH$,BH$,KGFc$
    
   RH$ = Hex$(R%) : if R% < 16 then RH$ = "0" + RH$
   GH$ = Hex$(G%) : if G% < 16 then GH$ = "0" + GH$
   BH$ = Hex$(B%) : if B% < 16 then BH$ = "0" + BH$

   Col$ = RH$+GH$+BH$      
end_sub

Mais il y a un mais. J' ai droit à un message d'erreur à l' appel de l' outils.
Ce message n' est pas bloquant, on clique sur Ok et tout se poursuit normalement.
Suspect

Je mets le zip sur mon webdav.

Embarassed j' oubliais, l' outils doit être en exécutable pour fonctionner.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4933
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Outils couleurs   Sam 10 Juin 2017 - 19:42

Oui, ça marche

Avec un petit souci de chemin C:\Users\Jean Claude, l'espace empêche de trouver le dossier.

J'ai résolu le problème comme ceci:
Code:

   dir_change dir_current$
        Prg$ = "PanoColorSelect.exe"+chr$(32)+str$(Handle_form("ProgAppel"))
   Execute_wait Prg$

Il faut le faire dans les 2 programmes.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 11 Juin 2017 - 2:45

Dans les deux programmes ?... scratch
L' appelant, je veux bien mais l' autre se sert du handle transmis. Suspect
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4933
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Outils couleurs   Dim 11 Juin 2017 - 10:08

En fait, le deuxième se lance mais après un message d'erreur.

A+

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

avatar

Nombre de messages : 444
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Outils couleurs   Dim 11 Juin 2017 - 11:32

Vous êtes face aux bugs de la commande 'execute_wait' signalé ici et .
J'ai essayé de relancer Jack en lui faisant remarquer que cela allait poser pb pour les éditeurs en cours d'élaboration, mais il n'a pas encore réagit Mad
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4933
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Outils couleurs   Dim 11 Juin 2017 - 12:00

Pour mon cas, je n'ai pas de problème avec la commande EXECUTE_WAIT.

Je pense que cela vient du fait que mon programme appelant est calé dans le répertoire courant (DIR_CURRENT$) et le deuxième programme est dans ce répertoire. Du coup, je lance EXECUTE_WAIT avec le chemin le plus court.
Exemple: EXECUTE_WAIT "PROG2.exe"

Mon éditeur est en attente, pour corriger le problème de Ctrl+V, mais pour le reste il fonctionne très bien.
Il me reste tout de même 2 parties essentiels à coder: 1) l’exécution du code et 2) la création d'un exe.
Il me reste aussi l'aide (ou plutôt les aides) à coder.

A+


Dernière édition par Jean Claude le Dim 11 Juin 2017 - 14:11, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 11 Juin 2017 - 14:01

la solution serait peut être :

lancer outils par execute
outils envoi un message (typ%,handle)
appelant stock handle
si typ%=1 outils est lancé, envoi un message avec son handle
scratch

Car le message d' erreur est bizarre.
dans le nom de fichier, on voit le handle en paramètre mais pas le nom du programme lui même.
Comme si le paramètre était pris en nom de programme à lancer.
Suspect
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 11 Juin 2017 - 15:18

Je crois que j' ai mis le doigt sur le problème.

Je pense que cela vient de la procédure de Silverman pour envoyer le message 
avec la couleur au programme appelant.
J' ai mis des "application_title" et l' entête du message est celui de l' outils.
donc l' erreur vient d' une action de sa part.

En fait, je pense que la sub essaie d' ouvrir le programme appelant qui l' est déjà.
d' où ce message :


scratch

@ Jack, si tu me lis, il serait bien d' avoir une commande permettant l' envoie de message à un programme ouvert
par son handle comme le fait la procédure de Silverman mais sans l' erreur ci-dessus.

la procédure :
Code:
' SUB
    sub SEND_EVENT(form_name$,value1%,value2%)
    if variable("event_index%")=0
        ' cré la commande qui permet de déclencher un événement
        dim event_index%,user32%
        if variable("user32%")=0 then dim user32%
        event_index%=4024 : user32%=2  :' event_index% doit toujours avoir la valeur 4024
        LIBRARY user32%,"user32.dll"
        command "call_user_event","SendMessageA",user32%,"IIII","stdcall"
    end_if
    '
    ' déclenche l'événement(Attention, c'est toujours et uniquement le form 0 de l'executable en cours qui active la commande 'on_user_event'!)
    call_user_event handle_form(form_name$),event_index%,value1%,value2%   
    end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 444
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Outils couleurs   Dim 11 Juin 2017 - 16:12

Citation :
Je pense que cela vient de la procédure de Silverman pour envoyer le message avec la couleur au programme appelant.
Non c'est impossible, ma sub ne fait qu'envoyer un message via l'api windows.

Pour preuve, met un 'end' à la première ligne de 'panocolorselect' et recompile. L'erreur est toujours là alors que 'panocolorselect' ne fait rien.
C'est bien 'execute_wait' qui est en cause, cette commande exécute d'abord les paramètres comme si c'était un programme Crying or Very sad ; Met des paramètres bidon séparés par un espace pour le voir. Ce n'est qu'ensuite qu'elle exécute correctement ce qu'on lui a dit de faire. Wink
Il y a 2 solutions pour contourner ce pb, soit tu passes par un '.bat'(surement pas compatible pour sur mac OS), ou bien comme le faisait cosmos70, en posant les paramètres dans le presse-papiers.
Mais bon, ça serait mieux que ces bugs soient corrigés pour 'make_exe' drunken

Citation :
J' ai mis des "application_title" et l' entête du message est celui de l' outils.
C'est à dire?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Dim 11 Juin 2017 - 16:22

Lorsque tu utilise APPLICATION_TITLE "xxxx"
toutes les fenêtres de message provenant de l' application porte le nom de "xxxx" au lieu de la version de Panoramic.
Code:
dim titre$ : titre$="Mon Appli"

APPLICATION_TITLE titre$

caption 0,titre$+" Vs 0.1"

message "COUCOU !"
end
Regarde le nom de la fenêtre de message.


Dernière édition par Yannick le Dim 11 Juin 2017 - 16:59, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Outils couleurs   

Revenir en haut Aller en bas
 
Outils couleurs
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 3 sur 4Aller à la page : Précédent  1, 2, 3, 4  Suivant
 Sujets similaires
-
» PA - explications des outils couleurs
» trousse a outils
» Question sur couleurs de WB
» [Lua][PSP] Les Couleurs et le Texte
» Comment modifier une les couleurs d une image swf ?

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