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
» [Résolu] Un prg Panoramic s'abime avec le temps (erreur)
par Oscaribout Aujourd'hui à 13:48

» Planétarium virtuel.
par Pedro Alvarez Aujourd'hui à 9:56

» Dessin 2D: largeur de trait (résolu !)
par Jicehel Hier à 15:16

» Promenade dans le Ciel
par papydall Hier à 3:13

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Sam 23 Juin 2018 - 17:00

» Nouvelle version 0.34
par jean_debord Sam 23 Juin 2018 - 9:39

» Quantité de mémoire utilisée par un exe
par mindstorm Jeu 21 Juin 2018 - 21:22

» Projet de planétarium virtuel.
par Jean Claude Jeu 21 Juin 2018 - 19:02

» Animation: Feux de signalisation
par Minibug Mer 20 Juin 2018 - 20:28

» Problème avec 'file_load'.
par Pedro Alvarez Lun 18 Juin 2018 - 8:12

» Version instantanée V 0.9.28i20 du 13/06/2018
par jjn4 Sam 16 Juin 2018 - 14:25

» string$(0,chr$(32)) sans erreur
par silverman Ven 15 Juin 2018 - 19:56

» Version instantanée V 0.9.28i19 du 13/06/2018
par Minibug Ven 15 Juin 2018 - 19:14

» Mes souhaits d'amélioration de Panoramic.
par Pedro Alvarez Jeu 14 Juin 2018 - 20:17

» [RÉSOLU] Message d'erreur impossible à indentifier
par Minibug Mer 13 Juin 2018 - 20:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2018
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Version d'essai d'un objet IconComboBox

Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4  Suivant
AuteurMessage
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 18:32

Bonsoir Klaus

Je viens de faire un test avec res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(mem%))
Et tout fonctionne parfaitement. C'est génial !

Je n'ai plus qu'a intégrer tout ça dans GPP et la nouvelle interface.

Pourrai tu juste STP m'expliquer cette partie :

Code:

if bin_and(user_event_wparam,hex("FF000000"))=hex("0A000000") : ' IconListBox
    if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return
    index% =  bin_and(user_event_wparam,hex("0000FFFF"))
    UserILB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 18:40

J'ai ajouté cette possibilité dans le programme de démo ci-dessous. Crée une IconListBox, sélectionne quelques lignes, puis clique sur "Sélection".
Voici le code:
Code:
' test_IconComboBox.bas


label creer, supprimer, UserEvent, creerL, supprimerL, selectionL

dim res%, ICB%, IL%, ILB%, no%, s$, WParam%, LParam%, index%, UserICB%, UserILB%
dim no_DoIcons%, no_DoIndent%, options%, no_memo%
dim cFond%    : cFond%  = hex("FFFFFF") : ' blanc
dim cFont%    : cFont%  = hex("000000") : ' noir
dim cSelect%  : cSelect% = hex("FF0000") : ' bleu

' dim ilb$ : ilb$ = "KGF.ilb"
dim ilb$ : ilb$ = "MonTest_32x32.ilb"


dll_on "KGF.dll"

on_user_event UserEvent

no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%

no% = no% + 1 : check no% : top no%,10 : no_DoIcons% = no% : caption no%,"Afficher icônes"
no% = no% + 1 : check no% : top no%,10 : left no%,130 : no_DoIndent% = no% : caption no%,"Indentation"

no% = no% + 1 : button no% : top no%,40 : caption no%,"Créer" : on_click no%,creer
no% = no% + 1 : button no% : top no%,40 : left no%,width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimer

no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1)+100 : caption no%,"Créer" : on_click no%,creerL
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimerL
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Sélection" : on_click no%,selectionL

' IL% = dll_call2("CreateImageList",16,16)
IL% = dll_call2("CreateImageList",32,32)
res% = dll_call2("LoadImageList",IL%,adr(ilb$))
end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("09000000") : ' IconComboBox
    if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return
    index% =  bin_and(user_event_wparam,hex("0000FFFF"))
    UserICB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !
    s$ = string$(50," ")
    res% = dll_call3("GetItemOfIconComboBox",ICB%,index%,adr(s$))
    s$ = trim$(s$)
    message "clic dans IconComboBox ligne "+str$(index%)+" = "+s$
    return
  end_if
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0A000000") : ' IconListBox
    if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return
    index% =  bin_and(user_event_wparam,hex("0000FFFF"))
    UserILB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !
    s$ = string$(50," ")
    res% = dll_call3("GetItemOfIconListBox",ILB%,index%,adr(s$))
    s$ = trim$(s$)
    message "clic dans IconListBox ligne "+str$(index%)+" = "+s$
    return
  end_if
  return

creer:
  if ICB%<>0 then return
  options% = 0
  if checked(no_DoIcons%)=1 then options% = options% + 1
  if checked(no_DoIndent%)=1 then options% = options% + 2
  ICB% = dll_call3("CreateIconComboBox",handle(0),IL%,options%)
  res% = dll_call5("LocateIconComboBox",ICB%,20,80,200,0)
 
 if 1=2
  transp% = hex("FFFFFF")
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),4,1,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),7,1,0,2)
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),10,1,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),13,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),16,1,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),19,1,0,0)
 else
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),0,1,0,2)  : ' pas d'icône !
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0)
 end_if
 
  res% = dll_call4("SetColorsForIconComboBox",ICB%,cFond%,cFont%,cSelect%)

  return

supprimer:
  ICB% = dll_call1("DeleteIconComboBox",ICB%)
  return


creerL:
  if ILB%<>0 then return
  options% = 0
  if checked(no_DoIcons%)=1 then options% = options% + 1
  if checked(no_DoIndent%)=1 then options% = options% + 2
  ILB% = dll_call3("CreateIconListBox",handle(0),IL%,options%)
  res% = dll_call5("LocateIconListBox",ILB%,240,80,200,300)
 
 if 1=2
  transp% = hex("FFFFFF")
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),4,1,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),7,1,0,2)
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),10,1,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),13,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),16,1,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),19,1,0,0)
 else
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),0,1,0,2)  : ' pas d'icône !
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0)
 end_if

  res% = dll_call4("SetColorsForIconListBox",ILB%,cFond%,cFont%,cSelect%)
  res% = dll_call2("OptionsForIconListBox",ILB%,1)
 
  return
 
supprimerL:
  ILB% = dll_call1("DeleteIconListBox",ILB%)
  return

selectionL:
  res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(no_memo%))
  message text$(no_memo%)
  return

et voici le résultat:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 18:47

oui j'ai remarqué !
J'ai d'ailleurs commencé à adapter le code à mes besoins. Wink

J'aimerai juste que tu m'expliques les 2 premières ligne de code de mon message ci dessus (commençant par if bin_and...).

Quant à UserILB il ne semble pas utilisé pour l'instant dans le programme ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 18:57

Regarde la doc en ligne ici:
http://klauspanoramic.esy.es/IconComboBoxIconListBox.html#IconComboBox_fr
ou la page correspondante dans KGF.chm.

Voici de quoi il retourne:
Il n'y a qu'un seul USER_EVENT disponible en Panoramic. Il transmet deux variables système: USER_EVENT_WPARAM et USER_EVENT_lLPARAM. J'utilise le premier pour signaler quelle partie de KGF.dll a généré le USER_EVENT (actuellement, il peut y avoir 10 origines différentes, et il y en aura d'autres). Chaque "origine" a un code d'identification qui est codé dans les 8 bits supérieurs des 32 bits de USER_EVENT_WPARAM. Dans notre cas, hex("09000000") signifie IconListBox". Les 8 bits suivants indiquent ce que l'objet en question veut signaler. Ici, hex("00010000") signifie "clic dans une ligne". Les 16 bits de droite contiennent le numéro de ligne visée par le clic. Et USER_EVENT_LPARAM contient l'identifiant de l'objet ayant généré le USER_EVENT. Dans notre cas, ça doit être identique à ILB%. Ceci te permet d'avoir plusieurs IcinListBox et de déterminer quelle IcinListBox a envoyé le USER_EVENT.

Donc, pour résumer, la première ligne active le traitement suivant s'il s'agit bien d'une IconListBox.
La deuxième ligne arrête le traitement s'il ne s'agit pas d'un clic. Ce dernier test est actuellement inutile, car seul le clic gauche génère un USER_EVENT. Mais plus tard, ça changera peut-être (clic droit, ...), et il est dont utile de prévoir cela dès le départ.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 19:06

Hummm je comprends mieux ! Très intéressant.
C'est une sacré mécanique que tu as mis en place !

Moi je n'irai pas si loin. Mais je vais continuer la reprise de GPP. drunken
J'ai remis le programme complètement à plat avec une nouvelle interface.
En fait je reprends tout depuis le début mais pour faire quelque chose de plus simple.
Avec une interface dans une seule fenêtre hors mis les fenêtres SYNEDIT d'édition gérées à part.

Avec tous ces nouveaux objets que tu as créés, je devrai pouvoir m'en sortir... Wink
Encore merci. king
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 20:28

Klaus, crois tu qu'il serai possible de changer l’icône ou le texte d'une ligne existante pour les 2 objets IconComboBox et IconListBox ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 20:44

Ah, les grands esprits se rencontrent... Wink C'est justement ce que je suis en train de coder. C'est pour ce soir...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 21:02

Laughing Laughing Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 21:45

C'est fait avec la nouvelle version que viens de mettre en ligne. Tu peux changer séparément l'icône et/ou le libellé de n'importe quelle ligne d'un IconComboBox ou IconListBox.

Voici le programme de démo:
Code:
' test_IconComboBox.bas


label creer, supprimer, UserEvent, creerL, supprimerL, selectionL, changeL3

dim res%, ICB%, IL%, ILB%, no%, s$, WParam%, LParam%, index%, UserICB%, UserILB%
dim no_DoIcons%, no_DoIndent%, options%, no_memo%
dim cFond%    : cFond%  = hex("FFFFFF") : ' blanc
dim cFont%    : cFont%  = hex("000000") : ' noir
dim cSelect%  : cSelect% = hex("FF0000") : ' bleu

' dim ilb$ : ilb$ = "KGF.ilb"
dim ilb$ : ilb$ = "MonTest_32x32.ilb"


dll_on "KGF.dll"

on_user_event UserEvent

no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%

no% = no% + 1 : check no% : top no%,10 : no_DoIcons% = no% : caption no%,"Afficher icônes"
no% = no% + 1 : check no% : top no%,10 : left no%,130 : no_DoIndent% = no% : caption no%,"Indentation"

no% = no% + 1 : button no% : top no%,40 : caption no%,"Créer" : on_click no%,creer
no% = no% + 1 : button no% : top no%,40 : left no%,width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimer

no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1)+100 : caption no%,"Créer" : on_click no%,creerL
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimerL
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Sélection" : on_click no%,selectionL
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Change ligne 3" : on_click no%,changeL3

' IL% = dll_call2("CreateImageList",16,16)
IL% = dll_call2("CreateImageList",32,32)
res% = dll_call2("LoadImageList",IL%,adr(ilb$))
end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("09000000") : ' IconComboBox
    if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return
    index% =  bin_and(user_event_wparam,hex("0000FFFF"))
    UserICB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !
    s$ = string$(50," ")
    res% = dll_call3("GetItemOfIconComboBox",ICB%,index%,adr(s$))
    s$ = trim$(s$)
    message "clic dans IconComboBox ligne "+str$(index%)+" = "+s$
    return
  end_if
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0A000000") : ' IconListBox
    if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return
    index% =  bin_and(user_event_wparam,hex("0000FFFF"))
    UserILB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !
    s$ = string$(50," ")
    res% = dll_call3("GetItemOfIconListBox",ILB%,index%,adr(s$))
    s$ = trim$(s$)
    message "clic dans IconListBox ligne "+str$(index%)+" = "+s$
    return
  end_if
  return

creer:
  if ICB%<>0 then return
  options% = 0
  if checked(no_DoIcons%)=1 then options% = options% + 1
  if checked(no_DoIndent%)=1 then options% = options% + 2
  ICB% = dll_call3("CreateIconComboBox",handle(0),IL%,options%)
  res% = dll_call5("LocateIconComboBox",ICB%,20,80,200,0)
 
 if 1=2
  transp% = hex("FFFFFF")
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),4,1,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),7,1,0,2)
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),10,1,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),13,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),16,1,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),19,1,0,0)
 else
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),0,1,0,2)  : ' pas d'icône !
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0)
 end_if
 
  res% = dll_call4("SetColorsForIconComboBox",ICB%,cFond%,cFont%,cSelect%)

  return

supprimer:
  ICB% = dll_call1("DeleteIconComboBox",ICB%)
  return


creerL:
  if ILB%<>0 then return
  options% = 0
  if checked(no_DoIcons%)=1 then options% = options% + 1
  if checked(no_DoIndent%)=1 then options% = options% + 2
  ILB% = dll_call3("CreateIconListBox",handle(0),IL%,options%)
  res% = dll_call5("LocateIconListBox",ILB%,240,80,200,300)
 
 if 1=2
  transp% = hex("FFFFFF")
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),4,1,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),7,1,0,2)
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),10,1,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),13,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),16,1,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),19,1,0,0)
 else
  s$ = "Déjeuner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0)
  s$ = "Hors-d'oeuvres"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,1)
  s$ = "Pâté de campagne"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),0,1,0,2)  : ' pas d'icône !
  s$ = "Radis/Beurre"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2)
  s$ = "Plats"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,1)
  s$ = "Steak/frites"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2)
  s$ = "Dîner"
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0)
 end_if

  res% = dll_call4("SetColorsForIconListBox",ILB%,cFond%,cFont%,cSelect%)
  res% = dll_call2("OptionsForIconListBox",ILB%,1)
 
  return
 
supprimerL:
  ILB% = dll_call1("DeleteIconListBox",ILB%)
  return

selectionL:
  res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(no_memo%))
  message text$(no_memo%)
  return     
 
changeL3:
  res% = dll_call6("ChangeElementIconInIconListBox",ILB%,3,1,0,0,2)
  s$ = "Oeuf dur - mayonnaise"
  res% = dll_call3("ChangeElementTextInIconListBox",ILB%,3,adr(s$))
  return
 
Pour la IconListBox, il y a maintenant un bouton "Change ligne 3" qui change l'icône et le libellé de la ligne 3. La même chose peut être faite pour le IconComboBox, bien sûr.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 21:58

Peut être encore une idée Klaus...

Pouvoir simuler un clic sur une ligne par programme. Un peu à la façon du TRIGGER_CLICK.

Cela permettra par exemple de sélectionner des lignes au démarrage du programme par exemple...
Qu'est ce que tu en penses ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 22:53

J'ai corrigé un petit but dans la fonction SelectItemOfIconListBox, et maintenant, tu peux l'utiliser pour cela. Voici la démo, avec un bouton de clic sur la ligne 3:
Code:
' test_IconComboBox.bas                                                                                                                                                           
                                                                                                                                                                                 
                                                                                                                                                                                 
label creer, supprimer, UserEvent, creerL, supprimerL, selectionL, changeL3, selectL3                                                                                             
                                                                                                                                                                                 
dim res%, ICB%, IL%, ILB%, no%, s$, WParam%, LParam%, index%, UserICB%, UserILB%                                                                                                 
dim no_DoIcons%, no_DoIndent%, options%, no_memo%                                                                                                                                 
dim cFond%    : cFond%  = hex("FFFFFF") : ' blanc                                                                                                                               
dim cFont%    : cFont%  = hex("000000") : ' noir                                                                                                                                 
dim cSelect%  : cSelect% = hex("FF0000") : ' bleu                                                                                                                                 
                                                                                                                                                                                 
' dim ilb$ : ilb$ = "KGF.ilb"                                                                                                                                                     
dim ilb$ : ilb$ = "MonTest_32x32.ilb"                                                                                                                                             
                                                                                                                                                                                 
                                                                                                                                                                                 
dll_on "KGF.dll"                                                                                                                                                                 
width 0,700                                                                                                                                                                       
                                                                                                                                                                                 
on_user_event UserEvent                                                                                                                                                           
                                                                                                                                                                                 
no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%                                                                                                               
                                                                                                                                                                                 
no% = no% + 1 : check no% : top no%,10 : no_DoIcons% = no% : caption no%,"Afficher icônes"                                                                                       
no% = no% + 1 : check no% : top no%,10 : left no%,130 : no_DoIndent% = no% : caption no%,"Indentation"                                                                           
                                                                                                                                                                                 
no% = no% + 1 : button no% : top no%,40 : caption no%,"Créer" : on_click no%,creer                                                                                               
no% = no% + 1 : button no% : top no%,40 : left no%,width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimer                                                               
                                                                                                                                                                                 
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1)+100 : caption no%,"Créer" : on_click no%,creerL                                                       
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimerL                                                   
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Sélection" : on_click no%,selectionL                                                   
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Change ligne 3" : on_click no%,changeL3                                               
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Clic ligne 3" : on_click no%,selectL3                                                 
                                                                                                                                                                                 
' IL% = dll_call2("CreateImageList",16,16)                                                                                                                                       
IL% = dll_call2("CreateImageList",32,32)                                                                                                                                         
res% = dll_call2("LoadImageList",IL%,adr(ilb$))                                                                                                                                   
end                                                                                                                                                                               
                                                                                                                                                                                 
UserEvent:                                                                                                                                                                       
  if bin_and(user_event_wparam,hex("FF000000"))=hex("09000000") : ' IconComboBox                                                                                                 
    if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return                                                                                                   
    index% =  bin_and(user_event_wparam,hex("0000FFFF"))                                                                                                                         
    UserICB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !                                                                               
    s$ = string$(50," ")                                                                                                                                                         
    res% = dll_call3("GetItemOfIconComboBox",ICB%,index%,adr(s$))                                                                                                                 
    s$ = trim$(s$)                                                                                                                                                               
    message "clic dans IconComboBox ligne "+str$(index%)+" = "+s$                                                                                                                 
    return                                                                                                                                                                       
  end_if                                                                                                                                                                         
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0A000000") : ' IconListBox                                                                                                   
    if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return                                                                                                   
    index% =  bin_and(user_event_wparam,hex("0000FFFF"))                                                                                                                         
    UserILB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !                                                                               
    s$ = string$(50," ")                                                                                                                                                         
    res% = dll_call3("GetItemOfIconListBox",ILB%,index%,adr(s$))                                                                                                                 
    s$ = trim$(s$)                                                                                                                                                               
    message "clic dans IconListBox ligne "+str$(index%)+" = "+s$                                                                                                                 
    return                                                                                                                                                                       
  end_if                                                                                                                                                                         
  return                                                                                                                                                                         
                                                                                                                                                                                 
creer:                                                                                                                                                                           
  if ICB%<>0 then return                                                                                                                                                         
  options% = 0                                                                                                                                                                   
  if checked(no_DoIcons%)=1 then options% = options% + 1                                                                                                                         
  if checked(no_DoIndent%)=1 then options% = options% + 2                                                                                                                         
  ICB% = dll_call3("CreateIconComboBox",handle(0),IL%,options%)                                                                                                                   
  res% = dll_call5("LocateIconComboBox",ICB%,20,80,200,0)                                                                                                                         
                                                                                                                                                                                 
 if 1=2                                                                                                                                                                           
  transp% = hex("FFFFFF")                                                                                                                                                         
  s$ = "Déjeuner"                                                                                                                                                                 
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,1,0,0)                                                                                                                 
  s$ = "Hors-d'oeuvres"                                                                                                                                                           
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),4,1,0,1)                                                                                                                 
  s$ = "Pâté de campagne"                                                                                                                                                         
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),7,1,0,2)                                                                                                                 
  s$ = "Radis/Beurre"                                                                                                                                                             
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),10,1,0,2)                                                                                                                 
  s$ = "Plats"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),13,1,0,1)                                                                                                                 
  s$ = "Steak/frites"                                                                                                                                                             
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),16,1,0,2)                                                                                                                 
  s$ = "Dîner"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),19,1,0,0)                                                                                                                 
 else                                                                                                                                                                             
  s$ = "Déjeuner"                                                                                                                                                                 
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0)                                                                                                                 
  s$ = "Hors-d'oeuvres"                                                                                                                                                           
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,1)                                                                                                                 
  s$ = "Pâté de campagne"                                                                                                                                                         
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),0,1,0,2)  : ' pas d'icône !                                                                                               
  s$ = "Radis/Beurre"                                                                                                                                                             
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2)                                                                                                                 
  s$ = "Plats"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,1)                                                                                                                 
  s$ = "Steak/frites"                                                                                                                                                             
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2)                                                                                                                 
  s$ = "Dîner"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0)                                                                                                                 
 end_if                                                                                                                                                                           
                                                                                                                                                                                 
  res% = dll_call4("SetColorsForIconComboBox",ICB%,cFond%,cFont%,cSelect%)                                                                                                       
                                                                                                                                                                                 
  return                                                                                                                                                                         
                                                                                                                                                                                 
supprimer:                                                                                                                                                                       
  ICB% = dll_call1("DeleteIconComboBox",ICB%)                                                                                                                                     
  return                                                                                                                                                                         
                                                                                                                                                                                 
                                                                                                                                                                                 
creerL:                                                                                                                                                                           
  if ILB%<>0 then return                                                                                                                                                         
  options% = 0                                                                                                                                                                   
  if checked(no_DoIcons%)=1 then options% = options% + 1                                                                                                                         
  if checked(no_DoIndent%)=1 then options% = options% + 2                                                                                                                         
  ILB% = dll_call3("CreateIconListBox",handle(0),IL%,options%)                                                                                                                   
  res% = dll_call5("LocateIconListBox",ILB%,240,80,200,300)                                                                                                                       
                                                                                                                                                                                 
 if 1=2                                                                                                                                                                           
  transp% = hex("FFFFFF")                                                                                                                                                         
  s$ = "Déjeuner"                                                                                                                                                                 
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,1,0,0)                                                                                                                   
  s$ = "Hors-d'oeuvres"                                                                                                                                                           
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),4,1,0,1)                                                                                                                   
  s$ = "Pâté de campagne"                                                                                                                                                         
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),7,1,0,2)                                                                                                                   
  s$ = "Radis/Beurre"                                                                                                                                                             
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),10,1,0,2)                                                                                                                 
  s$ = "Plats"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),13,1,0,1)                                                                                                                 
  s$ = "Steak/frites"                                                                                                                                                             
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),16,1,0,2)                                                                                                                 
  s$ = "Dîner"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),19,1,0,0)                                                                                                                 
 else                                                                                                                                                                             
  s$ = "Déjeuner"                                                                                                                                                                 
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0)                                                                                                                   
  s$ = "Hors-d'oeuvres"                                                                                                                                                           
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,1)                                                                                                                   
  s$ = "Pâté de campagne"                                                                                                                                                         
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),0,1,0,2)  : ' pas d'icône !                                                                                               
  s$ = "Radis/Beurre"                                                                                                                                                             
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2)                                                                                                                   
  s$ = "Plats"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,1)                                                                                                                   
  s$ = "Steak/frites"                                                                                                                                                             
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2)                                                                                                                   
  s$ = "Dîner"                                                                                                                                                                   
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0)                                                                                                                   
 end_if                                                                                                                                                                           
                                                                                                                                                                                 
  res% = dll_call4("SetColorsForIconListBox",ILB%,cFond%,cFont%,cSelect%)                                                                                                         
  res% = dll_call2("OptionsForIconListBox",ILB%,1)                                                                                                                               
                                                                                                                                                                                 
  return                                                                                                                                                                         
                                                                                                                                                                                 
supprimerL:                                                                                                                                                                       
  ILB% = dll_call1("DeleteIconListBox",ILB%)                                                                                                                                     
  return                                                                                                                                                                         
                                                                                                                                                                                 
selectionL:                                                                                                                                                                       
  res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(no_memo%))                                                                                                   
  message text$(no_memo%)                                                                                                                                                         
  return                                                                                                                                                                         
                                                                                                                                                                                 
changeL3:                                                                                                                                                                         
  res% = dll_call6("ChangeElementIconInIconListBox",ILB%,3,1,0,0,2)                                                                                                               
  s$ = "Oeuf dur - mayonnaise"                                                                                                                                                   
  res% = dll_call3("ChangeElementTextInIconListBox",ILB%,3,adr(s$))                                                                                                               
 return                                                                                                                                                                           
                                                                                                                                                                                 
SelectL3:                                                                                                                                                                         
  res% = dll_call2("SelectItemOfIconListBox",ILB%,3)                                                                                                                             
  return                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                             
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 7 Mar 2018 - 23:09

C'est parfait Klaus, là je crois qu'il y a tout ce qu'il faut !
Enfin... au moins jusqu’à demain... Wink

Bonne nuit ! Sleep Sleep Sleep Sleep
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 14 Mar 2018 - 19:18

Bonsoir Klaus !

J'aurai besoin d'un petit coup de main stp...

J'essaie de mettre en place le LISTBOX que tu a créé mais j'ai quelques soucis. Suspect

1/ Je ne vois pas les icones s'afficher
2/ je n'arrive pas à désactiver la sélection multiple
3/ Je n'ai pas de retour des événements

Merci d'avance.

voici le code :
Code:
' ------------------------- DECLARATION DES VARIABLES --------------------------                       
DIM a% , b% , c% , d% , no%                                                    : ' Variables générales numériques
DIM t$                                                                          : ' Variables générales aphabétiques

DIM res% , index% , IL% , ilb$                                                  : ' Gestion pour la dll KGF

DIM TREE%

dim cFond%    : cFond%  = hex("FFFFFF") : ' blanc                                                                                                                             
dim cFont%    : cFont%  = hex("000000") : ' noir                                                                                                                               
dim cSelect%  : cSelect% = hex("FF0000") : ' bleu 

' --------------------------- DECLARATION DES LABELS ---------------------------
LABEL menu , evenement                                                          : ' Gestion des CLICS et evenements
                                                                                                   
' -------------------------- CHARGEMENT DE LA DLL KGF --------------------------
DLL_ON "KGF.dll"

ON_USER_EVENT evenement 

' ----------------------------- GESTION DES OBJETS -----------------------------
WIDTH no%,560 : HEIGHT no%,500 : COLOR no%,30,30,30 : BORDER_SMALL no% : no%=no%+1                                                                                                                                                        : '

IL%=DLL_CALL2("CreateImageList",32,32)
     
ilb$="D:\BASIC\GPP - 2.02\MonTest_32x32.ilb"                                                                                                                                         
res%=DLL_CALL2("LoadImageList",IL%,adr(ilb$))

TREE%=DLL_CALL3("CreateIconListBox",handle(0),IL%,3)                                                                                                                 
res%=DLL_CALL5("LocateIconListBox",TREE%,5,5,(WIDTH_CLIENT(0)-10),(HEIGHT_CLIENT(0)-10)) 
     
' --------------------------------- AFFICHAGE ----------------------------------
t$=file_find_first$ : res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,2) : t$=file_find_next$
while t$<>"_"
    res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,1)
    t$=file_find_next$
end_while
file_find_close

res% = dll_call4("SetColorsForIconListBox",TREE%,cFond%,cFont%,cSelect%)                                                                                                       
res% = dll_call2("OptionsForIconListBox",TREE%,0) 

END

' ------------------------------ SOUS-PROGRAMMES -------------------------------
evenement:                                                                                                                                                                     
  IF BIN_AND(USER_EVENT_WPARAM,HEX("FF000000"))=HEX("0A000000")  : ' IconListBox                                                                                                 
    IF BIN_AND(USER_EVENT_WPARAM,HEX("00FF0000"))<>HEX("00010000") THEN RETURN                                                                                                 
    index%=BIN_AND(USER_EVENT_WPARAM,HEX("0000FFFF"))                                                                           
    t$ = string$(50," ")                                                                                                                                                       
    res% = dll_call3("GetItemOfIconListBox",TREE%,index%,adr(t$))                                                                                                               
    t$ = trim$(t$)                                                                                                                                                             
    message "clic dans IconListBox ligne "+str$(index%)+" = "+t$                                                                                                               
    return                                                                                                                                                                     
  end_if                                                                                                                                                                       
RETURN 

menu:

RETURN
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 14 Mar 2018 - 22:50

J'ai corrigé le bug de la confusion entre sélection simple et multiple. La nouvelle version est officiellement publiée partout.

La raison pour la non-réception des USER_EVENT est un problème de détection automatique du handle de la form 0. Normalement, ça marche bien. Dans quelques rares cas, le handle est mal déterminé. Et comme c'est vers ce handle que le USER_EVENT est envoyé... Alors, depuis longtemps, KGF.dll contient une fonction qui permet d'impose ce handle:
Code:
res% = dll_call1("SetMainFormHandle",handle(0))
Tu l'appeles immédiatement avant CreateIconListBox, et ça marchera.

Pour les icônes, je ne vois pas - un problème de chemin, peut-être ? Essaie avec KGF.ilb en créant un objet IL% avec 16,16 comme paramètres, pour voir.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Mer 14 Mar 2018 - 23:02

Merci Klaus.

Je viens de recharger et tester de nouveau. Tout semble OK cette fois.
Concernant les icônes, j'ai testé un autre fichier ilb puis de nouveau le premier et ça fonctionne aussi.
Le fichier ilb c'est celui que j'ai téléchargé sur ton Webdav et il fallait que je le 'débloque' comme à chaque fois pour la dll.
Merci Klaus.

Pour l'info je tente de faire un explorateur de fichiers 100% Panoramic avec icônes et couleurs persos.
Rien de très compliqué... juste un peu de réflexion, quelques bonnes idées, et la super dll KGF !

lol! lol! lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Jeu 15 Mar 2018 - 0:01

Super ! Je suis content. Voilà une affaire qui roule !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Jeu 15 Mar 2018 - 0:07

Argfff !  J'ai encore un petit soucis. sûrement une erreur de ma part...

ATTENTION JE N AI MIS AUCUNE BARRIERE DE SECURITE - POUR L INSTANT LE CODE EST BRUT...

Lorsque je clique sur un des dossiers, l'affichage s'effectue correctement mais à la fin j'ai ce message.
Je ne comprends pas pourquoi ? En plus le programme ne plante pas. c'est juste dans la DLL KGF  !?

J'en reste là pour ce soir. On verra demain...  Sleep  Sleep  Sleep



voici le code dans son intégralité :

Spoiler:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Jeu 15 Mar 2018 - 0:58

Ca marchera beaucoup mieux comme ça:
Code:
' ------------------------- DECLARATION DES VARIABLES --------------------------                       
DIM a% , b% , c% , d% , no%                : ' Variables générales numériques
DIM t$                                    : ' Variables générales aphabétiques

DIM res% , index% , IL% , ilb$ , doss%            : ' Gestion pour la dll KGF

DIM TREE%

dim cFond%    : cFond%  = hex("FFFFFF") : ' blanc                                                                                                                             
dim cFont%    : cFont%  = hex("000000") : ' noir                                                                                                                               
dim cSelect%  : cSelect% = hex("FF0000") : ' bleu 

' --------------------------- DECLARATION DES LABELS ---------------------------
LABEL menu , evenement                  : ' Gestion des CLICS et evenements
                                                                                                   
' -------------------------- CHARGEMENT DE LA DLL KGF --------------------------
DLL_ON "KGF.dll"

ON_USER_EVENT evenement 

' ----------------------------- GESTION DES OBJETS -----------------------------
WIDTH no%,560 : HEIGHT no%,500 : COLOR no%,30,30,30 : BORDER_SMALL no% : no%=no%+1                                                                                                                                                        : '

' ----------------------------- CREATION DE L'IMAGELIST ------------------------
' (section déplacée ici par Klaus)
  IL%=DLL_CALL2("CreateImageList",15,15)
     
  ilb$="D:\BASIC\GPP - 2.02\lolo.ilb"                                                                                                                                         
  res%=DLL_CALL2("LoadImageList",IL%,adr(ilb$))


affichage("C:")
                                                                                                     
END

' ------------------------------ SOUS-PROGRAMMES -------------------------------
evenement:                                                                                                                                                                     
  IF BIN_AND(USER_EVENT_WPARAM,HEX("FF000000"))=HEX("0A000000")                                                                                                   
    IF BIN_AND(USER_EVENT_WPARAM,HEX("00FF0000"))<>HEX("00010000") THEN RETURN                                                                                                 
    index%=BIN_AND(USER_EVENT_WPARAM,HEX("0000FFFF"))                                                                           
    t$ = string$(50," ") : res% = dll_call3("GetItemOfIconListBox",TREE%,index%,adr(t$))                                                                                                               
    t$ = trim$(t$) : CAPTION 0,"Ligne "+str$(index%)+" = "+t$
   
    IF index%<=doss%
        res%=dll_call1("DeleteIconListBox",TREE%) : PAUSE 1000
        affichage(DIR_CURRENT$+chr$(92)+t$)    : ' <====== le backslash était "mangé" par le forum !
    END_IF                                                                                                                                                                                                                                                                                       
  END_IF                                                                                                                                                                       
RETURN 

' --------------------------------- AFFICHAGE ----------------------------------
SUB affichage(chem$)

  res% = dll_call1("SetMainFormHandle",handle(0))
  TREE%=DLL_CALL3("CreateIconListBox",handle(0),IL%,3)                                                                                                                 
  res%=DLL_CALL5("LocateIconListBox",TREE%,5,5,(WIDTH_CLIENT(0)-10),(HEIGHT_CLIENT(0)-10)) 
 
  DIR_CHANGE chem$ : CAPTION 0,DIR_CURRENT$ : doss%=0
 
  ' Affichage des dossiers
  t$=FILE_FIND_FIRST$
  IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),1,1,0,0)
  t$=FILE_FIND_NEXT$ 
 
  while t$<>"_"
      IF DIR_EXISTS(t$)=1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),2,1,0,0) : doss%=doss%+1
      t$=FILE_FIND_NEXT$
  end_while
 
  FILE_FIND_CLOSE

  ' Affichage des fichiers
  t$=FILE_FIND_FIRST$
  IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),3,1,0,0)
  t$=FILE_FIND_NEXT$
 
  while t$<>"_"
      IF DIR_EXISTS(t$)<>1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,0)
      t$=FILE_FIND_NEXT$
  end_while
 
  FILE_FIND_CLOSE

  res% = dll_call2("OptionsForIconListBox",TREE%,0)
  res% = dll_call4("SetColorsForIconListBox",TREE%,cFond%,cFont%,cSelect%)
   
END_SUB

menu:

RETURN

J'ai remplacé un backslash par chr$(92) - il était mangé par le forum.
Mais, surtout, j'ai sorti la création de l'objet IL% de la sub. Cet objet ne doit être créé qu'une seule fois, au démarrage. Puis, à chaque création de TREE%, on réutilise le même objet IL%. Sinon, comme tu en supprimes pas l'objet IL% avant de le recréer, tu empiles plein de copies de IL% en mémoire, et ça pla,nte à terme.

Il faut ajouter une sécurité importante:
- "inactive 0" au début de affichage
- "active 0" à la fin de affichage
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Jeu 15 Mar 2018 - 7:45

Bonjour Klaus

Merci pour ton aide.

Ce qui est surprenant c'est que lors du 1er clic et seulement le premier j'ai toujours le même message
d'erreur de KGF. Ensuite sur les autres clics tout va bien.

Concernant INACTIVE 0 et ACTIVE 0 je les ai placé au début et à la fin de la SUB affichage().
J'ai tenté de les placer dans le sous-programme evenement mais rien n'y fait.
J'ai toujours un plantage sur le 1er clic. C'est bizarre non ?! Suspect
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Jeu 15 Mar 2018 - 12:21

Tel que c'est ici, je n'ai aucun message d'erreur. Et tant que la SUB n'a pas terminé son boulot, on ne peut pas cliquer sur une ligné déjà affichée, ce qui est essentiel.
Code:
' ------------------------- DECLARATION DES VARIABLES --------------------------                       
DIM a% , b% , c% , d% , no%                : ' Variables générales numériques
DIM t$                                    : ' Variables générales aphabétiques

DIM res% , index% , IL% , ilb$ , doss%            : ' Gestion pour la dll KGF

DIM TREE%

dim cFond%    : cFond%  = hex("FFFFFF") : ' blanc                                                                                                                             
dim cFont%    : cFont%  = hex("000000") : ' noir                                                                                                                               
dim cSelect%  : cSelect% = hex("FF0000") : ' bleu 

' --------------------------- DECLARATION DES LABELS ---------------------------
LABEL menu , evenement                  : ' Gestion des CLICS et evenements
                                                                                                   
' -------------------------- CHARGEMENT DE LA DLL KGF --------------------------
DLL_ON "KGF.dll"

ON_USER_EVENT evenement 

' ----------------------------- GESTION DES OBJETS -----------------------------
WIDTH no%,560 : HEIGHT no%,500 : COLOR no%,30,30,30 : BORDER_SMALL no% : no%=no%+1                                                                                                                                                        : '

' ----------------------------- CREATION DE L'IMAGELIST ------------------------
' (section déplacée ici par Klaus)
  IL%=DLL_CALL2("CreateImageList",15,15)
     
  ilb$="D:\BASIC\GPP - 2.02\lolo.ilb"                                                                                                                                         
  res%=DLL_CALL2("LoadImageList",IL%,adr(ilb$))


affichage("C:")
                                                                                                     
END

' ------------------------------ SOUS-PROGRAMMES -------------------------------
evenement:                                                                                                                                                                     
  IF BIN_AND(USER_EVENT_WPARAM,HEX("FF000000"))=HEX("0A000000")                                                                                                   
    IF BIN_AND(USER_EVENT_WPARAM,HEX("00FF0000"))<>HEX("00010000") THEN RETURN                                                                                                 
    index%=BIN_AND(USER_EVENT_WPARAM,HEX("0000FFFF"))                                                                           
    t$ = string$(50," ") : res% = dll_call3("GetItemOfIconListBox",TREE%,index%,adr(t$))                                                                                                               
    t$ = trim$(t$) : CAPTION 0,"Ligne "+str$(index%)+" = "+t$
   
    IF index%<=doss%
        res%=dll_call1("DeleteIconListBox",TREE%) : PAUSE 1000
        affichage(DIR_CURRENT$+chr$(92)+t$)    : ' <====== le backslash était "mangé" par le forum !
    END_IF                                                                                                                                                                                                                                                                                       
  END_IF                                                                                                                                                                       
RETURN 

' --------------------------------- AFFICHAGE ----------------------------------
SUB affichage(chem$)
             
  inactive 0
                 
  res% = dll_call1("SetMainFormHandle",handle(0))
  TREE%=DLL_CALL3("CreateIconListBox",handle(0),IL%,3)                                                                                                                 
  res%=DLL_CALL5("LocateIconListBox",TREE%,5,5,(WIDTH_CLIENT(0)-10),(HEIGHT_CLIENT(0)-10)) 
 
  DIR_CHANGE chem$ : CAPTION 0,DIR_CURRENT$ : doss%=0
 
  ' Affichage des dossiers
  t$=FILE_FIND_FIRST$
  IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),1,1,0,0)
  t$=FILE_FIND_NEXT$ 
 
  while t$<>"_"
      IF DIR_EXISTS(t$)=1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),2,1,0,0) : doss%=doss%+1
      t$=FILE_FIND_NEXT$
  end_while
 
  FILE_FIND_CLOSE

  ' Affichage des fichiers
  t$=FILE_FIND_FIRST$
  IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),3,1,0,0)
  t$=FILE_FIND_NEXT$
 
  while t$<>"_"
      IF DIR_EXISTS(t$)<>1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,0)
      t$=FILE_FIND_NEXT$
  end_while
 
  FILE_FIND_CLOSE

  res% = dll_call2("OptionsForIconListBox",TREE%,0)
  res% = dll_call4("SetColorsForIconListBox",TREE%,cFond%,cFont%,cSelect%)
   
  active 0
 
END_SUB

menu:

RETURN
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 8077
Age : 47
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 15 Mar 2018 - 13:09

J' ai fait un essai et je n' ai pas de message de retour en cliquant sur l' objet.
Qu' ai je fait de mal ?

Code:
hide 0
variables()
constantes()
labels()
init()
gui()
RedimensionForm0()
on_user_event UserEvent
show 0
end

sub variables()
  dim no%
 
  dim index%
  dim UserILB%
  dim res%
  dim s$
end_sub

sub constantes()
  dim_local i%
 
  dim Kgf$ : Kgf$="C:\KGF\KGF.dll"
  dim Ilb$ : Ilb$="C:\KGF\KGF.ilb"
 
  dim Fra%(3)  : for i%=1 to 3 : no%=no%+1 : Fra%(i%)=no% : next i%
  dim RetList% : no%=no%+1 : RetList%=no%
 
  dim IL% 
  dim ILB%
end_sub

sub labels()
  label clic
  label change
  label dclic
  label resize
  label shutdown
  label UserEvent
end_sub

sub init()
  dll_on Kgf$
 
  IL% = dll_call2("CreateImageList",16,16)                                                                                                                                         
  res% = dll_call2("LoadImageList",IL%,adr(ilb$))
end_sub

sub gui()
  dim_local i%

  height 0,600
  width 0,900
  top 0,(screen_y-height(0))/2
  left 0,(screen_x-width(0))/2
  color 0,0,0,255
     
  font_name 0,"Arial"
  font_size 0,8
  caption 0,"Storys Book"

  for i%=1 to 3 : panel Fra%(i%) : next i%
 
  ILB% = dll_call3("CreateIconListBox",handle(0),IL%,3)                                                                                                                   
  s$ = "Déjeuner"                                                                                                                                                                 
  res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,0)
   
  on_resize 0,resize
  on_close 0,shutdown 
end_sub

clic:
return

change:
return

dclic:
return

resize:
  RedimensionForm0()
return

shutdown:
  ILB% = dll_call1("DeleteIconListBox",ILB%)
return

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0A000000") : ' IconListBox                                                                                                   
      if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return                                                                                                   
      index% =  bin_and(user_event_wparam,hex("0000FFFF"))                                                                                                                         
      UserILB% = user_event_lparam  : ' ici, on a l'identifiant de l'objet ayant généré l'évènement !                                                                               
      s$ = string$(50," ")                                                                                                                                                         
      res% = dll_call3("GetItemOfIconListBox",ILB%,index%,adr(s$))                                                                                                                 
      s$ = trim$(s$)                                                                                                                                                               
      message "clic dans IconListBox ligne "+str$(index%)+" = "+s$
      return                                                                                                                                                                                                                                                                                       
  end_if                                                                                                                                                                         
return

sub RedimensionForm0()

  height Fra%(1),28
  width Fra%(1),width_client(0)-10
  top Fra%(1),5
  left Fra%(1),5

  res% = dll_call5("LocateIconListBox",ILB%,5,top(Fra%(1))+height(Fra%(1))+5,300,height_client(0)-76)
 
  height Fra%(2),height_client(0)-76
  width Fra%(2),width_client(0)-315
  top Fra%(2),top(Fra%(1))+height(Fra%(1))+5
  left Fra%(2),310
 
  height Fra%(3),28
  width Fra%(3),width_client(0)-10
  top Fra%(3),height_client(0)-33
  left Fra%(3),5 
end_sub

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

avatar

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

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Jeu 15 Mar 2018 - 13:24

Rien... tu tombes sur le même problème que MiniBug: dans certains cas, KGF.dll de détermine pas correctement le handle de la form 0. Or, l'objet IconListBox en a besoin pour envoyer le USER_EVENT.

Pour cela, depuis longtemps, il y a une fonction dans KGF.dll:
Code:
res% = dll_call1("SetMainFormHandle",handle(0))
Tu insères cet appel juste avant l'appel de CreateIconListBox, et tout marchera bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 8077
Age : 47
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 15 Mar 2018 - 13:27

Cela ne viendrait il pas du redimensionnement du form 0 ?
scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 8077
Age : 47
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 15 Mar 2018 - 13:29

Very Happy
J' ai fait comme tu as dit et tout est rentré dans l' ordre.
Merci Klaus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2971
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Version d'essai d'un objet IconComboBox   Jeu 15 Mar 2018 - 18:29

Bonsoir Klaus !

J'ai repris ton code d'Aujourd'hui à 12:21 et j'ai même rechargé la DLL.
Lors du premier clic sur la LISTBOX j'ai toujours la même erreur ! et seulement la première fois.
Après tout fonctionne correctement.  Suspect

As tu essayé de cliqué sur l'un des dossiers pour voir si tu rencontrais la même erreur ?

EDIT : Salut Yannick, ça fait plaisir de te voir ! cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Contenu sponsorisé




MessageSujet: Re: Version d'essai d'un objet IconComboBox   

Revenir en haut Aller en bas
 
Version d'essai d'un objet IconComboBox
Revenir en haut 
Page 3 sur 4Aller à la page : Précédent  1, 2, 3, 4  Suivant
 Sujets similaires
-
» After effect CS4
» Antivirus Kaspersky (version d'essaie 1mois)
» Version PDMS 12.0.SP6
» Passer un objet devant les autres (ou derrière)
» Offre promotionnelle : SnagIT 7.25 en version gratuite !

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: